/** * @Route("/{id}", methods="DELETE", requirements={"id"="\d+"}) * @Request({"id": "int"}, csrf=true) */ public function deleteAction($id) { if ($project = Project::find($id)) { if (!App::user()->hasAccess('portfolio: manage portfolio')) { return ['error' => __('Access denied.')]; } $project->delete(); } return ['message' => 'success']; }
/** * @Route("/{id}", name="id") */ public function projectAction($id = 0) { if (!($project = Project::where(['id = ?', 'date < ?'], [$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); return ['$view' => ['title' => __($project->title), 'name' => 'bixie/portfolio/project.php'], 'portfolio' => $this->portfolio, 'config' => $this->portfolio->config(), 'previous' => $previous, 'next' => $next, 'project' => $project]; }
/** * {@inheritdoc} */ public function generate(array $parameters = []) { $id = $parameters['id']; if (!isset($this->cacheEntries[$id])) { if (!($project = Project::where(compact('id'))->first())) { throw new RouteNotFoundException('Project not found.'); } $this->addCache($project); } $meta = $this->cacheEntries[$id]; $parameters['slug'] = $meta['slug']; unset($parameters['id']); return $parameters; }
/** * @Route("/project/edit", name="project/edit") * @Access("portfolio: manage portfolio") * @Request({"id": "int"}) */ public function editAction($id = 0) { try { if (!($project = Project::where(compact('id'))->first())) { if ($id) { App::abort(404, __('Invalid project id.')); } $module = App::module('bixie/portfolio'); $project = Project::create(['data' => [], 'tags' => [], 'date' => new \DateTime()]); $project->set('markdown', $module->config('markdown')); } return ['$view' => ['title' => $id ? __('Edit Project') : __('Add Project'), 'name' => 'bixie/portfolio/admin/project.php'], '$data' => ['config' => App::module('bixie/portfolio')->config(), 'project' => $project, 'tags' => Project::allTags()], 'project' => $project]; } catch (\Exception $e) { App::message()->error($e->getMessage()); return App::redirect('@portfolio/post'); } }
<?php use Bixie\Portfolio\Model\Project; return ['name' => 'bixie/portfolio-projects', 'label' => 'Portfolio projects', 'events' => ['view.scripts' => function ($event, $scripts) use($app) { $scripts->register('widget-portfolio-projects', 'bixie/portfolio:app/bundle/widget-portfolio-projects.js', ['~widgets']); }], 'render' => function ($widget) use($app) { $query = Project::query()->where(['status' => Project::STATUS_PUBLISHED]); switch ($widget->get('content_selection', 'random')) { case 'random': $query->orderBy('RAND()'); break; case 'latest': $query->orderBy('date', 'desc'); break; case 'pick': $query->whereInSet('id', $widget->get('items', [])); $query->orderBy('title', 'asc'); break; default: return 'No valid content select'; break; } $query->limit($widget->get('count', 4)); $projects = array_values($query->get()); $config = $app->module('bixie/portfolio')->config(); $teaser_config = $widget->get('teaser'); return $app['view']('bixie/portfolio/widgets/portfolio-projects.php', compact('widget', 'projects', 'config', 'teaser_config')); }];