aboutsummaryrefslogtreecommitdiff
path: root/mod/profile/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/profile/start.php')
-rw-r--r--mod/profile/start.php340
1 files changed, 124 insertions, 216 deletions
diff --git a/mod/profile/start.php b/mod/profile/start.php
index 90caa8f64..ab596f235 100644
--- a/mod/profile/start.php
+++ b/mod/profile/start.php
@@ -3,278 +3,186 @@
* Elgg profile plugin
*
* @package ElggProfile
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2010
- * @link http://elgg.com/
*/
+elgg_register_event_handler('init', 'system', 'profile_init', 1);
+
+// Metadata on users needs to be independent
+// outside of init so it happens earlier in boot. See #3316
+register_metadata_as_independent('user');
+
/**
- * Profile init function; sets up the profile functions
- *
+ * Profile init function
*/
function profile_init() {
- global $CONFIG;
-
- require_once 'profile_lib.php';
// Register a URL handler for users - this means that profile_url()
// will dictate the URL for all ElggUser objects
- register_entity_url_handler('profile_url', 'user', 'all');
-
- // Set up the menu for logged-in users
- elgg_extend_view('elgg_topbar/extend', 'profile/topbar_extend');
- //if (isloggedin()) {
- // add_menu(elgg_echo('profile:yours'), $_SESSION['user']->getURL() . '/extend');
- //}
-
- // Metadata on users needs to be independent
- register_metadata_as_independent('user');
-
- elgg_view_register_simplecache('icon/user/default/tiny');
- elgg_view_register_simplecache('icon/user/default/topbar');
- elgg_view_register_simplecache('icon/user/default/small');
- elgg_view_register_simplecache('icon/user/default/medium');
- elgg_view_register_simplecache('icon/user/default/large');
- elgg_view_register_simplecache('icon/user/default/master');
-
- // Register a page handler, so we can have nice URLs
- register_page_handler('profile', 'profile_page_handler');
- register_page_handler('icon', 'profile_icon_handler');
- register_page_handler('iconjs', 'profile_iconjs_handler');
-
- // Add Javascript reference to the page header
- elgg_extend_view('metatags', 'profile/metatags');
- elgg_extend_view('css', 'profile/css');
- elgg_extend_view('js/initialise_elgg', 'profile/javascript');
-
- // Now override icons
- register_plugin_hook('entity:icon:url', 'user', 'profile_usericon_hook');
-
- elgg_add_admin_submenu_item('defaultprofile', elgg_echo('profile:edit:default'), 'appearance');
-}
+ elgg_register_entity_url_handler('user', 'all', 'profile_url');
-/**
- * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
- * add and delete fields.
- *
- * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
- * other plugins have initialised.
- */
-function profile_fields_setup() {
- global $CONFIG;
-
- $profile_defaults = array (
- 'description' => 'longtext',
- 'briefdescription' => 'text',
- 'location' => 'tags',
- 'interests' => 'tags',
- 'skills' => 'tags',
- 'contactemail' => 'email',
- 'phone' => 'text',
- 'mobile' => 'text',
- 'website' => 'url',
- 'twitter' => 'text'
- );
+ 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');
- $loaded_default = array();
- if ($fieldlist = get_plugin_setting('user_defined_fields','profile')) {
- if (!empty($fieldlist)) {
- $fieldlistarray = explode(',',$fieldlist);
- $loaded_defaults = array();
- foreach($fieldlistarray as $listitem) {
- if ($translation = get_plugin_setting("admin_defined_profile_{$listitem}", 'profile')) {
- $type = get_plugin_setting("admin_defined_profile_type_{$listitem}", 'profile');
- $loaded_defaults["admin_defined_profile_{$listitem}"] = $type;
- add_translation(get_current_language(), array("profile:admin_defined_profile_{$listitem}" => $translation));
- }
- }
- }
- }
- if (count($loaded_defaults)) {
- $CONFIG->profile_using_custom = true;
- $profile_defaults = $loaded_defaults;
- }
+ elgg_register_simplecache_view('icon/user/default/tiny');
+ elgg_register_simplecache_view('icon/user/default/topbar');
+ elgg_register_simplecache_view('icon/user/default/small');
+ elgg_register_simplecache_view('icon/user/default/medium');
+ elgg_register_simplecache_view('icon/user/default/large');
+ elgg_register_simplecache_view('icon/user/default/master');
- $CONFIG->profile = trigger_plugin_hook('profile:fields', 'profile', NULL, $profile_defaults);
+ elgg_register_page_handler('profile', 'profile_page_handler');
- // register any tag metadata names
- foreach ($CONFIG->profile as $name => $type) {
- if ($type == 'tags') {
- elgg_register_tag_metadata_name($name);
- // register a tag name translation
- add_translation(get_current_language(), array("tag_names:$name" => elgg_echo("profile:$name")));
- }
- }
+ elgg_extend_view('page/elements/head', 'profile/metatags');
+ elgg_extend_view('css/elgg', 'profile/css');
+ elgg_extend_view('js/elgg', 'profile/js');
+
+ // allow ECML in parts of the profile
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'profile_ecml_views_hook');
+
+ // allow admins to set default widgets for users on profiles
+ elgg_register_plugin_hook_handler('get_list', 'default_widgets', 'profile_default_widgets_hook');
}
/**
* 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
+ * @return bool
*/
function profile_page_handler($page) {
- global $CONFIG;
- $username = $action = NULL;
-
- // short circuit if invalid or banned username
if (isset($page[0])) {
$username = $page[0];
$user = get_user_by_username($username);
+ elgg_set_page_owner_guid($user->guid);
+ } elseif (elgg_is_logged_in()) {
+ forward(elgg_get_logged_in_user_entity()->getURL());
+ }
- if (!$user || ($user->isBanned() && !isadminloggedin())) {
- return elgg_echo('profile:notfound');
- } else {
- set_input('username', $page[0]);
- }
+ // short circuit if invalid or banned username
+ if (!$user || ($user->isBanned() && !elgg_is_admin_logged_in())) {
+ register_error(elgg_echo('profile:notfound'));
+ forward();
}
+ $action = NULL;
if (isset($page[1])) {
$action = $page[1];
}
- switch ($action) {
- case 'edit':
- $layout = 'one_column_with_sidebar';
-
- if (!$user || !$user->canEdit()) {
- register_error(elgg_echo("profile:noaccess"));
- forward();
- }
-
- $content = profile_get_user_edit_content($user, $page);
- $content = elgg_view_layout($layout, $content);
- break;
-
- default:
- $layout = 'one_column';
- if (isset($page[1])) {
- $section = $page[1];
- } else {
- $section = 'activity';
- }
- $content = profile_get_user_profile_html($user, $section);
- $content = elgg_view_layout($layout, $content);
- break;
+ if ($action == 'edit') {
+ // use the core profile edit page
+ $base_dir = elgg_get_root_path();
+ require "{$base_dir}pages/profile/edit.php";
+ return true;
}
- page_draw($title, $content);
- return;
+ // main profile page
+ $params = array(
+ 'content' => elgg_view('profile/wrapper'),
+ 'num_columns' => 3,
+ );
+ $content = elgg_view_layout('widgets', $params);
+
+ $body = elgg_view_layout('one_column', array('content' => $content));
+ echo elgg_view_page($user->name, $body);
+ return true;
}
/**
- * Pagesetup function
+ * Profile URL generator for $user->getUrl();
*
+ * @param ElggUser $user
+ * @return string User URL
*/
-function profile_pagesetup()
-{
- global $CONFIG;
-
- //add submenu options
- if (get_context() == "profile") {
- $page_owner = page_owner_entity();
- add_submenu_item(elgg_echo('profile:editdetails'), $CONFIG->wwwroot . "pg/profile/{$page_owner->username}/edit/details");
- add_submenu_item(elgg_echo('profile:editicon'), $CONFIG->wwwroot . "pg/profile/{$page_owner->username}/edit/icon");
- }
+function profile_url($user) {
+ return elgg_get_site_url() . "profile/" . $user->username;
}
/**
- * Profile icon page handler
+ * Use a URL for avatars that avoids loading Elgg engine for better performance
*
- * @param array $page Array of page elements, forwarded by the page handling mechanism
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $return_value
+ * @param array $params
+ * @return string
*/
-function profile_icon_handler($page) {
- global $CONFIG;
+function profile_override_avatar_url($hook, $entity_type, $return_value, $params) {
- // The username should be the file we're getting
- if (isset($page[0])) {
- set_input('username',$page[0]);
+ // if someone already set this, quit
+ if ($return_value) {
+ return null;
}
- if (isset($page[1])) {
- set_input('size',$page[1]);
+
+ $user = $params['entity'];
+ $size = $params['size'];
+
+ if (!elgg_instanceof($user, 'user')) {
+ return null;
}
- // Include the standard profile index
- include($CONFIG->pluginspath . "profile/icon.php");
-}
-/**
- * Icon JS
- */
-function profile_iconjs_handler($page) {
- global $CONFIG;
- include($CONFIG->pluginspath . "profile/javascript.php");
+ $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;
}
/**
- * Profile URL generator for $user->getUrl();
+ * Parse ECML on parts of the profile
*
- * @param ElggUser $user
- * @return string User URL
+ * @param string $hook
+ * @param string $entity_type
+ * @param array $return_value
+ * @return array
*/
-function profile_url($user) {
- global $CONFIG;
- return $CONFIG->wwwroot . "pg/profile/" . $user->username;
+function profile_ecml_views_hook($hook, $entity_type, $return_value) {
+ $return_value['profile/profile_content'] = elgg_echo('profile');
+
+ return $return_value;
}
/**
- * This hooks into the getIcon API and provides nice user icons for users where possible.
+ * Register profile widgets with default widgets
*
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- * @return unknown
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @return array
*/
-function profile_usericon_hook($hook, $entity_type, $returnvalue, $params){
- global $CONFIG;
- if ((!$returnvalue) && ($hook == 'entity:icon:url') && ($params['entity'] instanceof ElggUser)){
- $entity = $params['entity'];
- $type = $entity->type;
- $subtype = get_subtype_from_id($entity->subtype);
- $viewtype = $params['viewtype'];
- $size = $params['size'];
- $username = $entity->username;
-
- if ($icontime = $entity->icontime) {
- $icontime = "{$icontime}";
- } else {
- $icontime = "default";
- }
-
- if ($entity->isBanned()) {
- return elgg_view('icon/user/default/'.$size);
- }
-
- $filehandler = new ElggFile();
- $filehandler->owner_guid = $entity->getGUID();
- $filehandler->setFilename("profile/" . $username . $size . ".jpg");
+function profile_default_widgets_hook($hook, $type, $return) {
+ $return[] = array(
+ 'name' => elgg_echo('profile'),
+ 'widget_context' => 'profile',
+ 'widget_columns' => 3,
+
+ 'event' => 'create',
+ 'entity_type' => 'user',
+ 'entity_subtype' => ELGG_ENTITIES_ANY_VALUE,
+ );
- if ($filehandler->exists()) {
- //$url = $CONFIG->url . "pg/icon/$username/$size/$icontime.jpg";
- return $CONFIG->wwwroot . 'mod/profile/icondirect.php?lastcache='.$icontime.'&username='.$entity->username.'&joindate=' . $entity->time_created . '&guid=' . $entity->guid . '&size='.$size;
- }
- }
+ return $return;
}
-
-// Make sure the profile initialisation function is called on initialisation
-register_elgg_event_handler('init','system','profile_init',1);
-register_elgg_event_handler('init','system','profile_fields_setup', 10000); // Ensure this runs after other plugins
-
-register_elgg_event_handler('pagesetup','system','profile_pagesetup');
-register_elgg_event_handler('profileupdate','all','object_notifications');
-
-
-// Register actions
-global $CONFIG;
-register_action("profile/edit",false,$CONFIG->pluginspath . "profile/actions/edit.php");
-register_action("profile/iconupload",false,$CONFIG->pluginspath . "profile/actions/iconupload.php");
-register_action("profile/cropicon",false,$CONFIG->pluginspath . "profile/actions/cropicon.php");
-register_action("profile/editdefault",false,$CONFIG->pluginspath . "profile/actions/editdefault.php", true);
-register_action("profile/editdefault/delete",false,$CONFIG->pluginspath . "profile/actions/deletedefaultprofileitem.php", true);
-register_action("profile/editdefault/reset",false,$CONFIG->pluginspath . "profile/actions/resetdefaultprofile.php", true);
-register_action("profile/editdefault/reorder",false,$CONFIG->pluginspath . "profile/actions/reorder.php", true);
-register_action("profile/editdefault/editfield",false,$CONFIG->pluginspath . "profile/actions/editfield.php", true);
-register_action("profile/addcomment",false,$CONFIG->pluginspath . "profile/actions/addcomment.php");
-register_action("profile/deletecomment",false,$CONFIG->pluginspath . "profile/actions/deletecomment.php");