Вход Регистрация
Файл: concrete5.7.5.6/concrete/controllers/single_page/dashboard/blocks/stacks.php
Строк: 291
<?php
namespace ConcreteControllerSinglePageDashboardBlocks;
use 
ConcreteCoreMultilingualPageSectionSection;
use 
ConcreteCorePageCollectionVersionVersion;
use 
ConcreteCorePageControllerDashboardPageController;
use 
ConcreteCorePageStackStackCategory;
use 
Config;
use 
ConcreteCorePageStackStackList;
use 
Stack;
use 
Page;
use 
Permissions;
use 
Loader;
use 
User;
use 
ConcreteCoreWorkflowRequestDeletePageRequest;
use 
ConcreteCoreWorkflowRequestApproveStackRequest;
use 
View;
use 
Exception;
use 
Redirect;
use 
Core;

class 
Stacks extends DashboardPageController {

    protected 
$multilingualSections = array();

    public function 
on_start()
    {
        
parent::on_start();
        if (
Core::make('multilingual/detector')->isEnabled()) {
            
$list = array();
            
$this->multilingualSections Section::getList();
            
$this->set('multilingualSections'$this->multilingualSections);
            
$this->set('defaultLanguage'$this->getSelectedLanguage());
        }
    }

    protected function 
getSelectedLanguage()
    {
        
$defaultLanguage false;
        
$defaultLocale Config::get('concrete.multilingual.default_locale');
        if (!
$defaultLocale) {
            throw new 
Exception(t('You must specify a default language tree in your multilingual settings.'));
        }
        foreach(
$this->multilingualSections as $section) {
            if (
$section->getLocale() == $defaultLocale) {
                
$defaultLanguage $section;
            }
        }
        
$session Core::make('session');
        if (
$session->has('stacksDefaultLanguageID')) {
            
$section Section::getByID($session->get('stacksDefaultLanguageID'));
            if (
is_object($section)) {
                
$defaultLanguage $section;
            }
        }
        return 
$defaultLanguage;
    }

    public function 
set_default_language($language null$action null)
    {
        
$session Core::make('session');
        
$session->set('stacksDefaultLanguageID'$language);
        if (
$action == 'view_global_areas') {
            
$this->redirect('/dashboard/blocks/stacks''view_global_areas');
        } else {
            
$this->redirect('/dashboard/blocks/stacks');
        }
    }

    public function 
view_global_areas()
    {
        
$stm = new StackList();
        
$stm->filterByGlobalAreas();
        
$this->setupMultilingualStackList($stm);
        
$this->set('stacks'$stm->get());
    }

    protected function 
setupMultilingualStackList(ConcreteCorePageStackStackList $list)
    {
        if (
Core::make('multilingual/detector')->isEnabled()) {
            
$category StackCategory::getCategoryFromMultilingualSection($this->getSelectedLanguage());
            if (!
is_object($category)) {
                
// we have to create the category
                
$category StackCategory::createFromMultilingualSection($this->getSelectedLanguage());
                
// now we copy all the stacks into it
                
$default StackCategory::getFromDefaultMultilingualSection();
                
$default->copyToTargetCategory($category);
            }
            
$list->filterByStackCategory($category);
        }
    }

    public function 
view() {
        
$stm = new StackList();
        
$stm->filterByUserAdded();
        
$this->setupMultilingualStackList($stm);
        
$this->set('stacks'$stm->get());

        
$parent Page::getByPath(STACKS_PAGE_PATH);
        
$cpc = new Permissions($parent);
        if (
$cpc->canMoveOrCopyPage()) {
            
$this->set('canMoveStacks'true);
            
$sortUrl View::url('/dashboard/blocks/stacks''update_order');
            
$this->set('sortURL'$sortUrl);
        }
    }

    public function 
add_stack() {
        if (
Loader::helper('validation/token')->validate('add_stack')) {
            if (
Loader::helper('validation/strings')->notempty($this->post('stackName')))  {
                
$stack Stack::addStack($this->post('stackName'));
                
$this->redirect('/dashboard/blocks/stacks''view_details'$stack->getCollectionID(), 'stack_added');
            } else {
                
$this->error->add(t("You must give your stack a name."));
            }
        } else {
            
$this->error->add(Loader::helper('validation/token')->getErrorMessage());
        }
    }

    public function 
stack_deleted() {
        
$this->set('message't('Stack deleted successfully'));
        
$this->view();
    }

    public function 
delete_stack() {
        if (
Loader::helper('validation/token')->validate('delete_stack')) {
            
$s Stack::getByID($_REQUEST['stackID']);
            if (
is_object($s)) {
                
$sps = new Permissions($s);
                if (
$sps->canDeletePage()) {
                    
$u = new User();
                    
$pkr = new DeletePageRequest();
                    
$pkr->setRequestedPage($s);
                    
$pkr->setRequesterUserID($u->getUserID());
                    
$response $pkr->trigger();
                    if (
$response instanceof ConcreteCoreWorkflowProgressResponse) {
                        
// we only get this response if we have skipped workflows and jumped straight in to an approve() step.
                        
$this->redirect('/dashboard/blocks/stacks''stack_deleted');
                    } else {
                        
$this->redirect('/dashboard/blocks/stacks''view_details'$s->cID'delete_saved');
                    }
                } else {
                    
$this->error->add(t('You do not have access to delete this stack.'));
                }
            } else {
                
$this->error->add(t('Invalid stack'));
            }
        } else {
            
$this->error->add(Loader::helper('validation/token')->getErrorMessage());
        }
    }


    public function 
approve_stack($stackID false$token false) {
        if (
Loader::helper('validation/token')->validate('approve_stack'$token)) {
            
$s Stack::getByID($stackID);
            if (
is_object($s)) {
                
$sps = new Permissions($s);
                if (
$sps->canApprovePageVersions()) {
                    
$u = new User();
                    
$v Version::get($s'RECENT');
                    
$pkr = new ApproveStackRequest();
                    
$pkr->setRequestedPage($s);
                    
$pkr->setRequestedVersionID($v->getVersionID());
                    
$pkr->setRequesterUserID($u->getUserID());
                    
$response $pkr->trigger();
                    if (
$response instanceof ConcreteCoreWorkflowProgressResponse) {
                        
// we only get this response if we have skipped workflows and jumped straight in to an approve() step.
                        
$this->redirect('/dashboard/blocks/stacks''view_details'$stackID'stack_approved');
                    } else {
                        
$this->redirect('/dashboard/blocks/stacks''view_details'$stackID'approve_saved');
                    }
                } else {
                    
$this->error->add(t('You do not have access to approve this stack.'));
                }
            } else {
                
$this->error->add(t('Invalid stack'));
            }
        } else {
            
$this->error->add(Loader::helper('validation/token')->getErrorMessage());
        }
    }

    public function 
view_details($cID$msg false) {
        
$s Stack::getByID($cID);
        if (
is_object($s)) {
            
$blocks $s->getBlocks('Main');
            
$view View::getInstance();
            foreach(
$blocks as $b1) {
                
$btc $b1->getInstance();
                
// now we inject any custom template CSS and JavaScript into the header
                
if ($btc instanceof ConcreteCoreBlockBlockController) {
                    
$btc->outputAutoHeaderItems();
                }
                
$btc->runTask('on_page_view', array($view));
            }
            
$this->addHeaderItem($s->outputCustomStyleHeaderItems(true));

            
$this->set('stack'$s);
            
$this->set('blocks'$blocks);
            switch(
$msg) {
                case 
'stack_added':
                    
$this->set('message't('Stack added successfully.'));
                    break;
                case 
'stack_approved':
                    
$this->set('message't('Stack approved successfully'));
                    break;
                case 
'approve_saved':
                    
$this->set('message't('Approve request saved. You must complete the approval workflow before these changes are publicly accessible.'));
                    break;
                case 
'delete_saved':
                    
$this->set('message't('Delete request saved. You must complete the delete workflow before this stack can be deleted.'));
                    break;
                case 
'rename_saved':
                    
$this->set('message't('Rename request saved. You must complete the approval workflow before the name of the stack will be updated.'));
                    break;
            }
        } else {
            throw new 
Exception(t('Invalid stack'));
        }
    }

    public function 
rename($cID) {
        
$s Stack::getByID($cID);
        if (
is_object($s)) {
            
$this->set('stack'$s);
        } else {
            throw new 
Exception(t('Invalid stack'));
        }
        
$sps = new Permissions($s);
        if (!
$sps->canEditPageProperties()) {
            
$this->redirect('/dashboard/blocks/stacks''view_details'$cID);
        }

        if (
$this->isPost()) {
            if (
Loader::helper('validation/token')->validate('rename_stack')) {
                if (
Loader::helper('validation/strings')->notempty($stackName trim($this->post('stackName')))) {
                    
$txt Loader::helper('text');
                    
$v $s->getVersionToModify();
                    
$v->update(array(
                        
'cName' => $stackName,
                        
'cHandle' => str_replace('-'Config::get('concrete.seo.page_path_separator'), $txt->urlify($stackName))
                    ));

                    
$u = new User();
                    
$pkr = new ApproveStackRequest();
                    
$pkr->setRequestedPage($s);
                    
$pkr->setRequestedVersionID($v->getVersionID());
                    
$pkr->setRequesterUserID($u->getUserID());
                    
$response $pkr->trigger();
                    if (
$response instanceof ConcreteCoreWorkflowProgressResponse) {
                        
// we only get this response if we have skipped workflows and jumped straight in to an approve() step.
                        
$this->redirect('/dashboard/blocks/stacks''stack_renamed'$cID);
                    } else {
                        
$this->redirect('/dashboard/blocks/stacks''view_details'$cID'rename_saved');
                    }
                } else {
                    
$this->error->add(t("The stack name cannot be empty."));
                }
            } else {
                
$this->error->add(Loader::helper('validation/token')->getErrorMessage());
            }
        }
    }

    public function 
stack_renamed($cID) {
        
$this->set('message't('Stack renamed successfully'));
        
$this->view_details($cID);
        
$this->action 'view_details';
    }

    public function 
duplicate($cID) {
        
$s Stack::getByID($cID);
        if (
is_object($s)) {
            
$this->set('stack'$s);
        } else {
            throw new 
Exception(t('Invalid stack'));
        }
        
$sps = new Permissions($s);
        if (!
$sps->canMoveOrCopyPage()) {
            
$this->redirect('/dashboard/blocks/stacks''view_details'$cID);
        }

        if (
$this->isPost()) {
            if (
Loader::helper('validation/token')->validate('duplicate_stack')) {
                if (
Loader::helper('validation/strings')->notempty($stackName trim($this->post('stackName'))))  {
                    
$ns $s->duplicate();
                    
$ns->update(array(
                        
'stackName' => $stackName
                    
));

                    
$this->redirect('/dashboard/blocks/stacks''stack_duplicated');
                } else {
                    
$this->error->add(t("You must give your stack a name."));
                }
            } else {
                
$this->error->add(Loader::helper('validation/token')->getErrorMessage());
            }
            
$name trim($this->post('name'));
        }
    }

    public function 
stack_duplicated() {
        
$this->set('message't('Stack duplicated successfully'));
        
$this->view();
    }

    public function 
update_order() {
        
$ret = array('success' => false'message' => t("Error"));
        if (
$this->isPost() && is_array($stIDs $this->post('stID'))) {
            
$parent Page::getByPath(STACKS_PAGE_PATH);
            
$cpc = new Permissions($parent);
            if (
$cpc->canMoveOrCopyPage()) {
                foreach(
$stIDs as $displayOrder => $cID) {
                    
$c Page::getByID($cID);
                    
$c->updateDisplayOrder($displayOrder$cID);
                }
                
$ret['success'] = true;
                
$ret['message'] = t("Stack order updated successfully.");
            }
        }
        echo 
Loader::helper('json')->encode($ret);
        exit;
    }

    public function 
list_page() {
        return 
Redirect::to('/');
    }

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