X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModel%2FPermissionSet.php;h=9138d46b7fedd03972d728b9dd653f38ef2deb5c;hb=1701ea2034feb1cb8b7cce8455ff8e3c1f8875c6;hp=6506c70940529859de991fa0f97da487f38eb6f3;hpb=02d4b1098eaec61a801129d9c0865448e2274558;p=friendica.git diff --git a/src/Model/PermissionSet.php b/src/Model/PermissionSet.php index 6506c70940..9138d46b7f 100644 --- a/src/Model/PermissionSet.php +++ b/src/Model/PermissionSet.php @@ -1,108 +1,78 @@ . + * */ -namespace Friendica\Model; -use Friendica\BaseObject; -use Friendica\Database\DBA; +namespace Friendica\Model; -require_once 'include/dba.php'; +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 - * @return id + * @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 - * @param array $groups Possibly previously fetched group ids for that contact * * @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, $groups = null) + public static function get($uid, $contact_id) { - if (empty($groups) && 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 (`allow_cid` = '' OR`allow_cid` REGEXP ?) - AND (`deny_cid` = '' OR NOT `deny_cid` REGEXP ?) - AND (`allow_gid` = '' OR `allow_gid` REGEXP ?) - AND (`deny_gid` = '' OR NOT `deny_gid` REGEXP ?)", - $uid, $contact_str, $contact_str, $group_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'); } }