public function checkPermissions($mixed)
 {
     if (isset($this->permissionsChecker)) {
         if ($this->permissionsChecker === -1) {
             return true;
         } else {
             return call_user_func_array($this->permissionsChecker, [$mixed]);
         }
     }
     $fp = new Permissions($mixed);
     return $fp->canViewTreeNode();
 }
 public function on_start()
 {
     $stacksPage = Page::getByPath('/dashboard/blocks/stacks');
     $stacksPerms = new Permissions($stacksPage);
     // Make sure we can view the stacks page
     if ($stacksPerms->canViewPage()) {
         $currentPage = $this->c;
         $currentPagePerms = new Permissions($currentPage);
         $viewTask = $this->request->get('vtask');
         // If the current user can't view this pages versions, or if vtask is not one of the available tasks
         if (!$currentPagePerms->canViewPageVersions() || !in_array($viewTask, ['view_versions', 'compare'])) {
             $url = $stacksPage->getPageController()->action('view_details', $currentPage->getCollectionID());
             // Redirect to the stacks page
             return $this->factory->redirect($url);
         } else {
             // Otherwise set the current theme and render normally
             $this->theme = 'dashboard';
         }
     }
     // If we can't view the stacks page, send a 404
     return $this->factory->notFound('');
 }
 public function view()
 {
     $this->set('latest_version', Update::getLatestAvailableVersionNumber());
     $local = [];
     $remote = [];
     $p = new Permissions();
     if ($p->canInstallPackages()) {
         $local = Package::getLocalUpgradeablePackages();
         $remote = Package::getRemotelyUpgradeablePackages();
     }
     // now we strip out any dupes for the total
     $updates = 0;
     $localHandles = [];
     foreach ($local as $_pkg) {
         ++$updates;
         $localHandles[] = $_pkg->getPackageHandle();
     }
     foreach ($remote as $_pkg) {
         if (!in_array($_pkg->getPackageHandle(), $localHandles)) {
             ++$updates;
         }
     }
     $this->set('updates', $updates);
 }
