Вход Регистрация
Файл: concrete5.7.5.6/concrete/controllers/panel/page/design/customize.php
Строк: 138
<?php
namespace ConcreteControllerPanelPageDesign;

use 
ConcreteControllerBackendUserInterfacePage as BackendInterfacePageController;
use 
ConcreteCorePagePageList;
use 
Permissions;
use 
Page;
use 
stdClass;
use 
PermissionKey;
use 
PageTheme;
use 
PageEditResponse;
use 
Request;
use 
Loader;
use 
User;
use 
Response;
use 
Core;

class 
Customize extends BackendInterfacePageController
{

    protected 
$viewPath '/panels/page/design/customize';
    protected 
$controllerActionPath '/ccm/system/panels/page/design/customize';
    protected 
$helpers = array('form');

    public function 
canAccess()
    {
        return 
$this->permissions->canEditPageTheme();
    }

    public function 
view($pThemeID)
    {
        
$this->requireAsset('core/style-customizer');
        
$pt PageTheme::getByID($pThemeID);
        if (
is_object($pt) && $pt->isThemeCustomizable()) {

            
$presets $pt->getThemeCustomizableStylePresets();
            foreach (
$presets as $preset) {
                if (
$preset->isDefaultPreset()) {
                    
$defaultPreset $preset;
                }
            }

            
// load the defaults for the panel, before we get to any
            // request-based tomfoolery.
            
if ($this->page->hasPageThemeCustomizations()) {
                
$object $this->page->getCustomStyleObject();
            } else {
                
$object $pt->getThemeCustomStyleObject();
            }

            if (
is_object($object)) {
                
$handle $object->getPresetHandle();
                if (
$handle) {
                    
$selectedPreset $pt->getThemeCustomizablePreset($handle);
                }
                
$valueList $object->getValueList();
                
$sccRecord $object->getCustomCssRecord();
            } else {
                
$selectedPreset $defaultPreset;
                
$valueList $defaultPreset->getStyleValueList();
            }

            if (
$this->request->request->has('handle')) {
                
$preset $pt->getThemeCustomizablePreset($this->request->request->get('handle'));
                if (
is_object($preset)) {
                    
$selectedPreset $preset;
                    
$valueList $preset->getStyleValueList();
                }
            }

            
// finally, we sort the presets so that the selected
            // preset is at the top
            
usort($presets, function ($a$b) use ($selectedPreset) {
                if (!
$selectedPreset) {
                    return -
1;
                }
                if (
$selectedPreset->getPresetHandle() == $a->getPresetHandle()) {
                    return -
1;
                }
                if (
$selectedPreset->getPresetHandle() == $b->getPresetHandle()) {
                    return 
1;
                }

                return 
strcasecmp($a->getPresetDisplayName('text'), $b->getPresetDisplayName('text'));
            });

            
$styleList $pt->getThemeCustomizableStyleList();
            
$sccRecordID 0;
            if (
$sccRecord) {
                
$sccRecordID $sccRecord->getRecordID();
            }
            
$this->set('sccRecordID'$sccRecordID);
            
$this->set('valueList'$valueList);
            
$this->set('presets'$presets);
            
$this->set('selectedPreset'$selectedPreset);
            
$this->set('styleSets'$styleList->getSets());
            
$this->set('theme'$pt);
        } else {
            throw new 
Exception(t('Invalid or non-customizable theme.'));
        }
    }

    protected function 
getValueListFromRequest($pThemeID)
    {
        
$pt PageTheme::getByID($pThemeID);
        
$styles $pt->getThemeCustomizableStyleList();
        
$vl ConcreteCoreStyleCustomizerStyleValueList::loadFromRequest($this->request->request$styles);
        return 
$vl;
    }

    public function 
preview($pThemeID)
    {
        
$vl $this->getValueListFromRequest($pThemeID);
        
$pt PageTheme::getByID($pThemeID);
        
$pt->enablePreviewRequest();
        
$sheets $pt->getThemeCustomizableStyleSheets();
        
// for each customizable stylesheet in the theme, we take the value list
        // and send its variables through the LESS parser.
        
foreach ($sheets as $sheet) {
            
$sheet->setValueList($vl);
            
// we save each sheet to the preview location.
            
$sheet->output();
        }

        
// and finally, we pass our modified theme into the updated view, which we send back in the iframe.
        
$req Request::getInstance();
        
$req->setCurrentPage($this->page);
        
$controller $this->page->getPageController();
        
$view $controller->getViewObject();
        
$view->setCustomPageTheme($pt);
        
$req->setCustomRequestUser(-1);
        
$response = new Response();
        
$content $view->render();
        
$response->setContent($content);
        return 
$response;
    }

    public function 
apply_to_site($pThemeID)
    {
        
$pk PermissionKey::getByHandle('customize_themes');
        if (
$this->validateAction() && $pk->can()) {
            
$vl $this->getValueListFromRequest($pThemeID);
            
$pt PageTheme::getByID($pThemeID);
            
$vl->save();
            
$sccRecord false;
            if (
$this->request->request->has('sccRecordID')) {
                
$sccRecord ConcreteCoreStyleCustomizerCustomCssRecord::getByID($this->request->request->get('sccRecordID'));
            }
            
$preset false;
            if (
$this->request->request->has('handle')) {
                
$preset $pt->getThemeCustomizablePreset($this->request->request->get('handle'));
            }

            
// reset all custom styles on particular pages
            
$pl = new PageList();
            
$pl->filterByPagesWithCustomStyles();
            
$results $pl->getResults();
            foreach (
$results as $csc) {
                
$cscv $csc->getVersionToModify();
                
$cscv->resetCustomThemeStyles();
                
$vo $csc->getVersionObject();
                if (
$vo->isApproved()) {
                    
$vo $cscv->getVersionObject();
                    
$vo->approve();
                }
            }

            
// set the global style object.
            
$pt->setCustomStyleObject($vl$preset$sccRecord);
            
$r = new PageEditResponse();
            
$r->setPage($this->page);
            
$r->setRedirectURL(URL::to($this->page));
            
$r->outputJSON();
        }
    }


    public function 
apply_to_page($pThemeID)
    {
        if (
$this->validateAction()) {
            
$vl $this->getValueListFromRequest($pThemeID);
            
$pt PageTheme::getByID($pThemeID);
            
$vl->save();
            
$sccRecord false;
            if (
$this->request->request->has('sccRecordID')) {
                
$sccRecord ConcreteCoreStyleCustomizerCustomCssRecord::getByID($this->request->request->get('sccRecordID'));
            }
            
$preset false;
            if (
$this->request->request->has('handle')) {
                
$preset $pt->getThemeCustomizablePreset($this->request->request->get('handle'));
            }

            
$nvc $this->page->getVersionToModify();
            
$nvc->setCustomStyleObject($pt$vl$preset$sccRecord);

            
$r = new PageEditResponse();
            
$r->setPage($this->page);
            
$r->setRedirectURL(URL::to($this->page));
            
$r->outputJSON();
        }
    }

    public function 
reset_page_customizations()
    {
        if (
$this->validateAction()) {
            
$nvc $this->page->getVersionToModify();
            
$nvc->resetCustomThemeStyles();
            
$r = new PageEditResponse();
            
$r->setPage($this->page);
            
$r->setRedirectURL(URL::to($this->page));
            
$r->outputJSON();
        }
    }

    public function 
reset_site_customizations($pThemeID)
    {
        if (
$this->validateAction()) {
            
Page::resetAllCustomStyles();

            
$pt PageTheme::getByID($pThemeID);
            
$pt->resetThemeCustomStyles();

            
$r = new PageEditResponse();
            
$r->setPage($this->page);
            
$r->setRedirectURL(URL::to($this->page));
            
$r->outputJSON();
        }
    }
}
Онлайн: 1
Реклама