aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-08-05 14:02:11 +0000
committermarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-08-05 14:02:11 +0000
commit5b3ebee581cb3c94f0f5e1109b36837bb28b0c66 (patch)
treef415773fc7cee40b64f404b3053c1c57b84efba9
parentbb7fd0423871801000f48d6e1055a613449dd764 (diff)
downloadelgg-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.php69
-rw-r--r--engine/lib/entities.php80
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');