web/wp-content/plugins/acf-extended/includes/settings.php (138 lines of code) (raw):

<?php if(!defined('ABSPATH')){ exit; } if(!class_exists('acfe_settings')): class acfe_settings{ // vars public $settings = array(); /** * construct */ function __construct(){ $this->settings = get_option('acfe', array()); } /** * get * * @param $selector * @param $default * * @return mixed|null */ function get($selector = null, $default = null){ return $this->array_get($this->settings, $selector, $default); } /** * set * * @param $selector * @param $value * @param $append * * @return $this|false */ function set($selector = null, $value = null, $append = false){ if($value === null){ return false; } if($append){ $this->array_append($this->settings, $selector, $value); }else{ $this->array_set($this->settings, $selector, $value); } $this->update(); return $this; } /** * clear * * @param $selector * * @return $this */ function clear($selector = null){ $this->array_clear($this->settings, $selector); $this->update(); return $this; } /** * delete * * @param $selector * * @return $this */ function delete($selector = null){ // single if(strpos($selector, '.') === false){ unset($this->settings[ $selector ]); // array }else{ $this->array_remove($this->settings, $selector); } $this->update(); return $this; } /** * append * * @param $selector * @param $value * * @return $this|false */ function append($selector = null, $value = null){ if($selector === null && $value === null){ return false; } // allow simple append without selector if($value === null){ $value = $selector; $selector = null; } return $this->set($selector, $value, true); } /** * array_get * * @param $array * @param $key * @param $default * * @return mixed|null */ function array_get($array, $key, $default = null){ if(empty($key)){ return $array; } if(!is_array($key)){ $key = explode('.', $key); } $count = count($key); $i=-1; foreach($key as $segment){ $i++; if(!isset($array[ $segment ])){ continue; } if($i+1 === $count){ return $array[ $segment ]; } unset($key[$i]); return $this->array_get($array[ $segment ], $key, $default); } return $default; } /** * array_set * * @param $array * @param $key * @param $value * * @return array|mixed */ function array_set(&$array, $key, $value){ if(empty($key)){ return $array = $value; } $keys = explode('.', $key); while(count($keys) > 1){ $key = array_shift($keys); if(!isset($array[ $key ]) || !is_array($array[ $key ])){ $array[ $key ] = array(); } $array =& $array[ $key ]; } $array[ array_shift($keys) ] = $value; return $array; } /** * array_append * * @param $array * @param $key * @param $value * * @return mixed */ function array_append(&$array, $key, $value){ $get = $this->array_get($array, $key); $old = acf_get_array($get); $value = acf_get_array($value); $value = array_merge($old, $value); $this->array_set($array, $key, $value); return $array; } /** * array_clear * * @param $array * @param $key * * @return mixed */ function array_clear(&$array, $key){ $get = $this->array_get($array, $key); if($get === null){ return $array; } $value = null; if(is_array($get)){ $value = array(); } $this->array_set($array, $key, $value); return $array; } /** * array_remove * * @param $array * @param $keys */ function array_remove(&$array, $keys){ $original =& $array; foreach((array) $keys as $key){ $parts = explode('.', $key); while(count($parts) > 1){ $part = array_shift($parts); if(isset($array[ $part ]) && is_array($array[ $part ])){ $array =& $array[ $part ]; } } unset($array[ array_shift($parts) ]); // clean up after each pass $array =& $original; } } /** * update */ function update(){ update_option('acfe', $this->settings, 'true'); } } endif; /** * acfe_get_settings * * @param $selector * @param $default * * @return mixed */ function acfe_get_settings($selector = null, $default = null){ return acf_get_instance('acfe_settings')->get($selector, $default); } /** * acfe_update_settings * * @param $selector * @param $value * * @return mixed */ function acfe_update_settings($selector = null, $value = null){ if($value === null){ $value = $selector; $selector = null; } return acf_get_instance('acfe_settings')->set($selector, $value); } /** * acfe_delete_settings * * @param $selector * * @return mixed */ function acfe_delete_settings($selector = null){ return acf_get_instance('acfe_settings')->delete($selector); }