X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FPermissionSet.php;h=9138d46b7fedd03972d728b9dd653f38ef2deb5c;hb=1701ea2034feb1cb8b7cce8455ff8e3c1f8875c6;hp=90448806d8bd1e8cc62022bf33117dc1e0662310;hpb=f1e7d97b8cae93e1c77f5a5085880409b01fcdbe;p=friendica.git diff --git a/src/Model/PermissionSet.php b/src/Model/PermissionSet.php index 90448806d8..9138d46b7f 100644 --- a/src/Model/PermissionSet.php +++ b/src/Model/PermissionSet.php @@ -1,105 +1,78 @@ . + * */ + namespace Friendica\Model; -use Friendica\BaseObject; -use Friendica\Database\DBA; +use Friendica\BaseModel; +use Friendica\DI; /** - * @brief functions for interacting with the permission set of an object (item, photo, event, ...) + * 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 extends BaseObject +class PermissionSet extends BaseModel { /** * Fetch the id of a given permission set. Generate a new one when needed * - * @param array $postarray The array from an item, picture or event post + * @param int $uid + * @param string|null $allow_cid Allowed contact IDs - empty = everyone + * @param string|null $allow_gid Allowed group IDs - empty = everyone + * @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 \Exception + * @deprecated since 2020.03, use Repository\PermissionSet instead + * @see \Friendica\Repository\PermissionSet->getIdFromACL */ - public static function fetchIDForPost(&$postarray) - { - $condition = ['uid' => $postarray['uid'], - 'allow_cid' => self::sortPermissions(defaults($postarray, 'allow_cid', '')), - 'allow_gid' => self::sortPermissions(defaults($postarray, 'allow_gid', '')), - 'deny_cid' => self::sortPermissions(defaults($postarray, 'deny_cid', '')), - 'deny_gid' => self::sortPermissions(defaults($postarray, 'deny_gid', ''))]; - - $set = DBA::selectFirst('permissionset', ['id'], $condition); - - if (!DBA::isResult($set)) { - DBA::insert('permissionset', $condition, true); - - $set = DBA::selectFirst('permissionset', ['id'], $condition); - } - - $postarray['allow_cid'] = null; - $postarray['allow_gid'] = null; - $postarray['deny_cid'] = null; - $postarray['deny_gid'] = null; - - return $set['id']; - } - - private static function sortPermissions($permissionlist) - { - $cleaned_list = trim($permissionlist, '<>'); - - if (empty($cleaned_list)) { - return $permissionlist; - } - - $elements = explode('><', $cleaned_list); - - if (count($elements) <= 1) { - return $permissionlist; - } - - asort($elements); - - return '<' . implode('><', $elements) . '>'; + public static function getIdFromACL( + int $uid, + string $allow_cid = null, + string $allow_gid = null, + string $deny_cid = null, + string $deny_gid = null + ) { + return DI::permissionSet()->getIdFromACL($uid, $allow_cid, $allow_gid, $deny_cid, $deny_gid); } /** - * @brief Returns a permission set for a given contact + * Returns a permission set for a given contact * * @param integer $uid User id whom the items belong * @param integer $contact_id Contact id of the visitor * * @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'); } }