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

use 
Config;
use 
Core;
use 
Database;
use 
File;
use 
Page;
use 
URL;
use 
Localization;
use 
User as ConcreteUser;
use 
Permissions;
use 
Session;

class 
Dashboard
{


    
/**
     * Checks to see if a user has access to the C5 dashboard.
     * @return bool
     */
    
public function canRead()
    {
        
$c Page::getByPath('/dashboard''ACTIVE');
        
$cp = new Permissions($c);
        return 
$cp->canViewPage();
    }


    
/**
     * @return bool
     */
    
public function canAccessComposer()
    {
        
$c Page::getByPath('/dashboard/composer''ACTIVE');
        
$cp = new Permissions($c);
        return 
$cp->canViewPage();
    }

    
/**
     * Test if the current path is within the dashboard.
     * Optionally, a Page or path can be passed to test.
     *
     * @param  bool|ConcreteCorePagePage|string $page (optional)
     * @return bool
     */
    
public function inDashboard($page false)
    {
        
$path "";
        if (
$page instanceof Page && !$page->isError()) {
            
$path $page->getCollectionPath();
        } elseif (
is_string($page)) {
            
$path $page;
        } else {
            
$page Page::getCurrentPage();
            if (
$page instanceof Page && !$page->isError()) {
                
$path $page->getCollectionPath();
            }
        }
        return 
strpos($path'/dashboard') === 0;
    }

    
/**
     * @deprecated
     */
    
public function getDashboardPaneFooterWrapper($includeDefaultBody true)
    {
        return;
    }

    
/**
     * @deprecated
     */
    
public function getDashboardPaneHeaderWrapper($title false$help false$span 'span12'$includeDefaultBody true$navigatePages = array(), $upToPage false$favorites true)
    {
        return;
    }

    
/**
     * @param bool $title
     * @param bool $help
     * @param array $navigatePages
     * @param bool $upToPage
     * @param bool $favorites
     * @return string
     */
    
public function getDashboardPaneHeader($title false$help false$navigatePages = array(), $upToPage false$favorites true)
    {
        
$c Page::getCurrentPage();
        
$vt Core::make('helper/validation/token');
        
$token $vt->generate('access_quick_nav');

        
$nh Core::make('helper/navigation');
        
$trail $nh->getTrailToCollection($c);
        if (
count($trail) > || count($navigatePages) > || is_object($upToPage)) {
            
$parent Page::getByID($c->getCollectionParentID());
            if (
count($trail) > && (!is_object($upToPage))) {
                
$upToPage Page::getByID($parent->getCollectionParentID());
            }
            
$subpages = array();
            if (
$navigatePages !== -1) {
                if (
count($navigatePages) > 0) {
                    
$subpages $navigatePages;
                } else {
                    
/**
                     * @var ConcreteCorePagePage[] $subpages
                     */
                    
$subpages ConcreteBlockAutonavController::getChildPages($parent);
                }
            }

            
$subpagesP = array();
            if (
is_array($subpages)) {
                foreach (
$subpages as $sc) {
                    
$cp = new Permissions($sc);
                    if (
$cp->canViewPage()) {
                        
$subpagesP[] = $sc;
                    }
                }
            }

            if (
count($subpagesP) > || is_object($upToPage)) {
                
$relatedPages '<ul id="ccm-page-navigate-pages-content" class="dropdown-menu">';

                foreach (
$subpagesP as $sc) {
                    if (
$sc->getAttribute('exclude_nav')) {
                        continue;
                    }

                    if (
$c->getCollectionPath() == $sc->getCollectionPath() || (strpos($c->getCollectionPath(), $sc->getCollectionPath()) == 0) && strpos($c->getCollectionPath(), $sc->getCollectionPath()) !== false) {
                        
$class'nav-selected';
                    } else {
                        
$class '';
                    }

                    
$relatedPages .= '<li class="' $class '"><a href="' $nh->getLinkToCollection($sc) . '">' t($sc->getCollectionName()) . '</a></li>';
                }

                if (
$upToPage) {
                    
$relatedPages .= '<li class="ccm-menu-separator"></li>';
                    
$relatedPages .= '<li><a href="' $nh->getLinkToCollection($upToPage) . '">' t('&lt; Back to %s't($upToPage->getCollectionName())) . '</a></li>';
                }
                
$relatedPages .= '</ul>';
                
$navigateTitle t($parent->getCollectionName());
            }
        }


        
$html '<div class="ccm-pane-header">';

        
/*$class = 'icon-star';
        $qn = ConcreteDashboardMenu::getMine();
        $quicknav = $qn->getItems(false);
        if (in_array($c->getCollectionPath(), $quicknav)) {
            $class = 'icon-white icon-star';
        }
        */
        
$html .= '<ul class="ccm-pane-header-icons">';
        if (!
$help) {
            
$ih Core::make('helper/concrete/ui/help');
            
$pageHelp $ih->getPages();
            if (isset(
$pageHelp[$c->getCollectionPath()])) {
                
$help $pageHelp[$c->getCollectionPath()];
            }
        }

        if (
is_array($help)) {
            
$help $help[0] . '<br/><br/><a href="' $help[1] . '" class="btn small" target="_blank">' t('Learn More') . '</a>';
        }

        if (isset(
$relatedPages)) {
            
$html .= '<li><a href="" data-toggle="dropdown" title="' $navigateTitle '" id="ccm-page-navigate-pages"><i class="icon-share-alt"></i></a>' $relatedPages '</li>';
        }

        if (
$help) {
            
$html .= '<li><span style="display: none" id="ccm-page-help-content">' $help '</span><a href="javascript:void(0)" title="' t('Help') . '" id="ccm-page-help"><i class="icon-question-sign"></i></a></li>';
        }

        if (
$favorites) {
        
$html .= '<li><a href="javascript:void(0)" id="ccm-add-to-quick-nav" onclick="CCMDashboard.toggleQuickNav(' $c->getCollectionID() . ','' . $token . '')"><i class="' $class '"></i></a></li>';
        }

        
$html .= '<li><a href="javascript:void(0)" onclick="CCMDashboard.closePane(this)"><i class="icon-remove"></i></a></li>';
        
$html .= '</ul>';
        if (!
$title) {
            
$title $c->getCollectionName();
        }
        
$html .= '<h3>' $title '</h3>';
        
$html .= '</div>';
        return 
$html;
    }

    
/**
     * @return stdClass
     */
    
public function getDashboardBackgroundImage()
    {
        
// this feed is an array of standard PHP objects with a SRC, a caption, and a URL
        // allow for a custom white-label feed
        
$filename date('Ymd') . '.jpg';
        
$obj = new stdClass;
        
$obj->checkData false;
        
$obj->displayCaption false;
        
$image '';

        if (
Config::get('concrete.white_label.dashboard_background')) {
            
$image Config::get('concrete.white_label.dashboard_background');
            if (
$image == 'none') {
                
$image '';
            }
        } else {
            
$obj->checkData true;
            
$imageSetting Config::get('concrete.misc.dashboard_background_image');
            if (
$imageSetting == 'custom') {
                
$fo File::getByID(Config::get('concrete.misc.dashboard_background_image_fid'));
                if (
is_object($fo)) {
                    
$image $fo->getRelativePath();
                }
            } elseif (
$imageSetting == 'none') {
                
$image '';
            } else {
                if (isset(
$_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on')) {
                    
$image Config::get('concrete.urls.background_feed_secure') . '/' $filename;
                } else {
                    
$image Config::get('concrete.urls.background_feed') . '/' $filename;
                }
                
$obj->displayCaption true;
            }
        }
        
$obj->filename $filename;
        
$obj->image $image;
        return 
$obj;
    }

    
/**
     * @return mixed
     */
    
public function getIntelligentSearchMenu()
    {
        
$dashboardMenus Session::get('dashboardMenus', array());
        
$dashboardMenusKey Localization::activeLocale();
        if (
array_key_exists($dashboardMenusKey$dashboardMenus)) {
            return 
$dashboardMenus[$dashboardMenusKey];
        }

        
ob_start(); ?>
            <div id="ccm-intelligent-search-results">
            <?php
            $page 
Page::getByPath('/dashboard');
            
$children $page->getCollectionChildrenArray(true);
            
$navHelper Core::make('helper/navigation');

            
$packagepages = array();
            
$corepages = array();
            foreach (
$children as $ch) {
                
$page Page::getByID($ch);
                
$pageP = new Permissions($page);
                if (
$pageP->canRead()) {
                    if (!
$page->getAttribute("exclude_nav")) {
                        if (
$page->getPackageID() > 0) {
                            
$packagepages[] = $page;
                        } else {
                            
$corepages[] = $page;
                        }
                    }
                } else {
                    continue;
                }

                if (
$page->getAttribute('exclude_search_index')) {
                    continue;
                }

                if (
$page->getCollectionPath() == '/dashboard/system') {
                    
$ch2 $page->getCollectionChildrenArray();
                } else {
                    
$ch2 $page->getCollectionChildrenArray(true);
                }
                
?>

                <div class="ccm-intelligent-search-results-module ccm-intelligent-search-results-module-onsite">

                <h1><?php echo t($page->getCollectionName())?></h1>


                <ul class="ccm-intelligent-search-results-list">
                <?php
                
if (count($ch2) == 0) {
                    
?>
                    <li><a href="<?php echo $navHelper->getLinkTocollection($page)?>"><?php echo t($page->getCollectionName())?></a><span><?php echo t($page->getCollectionName())?> <?php echo t($page->getAttribute('meta_keywords'))?></span></li>
                    <?php
                
}
                
?>

                <?php
                
if ($page->getCollectionPath() == '/dashboard/system') {
                    
?>
                    <li><a href="<?php echo $navHelper->getLinkTocollection($page)?>"><?php echo t('View All')?></a><span><?php echo t($page->getCollectionName())?> <?php echo t($page->getAttribute('meta_keywords'))?></span></li>
                    <?php
                
}

                foreach (
$ch2 as $chi) {
                    
$subpage Page::getByID($chi);
                    
$subpageP = new Permissions($subpage);
                    if (!
$subpageP->canRead()) {
                        continue;
                    }

                    if (
$subpage->getAttribute('exclude_search_index')) {
                        continue;
                    }

                    
?>
                    <li><a href="<?php echo $navHelper->getLinkTocollection($subpage)?>"><?php echo t($subpage->getCollectionName())?></a><span><?php if ($page->getCollectionPath() != '/dashboard/system') { ?><?php echo t($page->getCollectionName())?> <?php echo t($page->getAttribute('meta_keywords'))?> <?php ?><?php echo t($subpage->getCollectionName())?> <?php echo t($subpage->getAttribute('meta_keywords'))?></span></li>
                    <?php
                
}
                
?>
                </ul>

                </div>
                <?php
            
}

            
$custHome Page::getByPath('/dashboard/home');
            
$custHomeP = new Permissions($custHome);
            if (
$custHomeP->canRead()) {
            
?>

            <div class="ccm-intelligent-search-results-module ccm-intelligent-search-results-module-onsite">

            <h1><?php echo t('Dashboard Home')?></h1>


            <ul class="ccm-intelligent-search-results-list">
                <li><a href="<?php echo URL::to('/dashboard/home')?>"><?php echo t('Customize')?> <span><?php echo t('Customize Dashboard Home')?></span></a></li>
            </ul>

            </div>

            <?php
            
}
            
?>

            <div class="ccm-intelligent-search-results-module">
            <h1><?php echo t('Your Site')?></h1>
            <div class="loader">
                <div class="dot dot1"></div>
                <div class="dot dot2"></div>
                <div class="dot dot3"></div>
                <div class="dot dot4"></div>
            </div>
            <ul class="ccm-intelligent-search-results-list" id="ccm-intelligent-search-results-list-your-site">
            </ul>
            </div>

            <?php if (Config::get('concrete.external.intelligent_search_help')) {
                
?>
            <div class="ccm-intelligent-search-results-module ccm-intelligent-search-results-module-offsite">
            <h1><?php echo t('Help')?></h1>
            <div class="loader">
                <div class="dot dot1"></div>
                <div class="dot dot2"></div>
                <div class="dot dot3"></div>
                <div class="dot dot4"></div>
            </div>
            <ul class="ccm-intelligent-search-results-list" id="ccm-intelligent-search-results-list-help">
            </ul>
            </div>
            <?php
            
}
            
?>

            <?php if (Config::get('concrete.marketplace.intelligent_search')) {
                
?>
            <div class="ccm-intelligent-search-results-module ccm-intelligent-search-results-module-offsite">
            <h1><?php echo t('Add-Ons')?></h1>
            <div class="loader">
                <div class="dot dot1"></div>
                <div class="dot dot2"></div>
                <div class="dot dot3"></div>
                <div class="dot dot4"></div>
            </div>
            <ul class="ccm-intelligent-search-results-list" id="ccm-intelligent-search-results-list-marketplace">
            </ul>
            </div>
            <?php
            
}
            
?>
        </div>

        <?php
        $html 
ob_get_contents();
        
ob_end_clean();
        
$dashboardMenus[$dashboardMenusKey] = str_replace(array("n""r""t"), ""$html);
        
Session::set('dashboardMenus'$dashboardMenus);
        return 
$dashboardMenus[$dashboardMenusKey];
    }



}


class 
DashboardMenu
{

    
/**
     * @var ConcreteCorePagePage[]
     */
    
protected $items;

    
/**
     * @param bool $sort
     * @return array
     */
    
public function getItems($sort true)
    {
        if (
$sort) {
            
usort($this->items, array('ConcreteCoreApplicationServiceDashboardMenu''sortItems'));
        }
        return 
$this->items;
    }

    
/**
     * @param string $a
     * @param string $b
     * @return int
     */
    
protected static function sortItems($a$b)
    {
        
$subpatha substr($a11); // /dashboard
        
$subpathb substr($b11); // /dashboard
        
$segmentsa explode('/'$subpatha);
        
$segmentsb explode('/'$subpathb);
        
$segmenta substr($subpatha0strpos($subpatha'/'));
        
$segmentb substr($subpathb0strpos($subpathb'/'));
        if (
count($segmentsa) == && count($segmentsb) == 3) {
            
$subpatha $segmenta[0] . '/' $segmenta[1];
            
$subpathb $segmentb[0] . '/' $segmentb[1];
            
$segmenta .= '/' $segmentsa[1];
            
$segmentb .= '/' $segmentsb[1];

        }

        if (!
$segmenta) {
            
$segmenta $subpatha;
        }
        if (!
$segmentb) {
            
$segmentb $subpathb;
        }
        
$db Database::connection();
        
$displayorderA intval($db->GetOne('select cDisplayOrder from Pages p inner join PagePaths cp on p.cID = cp.cID where cPath = ?', array('/dashboard/' $segmenta)));
        
$displayorderB intval($db->GetOne('select cDisplayOrder from Pages p inner join PagePaths cp on p.cID = cp.cID where cPath = ?', array('/dashboard/' $segmentb)));

        if (
$displayorderA $displayorderB) {
            return 
1;
        } else if (
$displayorderA $displayorderB) {
            return -
1;
        } else {
            
$displayorderA intval($db->GetOne('select cDisplayOrder from Pages p inner join PagePaths cp on p.cID = cp.cID where cPath = ?', array('/dashboard/' $subpatha)));
            
$displayorderB intval($db->GetOne('select cDisplayOrder from Pages p inner join PagePaths cp on p.cID = cp.cID where cPath = ?', array('/dashboard/' $subpathb)));
            if (
$displayorderA $displayorderB) {
                return 
1;
            } else if (
$displayorderA $displayorderB) {
                return -
1;
            }
        }
    }

    
/**
     * @param ConcreteCorePagePage $c
     * @return bool
     */
    
public function contains($c)
    {
        return 
in_array($c->getCollectionPath(), $this->items);
    }

    
/**
     * @param ConcreteCorePagePage $c
     */
    
public function add($c)
    {
        
$this->items[] = $c->getCollectionPath();
    }

    
/**
     * @param ConcreteCorePagePage $c
     */
    
public function remove($c)
    {
        unset(
$this->items[array_search($c->getCollectionPath(), $this->items)]);
    }

    
/**
     * @return DashboardMenu
     */
    
public static function getMine()
    {
        
$u = new ConcreteUser();
        
$qn unserialize($u->config('QUICK_NAV_BOOKMARKS'));
        if (
is_object($qn)) {
            return 
$qn;
        }
        
$qn = new DashboardMenu();
        
$qnx = new DefaultDashboardMenu();
        
$qn->items $qnx->items;
        return 
$qn;
    }


}

class 
DefaultDashboardMenu extends DashboardMenu
{

    
/**
     * @var array
     */
    
public $items = array(
        
'/dashboard/composer/write',
        
'/dashboard/composer/drafts',
        
'/dashboard/sitemap/full',
        
'/dashboard/sitemap/search',
        
'/dashboard/files/search',
        
'/dashboard/files/sets',
        
'/dashboard/reports/statistics',
        
'/dashboard/reports/forms'
    
);

}
Онлайн: 1
Реклама