372 lines
6.3 KiB
PHP
372 lines
6.3 KiB
PHP
<?php
|
|
|
|
if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
|
|
if( ! class_exists('acf_locations') ) :
|
|
|
|
class acf_locations {
|
|
|
|
|
|
/** @var array Contains an array of location rule instances */
|
|
var $locations = array();
|
|
|
|
|
|
/*
|
|
* __construct
|
|
*
|
|
* This function will setup the class functionality
|
|
*
|
|
* @type function
|
|
* @date 5/03/2014
|
|
* @since 5.0.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function __construct() {
|
|
|
|
/* do nothing */
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* register_location
|
|
*
|
|
* This function will store a location rule class
|
|
*
|
|
* @type function
|
|
* @date 6/07/2016
|
|
* @since 5.4.0
|
|
*
|
|
* @param $instance (object)
|
|
* @return n/a
|
|
*/
|
|
|
|
function register_location( $class ) {
|
|
|
|
$instance = new $class();
|
|
$this->locations[ $instance->name ] = $instance;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* get_rule
|
|
*
|
|
* This function will return a location rule class
|
|
*
|
|
* @type function
|
|
* @date 6/07/2016
|
|
* @since 5.4.0
|
|
*
|
|
* @param $name (string)
|
|
* @return (mixed)
|
|
*/
|
|
|
|
function get_location( $name ) {
|
|
|
|
return isset( $this->locations[$name] ) ? $this->locations[$name] : null;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* get_rules
|
|
*
|
|
* This function will return a grouped array of location rules (category => name => label)
|
|
*
|
|
* @type function
|
|
* @date 6/07/2016
|
|
* @since 5.4.0
|
|
*
|
|
* @param n/a
|
|
* @return (array)
|
|
*/
|
|
|
|
function get_locations() {
|
|
|
|
// vars
|
|
$groups = array();
|
|
$l10n = array(
|
|
'post' => __('Post', 'acf'),
|
|
'page' => __('Page', 'acf'),
|
|
'user' => __('User', 'acf'),
|
|
'forms' => __('Forms', 'acf'),
|
|
);
|
|
|
|
|
|
// loop
|
|
foreach( $this->locations as $location ) {
|
|
|
|
// bail ealry if not public
|
|
if( !$location->public ) continue;
|
|
|
|
|
|
// translate
|
|
$cat = $location->category;
|
|
$cat = isset( $l10n[$cat] ) ? $l10n[$cat] : $cat;
|
|
|
|
|
|
// append
|
|
$groups[ $cat ][ $location->name ] = $location->label;
|
|
|
|
}
|
|
|
|
|
|
// filter
|
|
$groups = apply_filters('acf/location/rule_types', $groups);
|
|
|
|
|
|
// return
|
|
return $groups;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// initialize
|
|
acf()->locations = new acf_locations();
|
|
|
|
endif; // class_exists check
|
|
|
|
|
|
/*
|
|
* acf_register_location_rule
|
|
*
|
|
* alias of acf()->locations->register_location()
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_register_location_rule( $class ) {
|
|
|
|
return acf()->locations->register_location( $class );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_location_rule
|
|
*
|
|
* alias of acf()->locations->get_location()
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_get_location_rule( $name ) {
|
|
|
|
return acf()->locations->get_location( $name );
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_location_rule_types
|
|
*
|
|
* alias of acf()->locations->get_locations()
|
|
*
|
|
* @type function
|
|
* @date 31/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param n/a
|
|
* @return n/a
|
|
*/
|
|
|
|
function acf_get_location_rule_types() {
|
|
|
|
return acf()->locations->get_locations();
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* acf_validate_location_rule
|
|
*
|
|
* Returns a valid location rule array.
|
|
*
|
|
* @date 28/8/18
|
|
* @since 5.7.4
|
|
*
|
|
* @param $rule array The rule array.
|
|
* @return array
|
|
*/
|
|
|
|
function acf_validate_location_rule( $rule = false ) {
|
|
|
|
// defaults
|
|
$rule = wp_parse_args( $rule, array(
|
|
'id' => '',
|
|
'group' => '',
|
|
'param' => '',
|
|
'operator' => '==',
|
|
'value' => '',
|
|
));
|
|
|
|
// filter
|
|
$rule = apply_filters( "acf/location/validate_rule/type={$rule['param']}", $rule );
|
|
$rule = apply_filters( "acf/location/validate_rule", $rule);
|
|
|
|
// return
|
|
return $rule;
|
|
}
|
|
|
|
/*
|
|
* acf_get_location_rule_operators
|
|
*
|
|
* This function will return the operators for a given rule
|
|
*
|
|
* @type function
|
|
* @date 30/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param $rule (array)
|
|
* @return (array)
|
|
*/
|
|
|
|
function acf_get_location_rule_operators( $rule ) {
|
|
|
|
// vars
|
|
$operators = array(
|
|
'==' => __("is equal to",'acf'),
|
|
'!=' => __("is not equal to",'acf'),
|
|
);
|
|
|
|
|
|
// filter
|
|
$operators = apply_filters( "acf/location/rule_operators/type={$rule['param']}", $operators, $rule );
|
|
$operators = apply_filters( "acf/location/rule_operators/{$rule['param']}", $operators, $rule );
|
|
$operators = apply_filters( "acf/location/rule_operators", $operators, $rule );
|
|
|
|
|
|
// return
|
|
return $operators;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_location_rule_values
|
|
*
|
|
* This function will return the values for a given rule
|
|
*
|
|
* @type function
|
|
* @date 30/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param $rule (array)
|
|
* @return (array)
|
|
*/
|
|
|
|
function acf_get_location_rule_values( $rule ) {
|
|
|
|
// vars
|
|
$values = array();
|
|
|
|
|
|
// filter
|
|
$values = apply_filters( "acf/location/rule_values/type={$rule['param']}", $values, $rule );
|
|
$values = apply_filters( "acf/location/rule_values/{$rule['param']}", $values, $rule );
|
|
$values = apply_filters( "acf/location/rule_values", $values, $rule );
|
|
|
|
|
|
// return
|
|
return $values;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_match_location_rule
|
|
*
|
|
* This function will match a given rule to the $screen
|
|
*
|
|
* @type function
|
|
* @date 30/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param $rule (array)
|
|
* @param $screen (array)
|
|
* @return (boolean)
|
|
*/
|
|
|
|
function acf_match_location_rule( $rule, $screen, $field_group ) {
|
|
|
|
// vars
|
|
$result = false;
|
|
|
|
|
|
// filter
|
|
$result = apply_filters( "acf/location/match_rule/type={$rule['param']}", $result, $rule, $screen, $field_group );
|
|
$result = apply_filters( "acf/location/match_rule", $result, $rule, $screen, $field_group );
|
|
$result = apply_filters( "acf/location/rule_match/{$rule['param']}", $result, $rule, $screen, $field_group );
|
|
$result = apply_filters( "acf/location/rule_match", $result, $rule, $screen, $field_group );
|
|
|
|
|
|
// return
|
|
return $result;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* acf_get_location_screen
|
|
*
|
|
* This function will return a valid location screen array
|
|
*
|
|
* @type function
|
|
* @date 30/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param $screen (array)
|
|
* @param $field_group (array)
|
|
* @return (array)
|
|
*/
|
|
|
|
function acf_get_location_screen( $screen = array(), $field_group = false ) {
|
|
|
|
// vars
|
|
$screen = wp_parse_args($screen, array(
|
|
'lang' => acf_get_setting('current_language'),
|
|
'ajax' => false
|
|
));
|
|
|
|
|
|
// filter for 3rd party customization
|
|
$screen = apply_filters('acf/location/screen', $screen, $field_group);
|
|
|
|
|
|
// return
|
|
return $screen;
|
|
|
|
}
|
|
|
|
/**
|
|
* acf_get_valid_location_rule
|
|
*
|
|
* Deprecated in 5.7.4. Use acf_validate_location_rule() instead.
|
|
*
|
|
* @date 30/5/17
|
|
* @since 5.6.0
|
|
*
|
|
* @param $rule array The rule array.
|
|
* @return array
|
|
*/
|
|
|
|
function acf_get_valid_location_rule( $rule ) {
|
|
return acf_validate_location_rule( $rule );
|
|
}
|
|
|
|
?>
|