From c7b0817dabd1ea596086b03569d4480355e5f721 Mon Sep 17 00:00:00 2001 From: cash Date: Sat, 1 Oct 2011 12:42:00 -0400 Subject: using the menu system for the embed tabs and adding a reusable select list view --- mod/embed/start.php | 132 +++++++++++++++++++++++++++++----------------------- 1 file changed, 74 insertions(+), 58 deletions(-) (limited to 'mod/embed/start.php') diff --git a/mod/embed/start.php b/mod/embed/start.php index 6c26163e9..a87776c7e 100644 --- a/mod/embed/start.php +++ b/mod/embed/start.php @@ -15,6 +15,7 @@ function embed_init() { elgg_extend_view('css/elgg', 'embed/css'); elgg_register_plugin_hook_handler('register', 'menu:longtext', 'embed_longtext_menu'); + elgg_register_plugin_hook_handler('register', 'menu:embed', 'embed_select_tab', 1000); // Page handler for the modal media embed elgg_register_page_handler('embed', 'embed_page_handler'); @@ -40,7 +41,7 @@ function embed_longtext_menu($hook, $type, $items, $vars) { $items[] = ElggMenuItem::factory(array( 'name' => 'embed', 'href' => "embed", - 'text' => elgg_echo('media:insert'), + 'text' => elgg_echo('embed:media'), 'rel' => 'lightbox', 'link_class' => "elgg-longtext-control elgg-lightbox embed-control embed-control-{$vars['id']}", 'priority' => 10, @@ -54,68 +55,83 @@ function embed_longtext_menu($hook, $type, $items, $vars) { } /** - * Serves pages for upload and embed. + * Select the correct embed tab for display * - * @param $page + * @param string $hook + * @param string $type + * @param array $items + * @param array $vars */ -function embed_page_handler($page) { - if (!isset($page[0])) { - $page[0] = 'embed'; +function embed_select_tab($hook, $type, $items, $vars) { + + $tab_name = array_pop(explode('/', full_url())); + foreach ($items as $item) { + if ($item->getName() == $tab_name) { + $item->setSelected(); + elgg_set_config('embed_tab', $item); + } } - switch ($page[0]) { - case 'upload': - echo elgg_view('embed/upload'); - break; - case 'embed': - default: - // trigger hook to get section tabs - // use views for embed/section/ - // listing - // item - // default to embed/listing | item if not found. - - // @todo the menu system is good for registering and sorting, but not great for - // displaying tabs. - // Pulling in the menu manually and passing it through the embed/tabs view. - // We should work on making it easier to use tabs through the menu system, then fix - // this mess. - $menus = get_config('menus'); - $menu = $menus['embed:sections']; - - $sections = array(); - $upload_sections = array(); - - foreach ($menu as $item) { - switch ($item->section) { - case 'upload': - $upload_sections[$item->getName()] = array( - 'name' => $item->getText(), - ); - break; - - default: - $sections[$item->getName()] = array( - 'name' => $item->getText(), - ); - break; - } - } - - $active_section = get_input('active_section', ''); - $active_section = preg_replace('[\W]', '', $active_section); - $internal_id = get_input('internal_id', ''); - $internal_id = preg_replace('[\W]', '', $internal_id); - - echo elgg_view('embed/embed', array( - 'sections' => $sections, - 'active_section' => $active_section, - 'upload_sections' => $upload_sections, - 'internal_id' => $internal_id - )); - break; + if (!elgg_get_config('embed_tab') && count($items) > 0) { + $items[0]->setSelected(); + elgg_set_config('embed_tab', $items[0]); } +} + +/** + * Serves the content for the embed lightbox + * + * @param array $page URL segments + */ +function embed_page_handler($page) { + + echo elgg_view('embed/layout'); // exit because this is in a modal display. exit; -} \ No newline at end of file +} + +/** + * A special listing function for selectable content + * + * This calls a custom list view for entities. + * + * @param array $entities Array of ElggEntity objects + * @param array $vars Display parameters + * @return string + */ +function embed_list_items($entities, $vars = array()) { + + $defaults = array( + 'items' => $entities, + 'list_class' => 'elgg-list-entity', + ); + + $vars = array_merge($defaults, $vars); + + return elgg_view('embed/list', $vars); +} + +/** + * Set the options for the list of embedable content + * + * @param array $options + * @return array + */ +function embed_get_list_options($options = array()) { + + if (elgg_get_page_owner_guid()) { + $container_guid = elgg_get_page_owner_guid(); + } else { + $container_guid = elgg_get_logged_in_user_guid(); + } + + $defaults = array( + 'limit' => 6, + 'container_guid' => $container_guid, + ); + + $options = array_merge($defaults, $options); + + return $options; +} -- cgit v1.2.3