Вход Регистрация
Файл: 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
Реклама