private function sendMail(PhabricatorMailTarget $target, PhabricatorRepository $repository, PhabricatorRepositoryPushEvent $event)
 {
     $task_data = $this->getTaskData();
     $viewer = $target->getViewer();
     $locale = PhabricatorEnv::beginScopedLocale($viewer->getTranslation());
     $logs = $event->getLogs();
     list($ref_lines, $ref_list) = $this->renderRefs($logs);
     list($commit_lines, $subject_line) = $this->renderCommits($repository, $logs, idx($task_data, 'info', array()));
     $ref_count = count($ref_lines);
     $commit_count = count($commit_lines);
     $handles = id(new PhabricatorHandleQuery())->setViewer($viewer)->withPHIDs(array($event->getPusherPHID()))->execute();
     $pusher_name = $handles[$event->getPusherPHID()]->getName();
     $repo_name = $repository->getMonogram();
     if ($commit_count) {
         $overview = pht('%s pushed %d commit(s) to %s.', $pusher_name, $commit_count, $repo_name);
     } else {
         $overview = pht('%s pushed to %s.', $pusher_name, $repo_name);
     }
     $details_uri = PhabricatorEnv::getProductionURI('/diffusion/pushlog/view/' . $event->getID() . '/');
     $body = new PhabricatorMetaMTAMailBody();
     $body->addRawSection($overview);
     $body->addLinkSection(pht('DETAILS'), $details_uri);
     if ($commit_lines) {
         $body->addTextSection(pht('COMMITS'), implode("\n", $commit_lines));
     }
     if ($ref_lines) {
         $body->addTextSection(pht('REFERENCES'), implode("\n", $ref_lines));
     }
     $prefix = PhabricatorEnv::getEnvConfig('metamta.diffusion.subject-prefix');
     $parts = array();
     if ($commit_count) {
         $parts[] = pht('%s commit(s)', $commit_count);
     }
     if ($ref_count) {
         $parts[] = implode(', ', $ref_list);
     }
     $parts = implode(', ', $parts);
     if ($subject_line) {
         $subject = pht('(%s) %s', $parts, $subject_line);
     } else {
         $subject = pht('(%s)', $parts);
     }
     $mail = id(new PhabricatorMetaMTAMail())->setRelatedPHID($event->getPHID())->setSubjectPrefix($prefix)->setVarySubjectPrefix(pht('[Push]'))->setSubject($subject)->setFrom($event->getPusherPHID())->setBody($body->render())->setThreadID($event->getPHID(), $is_new = true)->addHeader('Thread-Topic', $subject)->setIsBulk(true);
     $target->sendMail($mail);
 }
 public function updateTransactionMailBody(PhabricatorMetaMTAMailBody $body, PhabricatorApplicationTransactionEditor $editor, array $xactions)
 {
     if ($editor->getIsNewObject()) {
         return;
     }
     if ($editor->getIsCloseByCommit()) {
         return;
     }
     $xaction = $editor->getDiffUpdateTransaction($xactions);
     if (!$xaction) {
         return;
     }
     $original = id(new DifferentialDiffQuery())->setViewer($this->getViewer())->withPHIDs(array($xaction->getOldValue()))->executeOne();
     if (!$original) {
         return;
     }
     $revision = $this->getObject();
     $current = $revision->getActiveDiff();
     $old_id = $original->getID();
     $new_id = $current->getID();
     $uri = '/' . $revision->getMonogram() . '?vs=' . $old_id . '&id=' . $new_id;
     $uri = PhabricatorEnv::getProductionURI($uri);
     $body->addLinkSection(pht('CHANGES SINCE LAST UPDATE'), $uri);
 }
 private function sendWaitingForApprovalEmail(PhabricatorUser $user)
 {
     $title = '[Phabricator] ' . pht('New User "%s" Awaiting Approval', $user->getUsername());
     $body = new PhabricatorMetaMTAMailBody();
     $body->addRawSection(pht('Newly registered user "%s" is awaiting account approval by an ' . 'administrator.', $user->getUsername()));
     $body->addLinkSection(pht('APPROVAL QUEUE'), PhabricatorEnv::getProductionURI('/people/query/approval/'));
     $body->addLinkSection(pht('DISABLE APPROVAL QUEUE'), PhabricatorEnv::getProductionURI('/config/edit/auth.require-approval/'));
     $admins = id(new PhabricatorPeopleQuery())->setViewer(PhabricatorUser::getOmnipotentUser())->withIsAdmin(true)->execute();
     if (!$admins) {
         return;
     }
     $mail = id(new PhabricatorMetaMTAMail())->addTos(mpull($admins, 'getPHID'))->setSubject($title)->setBody($body->render())->saveAndSend();
 }
 private function newMailMessage(PhabricatorUser $viewer, array $events)
 {
     $events = msort($events, 'getEpoch');
     $next_event = head($events);
     $body = new PhabricatorMetaMTAMailBody();
     foreach ($events as $event) {
         $body->addTextSection(null, pht('%s is starting in %s minute(s), at %s.', $event->getEvent()->getName(), $event->getDisplayMinutes(), $event->getDisplayTime()));
         $body->addLinkSection(pht('EVENT DETAIL'), PhabricatorEnv::getProductionURI($event->getEvent()->getURI()));
     }
     $next_event = head($events)->getEvent();
     $subject = $next_event->getName();
     if (count($events) > 1) {
         $more = pht('(+%s more...)', new PhutilNumber(count($events) - 1));
         $subject = "{$subject} {$more}";
     }
     $calendar_phid = id(new PhabricatorCalendarApplication())->getPHID();
     return id(new PhabricatorMetaMTAMail())->setSubject($subject)->addTos(array($viewer->getPHID()))->setSensitiveContent(false)->setFrom($calendar_phid)->setIsBulk(true)->setSubjectPrefix(pht('[Calendar]'))->setVarySubjectPrefix(pht('[Reminder]'))->setThreadID($next_event->getPHID(), false)->setRelatedPHID($next_event->getPHID())->setBody($body->render())->setHTMLBody($body->renderHTML());
 }
 protected function addEmailPreferenceSectionToMailBody(PhabricatorMetaMTAMailBody $body, PhabricatorLiskDAO $object, array $xactions)
 {
     $href = PhabricatorEnv::getProductionURI('/' . $object->getMonogram() . '?settings');
     $label = pht('EMAIL PREFERENCES FOR THIS ROOM');
     $body->addLinkSection($label, $href);
 }
 /**
  * @task mail
  */
 protected function addEmailPreferenceSectionToMailBody(PhabricatorMetaMTAMailBody $body, PhabricatorLiskDAO $object, array $xactions)
 {
     $href = PhabricatorEnv::getProductionURI('/settings/panel/emailpreferences/');
     $body->addLinkSection(pht('EMAIL PREFERENCES'), $href);
 }
 protected function buildMailBody(PhabricatorLiskDAO $object, array $xactions)
 {
     $body = new PhabricatorMetaMTAMailBody();
     $headers = array();
     $comments = array();
     $inline_comments = array();
     foreach ($xactions as $xaction) {
         if ($xaction->shouldHide()) {
             continue;
         }
         $comment = $xaction->getComment();
         switch ($xaction->getTransactionType()) {
             case PholioTransaction::TYPE_INLINE:
                 if ($comment && strlen($comment->getContent())) {
                     $inline_comments[] = $comment;
                 }
                 break;
             case PhabricatorTransactions::TYPE_COMMENT:
                 if ($comment && strlen($comment->getContent())) {
                     $comments[] = $comment->getContent();
                 }
                 // fallthrough
             // fallthrough
             default:
                 $headers[] = id(clone $xaction)->setRenderingTarget('text')->getTitle();
                 break;
         }
     }
     $body->addRawSection(implode("\n", $headers));
     foreach ($comments as $comment) {
         $body->addRawSection($comment);
     }
     if ($inline_comments) {
         $body->addRawSection(pht('INLINE COMMENTS'));
         foreach ($inline_comments as $comment) {
             $text = pht('Image %d: %s', $comment->getImageID(), $comment->getContent());
             $body->addRawSection($text);
         }
     }
     $body->addLinkSection(pht('MOCK DETAIL'), PhabricatorEnv::getProductionURI('/M' . $object->getID()));
     return $body;
 }