From 5b3ebee581cb3c94f0f5e1109b36837bb28b0c66 Mon Sep 17 00:00:00 2001 From: marcus Date: Tue, 5 Aug 2008 14:02:11 +0000 Subject: Fixes #202 : Listen to plugin hook 'entity:icon:url', which passes parameters: 'entity' The entity 'viewtype' The view (eg 'default') 'size' The size (eg, large, tiny etc) You should return a url for the object's icon if you can.. otherwise return nothing at all. git-svn-id: https://code.elgg.org/elgg/trunk@1705 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/elgglib.php | 69 ++---------------------------------------- engine/lib/entities.php | 80 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 82 insertions(+), 67 deletions(-) diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 6d61dfb9e..1bd9843f6 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -283,71 +283,7 @@ return false; } - - /** - * Get the icon for an entity - * - * @param ElggEntity $entity The entity (passed an entity rather than a guid to handle non-created entities) - * @param string $size - */ - function elgg_get_entity_icon_url(ElggEntity $entity, $size = 'medium') - { - global $CONFIG; - - $size = sanitise_string($size); - switch (strtolower($size)) - { - case 'master': - case 'large' : $size = 'large'; break; - - case 'topbar' : - case 'tiny' : $size = 'tiny'; break; - - case 'small' : $size = 'small'; break; - - case 'medium' : - default: $size = 'medium'; - } - - $url = false; - - $view = elgg_get_viewtype(); - $location = elgg_get_view_location($view); - - // Use the object/subtype - $type = $entity->type; - $subtype = $entity->subtype; - - if (!$url) - { - $tmp_url = $location . "{$view}/graphics/icons/$type/$subtype/$size.png"; - if (file_exists($tmp_url)) - $url = $tmp_url; - } - - // Get the default for the object - if (!$url) - { - $tmp_url = $location . "{$view}/graphics/icons/$type/default/$size.png"; - if (file_exists($tmp_url)) - $url = $tmp_url; - } - - // If url still blank then attempt to use the view's defaults - if (!$url) - { - $tmp_url = $location . "{$view}/graphics/icons/default/$size.png"; - if (file_exists($tmp_url)) - $url = $tmp_url; - } - - // If all else fails - if (!$url) - $url = $CONFIG->url . "_graphics/icons/default/$size.png"; - - return $url; - } - + /** * When given an entity, views it intelligently. * @@ -755,7 +691,7 @@ if ($handle = opendir($folder)) { while ($view = readdir($handle)) { if (!in_array($view,array('.','..','.svn','CVS')) && !is_dir($folder . "/" . $view)) { - if (substr_count($view,".php") > 0) { + if ((substr_count($view,".php") > 0) || (substr_count($view,".png") > 0)) { if (!empty($view_base)) { $view_base_new = $view_base . "/"; } else { $view_base_new = ""; } set_view_location($view_base_new . str_replace(".php","",$view), $base_location_path); } @@ -765,6 +701,7 @@ } } } + } diff --git a/engine/lib/entities.php b/engine/lib/entities.php index 2e0b7d21e..198889311 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -512,7 +512,7 @@ public function getIcon($size = 'medium') { if (isset($this->icon_override[$size])) return $this->icon_override[$size]; - return elgg_get_entity_icon_url($this, $size); + return get_entity_icon_url($this, $size); } /** @@ -1676,7 +1676,48 @@ } + + /** + * Get the icon for an entity + * + * @param ElggEntity $entity The entity (passed an entity rather than a guid to handle non-created entities) + * @param string $size + */ + function get_entity_icon_url(ElggEntity $entity, $size = 'medium') + { + global $CONFIG; + + $size = sanitise_string($size); + switch (strtolower($size)) + { + case 'master': + case 'large' : $size = 'large'; break; + + case 'topbar' : + case 'tiny' : $size = 'tiny'; break; + + case 'small' : $size = 'small'; break; + + case 'medium' : + default: $size = 'medium'; + } + + $url = false; + + $viewtype = elgg_get_viewtype(); + + // Step one, see if anyone knows how to render this in the current view + $url = trigger_plugin_hook('entity:icon:url', $type, array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size), $url); + if (!file_exists($url)) + $url = false; // If not exist then don't use the url + + // Fail, so use default + if (!$url) + $url = $CONFIG->url . "_graphics/icons/default/$size.png"; + return $url; + } + /** * Gets the URL for an entity, given a particular GUID * @@ -1744,6 +1785,40 @@ } + /** + * Default Icon URL handler for entities. + * This will attempt to find a default entity for the current view and return a url. This is registered at + * a low priority so that other handlers will pick it up first. + * + * @param unknown_type $hook + * @param unknown_type $entity_type + * @param unknown_type $returnvalue + * @param unknown_type $params + */ + function default_entity_url_hook($hook, $entity_type, $returnvalue, $params) + { + global $CONFIG; + + if ((!$returnvalue) && ($hook == 'entity:icon:url')) + { + $entity = $params['entity']; + $type = $entity->type; + $subtype = get_subtype_from_id($entity->subtype); + $viewtype = $params['viewtype']; + $size = $params['size']; + + $url = $CONFIG->url . "views/$viewtype/graphics/icons/$type/$subtype/$size.png"; + + if (!file_exists($url)) + $url = $CONFIG->url . "views/$viewtype/graphics/icons/$type/default/$size.png"; + + if (!file_exists($url)) + $url = $CONFIG->url . "views/$viewtype/graphics/icons/default/$size.png"; + + return $url; + } + } + /** * Page handler for generic entities view system * @@ -1774,6 +1849,9 @@ /** Hook to get certain named bits of volatile data about an entity */ register_plugin_hook('volatile', 'metadata', 'volatile_data_export_plugin_hook'); + /** Hook for rendering a default icon for entities */ + register_plugin_hook('entity:icon:url', 'all', 'default_entity_url_hook', 700); + /** Register init system event **/ register_elgg_event_handler('init','system','entities_init'); -- cgit v1.2.3