/** * @param rex_be_page $page * @param array $properties * @param rex_package $package */ private static function pageAddProperties(rex_be_page $page, array $properties, rex_package $package) { foreach ($properties as $key => $value) { switch (strtolower($key)) { case 'subpages': if (is_array($value)) { foreach ($value as $pageKey => $subProperties) { if (isset($subProperties['title'])) { $subpage = new rex_be_page($pageKey, $subProperties['title']); $page->addSubpage($subpage); self::pageAddProperties($subpage, $subProperties, $package); } } } break; case 'perm': $page->setRequiredPermissions($value); break; case 'path': case 'subpath': if (file_exists($path = $package->getPath($value))) { $value = $path; } // fall through, don't break // fall through, don't break default: $setter = [$page, 'add' . ucfirst($key)]; if (is_callable($setter)) { foreach ((array) $value as $v) { call_user_func($setter, $v); } break; } $setter = [$page, 'set' . ucfirst($key)]; if (is_callable($setter)) { call_user_func($setter, $value); } } } }