File Manager

Current Directory: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/framework/src/Util
Viewing File: /home/astoriaah/www/templates/yootheme-BK/vendor/yootheme/framework/src/Util/FilterTrait.php
<?php namespace YOOtheme\Util; trait FilterTrait { /** * @var array */ protected static $sorted = []; /** * @var array */ protected static $filters = []; /** * Adds a filter callback. * * @param string $name * @param callable $filter * @param int $priority */ public static function addFilter($name, $filter, $priority = 0) { static::$filters[$name][$priority][] = $filter; if ($name == 'all') { static::$sorted = []; } else { unset(static::$sorted[$name]); } } /** * Removes one or more filters. * * @param string $name * @param callable $filter */ public static function removeFilter($name, $filter = null) { if (!isset(static::$filters[$name])) { return; } if ($filter === null) { unset(static::$filters[$name], static::$sorted[$name]); return; } foreach (static::$filters[$name] as $priority => $filters) { if (false !== ($key = array_search($filter, $filters, true))) { unset(static::$filters[$name][$priority][$key], static::$sorted[$name]); } } } /** * Applies all filters on a value. * * @param string $name * @param mixed $value * @return mixed */ public static function applyFilter($name, $value) { $num = func_num_args() - 1; $args = array_slice(func_get_args(), 1); foreach (static::getFilters($name) as $filter) { if ($num == 1) { $args[0] = $filter($args[0]); } elseif ($num == 2) { $args[0] = $filter($args[0], $args[1]); } elseif ($num == 3) { $args[0] = $filter($args[0], $args[1], $args[2]); } else { $args[0] = call_user_func_array($filter, $args); } } return $args[0]; } /** * Gets all filters. * * @param string $name * @return array */ public static function getFilters($name = null) { if ($name !== null) { return isset(static::$sorted[$name]) ? static::$sorted[$name] : static::sortFilters($name); } foreach (array_keys(static::$filters) as $name) { if (!isset(static::$sorted[$name])) { static::sortFilters($name); } } return array_filter(static::$sorted); } /** * Sorts all filters by their priority. * * @param string $name * @return array */ protected static function sortFilters($name) { $sorted = []; if (isset(static::$filters['all'])) { $sorted = static::$filters['all']; } if (isset(static::$filters[$name])) { foreach (array_intersect_key(static::$filters[$name], $sorted) as $priority => $filters) { $sorted[$priority] = array_merge($sorted[$priority], $filters); } foreach (array_diff_key(static::$filters[$name], $sorted) as $priority => $filters) { $sorted[$priority] = $filters; } } krsort($sorted); return static::$sorted[$name] = $sorted ? call_user_func_array('array_merge', $sorted) : $sorted; } }