diff options
author | Cash Costello <cash.costello@gmail.com> | 2011-10-29 09:52:17 -0400 |
---|---|---|
committer | Cash Costello <cash.costello@gmail.com> | 2011-10-29 09:52:17 -0400 |
commit | 0625897f1e47e6cb46c5e4f4d4b6d50f9dd48239 (patch) | |
tree | bcef4565b7c7b4c525d0abda8f2672e11ab8c9f8 /mod/profile/start.php | |
parent | 2cbfc4624135475764d6b5a53b0b95fe980793a2 (diff) | |
download | elgg-0625897f1e47e6cb46c5e4f4d4b6d50f9dd48239.tar.gz elgg-0625897f1e47e6cb46c5e4f4d4b6d50f9dd48239.tar.bz2 |
Fixes #3920 profile plugin adds a fast loading of user avatars
Diffstat (limited to 'mod/profile/start.php')
-rw-r--r-- | mod/profile/start.php | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/mod/profile/start.php b/mod/profile/start.php index 2c38fdd2d..0f13ad844 100644 --- a/mod/profile/start.php +++ b/mod/profile/start.php @@ -20,6 +20,9 @@ function profile_init() { // will dictate the URL for all ElggUser objects elgg_register_entity_url_handler('user', 'all', 'profile_url'); + elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'profile_override_avatar_url'); + elgg_unregister_plugin_hook_handler('entity:icon:url', 'user', 'user_avatar_hook'); + elgg_register_simplecache_view('icon/user/default/tiny'); elgg_register_simplecache_view('icon/user/default/topbar'); @@ -28,7 +31,6 @@ function profile_init() { elgg_register_simplecache_view('icon/user/default/large'); elgg_register_simplecache_view('icon/user/default/master'); - // Register a page handler, so we can have nice URLs elgg_register_page_handler('profile', 'profile_page_handler'); elgg_extend_view('page/elements/head', 'profile/metatags'); @@ -45,7 +47,7 @@ function profile_init() { /** * Profile page handler * - * @param array $page Array of page elements, forwarded by the page handling mechanism + * @param array $page Array of URL segments passed by the page handling mechanism */ function profile_page_handler($page) { @@ -95,14 +97,65 @@ function profile_url($user) { } /** + * Use a URL for avatars that avoids loading Elgg engine for better performance + * + * @param string $hook + * @param string $entity_type + * @param string $return_value + * @param array $params + * @return string + */ +function profile_override_avatar_url($hook, $entity_type, $return_value, $params) { + + // if someone already set this, quit + if ($return_value) { + return null; + } + + $user = $params['entity']; + $size = $params['size']; + + if (!elgg_instanceof($user, 'user')) { + return null; + } + + $user_guid = $user->getGUID(); + $icon_time = $user->icontime; + + if (!$icon_time) { + return "_graphics/icons/user/default{$size}.gif"; + } + + if ($user->isBanned()) { + return null; + } + + $filehandler = new ElggFile(); + $filehandler->owner_guid = $user_guid; + $filehandler->setFilename("profile/{$user_guid}{$size}.jpg"); + + try { + if ($filehandler->exists()) { + $join_date = $user->getTimeCreated(); + return "mod/profile/icondirect.php?lastcache=$icon_time&joindate=$join_date&guid=$user_guid&size=$size"; + } + } catch (InvalidParameterException $e) { + elgg_log("Unable to get profile icon for user with GUID $user_guid", 'ERROR'); + return "_graphics/icons/default/$size.png"; + } + + return null; +} + +/** * Parse ECML on parts of the profile * - * @param unknown_type $hook - * @param unknown_type $entity_type - * @param unknown_type $return_value - * @param unknown_type $params + * @param string $hook + * @param string $entity_type + * @param array $return_value + * @return array */ -function profile_ecml_views_hook($hook, $entity_type, $return_value, $params) { +function profile_ecml_views_hook($hook, $entity_type, $return_value) { $return_value['profile/profile_content'] = elgg_echo('profile'); return $return_value; @@ -111,13 +164,12 @@ function profile_ecml_views_hook($hook, $entity_type, $return_value, $params) { /** * Register profile widgets with default widgets * - * @param unknown_type $hook - * @param unknown_type $type - * @param unknown_type $return - * @param unknown_type $params + * @param string $hook + * @param string $type + * @param array $return * @return array */ -function profile_default_widgets_hook($hook, $type, $return, $params) { +function profile_default_widgets_hook($hook, $type, $return) { $return[] = array( 'name' => elgg_echo('profile'), 'widget_context' => 'profile', |