/**
  * @param array $ids list of contact (if positive) or group (if negative) ids.
  * @return array id => admin|custom; for users with no access at all there's no key=>value pair.
  */
 public function getAccessStatus($ids)
 {
     if (!$ids) {
         return array();
     }
     // Additional groups we need to get access info for.
     // $group_ids = list of (negative) group ids that users from $ids are members of.
     $user_groups_model = new waUserGroupsModel();
     $user_group = $user_groups_model->getGroupIdsForUsers($ids);
     // ignores negative ids, so it's ok to pass group ids there
     $group_ids = array();
     foreach ($user_group as $user_group_ids) {
         $group_ids = array_merge($group_ids, $user_group_ids);
     }
     $group_ids = array_map(wa_lambda('$a', 'return -$a;'), $group_ids);
     $sql = "SELECT -group_id AS id, MAX(CASE app_id WHEN 'webasyst' THEN 2 ELSE 1 END) AS status\n                FROM `{$this->table}`\n                WHERE -group_id IN (i:ids) AND name='backend'\n                GROUP BY group_id";
     $result = $this->query($sql, array('ids' => array_merge($ids, $group_ids)))->fetchAll('id', true);
     // update result considering group rights for users
     foreach ($ids as $id) {
         if (!isset($result[$id])) {
             $result[$id] = 0;
         }
         if (isset($user_group[$id]) && $result[$id] <= 1) {
             foreach ($user_group[$id] as $gid) {
                 if (isset($result[-$gid]) && $result[-$gid] > $result[$id]) {
                     $result[$id] = $result[-$gid];
                 }
                 if ($result[$id] > 1) {
                     break;
                 }
             }
         }
         if ($result[$id]) {
             $result[$id] = $result[$id] > 1 ? 'admin' : 'custom';
         } else {
             unset($result[$id]);
         }
     }
     // Remove from results all groups that we added temporary
     foreach ($group_ids as $gid) {
         if (isset($result[$gid])) {
             unset($result[$gid]);
         }
     }
     return $result;
 }