X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FRepository%2FPermissionSet.php;h=c83e901765daa05e546993d7e6d68ff492d42267;hb=acbcc56754121ba080eac5b6fdf69e64ed7fe453;hp=36e6074c55f7816c1555a3e76d8390f346fa1aa1;hpb=02dda8af9b915fe7864234a79b3355869bf6bd48;p=friendica.git diff --git a/src/Repository/PermissionSet.php b/src/Repository/PermissionSet.php index 36e6074c55..c83e901765 100644 --- a/src/Repository/PermissionSet.php +++ b/src/Repository/PermissionSet.php @@ -1,4 +1,23 @@ . + * + */ namespace Friendica\Repository; @@ -6,13 +25,13 @@ 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; class PermissionSet extends BaseRepository { + /** @var int Virtual permission set id for public permission */ const PUBLIC = 0; protected static $table_name = 'permissionset'; @@ -73,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); } /** @@ -142,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 @@ -152,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); }