X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FProfile.php;fp=classes%2FProfile.php;h=f2f8fc123e71373fa74c7792decf8c39091c5466;hb=bf121a695a13c2b30abf57ea86afbe1e6c2420a7;hp=963b41e0d492c7b6753f55f9b189645ca9f4ed69;hpb=31c1177970124cee31823cab3a11542c23b4126d;p=quix0rs-gnu-social.git diff --git a/classes/Profile.php b/classes/Profile.php index 963b41e0d4..f2f8fc123e 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -313,6 +313,13 @@ class Profile extends Memcached_DataObject } } + function isPendingMember($group) + { + $request = Group_join_queue::pkeyGet(array('profile_id' => $this->id, + 'group_id' => $group->id)); + return !empty($request); + } + function getGroups($offset=0, $limit=null) { $qry = @@ -516,6 +523,79 @@ class Profile extends Memcached_DataObject return $lists; } + /** + * Request to join the given group. + * May throw exceptions on failure. + * + * @param User_group $group + * @return mixed: Group_member on success, Group_join_queue if pending approval, null on some cancels? + */ + function joinGroup(User_group $group) + { + $ok = null; + if ($group->join_policy == User_group::JOIN_POLICY_MODERATE) { + $ok = Group_join_queue::saveNew($this, $group); + } else { + if (Event::handle('StartJoinGroup', array($group, $this))) { + $ok = Group_member::join($group->id, $this->id); + Event::handle('EndJoinGroup', array($group, $this)); + } + } + return $ok; + } + + /** + * Cancel a pending group join... + * + * @param User_group $group + */ + function cancelJoinGroup(User_group $group) + { + $request = Group_join_queue::pkeyGet(array('profile_id' => $this->id, + 'group_id' => $group->id)); + if ($request) { + if (Event::handle('StartCancelJoinGroup', array($group, $this))) { + $request->delete(); + Event::handle('EndCancelJoinGroup', array($group, $this)); + } + } + } + + /** + * Complete a pending group join on our end... + * + * @param User_group $group + */ + function completeJoinGroup(User_group $group) + { + $ok = null; + $request = Group_join_queue::pkeyGet(array('profile_id' => $this->id, + 'group_id' => $group->id)); + if ($request) { + if (Event::handle('StartJoinGroup', array($group, $this))) { + $ok = Group_member::join($group->id, $this->id); + $request->delete(); + Event::handle('EndJoinGroup', array($group, $this)); + } + } else { + throw new Exception(_m('Invalid group join approval: not pending.')); + } + return $ok; + } + + /** + * Leave a group that this profile is a member of. + * + * @param User_group $group + */ + function leaveGroup(User_group $group) + { + if (Event::handle('StartLeaveGroup', array($group, $this))) { + Group_member::leave($group->id, $this->id); + Event::handle('EndLeaveGroup', array($group, $this)); + } + } + function avatarUrl($size=AVATAR_PROFILE_SIZE) { $avatar = $this->getAvatar($size);