Exemplo n.º 1
0
 public function submit()
 {
     if ($this->validateAction()) {
         $comments = $this->request->request('comments');
         $comments = is_string($comments) ? trim($comments) : '';
         if ($comments === '' && $this->app->make('config')->get('concrete.misc.require_version_comments')) {
             return Response::create(t('Please specify the version comments'), 400);
         }
         $c = $this->page;
         $u = new User();
         $v = CollectionVersion::get($c, "RECENT");
         $v->setComment($_REQUEST['comments']);
         $pr = new PageEditResponse();
         if (($this->request->request->get('action') == 'publish' || $this->request->request->get('action') == 'schedule') && $this->permissions->canApprovePageVersions()) {
             $e = $this->checkForPublishing();
             $pr->setError($e);
             if (!$e->has()) {
                 $pkr = new ApprovePagePageWorkflowRequest();
                 $pkr->setRequestedPage($c);
                 $pkr->setRequestedVersionID($v->getVersionID());
                 $pkr->setRequesterUserID($u->getUserID());
                 $u->unloadCollectionEdit($c);
                 if ($this->request->request->get('action') == 'schedule') {
                     $dateTime = new DateTime();
                     $publishDateTime = $dateTime->translate('check-in-scheduler');
                     $pkr->scheduleVersion($publishDateTime);
                 }
                 if ($c->isPageDraft()) {
                     $pagetype = $c->getPageTypeObject();
                     $pagetype->publish($c, $pkr);
                 } else {
                     $pkr->trigger();
                 }
             }
         } else {
             if ($this->request->request->get('action') == 'discard') {
                 if ($c->isPageDraft() && $this->permissions->canDeletePage()) {
                     $u = new User();
                     $cID = $u->getPreviousFrontendPageID();
                     $this->page->delete();
                     $pr->setRedirectURL(DIR_REL . '/' . DISPATCHER_FILENAME . '?cID=' . $cID);
                     $pr->outputJSON();
                 } else {
                     if ($v->canDiscard()) {
                         $v->discard();
                     }
                 }
             } else {
                 $v->removeNewStatus();
             }
         }
         $nc = Page::getByID($c->getCollectionID(), $v->getVersionID());
         $u->unloadCollectionEdit();
         $pr->setRedirectURL(Loader::helper('navigation')->getLinkToCollection($nc, true));
         $pr->outputJSON();
     }
 }
Exemplo n.º 2
0
 public function publish(Page $c, $requestOrDateTime = null)
 {
     $this->stripEmptyPageTypeComposerControls($c);
     $parent = Page::getByID($c->getPageDraftTargetParentPageID());
     if ($c->isPageDraft()) {
         // this is still a draft, which means it has never been properly published.
         // so we need to move it, check its permissions, etc...
         Section::registerPage($c);
         $c->move($parent);
         if (!$parent->overrideTemplatePermissions()) {
             // that means the permissions of pages added beneath here inherit from page type permissions
             // this is a very poorly named method. Template actually used to mean Type.
             // so this means we need to set the permissions of this current page to inherit from page types.
             $c->inheritPermissionsFromDefaults();
         }
         $c->activate();
     } else {
         $c->rescanCollectionPath();
     }
     $u = new User();
     if (!$requestOrDateTime instanceof ApprovePagePageWorkflowRequest) {
         $v = CollectionVersion::get($c, 'RECENT');
         $pkr = new ApprovePagePageWorkflowRequest();
         $pkr->setRequestedPage($c);
         $pkr->setRequestedVersionID($v->getVersionID());
         $pkr->setRequesterUserID($u->getUserID());
         if ($requestOrDateTime) {
             // That means it's a date time
             $pkr->scheduleVersion($requestOrDateTime);
         }
     } else {
         $pkr = $requestOrDateTime;
     }
     $pkr->trigger();
     $u->unloadCollectionEdit($c);
     CacheLocal::flush();
     $ev = new Event($c);
     $ev->setPageType($this);
     $ev->setUser($u);
     \Events::dispatch('on_page_type_publish', $ev);
 }