From a25ce4e3c73d36c2eb561c0dceb0168ffb54ec88 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 22 Jul 2008 14:19:56 +0000 Subject: Introducing the Friendable interface git-svn-id: https://code.elgg.org/elgg/trunk@1490 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/elgglib.php | 85 +++++++++++++++++++++++++++++++++ engine/lib/group.php | 127 +++++++++++++++++++++++++++++++++++-------------- engine/lib/users.php | 1 + 3 files changed, 176 insertions(+), 37 deletions(-) (limited to 'engine/lib') diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 3854dd8dc..698ea339c 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -1622,6 +1622,91 @@ return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI']; } + /** + * An interface for objects that behave as elements within a social network that have a profile. + * + */ + interface Friendable { + + /** + * Adds a user as a friend + * + * @param int $friend_guid The GUID of the user to add + */ + public function addFriend($friend_guid); + + /** + * Removes a user as a friend + * + * @param int $friend_guid The GUID of the user to remove + */ + public function removeFriend($friend_guid); + + /** + * Determines whether or not the current user is a friend of this entity + * + */ + public function isFriend(); + + /** + * Determines whether or not this entity is friends with a particular entity + * + * @param int $user_guid The GUID of the entity this entity may or may not be friends with + */ + public function isFriendsWith($user_guid); + + /** + * Determines whether or not a foreign entity has made this one a friend + * + * @param int $user_guid The GUID of the foreign entity + */ + public function isFriendOf($user_guid); + + /** + * Returns this entity's friends + * + * @param string $subtype The subtype of entity to return + * @param int $limit The number of entities to return + * @param int $offset Indexing offset + */ + public function getFriends($subtype = "", $limit = 10, $offset = 0); + + /** + * Returns entities that have made this entity a friend + * + * @param string $subtype The subtype of entity to return + * @param int $limit The number of entities to return + * @param int $offset Indexing offset + */ + public function getFriendsOf($subtype = "", $limit = 10, $offset = 0); + + /** + * Returns objects in this entity's container + * + * @param string $subtype The subtype of entity to return + * @param int $limit The number of entities to return + * @param int $offset Indexing offset + */ + public function getObjects($subtype="", $limit = 10, $offset = 0); + + /** + * Returns objects in the containers of this entity's friends + * + * @param string $subtype The subtype of entity to return + * @param int $limit The number of entities to return + * @param int $offset Indexing offset + */ + public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0); + + /** + * Returns the number of object entities in this entity's container + * + * @param string $subtype The subtype of entity to count + */ + public function countObjects($subtype = ""); + + } + function elgg_init() { // Important actions register_action('comments/add'); diff --git a/engine/lib/group.php b/engine/lib/group.php index f0ceb92fc..dee522099 100644 --- a/engine/lib/group.php +++ b/engine/lib/group.php @@ -16,7 +16,8 @@ * @class ElggGroup Class representing a container for other elgg entities. * @author Marcus Povey */ - class ElggGroup extends ElggEntity + class ElggGroup extends ElggEntity + implements Friendable { protected function initialise_attributes() { @@ -118,62 +119,114 @@ { return can_write_to_container($user_guid, $this->getGUID()); } - - /** - * Get objects contained in this group. - * - * @param int $limit - * @param int $offset - * @param string $subtype - * @param int $owner_guid - * @param int $site_guid - * @param string $order_by - * @return mixed - */ - public function getObjects($limit = 10, $offset = 0, $subtype = "", $owner_guid = 0, $site_guid = 0, $order_by = "") - { - return get_objects_in_group($this->getGUID(), $subtype, $owner_guid, $site_guid, $order_by, $limit, $offset, false); - } - - /** - * Get a list of group members. - * - * @param int $limit - * @param int $offset - * @return mixed - */ - public function getMembers($limit = 10, $offset = 0, $count = false) - { - return get_group_members($this->getGUID(), $limit, $offset, 0 , $count); - } + + /** + * Start friendable compatibility block: + * + * public function addFriend($friend_guid); + public function removeFriend($friend_guid); + public function isFriend(); + public function isFriendsWith($user_guid); + public function isFriendOf($user_guid); + public function getFriends($subtype = "", $limit = 10, $offset = 0); + public function getFriendsOf($subtype = "", $limit = 10, $offset = 0); + public function getObjects($subtype="", $limit = 10, $offset = 0); + public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0); + public function countObjects($subtype = ""); + */ + + /** + * For compatibility with Friendable + */ + public function addFriend($friend_guid) { + return $this->join(get_entity($friend_guid)); + } + + /** + * For compatibility with Friendable + */ + public function removeFriend($friend_guid) { + return $this->leave(get_entity($friend_guid)); + } + + /** + * For compatibility with Friendable + */ + public function isFriend() { + return $this->isMember(); + } + + /** + * For compatibility with Friendable + */ + public function isFriendsWith($user_guid) { + return $this->isMember($user_guid); + } + + /** + * For compatibility with Friendable + */ + public function isFriendOf($user_guid) { + return $this->isMember($user_guid); + } /** - * For compatibility with ElggUser + * For compatibility with Friendable */ public function getFriends($subtype = "", $limit = 10, $offset = 0) { return get_group_members($this->getGUID(), $limit, $offset); } /** - * For compatibility with ElggUser + * For compatibility with Friendable */ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0) { return get_group_members($this->getGUID(), $limit, $offset); } /** - * For compatibility with ElggUser + * Get objects contained in this group. + * + * @param string $subtype + * @param int $limit + * @param int $offset + * @return mixed */ - public function isFriend() { - return $this->isMember(); + public function getObjects($subtype="", $limit = 10, $offset = 0) + { + return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false); } /** - * For compatibility with ElggUser + * For compatibility with Friendable */ - public function isFriendOf() { - return $this->isMember(); + public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) { + return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false); + } + + /** + * For compatibility with Friendable + */ + public function countObjects($subtype = "") { + return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", 10, 0, true); + } + + /** + * End friendable compatibility block + */ + + /** + * Get a list of group members. + * + * @param int $limit + * @param int $offset + * @return mixed + */ + public function getMembers($limit = 10, $offset = 0, $count = false) + { + return get_group_members($this->getGUID(), $limit, $offset, 0 , $count); } + /** * Returns whether the current group is public membership or not. diff --git a/engine/lib/users.php b/engine/lib/users.php index 8dc13fafa..4514931a7 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -27,6 +27,7 @@ * @subpackage Core */ class ElggUser extends ElggEntity + implements Friendable { /** * Initialise the attributes array. -- cgit v1.2.3