X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FPermissionSet.php;h=9138d46b7fedd03972d728b9dd653f38ef2deb5c;hb=a24febb8b656217a7cd88db205007420cb64485e;hp=de943c977c3841ae5292c5af2ea3c57b776bf174;hpb=353dab166e4c1a3a8ff8f750a5f30f7127f567a3;p=friendica.git diff --git a/src/Model/PermissionSet.php b/src/Model/PermissionSet.php index de943c977c..9138d46b7f 100644 --- a/src/Model/PermissionSet.php +++ b/src/Model/PermissionSet.php @@ -1,19 +1,39 @@ . + * */ namespace Friendica\Model; -use Friendica\Core\L10n; -use Friendica\Database\DBA; +use Friendica\BaseModel; use Friendica\DI; -use Friendica\Network\HTTPException; /** * functions for interacting with the permission set of an object (item, photo, event, ...) + * + * @property int uid + * @property string allow_cid + * @property string allow_gid + * @property string deny_cid + * @property string deny_gid */ -class PermissionSet +class PermissionSet extends BaseModel { /** * Fetch the id of a given permission set. Generate a new one when needed @@ -24,7 +44,9 @@ class PermissionSet * @param string|null $deny_cid Disallowed contact IDs - empty = no one * @param string|null $deny_gid Disallowed group IDs - empty = no one * @return int id - * @throws HTTPException\InternalServerErrorException + * @throws \Exception + * @deprecated since 2020.03, use Repository\PermissionSet instead + * @see \Friendica\Repository\PermissionSet->getIdFromACL */ public static function getIdFromACL( int $uid, @@ -33,38 +55,7 @@ class PermissionSet 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); - - // Public permission - if (!$allow_cid && !$allow_gid && !$deny_cid && !$deny_gid) { - return 0; - } - - $condition = [ - 'uid' => $uid, - 'allow_cid' => $allow_cid, - 'allow_gid' => $allow_gid, - 'deny_cid' => $deny_cid, - 'deny_gid' => $deny_gid - ]; - $permissionset = DBA::selectFirst('permissionset', ['id'], $condition); - - if (DBA::isResult($permissionset)) { - $psid = $permissionset['id']; - } else { - if (DBA::insert('permissionset', $condition, true)) { - $psid = DBA::lastInsertId(); - } else { - throw new HTTPException\InternalServerErrorException(L10n::t('Unable to create a new permission set.')); - } - } - - return $psid; + return DI::permissionSet()->getIdFromACL($uid, $allow_cid, $allow_gid, $deny_cid, $deny_gid); } /** @@ -75,36 +66,13 @@ class PermissionSet * * @return array of permission set ids. * @throws \Exception + * @deprecated since 2020.03, use Repository\PermissionSet instead + * @see \Friendica\Repository\PermissionSet->selectByContactId */ - static public function get($uid, $contact_id) + public static function get($uid, $contact_id) { - if (DBA::exists('contact', ['id' => $contact_id, 'uid' => $uid, 'blocked' => false])) { - $groups = Group::getIdsByContactId($contact_id); - } - - if (empty($groups) || !is_array($groups)) { - return []; - } - - $group_str = '<<>>'; // should be impossible to match - - foreach ($groups as $g) { - $group_str .= '|<' . intval($g) . '>'; - } - - $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]; - - $ret = DBA::select('permissionset', ['id'], $condition); - $set = []; - while ($permission = DBA::fetch($ret)) { - $set[] = $permission['id']; - } - DBA::close($ret); + $permissionSets = DI::permissionSet()->selectByContactId($contact_id, $uid); - return $set; + return $permissionSets->column('id'); } }