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 }