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(); } }
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); }