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.php582
1 files changed, 285 insertions, 297 deletions
diff --git a/mod/profile/start.php b/mod/profile/start.php
index 168d0b013..2fef3f4d2 100644
--- a/mod/profile/start.php
+++ b/mod/profile/start.php
@@ -1,319 +1,307 @@
<?php
-
- /**
- * 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/
- */
-
- /**
- * Profile init function; sets up the profile functions
- *
- */
- function profile_init() {
-
- // Get config
- global $CONFIG;
-
- // 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');
-
- // 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');
-
- // For now, we'll hard code the profile items as follows:
- // TODO make this user configurable
-
-
-
- /*$CONFIG->profile = array(
-
- // Language short codes must be of the form "profile:key"
- // where key is the array key below
- 'description' => 'longtext',
- 'briefdescription' => 'text',
- 'location' => 'tags',
- 'interests' => 'tags',
- 'skills' => 'tags',
- 'contactemail' => 'email',
- 'phone' => 'text',
- 'mobile' => 'text',
- 'website' => 'url',
-
- );*/
-
- // Register a page handler, so we can have nice URLs
- register_page_handler('profile','profile_page_handler');
- register_page_handler('defaultprofile','profileedit_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');
- if (get_context() == "profile") {
- elgg_extend_view('canvas_header/submenu','profile/submenu');
- }
-
-
-
- // Extend context menu with admin links
- if (isadminloggedin())
- {
- elgg_extend_view('profile/menu/links','profile/menu/adminwrapper',10000);
- }
-
- // Now override icons
- register_plugin_hook('entity:icon:url', 'user', 'profile_usericon_hook');
-
+/**
+ * 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/
+ */
+
+/**
+ * Profile init function; sets up the profile functions
+ *
+ */
+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
+ 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('defaultprofile', 'profileedit_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');
+
+ if (get_context() == 'profile') {
+ elgg_extend_view('canvas_header/submenu', 'profile/submenu');
+ }
+
+ // Extend context menu with admin links
+ if (isadminloggedin()){
+ elgg_extend_view('profile/menu/links', 'profile/menu/adminwrapper', 10000);
+ }
+
+ // Now override icons
+ register_plugin_hook('entity:icon:url', 'user', 'profile_usericon_hook');
+
+}
+
+/**
+ * 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'
+ );
+
+ // TODO: Have an admin interface for this
+ $n = 0;
+ $loaded_defaults = array();
+ while ($translation = get_plugin_setting("admin_defined_profile_$n", 'profile')){
+ // Add a translation
+ add_translation(get_current_language(), array("profile:admin_defined_profile_$n" => $translation));
+
+ // Detect type
+ $type = get_plugin_setting("admin_defined_profile_type_$n", 'profile');
+ if (!$type) $type = 'text';
+
+ // Set array
+ $loaded_defaults["admin_defined_profile_$n"] = $type;
+
+ $n++;
+ }
+ if (count($loaded_defaults)) {
+ $CONFIG->profile_using_custom = true;
+ $profile_defaults = $loaded_defaults;
+ }
+
+ $CONFIG->profile = trigger_plugin_hook('profile:fields', 'profile', NULL, $profile_defaults);
+
+ // 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")));
}
-
- /**
- * 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',
- );
-
- // TODO: Have an admin interface for this
-
- $n = 0;
- $loaded_defaults = array();
- while ($translation = get_plugin_setting("admin_defined_profile_$n", 'profile'))
- {
- // Add a translation
- add_translation(get_current_language(), array("profile:admin_defined_profile_$n" => $translation));
-
- // Detect type
- $type = get_plugin_setting("admin_defined_profile_type_$n", 'profile');
- if (!$type) $type = 'text';
-
- // Set array
- $loaded_defaults["admin_defined_profile_$n"] = $type;
-
- $n++;
- }
- if (count($loaded_defaults)) {
- $CONFIG->profile_using_custom = true;
- $profile_defaults = $loaded_defaults;
- }
-
- $CONFIG->profile = trigger_plugin_hook('profile:fields', 'profile', NULL, $profile_defaults);
-
- // 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")));
- }
- }
+ }
+}
+
+/**
+ * Profile page handler
+ *
+ * @param array $page Array of page elements, forwarded by the page handling mechanism
+ */
+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);
+
+ if (!$user || ($user->isBanned() && !isadminloggedin())) {
+ return elgg_echo('profile:notfound');
+ } else {
+ set_input('username', $page[0]);
}
+ }
- /**
- * Profile page handler
- *
- * @param array $page Array of page elements, forwarded by the page handling mechanism
- */
- function profile_page_handler($page) {
+ if (isset($page[1])) {
+ $action = $page[1];
+ }
- global $CONFIG;
-
- // The username should be the file we're getting
- if (isset($page[0])) {
- set_input('username',$page[0]);
+ switch ($action) {
+ case 'edit':
+ if (!$user || !$user->canEdit()) {
+ register_error(elgg_echo("profile:noaccess"));
+ forward();
}
- // Any sub pages?
- if (isset($page[1])) {
- switch ($page[1])
- {
- case 'edit' : include($CONFIG->pluginspath . "profile/edit.php"); break;
- case 'editicon' : include($CONFIG->pluginspath . "profile/editicon.php"); break;
+ $content = profile_get_user_edit_content($user, $page);
+ break;
- }
- }
- else
- {
- // Include the standard profile index
- include($CONFIG->pluginspath . "profile/index.php");
- }
- }
-
- /**
- * Profile edit page handler
- *
- * @param array $page Array of page elements, forwarded by the page handling mechanism
- */
- function profileedit_page_handler($page) {
-
- global $CONFIG;
-
- // The username should be the file we're getting
- if (isset($page[0])) {
- switch ($page[0])
- {
- default: include($CONFIG->pluginspath . "profile/defaultprofile.php");
- }
- }
-
- }
-
- /**
- * Pagesetup function
- *
- */
- function profile_pagesetup()
- {
- global $CONFIG;
- if (get_context() == 'admin' && isadminloggedin()) {
-
- add_submenu_item(elgg_echo('profile:edit:default'), $CONFIG->wwwroot . 'pg/defaultprofile/edit/');
- }
-
- //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/");
- add_submenu_item(elgg_echo('profile:editicon'), $CONFIG->wwwroot . "pg/profile/{$page_owner->username}/editicon/");
- }
- }
-
- /**
- * Profile icon page handler
- *
- * @param array $page Array of page elements, forwarded by the page handling mechanism
- */
- function profile_icon_handler($page) {
-
- global $CONFIG;
-
- // The username should be the file we're getting
- if (isset($page[0])) {
- set_input('username',$page[0]);
- }
+ default:
if (isset($page[1])) {
- set_input('size',$page[1]);
+ $section = $page[1];
+ } else {
+ $section = 'activity';
}
- // Include the standard profile index
- include($CONFIG->pluginspath . "profile/icon.php");
-
+ $content = profile_get_user_profile_html($user, $section);
+ break;
+ }
+
+ $content = elgg_view_layout('one_column', $content);
+
+ page_draw($title, $content);
+ return;
+}
+
+/**
+ * Profile edit page handler
+ *
+ * @param array $page Array of page elements, forwarded by the page handling mechanism
+ */
+function profileedit_page_handler($page) {
+ global $CONFIG;
+
+ // The username should be the file we're getting
+ if (isset($page[0])) {
+ switch ($page[0]) {
+ default:
+ include($CONFIG->pluginspath . "profile/defaultprofile.php");
+ break;
}
-
- /**
- * Icon JS
- */
- function profile_iconjs_handler($page) {
-
- global $CONFIG;
-
- include($CONFIG->pluginspath . "profile/javascript.php");
-
+ }
+}
+
+/**
+ * Pagesetup function
+ *
+ */
+function profile_pagesetup()
+{
+ global $CONFIG;
+ if (get_context() == 'admin' && isadminloggedin()) {
+ add_submenu_item(elgg_echo('profile:edit:default'), $CONFIG->wwwroot . 'pg/defaultprofile/edit/');
+ }
+
+ //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");
+ }
+}
+
+/**
+ * Profile icon page handler
+ *
+ * @param array $page Array of page elements, forwarded by the page handling mechanism
+ */
+function profile_icon_handler($page) {
+ global $CONFIG;
+
+ // The username should be the file we're getting
+ if (isset($page[0])) {
+ set_input('username',$page[0]);
+ }
+ if (isset($page[1])) {
+ set_input('size',$page[1]);
+ }
+ // 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");
+}
+
+/**
+ * Profile URL generator for $user->getUrl();
+ *
+ * @param ElggUser $user
+ * @return string User URL
+ */
+function profile_url($user) {
+ global $CONFIG;
+ return $CONFIG->wwwroot . "pg/profile/" . $user->username;
+}
+
+/**
+ * This hooks into the getIcon API and provides nice user icons for users where possible.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ * @return unknown
+ */
+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";
}
- /**
- * Profile URL generator for $user->getUrl();
- *
- * @param ElggUser $user
- * @return string User URL
- */
- function profile_url($user) {
- global $CONFIG;
- return $CONFIG->wwwroot . "pg/profile/" . $user->username;
+ if ($entity->isBanned()) {
+ return elgg_view('icon/user/default/'.$size);
}
- /**
- * This hooks into the getIcon API and provides nice user icons for users where possible.
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- * @return unknown
- */
- 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");
-
- if ($filehandler->exists()) {
- //$url = $CONFIG->url . "pg/icon/$username/$size/$icontime.jpg";
- return $CONFIG->wwwroot . 'mod/profile/icondirect.php?lastcache='.$icontime.'&amp;username='.$entity->username.'&amp;size='.$size;
- }
- }
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $entity->getGUID();
+ $filehandler->setFilename("profile/" . $username . $size . ".jpg");
+
+ if ($filehandler->exists()) {
+ //$url = $CONFIG->url . "pg/icon/$username/$size/$icontime.jpg";
+ return $CONFIG->wwwroot . 'mod/profile/icondirect.php?lastcache='.$icontime.'&amp;username='.$entity->username.'&amp;size='.$size;
}
+ }
+}
- // 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
+// 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_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 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);
- // Define widgets for use in this context
- use_widgets('profile');
-?> \ No newline at end of file
+// Define widgets for use in this context
+use_widgets('profile'); \ No newline at end of file