public function testPubUsesNamespaceOfActivePageTemplate()
 {
     $template = new Template(['theme' => 'test']);
     $page = $this->getMock(Page::class, ['getTemplate']);
     $page->expects($this->once())->method('getTemplate')->willReturn($template);
     Router::shouldReceive('getActivePage')->andReturn($page);
     $this->assertEquals('/vendor/boomcms/themes/test/file.png', Helpers::pub('file.png'));
 }
Beispiel #2
0
 /**
  * @param Person $person
  * @param string $ability
  *
  * @return bool
  */
 public function before(Person $person, $ability)
 {
     if ($person->isSuperUser()) {
         return true;
     }
     if (!$person->hasSite(Router::getActiveSite())) {
         return false;
     }
 }
Beispiel #3
0
 public function __construct(array $params)
 {
     // Exclude invisible should be included by default
     // To prevent invisible pages showing up in the site to non CMS users.
     if (!isset($params['excludeinvisible'])) {
         $params['excludeinvisible'] = null;
     }
     // Always include the ACL filter.
     $params['acl'] = [Router::getActiveSite(), Auth::user()];
     $this->params = $params;
 }
 public function show()
 {
     $page = Router::getActivePage();
     $format = $this->request->format();
     if ($this->request->route()->getParameter('format')) {
         $format = $this->request->route()->getParameter('format');
     }
     $method = 'as' . ucfirst($format);
     if (method_exists($this, $method)) {
         return $this->{$method}($page);
     }
     abort(406);
 }
Beispiel #5
0
 /**
  * Returns a chunk object of the required type.
  *
  * @param string $type     Chunk type, e.g. text, feature, etc.
  * @param string $slotname The name of the slot to retrieve a chunk from.
  * @param mixed  $page     The page the chunk belongs to. If not given then the page from the current request will be used.
  *
  * @return BaseChunk
  */
 public function edit($type, $slotname, $page = null)
 {
     $className = 'BoomCMS\\Chunk\\' . ucfirst($type);
     if ($page === null) {
         $page = Router::getActivePage();
     } elseif ($page === 0) {
         // 0 was given as the page - this signifies a 'global' chunk not assigned to any page.
         $page = new Page();
     }
     $chunk = $this->find($type, $slotname, $page->getCurrentVersion());
     $attrs = $chunk ? $chunk->toArray() : [];
     return new $className($page, $attrs, $slotname, $this->allowedToEdit($page));
 }
Beispiel #6
0
 public static function items()
 {
     $items = Config::get('boomcms.menu');
     foreach ($items as $key => $item) {
         if (isset($item['role']) && Gate::denies($item['role'], Router::getActiveSite())) {
             unset($items[$key]);
             continue;
         }
         $items[$key]['title'] = isset($item['title']) ? $item['title'] : Lang::get('boomcms::menu.' . $key);
     }
     usort($items, function ($a, $b) {
         if ($a['title'] === $b['title']) {
             return 0;
         }
         return $a['title'] < $b['title'] ? -1 : 1;
     });
     return $items;
 }
Beispiel #7
0
 /**
  * Handle an incoming request.
  *
  * @param \Illuminate\Http\Request $request
  * @param \Closure                 $next
  *
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $activePage = Router::getActivePage();
     if ($activePage === null || Gate::denies('toolbar', $activePage)) {
         return $next($request);
     }
     $response = $next($request);
     $originalHtml = $response instanceof Response ? $response->getOriginalContent() : (string) $response;
     preg_match('|(.*)(</head>)(.*<body[^>]*>)|imsU', $originalHtml, $matches);
     if (!empty($matches)) {
         $head = view('boomcms::editor.iframe', ['before_closing_head' => $matches[1], 'body_tag' => $matches[3], 'editor' => $this->editor, 'page_id' => $activePage->getId()]);
         $newHtml = str_replace($matches[0], (string) $head, $originalHtml);
         if ($response instanceof Response) {
             $response->setContent($newHtml);
         } else {
             return $newHtml;
         }
     }
     return $response;
 }
Beispiel #8
0
 public function postSave(Request $request, Page $page)
 {
     $this->authorize('edit', $page);
     if (!$request->has('force')) {
         $latest = ChunkFacade::get($request->input('type'), $request->input('slotname'), $page);
         if ($request->input('chunkId') < $latest->getId()) {
             if ($template = $request->input('template')) {
                 $latest->template($template);
             }
             return response(['chunkId' => $latest->getId(), 'error' => 'conflict', 'html' => view('boomcms::editor.conflict')->render(), 'chunk' => $latest->render(), 'status' => $page->getCurrentVersion()->getStatus()], 500);
         }
     }
     $chunk = ChunkFacade::create($page, $request->except(['template', 'chunkId', 'force']));
     $chunk->editable(true);
     if ($template = $request->input('template')) {
         $chunk->template($template);
     }
     Router::setActivePage($page);
     View::share('page', $page);
     Event::fire(new ChunkWasCreated($page, $chunk));
     return ['status' => $page->getCurrentVersion()->getStatus(), 'html' => $chunk->render(), 'chunkId' => $chunk->getId()];
 }
Beispiel #9
0
 /**
  * Whether the user has the 'managePages' role.
  *
  * @return bool
  */
 protected function managesPages()
 {
     return Gate::allows('managePages', Router::getActiveSite()) === true;
 }
Beispiel #10
0
 /**
  * Get the pages applied to the children of a page.
  *
  * @param Page\Page $page
  * @param string    $group
  *
  * @return array
  */
 public static function getTagsInSection(PageInterface $page = null, $group = null)
 {
     $page = $page ?: Router::getActivePage();
     $finder = new Tag\Finder\Finder();
     $finder->addFilter(new Tag\Finder\AppliedToPageDescendants($page));
     $finder->addFilter(new Tag\Finder\Group($group));
     return $finder->setOrderBy('name', 'asc')->findAll();
 }
Beispiel #11
0
 /**
  * Insert a chunk into a page.
  *
  * @param string    $type
  * @param string    $slotname
  * @param null|Page $page
  *
  * @return mixed
  */
 public function insert($type, $slotname, $page = null)
 {
     if ($page === null || $page === Router::getActivePage()) {
         return $this->edit($type, $slotname, $page);
     }
     return $this->get($type, $slotname, $page);
 }
Beispiel #12
0
 function h1(Page $page = null)
 {
     $page = $page ?: Router::getActivePage();
     return "<h1 id='b-page-title'>{$page->getTitle()}</h1>";
 }