Allow special groups in default user permissions

- Use ACLFormatter in ACL::getDefaultUserPermissions
- Remove ACL::fixACL
- Add return value to Contact::pruneUnavailable
This commit is contained in:
Hypolite Petovan 2020-01-05 17:07:33 -05:00
parent 755b9daa45
commit 64c8855407
3 changed files with 16 additions and 43 deletions

View File

@ -206,11 +206,6 @@ class ACL
return $o; return $o;
} }
private static function fixACL(&$item)
{
$item = intval(str_replace(['<', '>'], ['', ''], $item));
}
/** /**
* Return the default permission of the provided user array * Return the default permission of the provided user array
* *
@ -220,32 +215,13 @@ class ACL
*/ */
public static function getDefaultUserPermissions(array $user = null) public static function getDefaultUserPermissions(array $user = null)
{ {
$matches = []; $aclFormatter = DI::aclFormatter();
$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);
return [ return [
'allow_cid' => $allow_cid, 'allow_cid' => Contact::pruneUnavailable($aclFormatter->expand($user['allow_cid'] ?? '')),
'allow_gid' => $allow_gid, 'allow_gid' => $aclFormatter->expand($user['allow_gid'] ?? ''),
'deny_cid' => $deny_cid, 'deny_cid' => $aclFormatter->expand($user['deny_cid'] ?? ''),
'deny_gid' => $deny_gid, 'deny_gid' => $aclFormatter->expand($user['deny_gid'] ?? ''),
]; ];
} }

View File

@ -2682,26 +2682,23 @@ class Contact
* Remove the unavailable contact ids from the provided list * Remove the unavailable contact ids from the provided list
* *
* @param array $contact_ids Contact id list * @param array $contact_ids Contact id list
* @return array
* @throws \Exception * @throws \Exception
*/ */
public static function pruneUnavailable(array &$contact_ids) public static function pruneUnavailable(array $contact_ids)
{ {
if (empty($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 array_column($contacts, 'id');
$return = [];
while($contact = DBA::fetch($stmt)) {
$return[] = $contact['id'];
}
DBA::close($stmt);
$contact_ids = $return;
} }
/** /**

View File

@ -384,7 +384,7 @@ class Group
DBA::close($stmt); DBA::close($stmt);
if ($check_dead) { if ($check_dead) {
Contact::pruneUnavailable($return); $return = Contact::pruneUnavailable($return);
} }
return $return; return $return;