/** * Returns an array of expired pages from this navigation, * where all pages in the $feshNav are considered non-expired. * * @param Omeka_Navigation $excludeNav Pages from this navigation should not be pruned * @return array The array of expired pages */ public function getExpiredPagesFromNav(Omeka_Navigation $freshNav) { $expiredPages = array(); $iterator = new RecursiveIteratorIterator($this, RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $page) { $freshPage = $freshNav->getPageByUid($page->uid); if ($page->can_delete && $freshPage || !($page->can_delete || $freshPage)) { $expiredPages[] = $page; } } return $expiredPages; }
/** * Returns the navigation object from the post data * * @return Omeka_Navigation The navigation object from the post data */ protected function _getNavigationFromPost() { $nav = new Omeka_Navigation(); $nav->loadAsOption(Omeka_Navigation::PUBLIC_NAVIGATION_MAIN_OPTION_NAME); $pageUids = array(); if ($pageLinks = $this->getValue(self::HIDDEN_ELEMENT_ID)) { if ($pageLinks = json_decode($pageLinks, true)) { // add and update the pages in the navigation $pageOrder = 0; $pages = array(); $parentPageIds = array(); $pageIdsToPageUids = array(); foreach ($pageLinks as $pageLink) { $pageOrder++; // add or update the page in the navigation $pageUid = $nav->createPageUid($pageLink['uri']); if (!($page = $nav->getPageByUid($pageUid))) { $page = new Omeka_Navigation_Page_Uri(); $page->setHref($pageLink['uri']); // this sets both the uri and the fragment $page->set('uid', $pageUid); } $page->setLabel($pageLink['label']); $page->set('can_delete', (bool) $pageLink['can_delete']); $page->setVisible($pageLink['visible']); $page->setOrder($pageOrder); $parentPageIds[] = $pageLink['parent_id']; $pageUids[] = $page->uid; $pages[] = $page; $pageIdsToPageUids[strval($pageLink['id'])] = $page->uid; } // structure the parent/child relationships // this assumes that the $pages are in a flattened hierarchical order for ($i = 0; $i < $pageOrder; $i++) { $page = $pages[$i]; $page->removePages(); // remove old children pages $parentPageId = $parentPageIds[$i]; if ($parentPageId === null || !array_key_exists($parentPageId, $pageIdsToPageUids)) { // add a page that lacks a parent $nav->addPage($page); } else { // add a child page to its parent page // we assume that all parents already exist in the navigation $parentPageUid = $pageIdsToPageUids[$parentPageId]; if (!($parentPage = $nav->getPageByUid($parentPageUid))) { throw new RuntimeException(__("Cannot find parent navigation page.")); } else { $parentPage->addPage($page); } } } } } // prune the remaining expired pages from navigation $otherPages = $nav->getOtherPages($pageUids); $expiredPages = array(); foreach ($otherPages as $otherPage) { $nav->prunePage($otherPage); } return $nav; }