/** * Add an activity to the internal array * * @param array $activity */ public function addActivity($activity) { $activity['activity_id'] = (int) $activity['activity_id']; $activity['timestamp'] = (int) $activity['timestamp']; $activity['object_id'] = (int) $activity['object_id']; $activity['object_name'] = (string) $activity['file']; unset($activity['priority']); unset($activity['file']); $event = $this->getEventFromArray(array_merge($activity, ['subjectparams' => [], 'messageparams' => []])); $activity['subjectparams_array'] = $this->dataHelper->getParameters($event, 'subject', $activity['subjectparams']); $activity['messageparams_array'] = $this->dataHelper->getParameters($event, 'message', $activity['messageparams']); $groupKey = $this->getGroupKey($activity); if ($groupKey === false) { $this->closeOpenGroup(); $this->activities[] = $activity; return; } // Only group when the event has the same group key // and the time difference is not bigger than 3 days. if ($groupKey === $this->groupKey && abs($activity['timestamp'] - $this->groupTime) < 3 * 24 * 60 * 60 && (!isset($this->openGroup['activity_ids']) || sizeof($this->openGroup['activity_ids']) <= 5)) { $parameter = $this->getGroupParameter($activity); if ($parameter !== false) { /** @var IParameter $parameterInstance */ $parameterInstance = $this->openGroup['subjectparams_array'][$parameter]; if (!$parameterInstance instanceof Collection) { $collection = $this->dataHelper->createCollection(); $collection->addParameter($parameterInstance); $parameterInstance = $collection; } /** @var Collection $parameterInstance */ $parameterInstance->addParameter($activity['subjectparams_array'][$parameter]); $this->openGroup['subjectparams_array'][$parameter] = $parameterInstance; if (!isset($this->openGroup['activity_ids'])) { $this->openGroup['activity_ids'] = [(int) $this->openGroup['activity_id']]; $this->openGroup['files'] = [$this->openGroup['object_id'] => $this->openGroup['object_name']]; } $this->openGroup['activity_ids'][] = (int) $activity['activity_id']; $this->openGroup['files'][$activity['object_id']] = $activity['object_name']; } } else { $this->closeOpenGroup(); $this->groupKey = $groupKey; $this->groupTime = $activity['timestamp']; $this->openGroup = $activity; } }