Exemplo n.º 1
0
 private static function expand_patterns($pk, $patterns, $extends, &$automap_idx)
 {
     $result = [];
     $ext_arr = ['plugins' => [], 'vars' => []];
     foreach ($ext_arr as $k => $v) {
         if (array_key_exists($k, $extends)) {
             $ext_arr[$k] = $extends[$k];
             unset($extends[$k]);
         }
     }
     foreach ($patterns as $k => $v) {
         if (is_callable($v)) {
             $v = ['action' => $v];
         }
         if (!isset($v['mode']) || \ebi\Conf::in_mode($v['mode'])) {
             if (!empty($extends)) {
                 $v = array_merge($extends, $v);
             }
             foreach ($ext_arr as $ek => $ev) {
                 if (!empty($ev)) {
                     $v[$ek] = array_key_exists($ek, $v) ? is_array($v[$ek]) ? $v[$ek] : [$v[$ek]] : [];
                     $v[$ek] = array_merge($ev, $v[$ek]);
                 }
             }
             $pt = (empty($pk) ? '' : $pk . '/') . $k;
             if (array_key_exists('patterns', $v)) {
                 if (!array_key_exists('mode', $v) || \ebi\Conf::in_mode($v['mode'])) {
                     $vp = $v['patterns'];
                     unset($v['patterns']);
                     $result = array_merge($result, self::expand_patterns($pt, $vp, $v, $automap_idx));
                 }
             } else {
                 if (!isset($v['name'])) {
                     $v['name'] = $pt;
                 }
                 if (isset($v['action'])) {
                     if (!is_callable($v['action']) && strpos($v['action'], '::') === false) {
                         foreach (self::automap($pt, $v['action'], $v['name'], $automap_idx++) as $ak => $av) {
                             $result[$ak] = array_merge($v, $av);
                         }
                     } else {
                         $result[$pt] = $v;
                     }
                 } else {
                     $result[$pt] = $v;
                 }
             }
         }
     }
     return $result;
 }