Вход Регистрация
Файл: concrete5.7.5.6/concrete/blocks/next_previous/controller.php
Строк: 238
<?php

namespace ConcreteBlockNextPrevious;

use 
Database;
use 
Permissions;
use 
Page;
use 
ConcreteCoreBlockBlockController;

class 
Controller extends BlockController
{
    protected 
$btTable 'btNextPrevious';
    protected 
$btInterfaceWidth "430";
    protected 
$btInterfaceHeight "400";
    protected 
$btCacheBlockRecord true;
    protected 
$btWrapperClass 'ccm-ui';
    
/**
     * Used for localization. If we want to localize the name/description we have to include this.
     */
    
public function getBlockTypeDescription()
    {
        return 
t("Navigate through sibling pages.");
    }

    public function 
getBlockTypeName()
    {
        return 
t("Next & Previous Nav");
    }

    public function 
getJavaScriptStrings()
    {
        return array();
    }

    public function 
save($args)
    {
        
$args += array(
            
'showArrows' => 0,
            
'loopSequence' => 0,
            
'excludeSystemPages' => 0,
        );

        
$args['showArrows'] = intval($args['showArrows']);
        
$args['loopSequence'] = intval($args['loopSequence']);
        
$args['excludeSystemPages'] = intval($args['excludeSystemPages']);

        
parent::save($args);
    }

    public function 
view()
    {
        
$nextPage $this->getNextCollection();
        
$previousPage $this->getPreviousCollection();
        
$parentPage Page::getByID(Page::getCurrentPage()->getCollectionParentID());

        
$nextLinkText $this->nextLabel;
        
$previousLinkText $this->previousLabel;
        
$parentLinkText $this->parentLabel;

        
$this->set('nextCollection'$nextPage);
        
$this->set('previousCollection'$previousPage);
        
$this->set('parentCollection'$parentPage);

        
$this->set('nextLinkText'$nextLinkText);
        
$this->set('previousLinkText'$previousLinkText);
        
$this->set('parentLinkText'$parentLinkText);
    }

    public function 
getNextCollection()
    {
        
$page false;
        
$db Database::connection();
        
$systemPages '';
        if (
$this->excludeSystemPages) {
            
$systemPages 'and cIsSystemPage = 0';
        }
        
$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 = ? ' $systemPages ' order by cvDatePublic asc', array($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 = ? ' $systemPages ' order by cvDatePublic desc', array($currentPage->getCollectionDatePublic(), $currentPage->getCollectionParentID()));
                    break;
                case 
'display_desc':
                    
$cID $db->GetOne('select cID from Pages where cDisplayOrder < ? and cParentID = ? ' $systemPages ' order by cDisplayOrder desc', array($currentPage->getCollectionDisplayOrder(), $currentPage->getCollectionParentID()));
                    break;
                case 
'display_asc':
                default:
                    
$cID $db->GetOne('select cID from Pages where cDisplayOrder > ? and cParentID = ? ' $systemPages ' order by cDisplayOrder asc', array($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 null//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 asc'$this->excludeSystemPages);
                    break;
                case 
'chrono_asc':
                    return 
$parent->getFirstChild('cvDatePublic desc');
                    break;
                case 
'display_desc':
                    return 
$parent->getFirstChild('cDisplayOrder desc');
                    break;
                case 
'display_asc':
                default:
                    return 
$parent->getFirstChild('cDisplayOrder asc'$this->excludeSystemPages);
                    break;
            }
        }

        return 
$page;
    }

    public function 
getPreviousCollection()
    {
        
$page false;
        
$db Database::connection();
        
$systemPages '';
        if (
$this->excludeSystemPages) {
            
$systemPages 'and cIsSystemPage = 0';
        }
        
$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 = ? ' $systemPages ' order by cvDatePublic desc', array($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 = ? ' $systemPages ' order by cvDatePublic asc', array($currentPage->getCollectionDatePublic(), $currentPage->getCollectionParentID()));
                    break;
                case 
'display_desc':
                    
$cID $db->GetOne('select cID from Pages where cDisplayOrder > ? and cParentID = ? ' $systemPages ' order by cDisplayOrder asc', array($currentPage->getCollectionDisplayOrder(), $currentPage->getCollectionParentID()));
                    break;
                case 
'display_asc':
                default:
                    
$cID $db->GetOne('select cID from Pages where cDisplayOrder < ? and cParentID = ? ' $systemPages ' order by cDisplayOrder desc', array($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 null//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'$this->excludeSystemPages);
                    break;
                case 
'display_desc':
                    return 
$parent->getFirstChild('cDisplayOrder asc'$this->excludeSystemPages);
                    break;
                case 
'display_asc':
                default:
                    return 
$parent->getFirstChild('cDisplayOrder desc');
                    break;
            }
        }

        return 
$page;
    }
}
Онлайн: 2
Реклама