X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FRepository%2FPermissionSet.php;h=c83e901765daa05e546993d7e6d68ff492d42267;hb=5a8f2021584ed86489b056037ca1ed673f26270f;hp=86915701d9cf17f898000549c71dcc61d7c5fd84;hpb=42775d53b2c5177cae2e0e1dacb0a32f92e4a83b;p=friendica.git diff --git a/src/Repository/PermissionSet.php b/src/Repository/PermissionSet.php index 86915701d9..c83e901765 100644 --- a/src/Repository/PermissionSet.php +++ b/src/Repository/PermissionSet.php @@ -1,4 +1,23 @@ . + * + */ namespace Friendica\Repository; @@ -6,7 +25,6 @@ use Friendica\BaseRepository; use Friendica\Collection; use Friendica\Database\Database; use Friendica\Model; -use Friendica\Model\Group; use Friendica\Network\HTTPException; use Friendica\Util\ACLFormatter; use Psr\Log\LoggerInterface; @@ -74,17 +92,17 @@ class PermissionSet extends BaseRepository } /** - * @param array $condition - * @param array $params + * @param array $condition + * @param array $params + * @param int|null $min_id * @param int|null $max_id - * @param int|null $since_id - * @param int $limit + * @param int $limit * @return Collection\PermissionSets * @throws \Exception */ - public function selectByBoundaries(array $condition = [], array $params = [], int $max_id = null, int $since_id = null, int $limit = self::LIMIT) + public function selectByBoundaries(array $condition = [], array $params = [], int $min_id = null, int $max_id = null, int $limit = self::LIMIT) { - return parent::selectByBoundaries($condition, $params, $max_id, $since_id, $limit); + return parent::selectByBoundaries($condition, $params, $min_id, $max_id, $limit); } /** @@ -143,9 +161,19 @@ class PermissionSet extends BaseRepository */ public function selectByContactId($contact_id, $uid) { + $cdata = Model\Contact::getPublicAndUserContacID($contact_id, $uid); + if (!empty($cdata)) { + $public_contact_str = '<' . $cdata['public'] . '>'; + $user_contact_str = '<' . $cdata['user'] . '>'; + $contact_id = $cdata['user']; + } else { + $public_contact_str = '<' . $contact_id . '>'; + $user_contact_str = ''; + } + $groups = []; - if ($this->dba->exists('contact', ['id' => $contact_id, 'uid' => $uid, 'blocked' => false])) { - $groups = Group::getIdsByContactId($contact_id); + if (!empty($user_contact_str) && $this->dba->exists('contact', ['id' => $contact_id, 'uid' => $uid, 'blocked' => false])) { + $groups = Model\Group::getIdsByContactId($contact_id); } $group_str = '<<>>'; // should be impossible to match @@ -153,11 +181,16 @@ class PermissionSet extends BaseRepository $group_str .= '|<' . preg_quote($group_id) . '>'; } - $contact_str = '<' . $contact_id . '>'; - - $condition = ["`uid` = ? AND (NOT (`deny_cid` REGEXP ? OR deny_gid REGEXP ?) - AND (allow_cid REGEXP ? OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", - $uid, $contact_str, $group_str, $contact_str, $group_str]; + if (!empty($user_contact_str)) { + $condition = ["`uid` = ? AND (NOT (`deny_cid` REGEXP ? OR `deny_cid` REGEXP ? OR deny_gid REGEXP ?) + AND (allow_cid REGEXP ? OR allow_cid REGEXP ? OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", + $uid, $user_contact_str, $public_contact_str, $group_str, + $user_contact_str, $public_contact_str, $group_str]; + } else { + $condition = ["`uid` = ? AND (NOT (`deny_cid` REGEXP ? OR deny_gid REGEXP ?) + AND (allow_cid REGEXP ? OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", + $uid, $public_contact_str, $group_str, $public_contact_str, $group_str]; + } return $this->select($condition); }