From e5227e9221edbce84eee82af7f2c9903de702f37 Mon Sep 17 00:00:00 2001 From: cash Date: Sat, 5 Feb 2011 22:46:28 +0000 Subject: Fixes #2559 refs #2475 added ElggEntity:getIconURL() and elgg_view_entity_icon() git-svn-id: http://code.elgg.org/elgg/trunk@8039 36083f99-b078-4883-b0ff-0f9b5a30f544 --- documentation/theming/preview/icons.php | 21 ++++++ engine/classes/ElggEntity.php | 41 +++++++++-- engine/lib/deprecated-1.8.php | 75 ++++++++++++++++++++ engine/lib/entities.php | 117 -------------------------------- engine/lib/input.php | 2 +- engine/lib/users.php | 11 ++- engine/lib/views.php | 41 +++++++++++ js/lib/ui.js | 8 +-- mod/pages/views/default/pages/icon.php | 4 +- views/default/css/elements/icons.php | 42 ++++++------ views/default/input/userpicker.php | 2 +- views/default/page/elements/topbar.php | 2 +- views/default/profile/icon.php | 71 ++----------------- views/foaf/page/shells/default.php | 7 +- 14 files changed, 221 insertions(+), 223 deletions(-) diff --git a/documentation/theming/preview/icons.php b/documentation/theming/preview/icons.php index 2a3a9bb7e..665f1f817 100644 --- a/documentation/theming/preview/icons.php +++ b/documentation/theming/preview/icons.php @@ -36,6 +36,27 @@ $url = current_page_url();
false)); ?>
+

Avatars

+
+ '; + echo ''; + foreach ($sizes as $size) { + echo "

$size

