/** * @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()]; }