public function indexAction($id = 0) { if (!($page = Page::find($id))) { App::abort(404, __('Page not found.')); } $page->content = App::content()->applyPlugins($page->content, ['page' => $page, 'markdown' => $page->get('markdown')]); return ['$view' => ['title' => $page->title, 'name' => 'system/site/page.php'], 'page' => $page, 'node' => App::node()]; }
/** * @Access("userprofile: view profiles") * @Route("/{id}", methods="GET", name="id") * @Request({"id": "int"}) */ public function detailsAction($id) { if (!($user = App::auth()->getUserProvider()->find((int) $id)) or !($profileUser = ProfileUser::load($user))) { App::abort(404, __('User not found.')); } if ($breadcrumbs = App::module('bixie/breadcrumbs')) { $breadcrumbs->addUrl(['title' => $user->name, 'url' => '']); } return ['$view' => ['title' => __('User Profile'), 'name' => 'bixie/userprofile/profile-details.php'], '$data' => [], 'config' => App::module('bixie/userprofile')->config(), 'profileUser' => $profileUser, 'node' => App::node()]; }
/** * @Route("/{id}", name="id") */ public function projectAction($id = 0) { if (!($project = Project::where(['id = ?', 'date < ?', 'status = 1'], [$id, new \DateTime()])->first())) { App::abort(404, __('Project not found.')); } $project->intro = App::content()->applyPlugins($project->intro, ['project' => $project, 'markdown' => $project->get('markdown')]); $project->content = App::content()->applyPlugins($project->content, ['project' => $project, 'markdown' => $project->get('markdown')]); $previous = Project::getPrevious($project); $next = Project::getNext($project); if ($breadcrumbs = App::module('bixie/breadcrumbs')) { $breadcrumbs->addUrl(['title' => $project->title, 'url' => '']); } return ['$view' => ['title' => __($project->title), 'name' => 'bixie/portfolio/project.php'], 'portfolio' => $this->portfolio, 'config' => $this->portfolio->config(), 'previous' => $previous, 'next' => $next, 'project' => $project, 'node' => App::node()]; }
/** * @Route("/{id}") */ public function formAction($id = 0) { $user = App::user(); if (!($form = Form::where(['id = ?'], [$id])->where(function ($query) use($user) { if (!$user->isAdministrator()) { $query->where('status = 1'); } })->related('fields')->first())) { App::abort(404, __('Form not found!')); } if (!App::node()->hasAccess(App::user())) { App::abort(403, __('Insufficient User Rights.')); } return ['$view' => ['title' => __($form->title), 'name' => 'formmaker:views/form.php'], '$data' => ['formitem' => $form, 'fields' => array_values($form->fields)]]; }
/** * @Route("/") */ public function indexAction() { if (!App::node()->hasAccess(App::user())) { App::abort(403, __('Insufficient User Rights.')); } $query = Project::where(['date < ?'], [new \DateTime()])->orderBy('date', 'DESC'); $portfolio_text = ''; if ($this->portfolio->config('portfolio_text')) { $portfolio_text = App::content()->applyPlugins($this->portfolio->config('portfolio_text'), ['markdown' => $this->portfolio->config('markdown_enabled')]); } foreach ($projects = $query->get() as $project) { $project->intro = App::content()->applyPlugins($project->intro, ['project' => $project, 'markdown' => $project->get('markdown')]); $project->content = App::content()->applyPlugins($project->content, ['project' => $project, 'markdown' => $project->get('markdown'), 'readmore' => true]); } return ['$view' => ['title' => $this->portfolio->config('portfolio_title') ?: App::node()->title, 'name' => 'bixie/portfolio/portfolio.php'], 'tags' => Project::allTags(), 'portfolio' => $this->portfolio, 'config' => $this->portfolio->config(), 'portfolio_text' => $portfolio_text, 'projects' => $projects]; }
/** * @Route("/feed") * @Route("/feed/{type}") */ public function feedAction($type = '') { if (!App::node()->hasAccess(App::user())) { App::abort(403, __('Insufficient User Rights.')); } // fetch locale and convert to ISO-639 (en_US -> en-us) $locale = App::module('system')->config('site.locale'); $locale = str_replace('_', '-', strtolower($locale)); $site = App::module('system/site'); $feed = App::feed()->create($type ?: $this->blog->config('feed.type'), ['title' => $site->config('title'), 'link' => App::url('@blog', [], true), 'description' => $site->config('description'), 'element' => ['language', $locale], 'selfLink' => App::url('@blog/feed', [], true)]); if ($last = Post::where(['status = ?', 'date < ?'], [Post::STATUS_PUBLISHED, new \DateTime()])->limit(1)->orderBy('modified', 'DESC')->first()) { $feed->setDate($last->modified); } foreach (Post::where(['status = ?', 'date < ?'], [Post::STATUS_PUBLISHED, new \DateTime()])->related('user')->limit($this->blog->config('feed.limit'))->orderBy('date', 'DESC')->get() as $post) { $url = App::url('@blog/id', ['id' => $post->id], true); $feed->addItem($feed->createItem(['title' => $post->title, 'link' => $url, 'description' => App::content()->applyPlugins($post->content, ['post' => $post, 'markdown' => $post->get('markdown'), 'readmore' => true]), 'date' => $post->date, 'author' => [$post->user->name, $post->user->email], 'id' => $url])); } return App::response($feed->output(), 200, ['Content-Type' => $feed->getMIMEType() . '; charset=' . $feed->getEncoding()]); }
/** * @param string $menu * @param array $parameters * @return Node|null */ public function getRoot($menu, $parameters = []) { $parameters = array_replace(['start_level' => 1, 'depth' => PHP_INT_MAX, 'mode' => 'all'], $parameters); $user = App::user(); $startLevel = (int) $parameters['start_level'] ?: 1; $maxDepth = $startLevel + ($parameters['depth'] ?: PHP_INT_MAX); $nodes = Node::findByMenu($menu, true); $nodes[0] = new Node(['path' => '/']); $nodes[0]->status = 1; $nodes[0]->parent_id = null; $node = App::node(); $path = $node->path; if (!isset($nodes[$node->id])) { foreach ($nodes as $node) { if ($node->getUrl('base') === $path) { $path = $node->path; break; } } } $path .= '/'; $segments = explode('/', $path); $rootPath = count($segments) > $startLevel ? implode('/', array_slice($segments, 0, $startLevel + 1)) . '/' : '/'; foreach ($nodes as $node) { $depth = substr_count($node->path, '/'); $parent = isset($nodes[$node->parent_id]) ? $nodes[$node->parent_id] : null; $node->set('active', 0 === strpos($path, $node->path . '/')); if ($node->status !== 1 || $depth >= $maxDepth || !$node->hasAccess($user) || $node->get('menu_hide') || !($parameters['mode'] == 'all' || $node->get('active') || 0 === strpos($node->path . '/', $rootPath) || $depth == $startLevel)) { $node->setParent(); continue; } $node->setParent($parent); if ($node->get('active') && $depth == $startLevel - 1) { $root = $node; } } if (!isset($root)) { return null; } $root->setParent(); return $root; }
/** * @Route("/{id}", name="form/front") */ public function formAction($id = 0) { $user = App::user(); if (!($form = Form::where(['id = ?'], [$id])->where(function ($query) use($user) { if (!$user->isAdministrator()) { $query->where('status = 1'); } })->related('fields')->first())) { App::abort(404, __('Form not found!')); } if (!App::node()->hasAccess(App::user())) { App::abort(403, __('Insufficient User Rights.')); } if ($form->get('recaptcha')) { App::view()->on('footer', function ($event) { $event->addResult('<script src="https://www.google.com/recaptcha/api.js?onload=grecacapthaCallback&render=explicit" async defer></script>'); }); } return ['$view' => ['title' => __($form->title), 'name' => 'formmaker:views/form.php'], '$data' => ['config' => App::module('formmaker')->publicConfig(), 'formitem' => $form, 'fields' => array_values($form->fields)]]; }
/** * @Route("/{id}", name="form/front") */ public function formAction($id = 0) { if (!($formmaker = App::module('bixie/formmaker'))) { return 'Formmaker extension is disabled!'; } $user = App::user(); /** @var Form $form */ if (!($form = Form::where(['id = ?'], [$id])->where(function ($query) use($user) { if (!$user->isAdministrator()) { $query->where('status = 1'); } })->related('fields')->first())) { App::abort(404, __('Form not found!')); } if (!App::node()->hasAccess(App::user())) { App::abort(403, __('Insufficient User Rights.')); } $app = App::getInstance(); $form->prepareView($app, $formmaker); return ['$view' => ['title' => __($form->title), 'name' => 'bixie/formmaker/form.php'], '$formmaker' => ['config' => $formmaker->publicConfig(), 'formitem' => $form, 'fields' => array_values($form->getFields())], 'node' => App::node()]; }
/** * @param string|null $position * @return Widget[] */ protected function getWidgets($position) { static $widgets, $positions = []; if (null === $widgets) { $widgets = Widget::where(['status' => 1])->get(); } if (!($pos = $this->positions->get($position))) { return []; } if (!isset($positions[$position])) { $positions[$position] = []; foreach ($pos['assigned'] as $id) { if (!isset($widgets[$id]) or !($widget = $widgets[$id]) or !$widget->hasAccess(App::user()) or $nodes = $widget->nodes and !in_array(App::node()->id, $nodes) or !($type = App::widget($widget->type))) { continue; } $result = $type->render($widget); $widget->set('result', $result); $positions[$position][] = $widget; } } return $positions[$position]; }
/** * @Route("/{id}", name="id") * @Request({"id":"int", "category_id":"int"}) */ public function fileAction($id = 0, $category_id = 0) { /** @var File $file */ if (!($file = File::where(['id = ?', 'status = ?'], [$id, '1'])->where(function ($query) { return $query->where('roles IS NULL')->whereInSet('roles', App::user()->roles, false, 'OR'); })->first())) { App::abort(404, __('File not found.')); } $file->setActiveCategory($category_id); App::trigger('bixie.prepare.file', [$file, App::view()]); $file->content = App::content()->applyPlugins($file->content, ['file' => $file, 'markdown' => $file->get('markdown')]); $previous = File::getPrevious($file); $next = File::getNext($file); /** @var Category $category */ if ($category_id && !($category = Category::where(['id = ?', 'status = ?'], [$category_id, '1'])->where(function ($query) { return $query->where('roles IS NULL')->whereInSet('roles', App::user()->roles, false, 'OR'); })->related('files')->first())) { App::abort(404, __('Category not found.')); } if ($breadcrumbs = App::module('bixie/breadcrumbs')) { if ($category_id) { $cat = $category; $crumbs = [['title' => $category->title, 'url' => $category->getUrl()]]; while ($parent_id = $cat->parent_id) { if ($cat = $cat->find($parent_id, true)) { $crumbs[] = ['title' => $cat->title, 'url' => $cat->getUrl()]; } } foreach (array_reverse($crumbs) as $data) { $breadcrumbs->addUrl($data); } } //add file $breadcrumbs->addUrl(['title' => $file->title, 'url' => $file->getUrl()]); } return ['$view' => ['title' => __($file->title), 'name' => 'bixie/download/file.php'], 'download' => $this->download, 'config' => $this->download->config(), 'previous' => $previous, 'next' => $next, 'file' => $file, 'node' => App::node()]; }
<?php use Pagekit\Application as App; return ['name' => 'bixie/breadcrumbs', 'type' => 'extension', 'main' => 'Bixie\\Breadcrumbs\\BreadcrumbsModule', 'autoload' => ['Bixie\\Breadcrumbs\\' => 'src'], 'widgets' => ['widgets/breadcrumbs.php'], 'resources' => ['bixie/breadcrumbs:' => ''], 'config' => [], 'events' => ['site' => function ($event, $app) { if ($app->isAdmin()) { return; } /** @var \Pagekit\Site\Model\Node $node */ $node = App::node(); if ($node->id) { /** @var \Bixie\Breadcrumbs\BreadcrumbsModule $breadcrumbs */ $breadcrumbs = $app->module('bixie/breadcrumbs'); $frontpage = $app->config('system/site')->get('frontpage'); $frontpageSet = $frontpage == $node->id; $nodes = [$node]; while ($parent_id = $node->parent_id) { if ($node = $node->find($parent_id, true)) { $frontpageSet = $frontpageSet ?: $frontpage == $node->id; $nodes[] = $node; } } if (!$frontpageSet) { $breadcrumbs->addNode($node->find($frontpage, true)); } foreach (array_reverse($nodes) as $node) { $breadcrumbs->addNode($node); } } }, 'view.blog/post' => function ($event, $view) { if ($post = $event['post']) { $this->addUrl(['title' => $post->title, 'url' => '']);