X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FRepository%2FPermissionSet.php;h=c83e901765daa05e546993d7e6d68ff492d42267;hb=5a8f2021584ed86489b056037ca1ed673f26270f;hp=906dd716e66465b97cb507f7cf1c8d08a86e2be4;hpb=0f0c58ddb36968845ebb25914e710c3f1324fbd6;p=friendica.git diff --git a/src/Repository/PermissionSet.php b/src/Repository/PermissionSet.php index 906dd716e6..c83e901765 100644 --- a/src/Repository/PermissionSet.php +++ b/src/Repository/PermissionSet.php @@ -1,25 +1,55 @@ . + * + */ namespace Friendica\Repository; -use Friendica\BaseModel; use Friendica\BaseRepository; use Friendica\Collection; -use Friendica\Core\L10n; -use Friendica\Database\DBA; -use Friendica\DI; +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; protected static $collection_class = Collection\PermissionSets::class; + /** @var ACLFormatter */ + private $aclFormatter; + + public function __construct(Database $dba, LoggerInterface $logger, ACLFormatter $aclFormatter) + { + parent::__construct($dba, $logger); + + $this->aclFormatter = $aclFormatter; + } + /** * @param array $data * @return Model\PermissionSet @@ -38,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' => '', @@ -62,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); } /** @@ -93,16 +123,14 @@ class PermissionSet extends BaseRepository string $deny_cid = null, string $deny_gid = null ) { - $ACLFormatter = DI::aclFormatter(); - - $allow_cid = $ACLFormatter->sanitize($allow_cid); - $allow_gid = $ACLFormatter->sanitize($allow_gid); - $deny_cid = $ACLFormatter->sanitize($deny_cid); - $deny_gid = $ACLFormatter->sanitize($deny_gid); + $allow_cid = $this->aclFormatter->sanitize($allow_cid); + $allow_gid = $this->aclFormatter->sanitize($allow_gid); + $deny_cid = $this->aclFormatter->sanitize($deny_cid); + $deny_gid = $this->aclFormatter->sanitize($deny_gid); // Public permission if (!$allow_cid && !$allow_gid && !$deny_cid && !$deny_gid) { - return 0; + return self::PUBLIC; } $condition = [ @@ -133,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 (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 @@ -143,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); }