/** * Send a notification to one user * * @param string $userName Username of the recipient * @param string $email Email address of the recipient * @param string $lang Selected language of the recipient * @param string $timezone Selected timezone of the recipient * @param int $maxTime */ public function sendEmailToUser($userName, $email, $lang, $timezone, $maxTime) { $user = $this->userManager->get($userName); if (!$user instanceof IUser) { return; } list($mailData, $skippedCount) = $this->getItemsForUser($userName, $maxTime); $l = $this->getLanguage($lang); $this->dataHelper->setUser($userName); $this->dataHelper->setL10n($l); $activityList = array(); foreach ($mailData as $activity) { $relativeDateTime = $this->dateFormatter->formatDateTimeRelativeDay($activity['amq_timestamp'], 'long', 'medium', new \DateTimeZone($timezone), $l); $activityList[] = array($this->dataHelper->translation($activity['amq_appid'], $activity['amq_subject'], $this->dataHelper->getParameters($activity['amq_subjectparams'])), $relativeDateTime); } $alttext = new Template('activity', 'email.notification', ''); $alttext->assign('username', $user->getDisplayName()); $alttext->assign('activities', $activityList); $alttext->assign('skippedCount', $skippedCount); $alttext->assign('owncloud_installation', $this->urlGenerator->getAbsoluteURL('/')); $alttext->assign('overwriteL10N', $l); $emailText = $alttext->fetchPage(); $message = $this->mailer->createMessage(); $message->setTo([$email => $user->getDisplayName()]); $message->setSubject((string) $l->t('Activity notification')); $message->setPlainBody($emailText); $message->setFrom([$this->getSenderData('email') => $this->getSenderData('name')]); $this->mailer->send($message); }
/** * 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; } }
/** * Add an activity to the internal array * * @param array $activity */ public function addActivity($activity) { $activity['subjectparams_array'] = $this->dataHelper->getParameters($activity['subjectparams']); $activity['messageparams_array'] = $this->dataHelper->getParameters($activity['messageparams']); $groupKey = $this->getGroupKey($activity); if ($groupKey === false) { if (!empty($this->openGroup)) { $this->activities[] = $this->openGroup; $this->openGroup = array(); $this->groupKey = ''; $this->groupTime = 0; } $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) { if (!is_array($this->openGroup['subjectparams_array'][$parameter])) { $this->openGroup['subjectparams_array'][$parameter] = array($this->openGroup['subjectparams_array'][$parameter]); } if (!isset($this->openGroup['activity_ids'])) { $this->openGroup['activity_ids'] = [(int) $this->openGroup['activity_id']]; $this->openGroup['files'] = [(int) $this->openGroup['object_id'] => (string) $this->openGroup['file']]; } $this->openGroup['subjectparams_array'][$parameter][] = $activity['subjectparams_array'][$parameter]; $this->openGroup['subjectparams_array'][$parameter] = array_unique($this->openGroup['subjectparams_array'][$parameter]); $this->openGroup['activity_ids'][] = (int) $activity['activity_id']; $this->openGroup['files'][(int) $activity['object_id']] = (string) $activity['file']; } } else { $this->closeOpenGroup(); $this->groupKey = $groupKey; $this->groupTime = $activity['timestamp']; $this->openGroup = $activity; } }