/** * Adds protected node types. */ public function onEnable($event, $module) { foreach ((array) $module->get('nodes') as $type => $route) { if (isset($route['protected']) and $route['protected'] and !Node::where(['type = ?'], [$type])->first()) { Node::create(['title' => $route['label'], 'slug' => App::filter($route['label'], 'slugify'), 'type' => $type, 'status' => 1, 'link' => $route['name']])->save(); } } }
/** * Register a node type. * * @param string $type * @param array $route */ public function registerType($type, array $route) { if (isset($route['protected']) and $route['protected'] and !array_filter(Node::findAll(true), function ($node) use($type) { return $type === $node->type; })) { Node::create(['title' => $route['label'], 'slug' => App::filter($route['label'], 'slugify'), 'type' => $type, 'status' => 1, 'link' => $route['name']])->save(); } $route['id'] = $type; $this->types[$type] = $route; }
/** * @Route("/", methods="POST") * @Route("/{id}", methods="POST", requirements={"id"="\d+"}) * @Request({"node": "array", "id": "int"}, csrf=true) */ public function saveAction($data, $id = 0) { if (!($node = Node::find($id))) { $node = Node::create(); unset($data['id']); } if (!($data['slug'] = App::filter($data['slug'] ?: $data['title'], 'slugify'))) { App::abort(400, __('Invalid slug.')); } $node->save($data); return ['message' => 'success', 'node' => $node]; }
/** * @Route("site/page/edit", name="page/edit") * @Access("site: manage site", admin=true) * @Request({"id", "menu"}) */ public function editAction($id = '', $menu = '') { if (is_numeric($id)) { if (!$id or !($node = Node::find($id))) { App::abort(404, 'Node not found.'); } } else { $node = Node::create(['type' => $id]); if ($menu && !App::menu($menu)) { App::abort(404, 'Menu not found.'); } $node->menu = $menu; } if (!($type = $this->site->getType($node->type))) { App::abort(404, 'Type not found.'); } return ['$view' => ['title' => __('Pages'), 'name' => 'system/site/admin/edit.php'], '$data' => ['node' => $node, 'type' => $type, 'roles' => array_values(Role::findAll())]]; }
/** * {@inheritdoc} */ public function main(App $app) { $app['node'] = function ($app) { if ($id = $app['request']->attributes->get('_node') and $node = Node::find($id)) { return $node; } return Node::create(); }; $app['menu'] = function ($app) { $menus = new MenuManager($app->config($app['theme']->name), $this->config('menus')); foreach ($app['theme']->get('menus', []) as $name => $label) { $menus->register($name, $label); } return $menus; }; $app->extend('view', function ($view) use($app) { return $view->addHelper(new MenuHelper($app['menu'])); }); }