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/languages/en.php | 1 - mod/embed/start.php | 132 ++++++++++++---------- mod/embed/views/default/embed/item.php | 31 +++++ mod/embed/views/default/embed/layout.php | 33 ++++++ mod/embed/views/default/embed/list.php | 61 ++++++++++ mod/embed/views/default/js/embed/embed.php | 10 +- mod/embed/views/default/navigation/menu/embed.php | 21 ++++ mod/file/start.php | 21 +++- 8 files changed, 239 insertions(+), 71 deletions(-) create mode 100644 mod/embed/views/default/embed/item.php create mode 100644 mod/embed/views/default/embed/layout.php create mode 100644 mod/embed/views/default/embed/list.php create mode 100644 mod/embed/views/default/navigation/menu/embed.php diff --git a/mod/embed/languages/en.php b/mod/embed/languages/en.php index 287d34ca1..6ae99a56f 100644 --- a/mod/embed/languages/en.php +++ b/mod/embed/languages/en.php @@ -5,7 +5,6 @@ */ $english = array( - 'media:insert' => 'Embed content', 'embed:embed' => 'Embed', 'embed:media' => 'Embed content', 'embed:instructions' => 'Click on any file to embed it into your content.', 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; +} diff --git a/mod/embed/views/default/embed/item.php b/mod/embed/views/default/embed/item.php new file mode 100644 index 000000000..a64a67d8b --- /dev/null +++ b/mod/embed/views/default/embed/item.php @@ -0,0 +1,31 @@ +" . $entity->title . ""; + +$icon = "getIconURL('small')}\" />"; + +$embed_code = elgg_view('output/url', array( + 'href' => $entity->getURL(), + 'title' => $title, + 'text' => $icon, + 'encode_text' => FALSE +)); + + +echo "
getGUID()}\">"; +echo elgg_view_image_block($image, $body); +echo '
'; + +// @todo JS 1.8: is this approach better than inline js? +echo ""; diff --git a/mod/embed/views/default/embed/layout.php b/mod/embed/views/default/embed/layout.php new file mode 100644 index 000000000..73c26810d --- /dev/null +++ b/mod/embed/views/default/embed/layout.php @@ -0,0 +1,33 @@ +getData('tab_type')) { + case 'select': + $tab = elgg_list_entities( + embed_get_list_options($selected->getData('options')), + 'elgg_get_entities', + 'embed_list_items' + ); + if (!$tab) { + $tab = elgg_echo('embed:no_section_content'); + } + break; + case 'upload': + $tab = elgg_view($selected->getData('view'), $vars); + break; +} + +echo << + $title + $menu + $tab + +HTML; diff --git a/mod/embed/views/default/embed/list.php b/mod/embed/views/default/embed/list.php new file mode 100644 index 000000000..e36280e88 --- /dev/null +++ b/mod/embed/views/default/embed/list.php @@ -0,0 +1,61 @@ + element + * @uses $vars['item_class'] Additional CSS class for the
  • elements + */ + +$items = $vars['items']; +$offset = $vars['offset']; +$limit = $vars['limit']; +$count = $vars['count']; + +$offset_key = elgg_extract('offset_key', $vars, 'offset'); + +$list_class = 'elgg-list'; +if (isset($vars['list_class'])) { + $list_class = "$list_class {$vars['list_class']}"; +} + +$item_class = 'elgg-item'; +if (isset($vars['item_class'])) { + $item_class = "$item_class {$vars['item_class']}"; +} + +$html = ""; +$nav = ""; + +if ($count) { + $nav .= elgg_view('navigation/pagination', array( + 'offset' => $offset, + 'count' => $count, + 'limit' => $limit, + 'offset_key' => $offset_key, + )); +} + +if (is_array($items) && count($items) > 0) { + $html .= "'; +} + +$html .= $nav; + +echo $html; diff --git a/mod/embed/views/default/js/embed/embed.php b/mod/embed/views/default/js/embed/embed.php index e9e08f9a0..49c277b69 100644 --- a/mod/embed/views/default/js/embed/embed.php +++ b/mod/embed/views/default/js/embed/embed.php @@ -15,9 +15,9 @@ elgg.embed.init = function() { }); // special pagination helper for lightbox - $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.pagination); + $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.loadContent); - $('.embed-section').live('click', elgg.embed.loadTab); + $('.embed-section').live('click', elgg.embed.loadContent); $('.embed-upload .elgg-form').live('submit', elgg.embed.submit); } @@ -87,7 +87,7 @@ elgg.embed.submit = function(event) { * @param {Object} event * @return void */ -elgg.embed.pagination = function(event) { +elgg.embed.loadContent = function(event) { $('.embed-wrapper').parent().load($(this).attr('href')); event.preventDefault(); } @@ -99,9 +99,7 @@ elgg.embed.pagination = function(event) { * @return void */ elgg.embed.loadTab = function(event) { - var section = $(this).attr('id'); - var url = elgg.config.wwwroot + 'embed/embed?active_section=' + section; - $('.embed-wrapper').parent().load(url); + $('.embed-wrapper').parent().load($(this).attr('href')); event.preventDefault(); } diff --git a/mod/embed/views/default/navigation/menu/embed.php b/mod/embed/views/default/navigation/menu/embed.php new file mode 100644 index 000000000..36cedc47e --- /dev/null +++ b/mod/embed/views/default/navigation/menu/embed.php @@ -0,0 +1,21 @@ + $menu_item->getText(), + 'url' => 'embed/tab/' . $menu_item->getName(), + 'url_class' => 'embed-section', + 'selected' => $menu_item->getSelected(), + ); + } +} + +echo elgg_view('navigation/tabs', array('tabs' => $tabs)); diff --git a/mod/file/start.php b/mod/file/start.php index 749d7a519..16ce0e233 100644 --- a/mod/file/start.php +++ b/mod/file/start.php @@ -61,19 +61,28 @@ function file_init() { $item = ElggMenuItem::factory(array( 'name' => 'file', 'text' => elgg_echo('file'), - 'href' => '#', - 'section' => 'select' + 'section' => 'select', + 'data' => array( + 'tab_type' => 'select', + 'options' => array( + 'type' => 'object', + 'subtype' => 'file', + ), + ), )); - elgg_register_menu_item('embed:sections', $item); + elgg_register_menu_item('embed', $item); $item = ElggMenuItem::factory(array( 'name' => 'file_upload', 'text' => elgg_echo('file:upload'), - 'href' => '#', - 'section' => 'upload' + 'section' => 'upload', + 'data' => array( + 'tab_type' => 'upload', + 'view' => 'embed/file_upload/content', + ), )); - elgg_register_menu_item('embed:sections', $item); + elgg_register_menu_item('embed', $item); } /** -- cgit v1.2.3