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; }