web/wp-content/plugins/acf-extended/includes/field-extend.php (141 lines of code) (raw):
<?php
if(!defined('ABSPATH')){
exit;
}
if(!class_exists('acfe_field_extend')):
class acfe_field_extend{
var $name = '',
$replace = array(),
$defaults = array(),
$instance = '';
/**
* construct
*/
function __construct(){
// initialize
$this->initialize();
// field instance
$this->instance = $this->get_field_type();
// defaults
if($this->defaults){
$this->instance->defaults = array_merge($this->instance->defaults, $this->defaults);
}
// field actions
$actions = array(
// value
array('filter', 'acf/load_value', array($this, 'load_value'), 10, 3),
array('filter', 'acf/update_value', array($this, 'update_value'), 10, 3),
array('filter', 'acf/format_value', array($this, 'format_value'), 10, 3),
array('filter', 'acf/validate_value', array($this, 'validate_value'), 10, 4),
array('action', 'acf/delete_value', array($this, 'delete_value'), 10, 3),
// field
array('filter', 'acf/validate_rest_value', array($this, 'validate_rest_value'), 10, 3),
array('filter', 'acf/validate_field', array($this, 'validate_field'), 10, 1),
array('filter', 'acf/load_field', array($this, 'load_field'), 10, 1),
array('filter', 'acf/update_field', array($this, 'update_field'), 10, 1),
array('filter', 'acf/duplicate_field', array($this, 'duplicate_field'), 10, 1),
array('action', 'acf/delete_field', array($this, 'delete_field'), 10, 1),
array('action', 'acf/render_field', array($this, 'render_field'), 9, 1),
array('action', 'acf/render_field_settings', array($this, 'render_field_settings'), 9, 1),
array('filter', 'acf/prepare_field', array($this, 'prepare_field'), 10, 1),
array('filter', 'acf/translate_field', array($this, 'translate_field'), 10, 1),
array('filter', 'acfe/field_wrapper_attributes', array($this, 'field_wrapper_attributes'), 10, 2),
array('filter', 'acfe/load_fields', array($this, 'load_fields'), 10, 2),
);
// loop
foreach($actions as $row){
// vars
list($type, $hook, $function, $priority, $args) = $row;
// get method
$method = $type === 'filter' ? 'add_field_filter' : 'add_field_action';
// use replace method
if(in_array($function[1], $this->replace)){
$method = $type === 'filter' ? 'replace_field_filter' : 'replace_field_action';
}
// call method
$this->{$method}($hook, $function, $priority, $args);
}
// input actions
$this->add_action('acf/input/admin_enqueue_scripts', array($this, 'input_admin_enqueue_scripts'), 10, 0);
$this->add_action('acf/input/admin_head', array($this, 'input_admin_head'), 10, 0);
$this->add_action('acf/input/form_data', array($this, 'input_form_data'), 10, 1);
$this->add_filter('acf/input/admin_l10n', array($this, 'input_admin_l10n'), 10, 1);
$this->add_action('acf/input/admin_footer', array($this, 'input_admin_footer'), 10, 1);
// field group actions
$this->add_action('acf/field_group/admin_enqueue_scripts', array($this, 'field_group_admin_enqueue_scripts'), 10, 0);
$this->add_action('acf/field_group/admin_head', array($this, 'field_group_admin_head'), 10, 0);
$this->add_action('acf/field_group/admin_footer', array($this, 'field_group_admin_footer'), 10, 0);
}
/**
* initialize
*/
function initialize(){
// ...
}
/**
* get_field_type
*
* @return mixed
*/
function get_field_type(){
return acf_get_field_type($this->name);
}
/**
* add_filter
*
* @param $tag
* @param $function_to_add
* @param $priority
* @param $accepted_args
*/
function add_filter($tag = '', $function_to_add = '', $priority = 10, $accepted_args = 1){
// bail early if no callable
if(!is_callable($function_to_add)){
return;
}
// add
add_filter($tag, $function_to_add, $priority, $accepted_args);
}
/**
* remove_filter
*
* @param $tag
* @param $function_to_remove
* @param $priority
*/
function remove_filter($tag = '', $function_to_remove = '', $priority = 10){
// bail early if no callable
if(!is_callable($function_to_remove)){
return;
}
// remove
remove_filter($tag, $function_to_remove, $priority);
}
/**
* replace_filter
*
* @param $tag
* @param $function_to_replace
* @param $priority
* @param $accepted_args
*/
function replace_filter($tag = '', $function_to_replace = '', $priority = 10, $accepted_args = 1){
// check instance
if(!$this->instance){
$this->instance = $this->get_field_type();
}
// array
if(is_array($function_to_replace)){
$function_to_remove = array($this->instance, $function_to_replace[1]);
$function_to_add = $function_to_replace;
// string
}else{
$function_to_remove = array($this->instance, $function_to_replace);
$function_to_add = array($this, $function_to_replace);
}
// bail early if no callable
if(!is_callable($function_to_add)){
return;
}
// replace
$this->remove_filter($tag, $function_to_remove, $priority);
$this->add_filter($tag, $function_to_add, $priority, $accepted_args);
}
/**
* add_field_filter
*
* @param $tag
* @param $function_to_add
* @param $priority
* @param $accepted_args
*/
function add_field_filter($tag = '', $function_to_add = '', $priority = 10, $accepted_args = 1){
// append
$tag .= '/type=' . $this->name;
// add
$this->add_filter($tag, $function_to_add, $priority, $accepted_args);
}
/**
* remove_field_filter
*
* @param $tag
* @param $function_to_remove
* @param $priority
*/
function remove_field_filter($tag = '', $function_to_remove = '', $priority = 10){
// append
$tag .= '/type=' . $this->name;
// remove
$this->remove_filter($tag, $function_to_remove, $priority);
}
/**
* replace_field_filter
*
* @param $tag
* @param $function_to_add
* @param $priority
* @param $accepted_args
*/
function replace_field_filter($tag = '', $function_to_replace = '', $priority = 10, $accepted_args = 1){
// append
$tag .= '/type=' . $this->name;
// replace
$this->replace_filter($tag, $function_to_replace, $priority, $accepted_args);
}
/**
* add_action
*
* @param $tag
* @param $function_to_add
* @param $priority
* @param $accepted_args
*/
function add_action($tag = '', $function_to_add = '', $priority = 10, $accepted_args = 1){
// bail early if no callable
if(!is_callable($function_to_add)){
return;
}
// add
add_action($tag, $function_to_add, $priority, $accepted_args);
}
/**
* remove_action
*
* @param $tag
* @param $function_to_remove
* @param $priority
*/
function remove_action($tag = '', $function_to_remove = '', $priority = 10){
// bail early if no callable
if(!is_callable($function_to_remove)){
return;
}
// remove
remove_action($tag, $function_to_remove, $priority);
}
/**
* replace_action
*
* @param $tag
* @param $function_to_replace
* @param $priority
* @param $accepted_args
*/
function replace_action($tag = '', $function_to_replace = '', $priority = 10, $accepted_args = 1){
// check instance
if(!$this->instance){
$this->instance = $this->get_field_type();
}
// array
if(is_array($function_to_replace)){
$function_to_remove = array($this->instance, $function_to_replace[1]);
$function_to_add = $function_to_replace;
// string
}else{
$function_to_remove = array($this->instance, $function_to_replace);
$function_to_add = array($this, $function_to_replace);
}
// bail early if no callable
if(!is_callable($function_to_add)){
return;
}
// replace
$this->remove_action($tag, $function_to_remove, $priority);
$this->add_action($tag, $function_to_add, $priority, $accepted_args);
}
/**
* add_field_action
*
* @param $tag
* @param $function_to_add
* @param $priority
* @param $accepted_args
*/
function add_field_action($tag = '', $function_to_add = '', $priority = 10, $accepted_args = 1){
// append
$tag .= '/type=' . $this->name;
// add
$this->add_action($tag, $function_to_add, $priority, $accepted_args);
}
/**
* remove_field_action
*
* @param $tag
* @param $function_to_remove
* @param $priority
*/
function remove_field_action($tag = '', $function_to_remove = '', $priority = 10){
// append
$tag .= '/type=' . $this->name;
// remove
$this->remove_action($tag, $function_to_remove, $priority);
}
/**
* replace_field_action
*
* @param $tag
* @param $function_to_replace
* @param $priority
* @param $accepted_args
*/
function replace_field_action($tag = '', $function_to_replace = '', $priority = 10, $accepted_args = 1){
// append
$tag .= '/type=' . $this->name;
// replace
$this->replace_action($tag, $function_to_replace, $priority, $accepted_args);
}
}
endif;