From 64c88554074d64dc011cd8a0439d2bfa802aba46 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sun, 5 Jan 2020 17:07:33 -0500 Subject: [PATCH] Allow special groups in default user permissions - Use ACLFormatter in ACL::getDefaultUserPermissions - Remove ACL::fixACL - Add return value to Contact::pruneUnavailable --- src/Core/ACL.php | 34 +++++----------------------------- src/Model/Contact.php | 23 ++++++++++------------- src/Model/Group.php | 2 +- 3 files changed, 16 insertions(+), 43 deletions(-) diff --git a/src/Core/ACL.php b/src/Core/ACL.php index a4b4a99190..d4148d6ba5 100644 --- a/src/Core/ACL.php +++ b/src/Core/ACL.php @@ -206,11 +206,6 @@ class ACL return $o; } - private static function fixACL(&$item) - { - $item = intval(str_replace(['<', '>'], ['', ''], $item)); - } - /** * Return the default permission of the provided user array * @@ -220,32 +215,13 @@ class ACL */ public static function getDefaultUserPermissions(array $user = null) { - $matches = []; - - $acl_regex = '/<([0-9]+)>/i'; - - preg_match_all($acl_regex, $user['allow_cid'] ?? '', $matches); - $allow_cid = $matches[1]; - preg_match_all($acl_regex, $user['allow_gid'] ?? '', $matches); - $allow_gid = $matches[1]; - preg_match_all($acl_regex, $user['deny_cid'] ?? '', $matches); - $deny_cid = $matches[1]; - preg_match_all($acl_regex, $user['deny_gid'] ?? '', $matches); - $deny_gid = $matches[1]; - - // Reformats the ACL data so that it is accepted by the JS frontend - array_walk($allow_cid, 'self::fixACL'); - array_walk($allow_gid, 'self::fixACL'); - array_walk($deny_cid, 'self::fixACL'); - array_walk($deny_gid, 'self::fixACL'); - - Contact::pruneUnavailable($allow_cid); + $aclFormatter = DI::aclFormatter(); return [ - 'allow_cid' => $allow_cid, - 'allow_gid' => $allow_gid, - 'deny_cid' => $deny_cid, - 'deny_gid' => $deny_gid, + 'allow_cid' => Contact::pruneUnavailable($aclFormatter->expand($user['allow_cid'] ?? '')), + 'allow_gid' => $aclFormatter->expand($user['allow_gid'] ?? ''), + 'deny_cid' => $aclFormatter->expand($user['deny_cid'] ?? ''), + 'deny_gid' => $aclFormatter->expand($user['deny_gid'] ?? ''), ]; } diff --git a/src/Model/Contact.php b/src/Model/Contact.php index 10cf4bf341..0540bf7beb 100644 --- a/src/Model/Contact.php +++ b/src/Model/Contact.php @@ -2682,26 +2682,23 @@ class Contact * Remove the unavailable contact ids from the provided list * * @param array $contact_ids Contact id list + * @return array * @throws \Exception */ - public static function pruneUnavailable(array &$contact_ids) + public static function pruneUnavailable(array $contact_ids) { if (empty($contact_ids)) { - return; + return []; } - $str = DBA::escape(implode(',', $contact_ids)); + $contacts = Contact::selectToArray(['id'], [ + 'id' => $contact_ids, + 'blocked' => false, + 'pending' => false, + 'archive' => false, + ]); - $stmt = DBA::p("SELECT `id` FROM `contact` WHERE `id` IN ( " . $str . ") AND `blocked` = 0 AND `pending` = 0 AND `archive` = 0"); - - $return = []; - while($contact = DBA::fetch($stmt)) { - $return[] = $contact['id']; - } - - DBA::close($stmt); - - $contact_ids = $return; + return array_column($contacts, 'id'); } /** diff --git a/src/Model/Group.php b/src/Model/Group.php index c984f0032e..b87458756a 100644 --- a/src/Model/Group.php +++ b/src/Model/Group.php @@ -384,7 +384,7 @@ class Group DBA::close($stmt); if ($check_dead) { - Contact::pruneUnavailable($return); + $return = Contact::pruneUnavailable($return); } return $return;