diff options
Diffstat (limited to 'mod/pages/lib')
-rw-r--r-- | mod/pages/lib/pages.php | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/mod/pages/lib/pages.php b/mod/pages/lib/pages.php new file mode 100644 index 000000000..7f90d53d8 --- /dev/null +++ b/mod/pages/lib/pages.php @@ -0,0 +1,152 @@ +<?php +/** + * Pages function library + */ + +/** + * Prepare the add/edit form variables + * + * @param ElggObject $page + * @return array + */ +function pages_prepare_form_vars($page = null, $parent_guid = 0, $revision = null) { + + // input names => 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'); + + // load the revision annotation if requested + if ($revision instanceof ElggAnnotation && $revision->entity_guid == $page->getGUID()) { + $values['description'] = $revision->value; + } + + 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'], + )); + } + } +} |