"; + } + echo ''; + echo ''; + foreach ($sizes as $size) { + echo ''; + echo elgg_view_entity_icon($user, $size, array('hover' => false)); + echo ''; + } + echo ''; + echo ''; + ?> +
\ No newline at end of file diff --git a/engine/classes/ElggEntity.php b/engine/classes/ElggEntity.php index 21aa72561..5e43ab582 100644 --- a/engine/classes/ElggEntity.php +++ b/engine/classes/ElggEntity.php @@ -832,19 +832,50 @@ abstract class ElggEntity extends ElggData implements return $url; } + /** + * Get the URL for this entity's icon + * + * Plugins can register for the 'entity:icon:url', plugin hook + * to customize the icon for an entity. + * + * @param string $size Size of the icon: tiny, small, medium, large + * + * @return string The URL + * @since 1.8.0 + */ + public function getIconURL($size = 'medium') { + $size = elgg_strtolower($size); + + if (isset($this->icon_override[$size])) { + elgg_deprecated_notice("icon_override on an individual entity is deprecated", 1.8); + return $this->icon_override[$size]; + } + + $url = "_graphics/icons/default/$size.png"; + $url = elgg_normalize_url($url); + + $type = $this->getType(); + $params = array( + 'entity' => $this, + 'size' => $size, + ); + + $url = elgg_trigger_plugin_hook('entity:icon:url', $type, $params, $url); + + return elgg_normalize_url($url); + } + /** * Returns a URL for the entity's icon. * * @param string $size Either 'large', 'medium', 'small' or 'tiny' * * @return string The url or false if no url could be worked out. - * @see get_entity_icon_url() + * @deprecated Use getIconURL() */ public function getIcon($size = 'medium') { - if (isset($this->icon_override[$size])) { - return $this->icon_override[$size]; - } - return get_entity_icon_url($this, $size); + elgg_deprecated_notice("getIcon() deprecated by getIconURL()", 1.8); + return $this->getIconURL($size); } /** diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php index 3db32c522..f293c178f 100644 --- a/engine/lib/deprecated-1.8.php +++ b/engine/lib/deprecated-1.8.php @@ -2837,3 +2837,78 @@ function elgg_view_listing($icon, $info) { elgg_deprecated_notice('elgg_view_listing deprecated by elgg_view_image_block', 1.8); return elgg_view('layout/objects/image_block', array('image' => $icon, 'body' => $info)); } + +/** + * Return the icon URL for an entity. + * + * @tip Can be overridden by registering a plugin hook for entity:icon:url, $entity_type. + * + * @internal This is passed an entity rather than a guid to handle non-created entities. + * + * @param ElggEntity $entity The entity + * @param string $size Icon size + * + * @return string URL to the entity icon. + * @deprecated 1.8 Use $entity->getIconURL() + */ +function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { + elgg_deprecated_notice("get_entity_icon_url() deprecated for getIconURL()", 1.8); + global $CONFIG; + + $size = sanitise_string($size); + switch (strtolower($size)) { + case 'master': + $size = 'master'; + break; + + case 'large' : + $size = 'large'; + break; + + case 'topbar' : + $size = 'topbar'; + break; + + 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 + $params = array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size); + $url = elgg_trigger_plugin_hook('entity:icon:url', $entity->getType(), $params, $url); + + // Fail, so use default + if (!$url) { + $type = $entity->getType(); + $subtype = $entity->getSubtype(); + + if (!empty($subtype)) { + $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}", array('entity' => $entity)); + if (!empty($overrideurl)) { + return $overrideurl; + } + } + + $overrideurl = elgg_view("icon/{$type}/default/{$size}", array('entity' => $entity)); + if (!empty($overrideurl)) { + return $overrideurl; + } + + $url = "_graphics/icons/default/$size.png"; + } + + return elgg_normalize_url($url); +} diff --git a/engine/lib/entities.php b/engine/lib/entities.php index 2a3c6ba91..ac2679dfc 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -1758,79 +1758,6 @@ function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null } } -/** - * Return the icon URL for an entity. - * - * @tip Can be overridden by registering a plugin hook for entity:icon:url, $entity_type. - * - * @internal This is passed an entity rather than a guid to handle non-created entities. - * - * @param ElggEntity $entity The entity - * @param string $size Icon size - * - * @return string URL to the entity icon. - */ -function get_entity_icon_url(ElggEntity $entity, $size = 'medium') { - global $CONFIG; - - $size = sanitise_string($size); - switch (strtolower($size)) { - case 'master': - $size = 'master'; - break; - - case 'large' : - $size = 'large'; - break; - - case 'topbar' : - $size = 'topbar'; - break; - - 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 - $params = array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size); - $url = elgg_trigger_plugin_hook('entity:icon:url', $entity->getType(), $params, $url); - - // Fail, so use default - if (!$url) { - $type = $entity->getType(); - $subtype = $entity->getSubtype(); - - if (!empty($subtype)) { - $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}", array('entity' => $entity)); - if (!empty($overrideurl)) { - return $overrideurl; - } - } - - $overrideurl = elgg_view("icon/{$type}/default/{$size}", array('entity' => $entity)); - if (!empty($overrideurl)) { - return $overrideurl; - } - - $url = "_graphics/icons/default/$size.png"; - } - - return elgg_normalize_url($url); -} - /** * Returns the URL for an entity. * @@ -1869,7 +1796,6 @@ function get_entity_url($entity_guid) { } return elgg_normalize_url($url); - } return false; @@ -1908,46 +1834,6 @@ $entity_subtype = "all") { return true; } -/** - * Default Icon handler for entities. - * - * @tip This will attempt to find a default entity for the current view and return a url. - * This is registered at a high priority so that other handlers will pick it up first. - * - * @param string $hook entity:icon:url - * @param string $entity_type all - * @param mixed $returnvalue Previous hook's return value - * @param array $params Array of params - * - * @return string|null String of URL for entity's icon - * @elgg_plugin_hook_handler entity:icon:url all - */ -function default_entity_icon_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 = "views/$viewtype/graphics/icons/$type/$subtype/$size.png"; - - if (!@file_exists($CONFIG->path . $url)) { - $url = "views/$viewtype/graphics/icons/$type/default/$size.png"; - } - - if (!@file_exists($CONFIG->path . $url)) { - $url = "views/$viewtype/graphics/icons/default/$size.png"; - } - - if (@file_exists($CONFIG->path . $url)) { - return elgg_get_site_url() . $url; - } - } -} - /** * Registers an entity type and subtype as a public-facing entity that should * be shown in search and by {@link elgg_list_registered_entities()}. @@ -2311,8 +2197,5 @@ elgg_register_plugin_hook_handler("export", "all", "export_entity_plugin_hook", /** Hook to get certain named bits of volatile data about an entity */ elgg_register_plugin_hook_handler('volatile', 'metadata', 'volatile_data_export_plugin_hook'); -/** Hook for rendering a default icon for entities */ -elgg_register_plugin_hook_handler('entity:icon:url', 'all', 'default_entity_icon_hook', 1000); - /** Register init system event **/ elgg_register_event_handler('init', 'system', 'entities_init'); diff --git a/engine/lib/input.php b/engine/lib/input.php index 76daf5fa3..5ec347877 100644 --- a/engine/lib/input.php +++ b/engine/lib/input.php @@ -168,7 +168,7 @@ function input_livesearch_page_handler($page) { 'name' => $entity->name, 'desc' => $entity->username, 'icon' => '', + get_entity($entity->guid)->getIconURL('tiny') . '" />', 'guid' => $entity->guid )); $results[$entity->name . rand(1, 100)] = $json; diff --git a/engine/lib/users.php b/engine/lib/users.php index 567f587ea..be7399a44 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -1276,10 +1276,15 @@ function user_create_hook_add_site_relationship($event, $object_type, $object) { * @param array $params * @return string */ -function user_avatar_hook($hook, $entity_type, $returnvalue, $params){ - $entity = $params['entity']; +function user_avatar_hook($hook, $entity_type, $returnvalue, $params) { + $user = $params['entity']; $size = $params['size']; - return "pg/avatar/view/{$entity->username}?size=$size"; + + if (isset($user->icontime)) { + return "pg/avatar/view/$user->username?size=$size"; + } else { + return "_graphics/icons/user/default{$size}.gif"; + } } /** diff --git a/engine/lib/views.php b/engine/lib/views.php index e20c98929..56325ebda 100644 --- a/engine/lib/views.php +++ b/engine/lib/views.php @@ -773,6 +773,47 @@ function elgg_view_entity(ElggEntity $entity, $full = false, $bypass = true, $de return $contents; } +/** + * View the icon of an entity + * + * Entity views are determined by having a view named after the entity $type/$subtype. + * Entities that do not have a defined icon/$type/$subtype view will fall back to using + * the icon/$type/default view. + * + * @param ElggEntity $entity The entity to display + * @param string $string The size: tiny, small, medium, large + * @param array $vars An array of variables to pass to the view + * + * @return string HTML to display or false + */ +function elgg_view_entity_icon(ElggEntity $entity, $size = 'medium', $vars = array()) { + + // No point continuing if entity is null + if (!$entity || !($entity instanceof ElggEntity)) { + return false; + } + + $vars['entity'] = $entity; + $vars['size'] = $size; + + $entity_type = $entity->getType(); + + $subtype = $entity->getSubtype(); + if (empty($subtype)) { + $subtype = 'default'; + } + + $contents = ''; + if (elgg_view_exists("icon/$entity_type/$subtype")) { + $contents = elgg_view("icon/$entity_type/$subtype", $vars); + } + if (empty($contents)) { + $contents = elgg_view("icon/$entity_type/default", $vars); + } + + return $contents; +} + /** * Returns a string of a rendered annotation. * diff --git a/js/lib/ui.js b/js/lib/ui.js index bf918cbf4..2ea0ccc46 100644 --- a/js/lib/ui.js +++ b/js/lib/ui.js @@ -94,7 +94,7 @@ elgg.ui.initHoverMenu = function(parent) { } // avatar image menu link - $(parent).find(".elgg-user-icon").mouseover(function() { + $(parent).find(".elgg-avatar").mouseover(function() { $(this).children(".elgg-icon-hover-menu").show(); }) .mouseout(function() { @@ -103,7 +103,7 @@ elgg.ui.initHoverMenu = function(parent) { // avatar contextual menu - $(".elgg-user-icon > .elgg-icon-hover-menu").click(function(e) { + $(".elgg-avatar > .elgg-icon-hover-menu").click(function(e) { var $hovermenu = $(this).parent().find(".elgg-hover-menu"); @@ -111,7 +111,7 @@ elgg.ui.initHoverMenu = function(parent) { if ($hovermenu.css('display') == "block") { $hovermenu.fadeOut(); } else { - $avatar = $(this).closest(".elgg-user-icon"); + $avatar = $(this).closest(".elgg-avatar"); $hovermenu.css("top", ($avatar.height()) + "px") .css("left", ($avatar.width()-15) + "px") .fadeIn('normal'); @@ -123,7 +123,7 @@ elgg.ui.initHoverMenu = function(parent) { // hide avatar menu when user clicks elsewhere $(document).click(function(event) { - if ($(event.target).parents(".elgg-user-icon").length == 0) { + if ($(event.target).parents(".elgg-avatar").length == 0) { $(".elgg-hover-menu").fadeOut(); } }); diff --git a/mod/pages/views/default/pages/icon.php b/mod/pages/views/default/pages/icon.php index fd084bca7..ede0e49d1 100644 --- a/mod/pages/views/default/pages/icon.php +++ b/mod/pages/views/default/pages/icon.php @@ -24,4 +24,6 @@ if (!empty($vars['align'])) { ?> - /> + + /> + diff --git a/views/default/css/elements/icons.php b/views/default/css/elements/icons.php index 18ea4899e..3f9121eb1 100644 --- a/views/default/css/elements/icons.php +++ b/views/default/css/elements/icons.php @@ -69,7 +69,7 @@ .elgg-icon-hover-menu:hover { background-position: -150px -32px; } -.elgg-user-icon > .elgg-icon-hover-menu { +.elgg-avatar > .elgg-icon-hover-menu { display: none; position: absolute; right: 0; @@ -78,26 +78,27 @@ cursor: pointer; } - .elgg-ajax-loader { background-color: white; background-image: url(_graphics/ajax_loader_bw.gif); background-repeat: no-repeat; background-position: center center; - min-height:33px; - min-width:33px; + min-height: 33px; + min-width: 33px; } /* *************************************** AVATAR ICONS *************************************** */ -.elgg-user-icon { - position:relative; +.elgg-avatar { + position: relative; } -.elgg-user-icon.tiny, -img.tiny { - width:25px; - height:25px; +.elgg-avatar > a > img { + display: block; +} +.elgg-avatar-tiny > a > img { + width: 25px; + height: 25px; /* remove the border-radius if you don't want rounded avatars in supported browsers */ -webkit-border-radius: 3px; -moz-border-radius: 3px; @@ -108,10 +109,9 @@ img.tiny { -khtml-background-size: 25px; -moz-background-size: 25px; } -.elgg-user-icon.small, -img.small { - width:40px; - height:40px; +.elgg-avatar-small > a > img { + width: 40px; + height: 40px; /* remove the border-radius if you don't want rounded avatars in supported browsers */ -webkit-border-radius: 5px; -moz-border-radius: 5px; @@ -122,11 +122,11 @@ img.small { -khtml-background-size: 40px; -moz-background-size: 40px; } -img.large { - width:200px; - height:200px; +.elgg-avatar-medium > a > img { + width: 100px; + height: 100px; +} +.elgg-avatar-large > a > img { + width: 200px; + height: 200px; } -img.medium { - width:100px; - height:100px; -} \ No newline at end of file diff --git a/views/default/input/userpicker.php b/views/default/input/userpicker.php index 20198d236..c9cfe2d8f 100644 --- a/views/default/input/userpicker.php +++ b/views/default/input/userpicker.php @@ -26,7 +26,7 @@ function user_picker_add_user($user_id) { return FALSE; } - $icon = $user->getIcon('tiny'); + $icon = $user->getIconURL('tiny'); $code = '
  • '; $code .= ""; diff --git a/views/default/page/elements/topbar.php b/views/default/page/elements/topbar.php index 31d709b7b..40306fcc3 100644 --- a/views/default/page/elements/topbar.php +++ b/views/default/page/elements/topbar.php @@ -22,7 +22,7 @@ echo elgg_view('output/url', array( // avatar $user_link = $user->getURL(); -$user_image = $user->getIcon('topbar'); +$user_image = $user->getIconURL('topbar'); $image = "\"$user-name\" class=\"elgg-border-plain\" />"; echo elgg_view('output/url', array( 'href' => $user_link, diff --git a/views/default/profile/icon.php b/views/default/profile/icon.php index 5685c0a73..1a36ca3cd 100644 --- a/views/default/profile/icon.php +++ b/views/default/profile/icon.php @@ -1,77 +1,16 @@ name, ENT_QUOTES, 'UTF-8'); -$username = $user->username; - -$icontime = $user->icontime; -if (!$icontime) { - $icontime = "default"; -} - -$js = elgg_get_array_value('js', $vars, ''); - -// Get any align and js -if (!empty($vars['align'])) { - $align = " align=\"{$vars['align']}\" "; -} else { - $align = ''; -} - $override = elgg_get_array_value('override', $vars, false); +$vars['hover'] = !$override; -$spacer_url = elgg_get_site_url() . '_graphics/spacer.gif'; -$icon_url = $user->getIcon($size); -$icon = "\"$name\""; - -// no hover menu if override set -if ($override) { - echo $icon; - return true; -} - -?> -
    - $user, - 'username' => $username, - 'name' => $name, -); -echo elgg_view('profile/hover', $params); - -if ((isadminloggedin()) || (!$user->isBanned())) { -?> - -isBanned())) { -?> - - -
    +echo elgg_view('icon/user/default', $vars); diff --git a/views/foaf/page/shells/default.php b/views/foaf/page/shells/default.php index 1cd0ed82e..d360f209b 100644 --- a/views/foaf/page/shells/default.php +++ b/views/foaf/page/shells/default.php @@ -1,10 +1,12 @@ pg/blog/username; ?>" /> */ header("Content-Type: text/xml"); @@ -39,8 +41,7 @@ if (!$owner = elgg_get_page_owner_entity()) { username; ?> name; ?> - - + -- cgit v1.2.3