defaults $values = array( 'title' => '', 'description' => '', 'access_id' => ACCESS_DEFAULT, 'write_access_id' => ACCESS_DEFAULT, 'tags' => '', 'container_guid' => elgg_get_page_owner_guid(), 'guid' => null, 'entity' => $page, 'parent_guid' => $parent_guid, ); if ($page) { foreach (array_keys($values) as $field) { if (isset($page->$field)) { $values[$field] = $page->$field; } } } if (elgg_is_sticky_form('page')) { $sticky_values = elgg_get_sticky_values('page'); foreach ($sticky_values as $key => $value) { $values[$key] = $value; } } elgg_clear_sticky_form('page'); return $values; } /** * Recurses the page tree and adds the breadcrumbs for all ancestors * * @param ElggObject $page Page entity */ function pages_prepare_parent_breadcrumbs($page) { if ($page && $page->parent_guid) { $parents = array(); $parent = get_entity($page->parent_guid); while ($parent) { array_push($parents, $parent); $parent = get_entity($parent->parent_guid); } while ($parents) { $parent = array_pop($parents); elgg_push_breadcrumb($parent->title, $parent->getURL()); } } } /** * Produce the navigation tree * * @param ElggEntity $container Container entity for the pages */ function pages_get_navigation_tree($container) { if (!$container) { return; } $top_pages = elgg_get_entities(array( 'type' => 'object', 'subtype' => 'page_top', 'container_guid' => $container->getGUID(), 'limit' => 0, )); if (!$top_pages) { return; } $tree = array(); $depths = array(); foreach ($top_pages as $page) { $tree[] = array( 'guid' => $page->getGUID(), 'title' => $page->title, 'url' => $page->getURL(), 'depth' => 0, ); $depths[$page->guid] = 0; $stack = array(); array_push($stack, $page); while (count($stack) > 0) { $parent = array_pop($stack); $children = elgg_get_entities_from_metadata(array( 'type' => 'object', 'subtype' => 'page', 'metadata_name' => 'parent_guid', 'metadata_value' => $parent->getGUID(), 'limit' => 0, )); if ($children) { foreach ($children as $child) { $tree[] = array( 'guid' => $child->getGUID(), 'title' => $child->title, 'url' => $child->getURL(), 'parent_guid' => $parent->getGUID(), 'depth' => $depths[$parent->guid] + 1, ); $depths[$child->guid] = $depths[$parent->guid] + 1; array_push($stack, $child); } } } } return $tree; } /** * Register the navigation menu * * @param ElggEntity $container Container entity for the pages */ function pages_register_navigation_tree($container) { $pages = pages_get_navigation_tree($container); if ($pages) { foreach ($pages as $page) { elgg_register_menu_item('pages_nav', array( 'name' => $page['guid'], 'text' => $page['title'], 'href' => $page['url'], 'parent_name' => $page['parent_guid'], )); } } }