Beispiel #1
0
 public function sortItems($params)
 {
     ModuleSortorderQuery::create()->filterByPageRevision($this->pageRevision)->delete();
     $wrappers = $this->pageRevision->getPageModuleWrappers();
     $unsortedIds = ArrayHelper::objectsToArray($wrappers, false, 'getPageModuleId');
     $wrapperById = ArrayHelper::objectsToArray($wrappers, 'getPageModuleId');
     // Get primary keys
     $items = $_POST['item'];
     if (!is_array($items)) {
         throw new Exception('Expected array POST variable `item`.');
     }
     $sortedIds = array();
     foreach ($items as $item) {
         $pk = json_decode($item, true);
         if ($pk === null) {
             throw new Exception('Invalid primary key for item: ' . $item);
         }
         if (!array_key_exists($pk, $wrapperById)) {
             throw new Exception('Module not found when sorting');
         }
         $sortedIds[] = $pk;
     }
     if ($sortedIds !== $unsortedIds) {
         foreach ($wrappers as $wrapper) {
             $sortorder = $wrapper->getSortorder(true);
             $sortorder->insertAtBottom();
             $sortorder->save();
         }
         $pks = array();
         foreach ($sortedIds as $id) {
             $pks[] = array($id, $this->pageRevision->getPageRevisionId());
         }
         Propel::sortableReorder($pks, 'ModuleSortorder');
     }
     $this->pageRevision->setUpdatedAt(time());
     $this->pageRevision->save();
 }
Beispiel #2
0
 /**
  * Save new revision.
  *
  * @param Page $page
  * @param array $values
  * @return PageRevision
  */
 public static function saveNewRevision(Page $page, array $values)
 {
     if ($values['copy_revision_id']) {
         $copyRevision = PageRevisionQuery::create()->findPk($values['copy_revision_id']);
         if (!$copyRevision) {
             throw new Exception("PageRevision not found.");
         }
         $pageRevision = $copyRevision->duplicate();
     } else {
         $pageRevision = new PageRevision();
         $pageRevision->setPage($page);
     }
     $pageRevision->setDescription($values['description']);
     $pageRevision->save();
     if ($values['set_working']) {
         $page->setWorkingPageRevision($pageRevision);
         $page->save();
     }
     return $pageRevision;
 }