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

use 
ConcreteControllerBackendUserInterfacePage as BackendInterfacePageController;
use 
Permissions;
use 
Page;
use 
Loader;
use 
Core;
use 
Config;
use 
CollectionVersion;
use 
ConcreteCorePageCollectionVersionEditResponse as PageEditVersionResponse;
use 
PageEditResponse;
use 
ConcreteCoreWorkflowRequestApprovePageRequest as ApprovePagePageWorkflowRequest;
use 
ConcreteCorePageCollectionVersionVersionList;
use 
User;
use 
ConcreteCoreWorkflowProgressResponse as WorkflowProgressResponse;

class 
Versions extends BackendInterfacePageController
{
    protected 
$viewPath '/panels/page/versions';
    public function 
canAccess()
    {
        return 
$this->permissions->canViewPageVersions() || $this->permissions->canEditPageVersions();
    }

    protected function 
getPageVersionListResponse($currentPage false)
    {
        
$vl = new VersionList($this->page);
        
$vl->setItemsPerPage(20);
        
$vArray $vl->getPage($currentPage);

        
$r = new PageEditVersionResponse();
        
$r->setPage($this->page);
        
$r->setVersionList($vl);
        
$cpCanDeletePageVersions $this->permissions->canDeletePageVersions();
        foreach (
$vArray as $v) {
            
$r->addCollectionVersion($v);
        }

        return 
$r;
    }

    public function 
view()
    {
        
$r $this->getPageVersionListResponse();
        
$this->set('response'$r);
    }

    public function 
get_json()
    {
        
$currentPage false;
        if (
$_POST['currentPage']) {
            
$currentPage Loader::helper('security')->sanitizeInt($_POST['currentPage']);
        }
        
$r $this->getPageVersionListResponse($currentPage);
        
$r->outputJSON();
    }

    public function 
duplicate()
    {
        if (
$this->validateAction()) {
            
$this->page->loadVersionObject($this->request->request->get('cvID'));
            
$nc $this->page->cloneVersion(t('Copy of Version: %s'$this->page->getVersionID()));
            
$v $nc->getVersionObject();
            
$r = new PageEditVersionResponse();
            
$r->setMessage(t('Version %s copied successfully. New version is %s.'$this->request->request->get('cvID'), $v->getVersionID()));
            
$r->addCollectionVersion($v);
            
$r->outputJSON();
        }
    }

    public function 
new_page()
    {
        if (
$this->validateAction()) {
            
$c $this->page;
            
$e Core::make('helper/validation/error');
            
$pt $c->getPageTypeObject();
            if (
is_object($pt)) {
                
$ptp = new Permissions($pt);
                if (!
$ptp->canAddPageType()) {
                    
$e->add(t('You do not have permission to create new pages of this type.'));
                }
            }

            
$r = new PageEditVersionResponse();
            
$r->setError($e);
            if (!
$e->has()) {
                
$c->loadVersionObject($_REQUEST['cvID']);
                
$nc $c->cloneVersion(t('New Page Created From Version'));
                
$v $nc->getVersionObject();
                
$drafts Page::getByPath(Config::get('concrete.paths.drafts'));
                
$nc $c->duplicate($drafts);
                
$nc->deactivate();
                
$nc->move($drafts);
                
// now we delete all but the new version
                
$vls = new VersionList($nc);
                
$vls->setItemsPerPage(-1);
                
$vArray $vls->getPage();
                for (
$i 1$i count($vArray); $i++) {
                    
$cv $vArray[$i];
                    
$cv->delete();
                }
                
// now, we delete the version we duped on the current page, since we don't need it anymore.
                
$v->delete();
                
// finally, we redirect the user to the new drafts page in composer mode.
                
$r->setPage($nc);
                
$r->setRedirectURL(Core::getApplicationURL() . '/' DISPATCHER_FILENAME '?cID=' $nc->getCollectionID() . '&ctask=check-out-first&' Loader::helper('validation/token')->getParameter());
            }
            
$r->outputJSON();
        }
    }

    public function 
delete()
    {
        if (
$this->validateAction()) {
            
$r = new PageEditVersionResponse();
            
$c $this->page;
            
$cp = new Permissions($this->page);
            if (
$cp->canDeletePageVersions()) {
                
$versions 0;
                
$r = new PageEditVersionResponse();
                
$r->setPage($c);
                if (
is_array($_POST['cvID'])) {
                    foreach (
$_POST['cvID'] as $cvID) {
                        
$versions++;
                        
$v CollectionVersion::get($c$cvID);
                        if (
is_object($v)) {
                            if (!
$v->isApproved()) {
                                
$r->addCollectionVersion($v);
                                
$v->delete();
                            }
                        }
                    }
                }
                
$r->setMessage(t2('%s version deleted successfully''%s versions deleted successfully.'count($r->getCollectionVersions())));
            } else {
                
$e Loader::helper('validation/error');
                
$e->add(t('You do not have permission to delete page versions.'));
                
$r = new PageEditResponse($e);
            }
            
$r->outputJSON();
        }
    }

    public function 
approve()
    {
        
$c $this->page;
        
$cp $this->permissions;
        if (
$this->validateAction()) {
            
$r = new PageEditVersionResponse();
            if (
$cp->canApprovePageVersions()) {
                
$ov CollectionVersion::get($c'ACTIVE');
                if (
is_object($ov)) {
                    
$ovID $ov->getVersionID();
                }
                
$nvID $_REQUEST['cvID'];

                
$r = new PageEditVersionResponse();
                
$r->setPage($c);
                
$u = new User();
                
$pkr = new ApprovePagePageWorkflowRequest();
                
$pkr->setRequestedPage($c);
                
$v CollectionVersion::get($c$_REQUEST['cvID']);
                
$pkr->setRequestedVersionID($v->getVersionID());
                
$pkr->setRequesterUserID($u->getUserID());
                
$response $pkr->trigger();
                if (!(
$response instanceof WorkflowProgressResponse)) {
                    
// we are deferred
                    
$r->setMessage(t('<strong>Request Saved.</strong> You must complete the workflow before this change is active.'));
                } else {
                    if (
$ovID) {
                        
$r->addCollectionVersion(CollectionVersion::get($c$ovID));
                    }
                    
$r->addCollectionVersion(CollectionVersion::get($c$nvID));
                    
$r->setMessage(t('Version %s approved successfully'$v->getVersionID()));
                }
            } else {
                
$e Loader::helper('validation/error');
                
$e->add(t('You do not have permission to approve page versions.'));
                
$r = new PageEditResponse($e);
            }

            
$r->outputJSON();
        }
    }
}
Онлайн: 1
Реклама