/** * get action records and group them for notifications display * @param varchar $sql * @param array $params sql params * @return array */ private function getRecords($p) { $rez = array(); $recs = DM\Notifications::getLast($p['user_id'], $p['limit'], empty($p['fromId']) ? false : $p['fromId']); $actions = array(); //grouping actions by object_id, action type and read property foreach ($recs as $r) { $r['data'] = Util\toJsonArray($r['data']); $group = $r['object_id'] . '_' . $r['action_type'] . '_' . $r['read']; $actions[$group][$r['from_user_id']] = $r; } //iterate actions and group into records up to read property foreach ($actions as $group => $users) { //form id $ids = array(); //would be comma separated action_ids foreach ($users as $r) { $ids[] = $r['id']; } $r = current($users); $record = array('ids' => implode(',', $ids), 'read' => $r['read'], 'user_id' => $r['from_user_id'], 'object_id' => $r['object_id'], 'text' => $this->getUsersString($users) . ' ' . $this->getActionDeclination($r['action_type']) . ' ' . $this->getObjectName($r['data']) . '<div class="cG">' . Util\formatAgoTime($r['action_time']) . '</div>'); $rez[] = $record; } return $rez; }