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

use 
ConcreteControllerBackendUserInterfacePage as BackendInterfacePageController;
use 
ConcreteCoreHttpResponseAssetGroup;
use 
ConcreteCoreWorkflowRequestApprovePageRequest;
use 
PageEditResponse;
use 
PermissionKey;
use 
stdClass;
use 
Loader;
use 
User;
use 
ConcreteCorePageCollectionVersionVersion;
use 
CollectionAttributeKey;
use 
ConcreteCoreAttributeView as AttributeTypeView;

class 
Attributes extends BackendInterfacePageController
{
    protected 
$viewPath '/panels/details/page/attributes';
    
// we need this extra because this controller gets called by another page
    // and that page needs to know how to submit it.
    
protected $controllerActionPath '/ccm/system/panels/details/page/attributes';

    protected function 
canAccess()
    {
        return 
$this->permissions->canEditPageProperties();
    }

    public function 
on_start()
    {
        
parent::on_start();
        
$pk PermissionKey::getByHandle('edit_page_properties');
        
$pk->setPermissionObject($this->page);
        
$this->assignment $pk->getMyAssignment();
    }

    protected function 
getAttributeJSONRepresentation(CollectionAttributeKey $ak$mode 'edit')
    {
        
ob_start();
        
$av = new AttributeTypeView($ak);
        if (
$mode == 'edit') {
            
$caValue $this->page->getAttributeValueObject($ak);
            
$ak->render('form'$caValue);
        } else {
            print 
$av->render('form');
        }
        
$html ob_get_contents();
        
ob_end_clean();
        
$obj = new stdClass();
        
$obj->akID $ak->getAttributeKeyID();
        
$obj->label $ak->getAttributeKeyDisplayName();
        
$obj->content $html;
        
$obj->pending = ($mode == 'add') ? true false;

        return 
$obj;
    }

    public function 
view()
    {
        
$this->set('assignment'$this->assignment);
        
$this->set('dt'Loader::helper('form/date_time'));
        
$this->set('uh'Loader::helper('form/user_selector'));
        
$selectedAttributes = array();
        
$allowed $this->assignment->getAttributesAllowedArray();
        foreach (
$this->page->getSetCollectionAttributes() as $ak) {
            if (
is_object($ak) && in_array($ak->getAttributeKeyID(), $allowed)) {
                
$obj $this->getAttributeJSONRepresentation($ak);
                
$selectedAttributes[] = $obj;
            }
        }
        
$this->set('selectedAttributes'Loader::helper('json')->encode($selectedAttributes));
    }

    public function 
submit()
    {
        if (
$this->validateAction()) {
            
$c $this->page;
            
$cp $this->permissions;
            
$asl $this->assignment;

            
$nvc $c->getVersionToModify();
            
$data = array();
            if (
$asl->allowEditName()) {
                
$data['cName'] = $_POST['cName'];
            }
            if (
$asl->allowEditDescription()) {
                
$data['cDescription'] = $_POST['cDescription'];
            }
            if (
$asl->allowEditDateTime()) {
                
$dt Loader::helper('form/date_time');
                
$dh Loader::helper('date');
                
$data['cDatePublic'] = $dt->translate('cDatePublic');
            }
            if (
$asl->allowEditUserID()) {
                
$data['uID'] = $_POST['uID'];
            }

            
$nvc->update($data);

            
// First, we check out the attributes we need to clear.
            
$setAttribs $nvc->getSetCollectionAttributes();
            
$processedAttributes = array();
            
$selectedAKIDs $_POST['selectedAKIDs'];
            if (!
is_array($selectedAKIDs)) {
                
$selectedAKIDs = array();
            }
            
$selected is_array($_POST['selectedAKIDs']) ? $_POST['selectedAKIDs'] : array();

            foreach (
$setAttribs as $ak) {
                
// do I have the ability to edit this attribute?
                
if (in_array($ak->getAttributeKeyID(), $asl->getAttributesAllowedArray())) {
                    
// Is this item in the selectedAKIDs array? If so then it is being saved
                    
if (in_array($ak->getAttributeKeyID(), $selected)) {
                        
$ak->saveAttributeForm($nvc);
                    } else {
                        
// it is being removed
                        
$nvc->clearAttribute($ak);
                    }
                    
$processedAttributes[] = $ak->getAttributeKeyID();
                }
            }
            
$newAttributes array_diff($selectedAKIDs$processedAttributes);
            foreach (
$newAttributes as $akID) {
                if (
$akID && in_array($akID$asl->getAttributesAllowedArray())) {
                    
$ak CollectionAttributeKey::getByID($akID);
                    
$ak->saveAttributeForm($nvc);
                }
            }

            if (
$this->request->request->get('sitemap')
                && 
$this->permissions->canApprovePageVersions()
                && 
Config::get('concrete.misc.sitemap_approve_immediately')) {

                
$pkr = new ApprovePageRequest();
                
$u = new User();
                
$pkr->setRequestedPage($this->page);
                
$v Version::get($this->page"RECENT");
                
$pkr->setRequestedVersionID($v->getVersionID());
                
$pkr->setRequesterUserID($u->getUserID());
                
$response $pkr->trigger();
                
$u->unloadCollectionEdit();
            }

            
$r = new PageEditResponse();
            
$r->setPage($c);
            
$r->setTitle(t('Page Updated'));
            
$r->setMessage(t('Page Attributes have been saved.'));
            
$r->outputJSON();
        }
    }

    
/**
     * Retrieve attribute HTML to inject into the other view.
     */
    
public function add_attribute()
    {
        
$allowed $this->assignment->getAttributesAllowedArray();
        
$ak CollectionAttributeKey::getByID($_REQUEST['akID']);
        if (
is_object($ak) && in_array($ak->getAttributeKeyID(), $allowed)) {
            
$obj $this->getAttributeJSONRepresentation($ak'add');
            
$obj->pending true;
            
$obj->assets = array();
            
$ag ResponseAssetGroup::get();
            foreach (
$ag->getAssetsToOutput() as $position => $assets) {
                foreach (
$assets as $asset) {
                    if (
is_object($asset)) {
                        
// have to do a check here because we might be included a dumb javascript call like i18n_js
                        
$obj->assets[$asset->getAssetType()][] = $asset->getAssetURL();
                    }
                }
            }
            
Loader::helper('ajax')->sendResult($obj);
        }
    }

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