/** * Get ModuleSortorder object for this module/pagerevision. * * @param bool $create * @return ModuleSortorder|null */ public function getSortorder($create = false) { $sortorder = ModuleSortorderQuery::create()->findPk(array($this->pageModuleId, $this->pageRevisionId)); if ($sortorder === null && $create) { $sortorder = new ModuleSortorder(); $sortorder->setPageModuleId($this->pageModuleId); $sortorder->setPageRevisionId($this->pageRevisionId); } return $sortorder; }
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(); }