X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FRepository%2FPermissionSet.php;h=c83e901765daa05e546993d7e6d68ff492d42267;hb=acbcc56754121ba080eac5b6fdf69e64ed7fe453;hp=27c77d605254b2b4778bce65e92daf629e2e9cbd;hpb=b46b72ad3b345ff271e435199fea795264e3b799;p=friendica.git diff --git a/src/Repository/PermissionSet.php b/src/Repository/PermissionSet.php index 27c77d6052..c83e901765 100644 --- a/src/Repository/PermissionSet.php +++ b/src/Repository/PermissionSet.php @@ -1,4 +1,23 @@ . + * + */ namespace Friendica\Repository; @@ -6,13 +25,15 @@ 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'; protected static $model_class = Model\PermissionSet::class; @@ -47,7 +68,7 @@ class PermissionSet extends BaseRepository { if (isset($condition['id']) && !$condition['id']) { return $this->create([ - 'id' => 0, + 'id' => self::PUBLIC, 'uid' => $condition['uid'] ?? 0, 'allow_cid' => '', 'allow_gid' => '', @@ -61,29 +82,27 @@ class PermissionSet extends BaseRepository /** * @param array $condition - * @param array $order An optional array with order information - * @param int|array $limit Optional limit information - * + * @param array $params * @return Collection\PermissionSets * @throws \Exception */ - public function select(array $condition = [], array $order = [], $limit = null) + public function select(array $condition = [], array $params = []) { - return parent::select($condition, $order, $limit); + return parent::select($condition, $params); } /** - * @param array $condition - * @param array $order + * @param array $condition + * @param array $params + * @param int|null $min_id * @param int|null $max_id - * @param int|null $since_id - * @param int|array $limit + * @param int $limit * @return Collection\PermissionSets * @throws \Exception */ - public function selectByBoundaries(array $condition = [], array $order = [], 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, $order, $max_id, $since_id, $limit); + return parent::selectByBoundaries($condition, $params, $min_id, $max_id, $limit); } /** @@ -111,7 +130,7 @@ class PermissionSet extends BaseRepository // Public permission if (!$allow_cid && !$allow_gid && !$deny_cid && !$deny_gid) { - return 0; + return self::PUBLIC; } $condition = [ @@ -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); }