00001 <?php 00024 require_once CORE_PATH . 'extensions/filter/filter_interface.php'; 00025 00035 class Filter 00036 { 00045 public static function get ($s, $filter, $options=array()) 00046 { 00047 if(is_string($options)) { 00048 $filters = func_get_args(); 00049 unset($filters[0]); 00050 $options = array(); 00051 } else { 00052 $filters = array($filter); 00053 } 00054 00055 return self::_apply_filters($s, $filters, $options); 00056 } 00064 protected static function _apply_filters($s, $filters, $options) 00065 { 00066 if (is_array($s)) { 00067 foreach ($s as $key => $value) { 00068 if (is_array($value) || is_object($value)) { 00069 return self::_apply_filters($s[$key], $filters, $options); 00070 } elseif (is_string($value)) { 00071 foreach ($filters as $f) { 00072 $filter = Inflector::camelcase($f).'Filter'; 00073 if(!class_exists($filter)) { 00074 self::_load_filter($f); 00075 } 00076 $s[$key] = call_user_func(array($filter , 'execute'), $value, $options); 00077 } 00078 } 00079 } 00080 } elseif (is_object($s)) { 00081 foreach (get_object_vars($s) as $attr => $value) { 00082 if (is_array($value) || is_object($value)) { 00083 return self::_apply_filters($s->$attr, $filters, $options); 00084 } elseif (is_string($value)) { 00085 foreach ($filters as $f) { 00086 $filter = Inflector::camelcase($f).'Filter'; 00087 if(!class_exists($filter)) { 00088 self::_load_filter($f); 00089 } 00090 $s->$attr = call_user_func(array($filter, 'execute'), $value, $options); 00091 } 00092 } 00093 } 00094 } elseif (is_string($s)) { 00095 foreach ($filters as $f) { 00096 $filter = Inflector::camelcase($f).'Filter'; 00097 if(!class_exists($filter)) { 00098 self::_load_filter($f); 00099 } 00100 $s = call_user_func(array($filter, 'execute'), $s, $options); 00101 } 00102 } 00103 return $s; 00104 } 00111 protected static function _load_filter($filter) 00112 { 00113 $file = CORE_PATH . "extensions/filter/base_filters/$f_filter.php"; 00114 if(!file_exists($file)) { 00115 $file = APP_PATH . "filters/$f_filter.php"; 00116 if(!file_exists($file)) { 00117 throw new KumbiaException("Filtro $f no encontrado"); 00118 } 00119 } 00120 include $file; 00121 } 00122 }