Completed
Push — master ( 081621...253fae )
by Stefano
05:18
created

Filters::filterWith()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 8
nc 4
nop 3
dl 0
loc 12
rs 9.2
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Filters
5
 *
6
 * Add to a class for permitting users to override data via callback hooks.
7
 *
8
 * @package core
9
 * @author [email protected]
10
 * @copyright Caffeina srl - 2015-2016 - http://caffeina.com
11
 */
12
13
trait Filters {
14
15
    protected static $_modders = [];
16
17
    public static function filter($names, callable $modder = null){
18
      if( null === $modder ) foreach ( (array)$names as $name => $callback ) {
19
        static::$_modders[$name][] = $callback;
20
      } else foreach ( (array)$names as $name ) {
21
        static::$_modders[$name][] = $modder;
22
      }
23
    }
24
25
    public static function filterSingle($name, callable $modder){
26
      static::$_modders[$name] = [$modder];
27
    }
28
29 View Code Duplication
    public static function filterRemove($name,callable $modder = null){
30
      if($modder === null) {
31
        unset(static::$_modders[$name]);
32
      } else {
33
        if ($idx = array_search($modder,static::$_modders[$name],true))
34
          unset(static::$_modders[$name][$idx]);
35
      }
36
    }
37
38
    public static function filterWith($names, $default, ...$args){
39
      foreach ((array)$names as $name) {
40
        if (!empty(static::$_modders[$name])) {
41
          $value = $default;
42
          foreach (static::$_modders[$name] as $modder) {
43
            $value = $modder($value, $args);
44
          }
45
          return $value;
46
        }
47
      }
48
      return $default;
49
    }
50
51
}
52