コード例 #1
0
 /**
  *
  * @param array $users array<UserModel>
  * @param ProjectSettingsModel $project
  * @param string $subject
  * @param string $smsTemplate
  * @param string $emailTemplate
  * @param string $htmlEmailTemplate
  * @param DeliveryInterface|null $delivery
  * @return string
  */
 public static function communicateToUsers($users, $project, $subject, $smsTemplate, $emailTemplate, $htmlEmailTemplate = '', DeliveryInterface $delivery = null)
 {
     // store message in database
     $messageModel = new MessageModel($project);
     $messageModel->subject = $subject;
     $messageModel->content = $emailTemplate;
     $messageId = $messageModel->write();
     foreach ($users as $user) {
         self::communicateToUser($user, $project, $subject, $smsTemplate, $emailTemplate, $htmlEmailTemplate, $delivery);
         $unreadModel = new UnreadMessageModel($user->id->asString(), $project->id->asString());
         $unreadModel->markUnread($messageId);
         $unreadModel->write();
     }
     SmsQueue::processQueue($project->databaseName());
     return $messageId;
 }
コード例 #2
0
 public function testCommunicateToUsers_SendEmail_BroadcastMessageStoredAndUnread()
 {
     $e = new MongoTestEnvironment();
     $e->clean();
     $userId = $e->createUser('User', 'Name', '*****@*****.**');
     $user = new UserModel($userId);
     $user->communicate_via = UserModel::COMMUNICATE_VIA_EMAIL;
     $project = $e->createProjectSettings(SF_TESTPROJECTCODE);
     $subject = 'TestSubject';
     $project->emailSettings->fromAddress = '*****@*****.**';
     $project->emailSettings->fromName = 'Scripture Forge ProjectName';
     $smsTemplate = '';
     $emailTemplate = 'TestMessage';
     $delivery = new MockCommunicateDelivery();
     Communicate::communicateToUsers(array($user), $project, $subject, $smsTemplate, $emailTemplate, '', $delivery);
     $unread = new UnreadMessageModel($userId, $project->id->asString());
     $messageIds = $unread->unreadItems();
     $this->assertEqual(count($messageIds), 1);
     $messageId = $messageIds[0];
     $message = new MessageModel($project, $messageId);
     $this->assertEqual($message->subject, $subject);
     $this->assertEqual($message->content, $emailTemplate);
 }
コード例 #3
0
 /**
  *
  * @param string $projectId
  * @param string $userId
  * @returns array - the DTO array
  */
 public static function encode($projectId, $userId)
 {
     $user = new UserModel($userId);
     $project = new SfchecksProjectModel($projectId);
     if ($project->isArchived && $project->users[$userId]->role != ProjectRoles::MANAGER) {
         throw new ResourceNotAvailableException("This Project is no longer available. If this is incorrect contact your project manager.");
     }
     $textList = new TextListModel($project);
     $textList->read();
     $data = array();
     $data['rights'] = RightsHelper::encode($user, $project);
     $data['project'] = array('name' => $project->projectName, 'id' => $projectId);
     $data['texts'] = array();
     foreach ($textList->entries as $entry) {
         $text = new TextModel($project, $entry['id']);
         if (!$text->isArchived) {
             $questionList = $text->listQuestionsWithAnswers();
             // Just want count of questions and responses, not whole list
             $entry['questionCount'] = 0;
             $responseCount = 0;
             // "Responses" = answers + comments
             foreach ($questionList->entries as $q) {
                 $question = new QuestionModel($project, $q['id']);
                 if (!$question->isArchived) {
                     $entry['questionCount']++;
                     foreach ($q['answers'] as $a) {
                         $commentCount = count($a['comments']);
                         $responseCount += $commentCount + 1;
                         // +1 for this answer
                     }
                 }
             }
             $entry['responseCount'] = $responseCount;
             $entry['dateCreated'] = $text->dateCreated->format(\DateTime::RFC2822);
             $data['texts'][] = $entry;
         }
     }
     // sort Texts with newest at the top
     usort($data['texts'], function ($a, $b) {
         $sortOn = 'dateCreated';
         if (array_key_exists($sortOn, $a) && array_key_exists($sortOn, $b)) {
             return strtotime($a[$sortOn]) < strtotime($b[$sortOn]) ? 1 : -1;
         } else {
             return 0;
         }
     });
     // future support for members
     $data['members'] = array();
     // unread activity count
     $unreadActivity = new UnreadActivityModel($userId, $projectId);
     $unreadItems = $unreadActivity->unreadItems();
     $data['activityUnreadCount'] = count($unreadItems);
     // unread broadcast messages
     $unreadMessages = new UnreadMessageModel($userId, $projectId);
     $messageIds = $unreadMessages->unreadItems();
     $messages = array();
     foreach ($messageIds as $messageId) {
         $message = new MessageModel($project, $messageId);
         $messages[] = array('id' => $message->id->asString(), 'subject' => $message->subject, 'content' => $message->content);
     }
     $data['broadcastMessages'] = $messages;
     return $data;
 }
コード例 #4
0
 public static function markMessageRead($projectId, $messageId, $userId)
 {
     $unreadModel = new UnreadMessageModel($userId, $projectId);
     $unreadModel->markRead($messageId);
     $unreadModel->write();
 }