/**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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;
     }
 }
Exemplo n.º 3
0
 /**
  * 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;
     }
 }