diff options
author | marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2008-08-05 14:02:11 +0000 |
---|---|---|
committer | marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2008-08-05 14:02:11 +0000 |
commit | 5b3ebee581cb3c94f0f5e1109b36837bb28b0c66 (patch) | |
tree | f415773fc7cee40b64f404b3053c1c57b84efba9 | |
parent | bb7fd0423871801000f48d6e1055a613449dd764 (diff) | |
download | elgg-5b3ebee581cb3c94f0f5e1109b36837bb28b0c66.tar.gz elgg-5b3ebee581cb3c94f0f5e1109b36837bb28b0c66.tar.bz2 |
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
-rw-r--r-- | engine/lib/elgglib.php | 69 | ||||
-rw-r--r-- | 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 * @@ -1745,6 +1786,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 * * @param array $page Page elements from pain page handler @@ -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'); |