Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Application/Service/Dashboard/Sitemap.php
Строк: 322
<?php
namespace ConcreteCoreApplicationServiceDashboard;

use 
Config;
use 
PageList;
use 
TaskPermission;
use 
Cookie;
use 
stdClass;
use 
Permissions;
use 
Page;
use 
PermissionKey;

class 
Sitemap
{
    
/**
     * @var bool
     */
    
protected $expandedNodes = array();
    
/**
     * @var bool
     */
    
protected $displayNodePagination false;
    
/**
     * @var bool
     */
    
protected $includeSystemPages;

    
/**
     * @param bool $autoOpen
     */
    
public function setExpandedNodes($nodes)
    {
        
$this->expandedNodes $nodes;
    }

    
/**
     * @return bool
     */
    
public function includeSystemPages()
    {
        if (!isset(
$this->includeSystemPages)) {
            
$this->includeSystemPages Cookie::get('includeSystemPages');
        }

        return 
$this->includeSystemPages;
    }

    
/**
     * @param bool $systemPages
     */
    
public function setIncludeSystemPages($systemPages)
    {
        
$this->includeSystemPages $systemPages;
        
Cookie::set('includeSystemPages'$systemPages);
    }

    
/**
     * @param bool $paginate
     */
    
public function setDisplayNodePagination($paginate)
    {
        
$this->displayNodePagination $paginate;
    }

    
/**
     * @param int $cID
     *
     * @return array
     */
    
public function getSubNodes($cID$onGetNode null)
    {
        
$pl = new PageList();
        
$pl->setPermissionsChecker(function ($page) {
            
$cp = new Permissions($page);

            return 
$cp->canViewPageInSitemap();
        });
        
$pl->includeAliases();
        
$pl->sortByDisplayOrder();
        if (
$this->includeSystemPages()) {
            
$pl->includeSystemPages();
            
$pl->includeInactivePages();
        }
        
$pl->filterByParentID($cID);
        
$pl->setPageVersionToRetrieve(ConcreteCorePagePageList::PAGE_VERSION_RECENT);

        if (
$cID == 1) {
            
$results $pl->getResults();
            
$pagination null;
        } else {
            
$pl->setItemsPerPage(Config::get('concrete.limits.sitemap_pages'));
            
$pagination $pl->getPagination();
            
$total $pagination->getTotalResults();
            
$results $pagination->getCurrentPageResults();
        }

        
$nodes = array();
        foreach (
$results as $c) {
            
$n $this->getNode($ctrue$onGetNode);
            if (
$n != false) {
                
$nodes[] = $n;
            }
        }
        if (
is_object($pagination) && $pagination->getNbPages() > 1) {
            if (
$this->displayNodePagination && isset($pagination)) {
                
$n = new stdClass();
                
$n->icon false;
                
$n->addClass 'ccm-sitemap-explore';
                
$n->noLink true;
                
$n->unselectable true;
                
$html $pagination->renderView('dashboard');
                
$n->title $html;
                
$nodes[] = $n;
            } else {
                
$n = new stdClass();
                
$n->icon false;
                
$n->addClass 'ccm-sitemap-explore';
                
$n->noLink true;
                
$n->active false;
                
$n->focus false;
                
$n->unselectable true;
                
$n->title ' ' t('%s more to display. <strong>View all &gt;</strong>'$total Config::get('concrete.limits.sitemap_pages'));
                
$n->href = (string) URL::to('/dashboard/sitemap/explore/'$cID);
                
$nodes[] = $n;
            }
        }

        return 
$nodes;
    }

    
/**
     * @param ConcreteCorePagePage|int $cItem
     * @param bool $includeChildren
     *
     * @return stdClass
     */
    
public function getNode($cItem$includeChildren true$onGetNode null)
    {
        if (!
is_object($cItem)) {
            
$cID $cItem;
            
$c Page::getByID($cID'RECENT');
        } else {
            
$cID $cItem->getCollectionID();
            
$c $cItem;
        }

        
$cp = new Permissions($c);
        
$canEditPageProperties $cp->canEditPageProperties();
        
$canEditPageSpeedSettings $cp->canEditPageSpeedSettings();
        
$canEditPagePermissions $cp->canEditPagePermissions();
        
$canEditPageDesign = ($cp->canEditPageTheme() || $cp->canEditPageTemplate());
        
$canEditPageType $cp->canEditPageType();
        
$canViewPageVersions $cp->canViewPageVersions();
        
$canDeletePage $cp->canDeletePage();
        
$canAddSubpages $cp->canAddSubpage();
        
$canAddExternalLinks $cp->canAddExternalLink();

        
$nodeOpen false;
        if (
in_array($cID$this->expandedNodes)) {
            
$nodeOpen true;
        }

        
$numSubpages = ($c->getNumChildren()  > 0) ? $c->getNumChildren()  : '';

        
$cvName = ($c->getCollectionName()) ? $c->getCollectionName() : '(No Title)';
        
$cvName = ($c->isSystemPage() || $cID == 1) ? t($cvName) : $cvName;

        
$isInTrash $c->isInTrash();

        
$isTrash $c->getCollectionPath() == Config::get('concrete.paths.trash');
        if (
$isTrash || $isInTrash) {
            
$pk PermissionKey::getByHandle('empty_trash');
            if (!
$pk->validate()) {
                return 
false;
            }
        }

        if (
$c->getAttribute('icon_dashboard')) {
            
$cIconClass $c->getAttribute('icon_dashboard'); // use markup with custom class name rather than image
        
} else {
            
$cIcon $c->getCollectionIcon();
            if (!
$cIcon) {
                if (
$cID == 1) {
                    
$cIconClass 'fa fa-home';
                } elseif (
$numSubpages 0) {
                    
$cIconClass 'fa fa-folder-o';
                } else {
                    
$cIconClass 'fa fa-file-o';
                }
            }
        }

        
$cAlias $c->isAlias();
        
$cPointerID $c->getCollectionPointerID();
        if (
$cAlias) {
            if (
$cPointerID 0) {
                
$cIconClass 'fa fa-sign-in';
                
$cAlias 'POINTER';
                
$cID $c->getCollectionPointerOriginalID();
            } else {
                
$cIconClass 'fa fa-sign-out';
                
$cAlias 'LINK';
            }
        }

        
/*
        $node = array(
            'cIcon' => $cIcon,
            'cAlias' => $cAlias,
            'numSubpages'=> $numSubpages,
        );

        */

        
$node = new stdClass();
        
$node->title $cvName;
        
$node->link $c->getCollectionLink();
        if (
$numSubpages 0) {
            
$node->isLazy true;
        }
        if (
$cIconClass) {
            
$node->iconClass $cIconClass;
        } else {
            
$node->icon $cIcon;
        }
        if (
$cID == HOME_CID) {
            
$node->addClass 'ccm-page-home';
        }
        if (
$nodeOpen) {
            
$node->expand true;
        }
        
$node->cAlias $cAlias;
        
$node->isInTrash $isInTrash;
        
$node->numSubpages $numSubpages;
        
$node->isTrash $isTrash;
        
$node->cID $cID;
        
$node->key $cID;
        
$node->ptID $c->getPageTypeID();
        
$node->canEditPageProperties $canEditPageProperties;
        
$node->canEditPageSpeedSettings $canEditPageSpeedSettings;
        
$node->canEditPagePermissions $canEditPagePermissions;
        
$node->canEditPageDesign $canEditPageDesign;
        
$node->canEditPageType $canEditPageType;
        
$node->canViewPageVersions $canViewPageVersions;
        
$node->canDeletePage $canDeletePage;
        
$node->canAddSubpages $canAddSubpages;
        
$node->canAddExternalLinks $canAddExternalLinks;

        if (
$includeChildren && ($cID == || $nodeOpen)) {
            
// We open another level
            
$node->children $this->getSubNodes($cID$onGetNode);
        }

        if (
$onGetNode instanceof Closure) {
            
$node $onGetNode($node);
        }

        return 
$node;
    }

    
/**
     * @return bool
     */
    
public function canRead()
    {
        
$tp = new TaskPermission();

        return 
$tp->canAccessSitemap();
    }
}
Онлайн: 1
Реклама