aboutsummaryrefslogtreecommitdiff
path: root/mod/profile/start.php
diff options
context:
space:
mode:
authorCash Costello <cash.costello@gmail.com>2011-10-29 09:52:17 -0400
committerCash Costello <cash.costello@gmail.com>2011-10-29 09:52:17 -0400
commit0625897f1e47e6cb46c5e4f4d4b6d50f9dd48239 (patch)
treebcef4565b7c7b4c525d0abda8f2672e11ab8c9f8 /mod/profile/start.php
parent2cbfc4624135475764d6b5a53b0b95fe980793a2 (diff)
downloadelgg-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.php76
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',