return $o;
}
- private static function fixACL(&$item)
- {
- $item = intval(str_replace(['<', '>'], ['', ''], $item));
- }
-
/**
* Return the default permission of the provided user array
*
*/
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'] ?? ''),
];
}
* 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;
- }
-
- $str = DBA::escape(implode(',', $contact_ids));
-
- $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'];
+ return [];
}
- DBA::close($stmt);
+ $contacts = Contact::selectToArray(['id'], [
+ 'id' => $contact_ids,
+ 'blocked' => false,
+ 'pending' => false,
+ 'archive' => false,
+ ]);
- $contact_ids = $return;
+ return array_column($contacts, 'id');
}
/**