header("Location: " . REL_DIR_FILES_TOOLS_REQUIRED . "/versions.php?forcereload=1&cID=" . $cID);
             exit;
         }
     }
     break;
 case 'copy_version':
     $u = new User();
     $c->loadVersionObject($_REQUEST['cvID']);
     $c->cloneVersion(t('Copy of Version: %s', $c->getVersionID()));
     header("Location: " . REL_DIR_FILES_TOOLS_REQUIRED . "/versions.php?forcereload=1&cID=" . $cID);
     exit;
     break;
 case 'approve':
     if ($cp->canApprovePageVersions() && !$isCheckedOut) {
         $u = new User();
         $pkr = new ApprovePagePageWorkflowRequest();
         $pkr->setRequestedPage($c);
         $v = CollectionVersion::get($c, $_GET['cvID']);
         $pkr->setRequestedVersionID($v->getVersionID());
         $pkr->setRequesterUserID($u->getUserID());
         $u->unloadCollectionEdit($c);
         $response = $pkr->trigger();
         if (!$response instanceof WorkflowProgressResponse) {
             header("Location: " . REL_DIR_FILES_TOOLS_REQUIRED . "/versions.php?forcereload=1&deferred=true&cID=" . $cID . "&cvID=" . $_GET['cvID']);
             exit;
         } else {
             // we only get this response if we have skipped workflows and jumped straight in to an approve() step.
             header("Location: " . REL_DIR_FILES_TOOLS_REQUIRED . "/versions.php?forcereload=1&cID=" . $cID . "&cvID=" . $_GET['cvID']);
             exit;
         }
     }
Ejemplo n.º 2
0
 public function save()
 {
     session_write_close();
     if ($this->isPost()) {
         if (intval($this->post('entryID')) > 0) {
             $entry = ComposerPage::getByID($this->post('entryID'), 'RECENT');
         }
         if (!is_object($entry)) {
             $this->error->add(t('Invalid page.'));
         } else {
             $ct = CollectionType::getByID($entry->getCollectionTypeID());
         }
         $valt = Loader::helper('validation/token');
         $vtex = Loader::helper('validation/strings');
         if (!$valt->validate('composer')) {
             $this->error->add($valt->getErrorMessage());
         }
         if ($this->post("ccm-publish-draft")) {
             if (!$vtex->notempty($this->post('cName'))) {
                 $this->error->add(t('You must provide a name for your page before you can publish it.'));
             }
             if ($entry->isComposerDraft()) {
                 if ($ct->getCollectionTypeComposerPublishMethod() == 'CHOOSE' || $ct->getCollectionTypeComposerPublishMethod() == 'PAGE_TYPE') {
                     $parent = Page::getByID($entry->getComposerDraftPublishParentID());
                 } else {
                     if ($ct->getCollectionTypeComposerPublishMethod() == 'PARENT') {
                         $parent = Page::getByID($ct->getCollectionTypeComposerPublishPageParentID());
                     }
                 }
                 if (!is_object($parent) || ($parent->isInTrash() || $parent->isError())) {
                     $this->error->add(t('Invalid parent page.'));
                 } else {
                     $cp = new Permissions($parent);
                     if (!$cp->canAddSubCollection($ct)) {
                         $this->error->add(t('You do not have permissions to add this page type in that location.'));
                     }
                 }
             }
         } else {
             if ($this->post('ccm-submit-discard') && !$this->error->has()) {
                 if ($entry->isComposerDraft()) {
                     $entry->delete();
                     $this->redirect('/dashboard/composer/drafts', 'draft_discarded');
                 } else {
                     // we just discard the most recent changes
                     Events::fire('on_composer_delete_draft', $entry);
                     $v = CollectionVersion::get($entry, 'RECENT');
                     $v->discard();
                     $this->redirect('?cID=' . $entry->getCollectionID());
                 }
             }
         }
         if (!$this->error->has()) {
             if ($this->post('cHandle')) {
                 $handle = $this->post('cHandle');
             } else {
                 $handle = Loader::helper('text')->urlify($this->post('cName'));
             }
             $handle = str_replace('-', PAGE_PATH_SEPARATOR, $handle);
             $data = array();
             $pk = PermissionKey::getByHandle('edit_page_properties');
             $pk->setPermissionObject($entry);
             $asl = $pk->getMyAssignment();
             if ($asl->allowEditName()) {
                 $data['cName'] = $this->post('cName');
             }
             if ($asl->allowEditDescription()) {
                 $data['cDescription'] = $this->post('cDescription');
             }
             if ($asl->allowEditPaths()) {
                 $data['cHandle'] = $handle;
             }
             if ($asl->allowEditDateTime()) {
                 $data['cDatePublic'] = Loader::helper('form/date_time')->translate('cDatePublic');
             }
             $entry->getVersionToModify();
             // this is a pain. we have to use composerpage::getbyid again because
             // getVersionToModify is hard-coded to return a page object
             $entry = ComposerPage::getByID($entry->getCollectionID(), 'RECENT');
             $entry->update($data);
             $this->saveData($entry, $asl);
             $u = new User();
             if ($this->post('ccm-publish-draft')) {
                 Cache::disableCache();
                 Cache::disableLocalCache();
                 if ($entry->isComposerDraft()) {
                     $entry->move($parent);
                 }
                 $v = CollectionVersion::get($entry, 'RECENT');
                 $pkr = new ApprovePagePageWorkflowRequest();
                 $pkr->setRequestedPage($entry);
                 $pkr->setRequestedVersionID($v->getVersionID());
                 $pkr->setRequesterUserID($u->getUserID());
                 $pkr->trigger();
                 Events::fire('on_composer_publish', $entry);
                 $entry->markComposerPageAsPublished();
                 $this->redirect('?cID=' . $entry->getCollectionID());
             } else {
                 if ($this->post('autosave')) {
                     // this is done by javascript. we refresh silently and send a json success back
                     Events::fire('on_composer_save_draft', $entry);
                     $json = Loader::helper('json');
                     $obj = new stdClass();
                     $dh = Loader::helper('date');
                     $obj->error = false;
                     $obj->time = $dh->formatTime('now', false);
                     $obj->timestamp = date('m/d/Y g:i a');
                     print $json->encode($obj);
                     exit;
                 } else {
                     $this->redirect('/dashboard/composer/write', 'edit', $entry->getCollectionID(), 'saved');
                 }
             }
         } else {
             if (is_object($entry)) {
                 $this->edit($entry->getCollectionID());
             }
         }
     } else {
         $this->redirect('/dashboard/composer');
     }
 }