aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/users.php
diff options
context:
space:
mode:
authorben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-03-14 16:27:40 +0000
committerben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-03-14 16:27:40 +0000
commit0a7fcebbc48f5898953907b230e8dec5f4f25e3b (patch)
tree22fe24de5099e898f4539c939c5855ae8929213b /engine/lib/users.php
parent124eb89ecb45bec8c3260a44ded8aef0a87f34f1 (diff)
downloadelgg-0a7fcebbc48f5898953907b230e8dec5f4f25e3b.tar.gz
elgg-0a7fcebbc48f5898953907b230e8dec5f4f25e3b.tar.bz2
Whoops, that should be users.php
git-svn-id: https://code.elgg.org/elgg/trunk@227 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/lib/users.php')
-rw-r--r--engine/lib/users.php410
1 files changed, 410 insertions, 0 deletions
diff --git a/engine/lib/users.php b/engine/lib/users.php
new file mode 100644
index 000000000..8af060575
--- /dev/null
+++ b/engine/lib/users.php
@@ -0,0 +1,410 @@
+<?php
+
+ /**
+ * Elgg users
+ * Functions to manage multiple or single users in an Elgg install
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.org/
+ */
+
+ /**
+ * @class ElggUser
+ * Representation of a "user" in the system.
+ */
+ class ElggUser extends ElggEntity
+ {
+ /**
+ * Initialise the attributes array.
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * Place your base parameters here.
+ */
+ protected function initialise_attributes()
+ {
+ parent::initialise_attributes();
+
+ $this->attributes['type'] = "user";
+ $this->attributes['name'] = "";
+ $this->attributes['username'] = "";
+ $this->attributes['password'] = "";
+ $this->attributes['email'] = "";
+ $this->attributes['language'] = "";
+ $this->attributes['code'] = "";
+
+ }
+
+ /**
+ * Construct a new user entity, optionally from a given id value.
+ *
+ * @param mixed $guid If an int, load that GUID.
+ * If a db row then will attempt to load the rest of the data.
+ * @throws Exception if there was a problem creating the user.
+ */
+ function __construct($guid = null)
+ {
+ $this->initialise_attributes();
+
+ if (!empty($guid))
+ {
+ // Is $guid is a DB row - either a entity row, or a user table row.
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ $this->load($guid->guid);
+ }
+
+ // See if this is a username
+ else if (is_string($guid))
+ {
+ $guid = get_user_by_username($guid);
+ foreach ($guid->attributes as $key => $value)
+ $this->attributes[$key] = $value;
+
+ }
+
+ // Is $guid is an ElggUser? Use a copy constructor
+ else if ($guid instanceof ElggUser)
+ {
+ foreach ($guid->attributes as $key => $value)
+ $this->attributes[$key] = $value;
+ }
+
+ // Is this is an ElggEntity but not an ElggUser = ERROR!
+ else if ($guid instanceof ElggEntity)
+ throw new InvalidParameterException("Passing a non-ElggUser to an ElggUser constructor!");
+
+ // We assume if we have got this far, $guid is an int
+ else if (is_int($guid)) {
+ if (!$this->load($guid)) throw new IOException("Could not create a new ElggUser user from GUID:$guid");
+ }
+ }
+ }
+
+ function __get($name) { return $this->get($name); }
+ function __set($name, $value) { return $this->set($name, $value); }
+
+ /**
+ * Override the load function.
+ * This function will ensure that all data is loaded (were possible), so
+ * if only part of the ElggUser is loaded, it'll load the rest.
+ *
+ * @param int $guid
+ * @return true|false
+ */
+ protected function load($guid)
+ {
+ // Test to see if we have the generic stuff
+ if (!parent::load($guid))
+ return false;
+
+ // Check the type
+ if ($this->attributes['type']!='user')
+ throw new InvalidClassException("GUID:$guid is not a valid ElggUser");
+
+ // Load missing data
+ $row = get_user_entity_as_row($guid);
+
+ // Now put these into the attributes array as core values
+ $objarray = (array) $row;
+ foreach($objarray as $key => $value)
+ $this->attributes[$key] = $value;
+
+ return true;
+ }
+
+ /**
+ * Saves this user to the database.
+ * @return true|false
+ */
+ public function save()
+ {
+ // Save generic stuff
+ if (!parent::save())
+ return false;
+
+ // Now save specific stuff
+ return create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'), $this->get('password'), $this->get('email'), $this->get('language'), $this->get('code'));
+ }
+
+ /**
+ * Delete this user.
+ * @return true|false
+ */
+ public function delete()
+ {
+ if (!parent::delete())
+ return false;
+
+ return delete_user_entity($guid);
+ }
+
+ /**
+ * Get the user's owner, if any
+ *
+ * @return ElggUser The owner user
+ */
+ function getOwner() {
+ return new ElggUser($this->owner_guid);
+ }
+
+ /**
+ * Get sites that this user is a member of
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ */
+ function getSites($subtype="", $limit = 10, $offset = 0) {
+ return get_site_users($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Add this user to a particular site
+ *
+ * @param int $site_guid The guid of the site to add it to
+ * @return true|false
+ */
+ function addToSite($site_guid) {
+ return add_site_user($this->getGUID(), $site_guid);
+ }
+
+ /**
+ * Remove this user from a particular site
+ *
+ * @param int $site_guid The guid of the site to remove it from
+ * @return true|false
+ */
+ function removeFromSite($site_guid) {
+ return remove_site_user($this->getGUID(), $site_guid);
+ }
+
+ /**
+ * Adds a user to this user's friends list
+ *
+ * @param int $friend_guid The GUID of the user to add
+ * @return true|false Depending on success
+ */
+ function addFriend($friend_guid) { return user_add_friend($this->getGUID(), $friend_guid); }
+
+ /**
+ * Removes a user from this user's friends list
+ *
+ * @param int $friend_guid The GUID of the user to remove
+ * @return true|false Depending on success
+ */
+ function removeFriend($friend_guid) { return user_remove_friend($this->getGUID(), $friend_guid); }
+
+ /**
+ * Determines whether or not this user is a friend of the currently logged in user
+ *
+ * @return true|false
+ */
+ function isFriend() { return user_is_friend($this->getGUID(), $_SESSION['id']); }
+
+ /**
+ * Determines whether this user is friends with another user
+ *
+ * @param int $user_guid The GUID of the user to check is on this user's friends list
+ * @return true|false
+ */
+ function isFriendsWith($user_guid) { return user_is_friend($this->getGUID(), $user_guid); }
+
+ /**
+ * Determines whether or not this user is on another user's friends list
+ *
+ * @param int $user_guid The GUID of the user to check against
+ * @return true|false
+ */
+ function isFriendOf($user_guid) { return user_is_friend($user_guid, $this->getGUID()); }
+
+ /**
+ * Retrieves a list of this user's friends
+ *
+ * @param string $subtype Optionally, the subtype of user to filter to (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ * @return array|false Array of ElggUsers, or false, depending on success
+ */
+ function getFriends($subtype = "", $limit = 10, $offset = 0) { return get_user_friends($this->getGUID(), $subtype, $limit, $offset); }
+
+ /**
+ * Get an array of ElggObjects owned by this user.
+ *
+ * @param string $subtype The subtype of the objects, if any
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ */
+ public function getObjects($subtype="", $limit = 10, $offset = 0) { get_user_objects($this->getGUID(), $subtype, $limit, $offset); }
+
+ /**
+ * Get the collections associated with a user.
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ * @return unknown
+ */
+ public function getCollections($subtype="", $limit = 10, $offset = 0) { get_user_collections($this->getGUID(), $subtype, $limit, $offset); }
+
+ }
+
+ /**
+ * Return the user specific details of a user by a row.
+ *
+ * @param int $guid
+ */
+ function get_user_entity_as_row($guid)
+ {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}users_entity where guid=$guid");
+ }
+
+ /**
+ * Create or update the extras table for a given user.
+ * Call create_entity first.
+ *
+ * @param int $guid
+ * @param string $name
+ * @param string $description
+ * @param string $url
+ */
+ function create_user_entity($guid, $name, $username, $password, $email, $language, $code)
+ {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $name = sanitise_string($name);
+ $username = sanitise_string($username);
+ $password = sanitise_string($password);
+ $email = sanitise_string($email);
+ $language = sanitise_string($language);
+ $code = sanitise_string($code);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row)
+ {
+ // Exists and you have access to it
+
+ // Delete any existing stuff
+ delete_user_entity($guid);
+
+ // Insert it
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}users_entity (guid, name, username, password, email, language, code) values ($guid, '$name', '$username', '$password', '$email', '$language', '$code')");
+ if ($result!==false)
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Delete a user's extra data.
+ *
+ * @param int $guid
+ */
+ function delete_user_entity($guid)
+ {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ $row = get_entity_as_row($guid);
+
+ // Check to see if we have access and it exists
+ if ($row)
+ {
+ // Delete any existing stuff
+ return delete_data("DELETE from {$CONFIG->dbprefix}users_entity where guid=$guid");
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the sites this user is part of
+ *
+ * @param int $user_guid The user's GUID
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ * @return false|array On success, an array of ElggSites
+ */
+ function get_user_sites($user_guid, $limit = 10, $offset = 0) {
+ $user_guid = (int)$user_guid;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ return get_entities_from_relationship("member_of_site", $user_guid, false, "site", "", 0, "time_created desc", $limit, $offset);
+ }
+
+ /**
+ * Adds a user to another user's friends list.
+ *
+ * @param int $user_guid The GUID of the friending user
+ * @param int $friend_guid The GUID of the user to friend
+ * @return true|false Depending on success
+ */
+ function user_add_friend($user_guid, $friend_guid) {
+ $user_guid = (int) $user_guid;
+ $friend_guid = (int) $friend_guid;
+ return add_entity_relationship($user_guid, "friend", $friend_guid);
+ }
+
+ /**
+ * Removes a user from another user's friends list.
+ *
+ * @param int $user_guid The GUID of the friending user
+ * @param int $friend_guid The GUID of the user on the friends list
+ * @return true|false Depending on success
+ */
+ function user_remove_friend($user_guid, $friend_guid) {
+ $user_guid = (int) $user_guid;
+ $friend_guid = (int) $friend_guid;
+ return remove_entity_relationship($user_guid, "friend", $friend_guid);
+ }
+
+ /**
+ * Determines whether or not a user is another user's friend.
+ *
+ * @param int $user_guid The GUID of the user
+ * @param int $friend_guid The GUID of the friend
+ * @return true|false
+ */
+ function user_is_friend($user_guid, $friend_guid) {
+ return check_entity_relationship($user_guid, "friend", $friend_guid);
+ }
+
+ /**
+ * Obtains a given user's friends
+ *
+ * @param int $user_guid The user's GUID
+ * @param string $subtype The subtype of users, if any
+ * @param int $limit Number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ * @return false|array Either an array of ElggUsers or false, depending on success
+ */
+ function get_user_friends($user_guid, $subtype = "", $limit = 10, $offset = 0) {
+ return get_entities_from_relationship("friend",$user_guid,false,"user",$subtype,0,"time_created desc",$limit,$offset);
+ }
+
+ /**
+ * Obtains a list of objects owned by a user
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ * @return false|array An array of ElggObjects or false, depending on success
+ */
+ function get_user_objects($user_guid, $subtype = "", $limit = 10, $offset = 0) {
+ return get_entities('object',$subtype, $user_guid, "time_created desc", $limit, $offset);
+ }
+
+?> \ No newline at end of file