Esempio n. 1
0
 /**
  * Determines whether a page should be accepted when iterating
  *
  * Default listener may be 'overridden' by attaching listener to 'isAllowed'
  * method. Listener must be 'short circuited' if overriding default ACL
  * listener.
  *
  * Rules:
  * - If a page is not visible it is not accepted, unless RenderInvisible has
  *   been set to true
  * - If $useAcl is true (default is true):
  *      - Page is accepted if listener returns true, otherwise false
  * - If page is accepted and $recursive is true, the page
  *   will not be accepted if it is the descendant of a non-accepted page
  *
  * @param   AbstractPage    $page       page to check
  * @param   bool            $recursive  [optional] if true, page will not be
  *                                      accepted if it is the descendant of
  *                                      a page that is not accepted. Default
  *                                      is true
  *
  * @return  bool                        Whether page should be accepted
  */
 public function accept(AbstractPage $page, $recursive = true)
 {
     $accept = true;
     if (!$page->isVisible(false) && !$this->getRenderInvisible()) {
         $accept = false;
     } elseif ($this->getUseAcl()) {
         $acl = $this->getAcl();
         $role = $this->getRole();
         $params = ['acl' => $acl, 'page' => $page, 'role' => $role];
         $accept = $this->isAllowed($params);
     }
     if ($accept && $recursive) {
         $parent = $page->getParent();
         if ($parent instanceof AbstractPage) {
             $accept = $this->accept($parent, true);
         }
     }
     return $accept;
 }
Esempio n. 2
0
 /**
  * Returns the root container of the given page
  *
  * When rendering a container, the render method still store the given
  * container as the root container, and unset it when done rendering. This
  * makes sure finder methods will not traverse above the container given
  * to the render method.
  *
  * @param  AbstractPage $page
  * @return AbstractContainer
  */
 protected function findRoot(AbstractPage $page)
 {
     if ($this->root) {
         return $this->root;
     }
     $root = $page;
     while ($parent = $page->getParent()) {
         $root = $parent;
         if ($parent instanceof AbstractPage) {
             $page = $parent;
         } else {
             break;
         }
     }
     return $root;
 }