X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FGroup.php;h=64b868466a589d4c3203935db09bf64fbd8211fa;hb=9fad4abcec5206974891145810a613a03d5a7cd1;hp=5424b77dcfaec483ed3365e92e7ec82ff5226650;hpb=b08e5ab41b62c4a8d7c267cc4e736adabe5a3287;p=friendica.git diff --git a/src/Model/Group.php b/src/Model/Group.php index 5424b77dcf..64b868466a 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -2,33 +2,63 @@ /** * @file src/Model/Group.php */ + namespace Friendica\Model; use Friendica\BaseModule; use Friendica\BaseObject; use Friendica\Core\L10n; use Friendica\Core\Logger; +use Friendica\Core\Protocol; use Friendica\Core\Renderer; use Friendica\Database\DBA; -use Friendica\Util\Security; - -require_once 'boot.php'; -require_once 'include/dba.php'; -require_once 'include/text.php'; /** * @brief functions for interacting with the group database table */ class Group extends BaseObject { + const FOLLOWERS = '~'; + const MUTUALS = '&'; + + public static function getByUserId($uid, $includesDeleted = false) + { + $conditions = ['uid' => $uid]; + + if (!$includesDeleted) { + $conditions['deleted'] = false; + } + + return DBA::selectToArray('group', [], $conditions); + } + + /** + * @param int $group_id + * @return bool + * @throws \Exception + */ + public static function exists($group_id, $uid = null) + { + $condition = ['id' => $group_id, 'deleted' => false]; + + if (isset($uid)) { + $condition = [ + 'uid' => $uid + ]; + } + + return DBA::exists('group', $condition); + } + /** * @brief Create a new contact group * * Note: If we found a deleted group with the same name, we restore it * - * @param int $uid + * @param int $uid * @param string $name * @return boolean + * @throws \Exception */ public static function create($uid, $name) { @@ -60,10 +90,11 @@ class Group extends BaseObject /** * Update group information. * - * @param int $id Group ID - * @param string $name Group name + * @param int $id Group ID + * @param string $name Group name * * @return bool Was the update successful? + * @throws \Exception */ public static function update($id, $name) { @@ -75,17 +106,17 @@ class Group extends BaseObject * * @param int $cid * @return array + * @throws \Exception */ public static function getIdsByContactId($cid) { - $condition = ['contact-id' => $cid]; - $stmt = DBA::select('group_member', ['gid'], $condition); - $return = []; + $stmt = DBA::select('group_member', ['gid'], ['contact-id' => $cid]); while ($group = DBA::fetch($stmt)) { $return[] = $group['gid']; } + DBA::close($stmt); return $return; } @@ -96,9 +127,10 @@ class Group extends BaseObject * Count unread items of each groups of the local user * * @return array - * 'id' => group id - * 'name' => group name - * 'count' => counted unseen group items + * 'id' => group id + * 'name' => group name + * 'count' => counted unseen group items + * @throws \Exception */ public static function countUnseen() { @@ -125,9 +157,10 @@ class Group extends BaseObject * * Returns false if no group has been found. * - * @param int $uid + * @param int $uid * @param string $name * @return int|boolean + * @throws \Exception */ public static function getIdByName($uid, $name) { @@ -148,9 +181,11 @@ class Group extends BaseObject * * @param int $gid * @return boolean + * @throws \Exception */ - public static function remove($gid) { - if (! $gid) { + public static function remove($gid) + { + if (!$gid) { return false; } @@ -192,15 +227,17 @@ class Group extends BaseObject } /** - * @brief Mark a group as deleted based on its name + * @brief Mark a group as deleted based on its name * - * @deprecated Use Group::remove instead - * - * @param int $uid + * @param int $uid * @param string $name * @return bool + * @throws \Exception + * @deprecated Use Group::remove instead + * */ - public static function removeByName($uid, $name) { + public static function removeByName($uid, $name) + { $return = false; if (!empty($uid) && !empty($name)) { $gid = self::getIdByName($uid, $name); @@ -217,6 +254,7 @@ class Group extends BaseObject * @param int $gid * @param int $cid * @return boolean + * @throws \Exception */ public static function addMember($gid, $cid) { @@ -241,6 +279,7 @@ class Group extends BaseObject * @param int $gid * @param int $cid * @return boolean + * @throws \Exception */ public static function removeMember($gid, $cid) { @@ -254,14 +293,15 @@ class Group extends BaseObject } /** - * @brief Removes a contact from a group based on its name + * @brief Removes a contact from a group based on its name * - * @deprecated Use Group::removeMember instead - * - * @param int $uid + * @param int $uid * @param string $name - * @param int $cid + * @param int $cid * @return boolean + * @throws \Exception + * @deprecated Use Group::removeMember instead + * */ public static function removeMemberByName($uid, $name, $cid) { @@ -275,22 +315,55 @@ class Group extends BaseObject /** * @brief Returns the combined list of contact ids from a group id list * - * @param array $group_ids + * @param int $uid + * @param array $group_ids * @param boolean $check_dead * @return array + * @throws \Exception */ - public static function expand($group_ids, $check_dead = false) + public static function expand($uid, array $group_ids, $check_dead = false) { if (!is_array($group_ids) || !count($group_ids)) { return []; } - $stmt = DBA::select('group_member', ['contact-id'], ['gid' => $group_ids]); - $return = []; - while($group_member = DBA::fetch($stmt)) { + + $key = array_search(self::FOLLOWERS, $group_ids); + if ($key !== false) { + $followers = Contact::selectToArray(['id'], [ + 'uid' => $uid, + 'rel' => [Contact::FOLLOWER, Contact::FRIEND], + 'network' => Protocol::SUPPORT_PRIVATE, + ]); + + foreach ($followers as $follower) { + $return[] = $follower['id']; + } + + unset($group_ids[$key]); + } + + $key = array_search(self::MUTUALS, $group_ids); + if ($key !== false) { + $mutuals = Contact::selectToArray(['id'], [ + 'uid' => $uid, + 'rel' => [Contact::FRIEND], + 'network' => Protocol::SUPPORT_PRIVATE, + ]); + + foreach ($mutuals as $mutual) { + $return[] = $mutual['id']; + } + + unset($group_ids[$key]); + } + + $stmt = DBA::select('group_member', ['contact-id'], ['gid' => $group_ids]); + while ($group_member = DBA::fetch($stmt)) { $return[] = $group_member['contact-id']; } + DBA::close($stmt); if ($check_dead) { Contact::pruneUnavailable($return); @@ -302,17 +375,14 @@ class Group extends BaseObject /** * @brief Returns a templated group selection list * - * @param int $uid - * @param int $gid An optional pre-selected group + * @param int $uid + * @param int $gid An optional pre-selected group * @param string $label An optional label of the list * @return string + * @throws \Exception */ public static function displayGroupSelection($uid, $gid = 0, $label = '') { - $o = ''; - - $stmt = DBA::select('group', [], ['deleted' => 0, 'uid' => $uid], ['order' => ['name']]); - $display_groups = [ [ 'name' => '', @@ -320,6 +390,8 @@ class Group extends BaseObject 'selected' => '' ] ]; + + $stmt = DBA::select('group', [], ['deleted' => 0, 'uid' => $uid], ['order' => ['name']]); while ($group = DBA::fetch($stmt)) { $display_groups[] = [ 'name' => $group['name'], @@ -327,7 +399,9 @@ class Group extends BaseObject 'selected' => $gid == $group['id'] ? 'true' : '' ]; } - Logger::log('groups: ' . print_r($display_groups, true)); + DBA::close($stmt); + + Logger::info('Got groups', $display_groups); if ($label == '') { $label = L10n::t('Default privacy group for new contacts'); @@ -346,17 +420,16 @@ class Group extends BaseObject * @param string $every * @param string $each * @param string $editmode - * 'standard' => include link 'Edit groups' - * 'extended' => include link 'Create new group' - * 'full' => include link 'Create new group' and provide for each group a link to edit this group - * @param int $group_id - * @param int $cid + * 'standard' => include link 'Edit groups' + * 'extended' => include link 'Create new group' + * 'full' => include link 'Create new group' and provide for each group a link to edit this group + * @param string $group_id + * @param int $cid * @return string + * @throws \Exception */ public static function sidebarWidget($every = 'contact', $each = 'group', $editmode = 'standard', $group_id = '', $cid = 0) { - $o = ''; - if (!local_user()) { return ''; } @@ -370,13 +443,12 @@ class Group extends BaseObject ] ]; - $stmt = DBA::select('group', [], ['deleted' => 0, 'uid' => local_user()], ['order' => ['name']]); - $member_of = []; if ($cid) { $member_of = self::getIdsByContactId($cid); } + $stmt = DBA::select('group', [], ['deleted' => 0, 'uid' => local_user()], ['order' => ['name']]); while ($group = DBA::fetch($stmt)) { $selected = (($group_id == $group['id']) ? ' group-selected' : ''); @@ -399,6 +471,7 @@ class Group extends BaseObject 'ismember' => in_array($group['id'], $member_of), ]; } + DBA::close($stmt); // Don't show the groups on the network page when there is only one if ((count($display_groups) <= 2) && ($each == 'network')) { @@ -421,7 +494,6 @@ class Group extends BaseObject '$form_security_token' => BaseModule::getFormSecurityToken('group_edit'), ]); - return $o; } }