Beispiel #4
0
 public function validateAddBlockPassThruAction(Checker $ap, BlockType $bt)
 {
     return $ap->canAddBlock($bt);
 }
 /**
  * @inheritdoc
  */
 public function collection(Collection $collection, $code = Response::HTTP_OK, $headers = array())
 {
     if (!$this->app) {
         throw new \RuntimeException('Cannot resolve collections without a reference to the application');
     }
     $request = $this->request;
     if ($collection->isError() && $collection->getError() == COLLECTION_NOT_FOUND) {
         if ($response = $this->collectionNotFound($collection, $request, $headers)) {
             return $response;
         }
     }
     if ($collection->getCollectionPath() != '/page_not_found') {
         if (!isset($collection->cPathFetchIsCanonical) || !$collection->cPathFetchIsCanonical) {
             // Handle redirect URL (additional page paths)
             /** @var Url $url */
             $url = $this->app->make('url/manager')->resolve([$collection]);
             $query = $url->getQuery();
             $query->modify($request->getQueryString());
             $url = $url->setQuery($query);
             return $this->redirect($url, Response::HTTP_MOVED_PERMANENTLY, $headers);
         }
     }
     // maintenance mode
     if ($collection->getCollectionPath() != '/login') {
         $smm = $this->config->get('concrete.maintenance_mode');
         if ($smm == 1 && !Key::getByHandle('view_in_maintenance_mode')->validate() && ($_SERVER['REQUEST_METHOD'] != 'POST' || Loader::helper('validation/token')->validate() == false)) {
             $v = new View('/frontend/maintenance_mode');
             $router = $this->app->make(RouterInterface::class);
             $tmpTheme = $router->getThemeByRoute('/frontend/maintenance_mode');
             $v->setViewTheme($tmpTheme[0]);
             $v->addScopeItems(['c' => $collection]);
             $request->setCurrentPage($collection);
             if (isset($tmpTheme[1])) {
                 $v->setViewTemplate($tmpTheme[1]);
             }
             return $this->view($v, $code, $headers);
         }
     }
     if ($collection->getCollectionPointerExternalLink() != '') {
         return $this->redirect($collection->getCollectionPointerExternalLink());
     }
     $cp = new Checker($collection);
     if ($cp->isError() && $cp->getError() == COLLECTION_FORBIDDEN) {
         return $this->forbidden($request->getUri(), Response::HTTP_FORBIDDEN, $headers);
     }
     if (!$collection->isActive() && !$cp->canViewPageVersions()) {
         return $this->notFound('', Response::HTTP_NOT_FOUND, $headers);
     }
     $scheduledVersion = Version::get($collection, "SCHEDULED");
     if ($publishDate = $scheduledVersion->cvPublishDate) {
         $datetime = $this->app->make('helper/date');
         $now = $datetime->date('Y-m-d G:i:s');
         if (strtotime($now) >= strtotime($publishDate)) {
             $scheduledVersion->approve();
             $collection->loadVersionObject('ACTIVE');
         }
     }
     if ($cp->canEditPageContents() || $cp->canEditPageProperties() || $cp->canViewPageVersions()) {
         $collection->loadVersionObject('RECENT');
     }
     $vp = new Checker($collection->getVersionObject());
     // returns the $vp object, which we then check
     if (is_object($vp) && $vp->isError()) {
         switch ($vp->getError()) {
             case COLLECTION_NOT_FOUND:
                 return $this->notFound('', Response::HTTP_NOT_FOUND, $headers);
                 break;
             case COLLECTION_FORBIDDEN:
                 return $this->forbidden($request->getUri(), Response::HTTP_FORBIDDEN, $headers);
                 break;
         }
     }
     // Now that we've passed all permissions checks, and we have a page, we check to see if we
     // ought to redirect based on base url or trailing slash settings
     $cms = $this->app;
     $site = $this->app['site']->getSite();
     $response = $cms->handleCanonicalURLRedirection($request, $site);
     if (!$response) {
         $response = $cms->handleURLSlashes($request, $site);
     }
     if (isset($response)) {
         return $response;
     }
     $dl = $cms->make('multilingual/detector');
     if ($dl->isEnabled()) {
         $dl->setupSiteInterfaceLocalization($collection);
     }
     if (!$request->getPath() && $request->isMethod('GET') && !$request->query->has('cID')) {
         // This is a request to the home page –http://www.mysite.com/
         // First, we check to see if we need to redirect to a default multilingual section.
         if ($dl->isEnabled() && $site->getConfigRepository()->get('multilingual.redirect_home_to_default_locale')) {
             // Let's retrieve the default language
             $ms = $dl->getPreferredSection();
             if (is_object($ms)) {
                 return $this->redirect(\URL::to($ms));
             }
         }
         // Otherwise, let's check to see if our home page, which we have loaded already, has a path (like /en)
         // If it does, we'll redirect to the path.
         if ($collection->getCollectionPath() != '') {
             return $this->redirect(\URL::to($collection));
         }
     }
     $request->setCurrentPage($collection);
     $c = $collection;
     // process.php needs this
     require DIR_BASE_CORE . '/bootstrap/process.php';
     $u = new User();
     // On page view event.
     $pe = new Event($collection);
     $pe->setUser($u);
     $pe->setRequest($request);
     $this->app['director']->dispatch('on_page_view', $pe);
     // Core menu items
     $item = new RelationListItem();
     $menu = $this->app->make('helper/concrete/ui/menu');
     $menu->addMenuItem($item);
     $controller = $collection->getPageController();
     // we update the current page with the one bound to this controller.
     $collection->setController($controller);
     return $this->controller($controller);
 }
 /**
  * @return bool|Page
  */
 public function getPreviousCollection()
 {
     $page = false;
     $app = Facade::getFacadeApplication();
     $db = $app->make('database')->connection();
     $cID = 1;
     $currentPage = Page::getCurrentPage();
     while ($cID > 0) {
         switch ($this->orderBy) {
             case 'chrono_desc':
                 $cID = $db->GetOne('select Pages.cID from Pages inner join CollectionVersions cv on Pages.cID = cv.cID where cvIsApproved = 1 and cvDatePublic < ? and cParentID = ?  order by cvDatePublic desc', [$currentPage->getCollectionDatePublic(), $currentPage->getCollectionParentID()]);
                 break;
             case 'chrono_asc':
                 $cID = $db->GetOne('select Pages.cID from Pages inner join CollectionVersions cv on Pages.cID = cv.cID where cvIsApproved = 1 and cvDatePublic > ? and cParentID = ?  order by cvDatePublic asc', [$currentPage->getCollectionDatePublic(), $currentPage->getCollectionParentID()]);
                 break;
             case 'display_desc':
                 $cID = $db->GetOne('select cID from Pages where cDisplayOrder > ? and cParentID = ? order by cDisplayOrder asc', [$currentPage->getCollectionDisplayOrder(), $currentPage->getCollectionParentID()]);
                 break;
             case 'display_asc':
             default:
                 $cID = $db->GetOne('select cID from Pages where cDisplayOrder < ? and cParentID = ? order by cDisplayOrder desc', [$currentPage->getCollectionDisplayOrder(), $currentPage->getCollectionParentID()]);
                 break;
         }
         if ($cID > 0) {
             $page = Page::getByID($cID, 'RECENT');
             $currentPage = $page;
             $cp = new Permissions($page);
             if ($cp->canRead() && $page->getAttribute('exclude_nav') != 1) {
                 break;
             } else {
                 $page = false;
                 //avoid accidentally returning this $page if we're on last loop iteration
             }
         }
     }
     if (!is_object($page) && $this->loopSequence) {
         $c = Page::getCurrentPage();
         $parent = Page::getByID($c->getCollectionParentID(), 'ACTIVE');
         switch ($this->orderBy) {
             case 'chrono_desc':
                 return $parent->getFirstChild('cvDatePublic desc');
                 break;
             case 'chrono_asc':
                 return $parent->getFirstChild('cvDatePublic asc');
                 break;
             case 'display_desc':
                 return $parent->getFirstChild('cDisplayOrder asc');
                 break;
             case 'display_asc':
             default:
                 return $parent->getFirstChild('cDisplayOrder desc');
                 break;
         }
     }
     return $page;
 }
 public function getResponseObject()
 {
     return parent::getResponseObject();
 }