diff options
Diffstat (limited to 'mod/embed')
-rw-r--r-- | mod/embed/views/default/embed/embed.php | 56 | ||||
-rw-r--r-- | mod/embed/views/default/embed/item/gallery.php | 53 | ||||
-rw-r--r-- | mod/embed/views/default/embed/layouts/gallery.php | 10 | ||||
-rw-r--r-- | mod/embed/views/default/embed/layouts/list.php | 55 |
4 files changed, 109 insertions, 65 deletions
diff --git a/mod/embed/views/default/embed/embed.php b/mod/embed/views/default/embed/embed.php index 09a15d7a0..4a14543d3 100644 --- a/mod/embed/views/default/embed/embed.php +++ b/mod/embed/views/default/embed/embed.php @@ -2,6 +2,9 @@ /** * Embed landing page * + * @todo Yes this is a lot of logic for a view. A good bit of it can be moved + * to the page handler + * * @uses string $vars['sections'] Array of section_id => Section Display Name * @uses string $vars['active_section'] Currently selected section_id */ @@ -38,12 +41,7 @@ if (!$sections) { $tabs_html = elgg_view('navigation/tabs', array('tabs' => $tabs)); $content .= $tabs_html; - $pagination_vars = array( - - ); - - $content .= elgg_view('navigation/pagination', $pagination_vars); - + // build the items and layout. if (array_key_exists($active_section, $sections)) { $section_info = $sections[$active_section]; $layout = isset($section_info['layout']) ? $section_info['layout'] : 'list'; @@ -62,11 +60,39 @@ if (!$sections) { // handles its own pagination $content .= $section_content; } elseif ($embed_info = trigger_plugin_hook('embed_get_items', $active_section, $params, array('items' => array(), 'count' => 0))) { - $params['items'] = $embed_info['items']; + // check if we have an override for this section type. + $view = "embed/$section/item/$layout"; + + if (!elgg_view_exists($view)) { + $view = "embed/item/$layout"; + } + + // pull out some common tests + // embed requires ECML, but until we have plugin deps working + // we need to explicitly check and use a fallback. + if ($ecml_enabled = is_plugin_enabled('ecml')){ + $ecml_valid_keyword = ecml_is_valid_keyword($section); + } else { + $ecml_valid_keyword = FALSE; + } + + $items_content = ''; + foreach ($embed_info['items'] as $item) { + $item_params = array( + 'section' => $section, + 'item' => $item, + 'ecml_enabled' => $ecml_enabled, + 'ecml_keyword' => ($ecml_valid_keyword) ? $section : 'entity' + ); + + $items_content .= elgg_view($view, $item_params); + } + + $params['content'] = $items_content; $params['count'] = $embed_info['count']; - // pagination here. + $content .= elgg_view('navigation/pagination', $params); - $content .= elgg_view("embed/layouts/{$section_info['layout']}", $params); + $content .= elgg_view("embed/layouts/$layout", $params); } else { $content .= elgg_echo('embed:no_section_content'); } @@ -80,8 +106,13 @@ echo $content; <script type="text/javascript"> $(document).ready(function() { - // insert embed codes + $('.embed_data').click(function() { + var embed_code = $(this).data('embed_code'); + elggEmbedInsertContent(embed_code); + }); + + // tabs $('.embed_section').click(function() { var section = $(this).attr('id'); var url = '<?php echo $vars['url']; ?>pg/embed/embed?active_section=' + section; @@ -90,7 +121,7 @@ $(document).ready(function() { return false; }); - // handle pagination + // pagination function elggPaginationClick() { $('#facebox .body .content').load($(this).attr('href')); return false; @@ -101,5 +132,4 @@ $(document).ready(function() { $('.pagination_previous').click(elggPaginationClick); }); -</script> - +</script>
\ No newline at end of file diff --git a/mod/embed/views/default/embed/item/gallery.php b/mod/embed/views/default/embed/item/gallery.php new file mode 100644 index 000000000..ed43ca1c3 --- /dev/null +++ b/mod/embed/views/default/embed/item/gallery.php @@ -0,0 +1,53 @@ +<?php +/** + * Default item view for embed items in gallery display. + * + * Why don't we recycle the view/type/subtype views? + * Because we need to have special JavaScript that fires when you click on + * the icon / title. + * + * @todo Yes this is copy and pasted. Pete needs to theme. I'll DRY it up later. + * + * @uses object $vars['item'] The item to display + * @return string A formatted item + */ + +$item = $vars['item']; +$section = $vars['section']; +$target = $vars['target']; +$ecml_keyword = (isset($vars['ecml_enabled']) && isset($vars['ecml_keyword'])) ? $vars['ecml_keyword'] : NULL; + +// @todo add entity checking. + +// different entity types have different title attribute names. +$title = isset($item->name) ? $item->name : $item->title; +// don't let it be too long +$title = elgg_make_excerpt($title); + +// @todo you can disable plugins that are required by other plugins +// (embed requires ecml) so fallback to a hard-coded check to see if ecml is enabled. +// #grumble +if ($ecml_keyword) { + $embed_code = "[$ecml_keyword guid={$item->getGUID()}]"; +} else { + // fallback to inserting a hard link to the object with its icon + $icon = "<img src=\"{$item->getIcon()}\" />" . htmlentities($title, ENT_QUOTES, 'UTF-8'); + + $embed_code = elgg_view('output/url', array( + 'href' => $item->getURL(), + 'title' => $title, + 'text' => $title, + 'encode_text' => FALSE + )); +} + +$icon = "<img src=\"{$item->getIcon('tiny')}\" />"; +$info = htmlentities($title, ENT_QUOTES, 'UTF-8'); + +$listing = elgg_view('entities/gallery_listing', array('icon' => $icon, 'info' => $info)); + +// @todo is this approach better than inline js? +echo "<div class=\"embed_data\" id=\"embed_{$item->getGUID()}\">$listing</div>"; +echo "<script type=\"text/javascript\"> + $('#embed_{$item->getGUID()}').data('embed_code', " . json_encode($embed_code) . "); +</script>";
\ No newline at end of file diff --git a/mod/embed/views/default/embed/layouts/gallery.php b/mod/embed/views/default/embed/layouts/gallery.php index b3d9bbc7f..9a923b8a1 100644 --- a/mod/embed/views/default/embed/layouts/gallery.php +++ b/mod/embed/views/default/embed/layouts/gallery.php @@ -1 +1,11 @@ <?php +/** + * Embed - Gallery items + * + * @uses string $vars['content'] Pre-formatted content. + * + */ + +$content = elgg_get_array_value('content', $vars, ''); + +echo $content;
\ No newline at end of file diff --git a/mod/embed/views/default/embed/layouts/list.php b/mod/embed/views/default/embed/layouts/list.php index d62d35417..0a1a299f0 100644 --- a/mod/embed/views/default/embed/layouts/list.php +++ b/mod/embed/views/default/embed/layouts/list.php @@ -2,59 +2,10 @@ /** * Embed - List items * - * @todo Yes this is a lot of logic for a view. The Javascript is faily complicated - * and pulling entity views out was making it worse. - * Once plugin deps are working, we'll remove the logic for that. - * - * @uses array $vars['items'] Array of ElggEntities - * @uses string $vars['section'] The section_id. + * @uses string $vars['content'] Pre-formatted content. * */ -$items = isset($vars['items']) ? $vars['items'] : array(); -$section = $vars['section']; - -// pull out some common tests -// embed requires ECML, but until we have plugin deps working -// we need to explicitly check and use a fallback. -if ($ecml_enabled = is_plugin_enabled('ecml')){ - $ecml_valid_keyword = ecml_is_valid_keyword($section); -} else { - $ecml_valid_keyword = FALSE; -} - -// check if we have an override for this section type. -$view = "embed/$section/item/list"; -if (!elgg_view_exists($view)) { - $view = "embed/item/list"; -} - -$content = ''; -foreach ($items as $item) { - // sanity checking - if (!elgg_instanceof($item)) { - continue; - } - - $params = array( - 'section' => $section, - 'item' => $item, - 'ecml_enabled' => $ecml_enabled, - 'ecml_keyword' => ($ecml_valid_keyword) ? $section : 'entity' - ); - - $content .= elgg_view($view, $params); -} - -echo $content; - -?> +$content = elgg_get_array_value('content', $vars, ''); -<script type="text/javascript"> -$(document).ready(function() { - $('.embed_data').click(function() { - var embed_code = $(this).data('embed_code'); - elggEmbedInsertContent(embed_code); - }); -}); -</script>
\ No newline at end of file +echo $content;
\ No newline at end of file |