/**
  * @param array $values
  * @return \HorseStories\Models\Conversations\Conversation
  */
 public function create($values)
 {
     $conversation = new Conversation();
     $conversation->subject = $values['subject'];
     $conversation->save();
     return $conversation;
 }
 public function testsSendNotificationOnNewComment()
 {
     $super = User::getByUsername('super');
     $steven = User::getByUsername('steven');
     $jack = User::getByUsername('jack');
     $conversation = new Conversation();
     $conversation->owner = Yii::app()->user->userModel;
     $conversation->subject = 'My test subject2';
     $conversation->description = 'My test description2';
     $this->assertTrue($conversation->save());
     $comment = new Comment();
     $comment->description = 'This is the 1st test comment';
     //Confirm no email notifications are sitting in the queue
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //Confirm there is no inbox notification
     $this->assertEquals(0, Notification::getCount());
     //No message was sent because Steven and Jack don't have primary email address
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, array($steven, $jack));
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //Two inbox notifications sent
     $this->assertEquals(2, Notification::getCount());
     $super->primaryEmail->emailAddress = '*****@*****.**';
     $steven->primaryEmail->emailAddress = '*****@*****.**';
     $jack->primaryEmail->emailAddress = '*****@*****.**';
     $this->assertTrue($super->save());
     $this->assertTrue($steven->save());
     $this->assertTrue($jack->save());
     //Two email message were sent one to Steven and one to Jack
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, array($steven, $jack));
     $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $emailMessages = EmailMessage::getAll();
     $emailMessage1 = $emailMessages[0];
     $emailMessage2 = $emailMessages[1];
     $this->assertCount(1, $emailMessage1->recipients);
     $this->assertCount(1, $emailMessage2->recipients);
     //Two inbox notifications created
     $this->assertEquals(4, Notification::getCount());
     //One email message was sent to Super but not to Steven
     //One inbox notification to Steven but not to Super
     NotificationTestHelper::setNotificationSettingsForUser($steven, 'ConversationNewComment', true, false);
     NotificationTestHelper::setNotificationSettingsForUser($super, 'ConversationNewComment', false, true);
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, array($steven, $super));
     $this->assertEquals(3, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $emailMessages = EmailMessage::getAll();
     $emailMessage = $emailMessages[2];
     $this->assertEquals(1, count($emailMessage->recipients));
     $this->assertEquals(5, Notification::getCount());
     $notifications = Notification::getAll();
     $notification = $notifications[4];
     $this->assertEquals(strval($steven), strval($notification->owner));
 }
 public function run(User $userToSendTo, $messageLogger)
 {
     $conversation = new Conversation();
     $conversation->owner = Yii::app()->user->userModel;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     if (!$conversation->save()) {
         throw new FailedToSaveModelException();
     }
     ConversationParticipantsUtil::sendEmailInviteToParticipant($conversation, $userToSendTo);
     $messageLogger->addInfoMessage('Sending conversation invite message');
 }
Ejemplo n.º 4
0
 /**
  * Using conversation to test this method.
  */
 public function testGetCommentsByRelatedModelTypeIdAndPageSize()
 {
     $super = Yii::app()->user->userModel;
     $comment1 = new Comment();
     $comment1->description = 'Comment 1';
     $comment2 = new Comment();
     $comment2->description = 'Comment 2';
     $comment3 = new Comment();
     $comment3->description = 'Comment 3';
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $conversation->comments->add($comment1);
     $conversation->comments->add($comment2);
     $conversation->comments->add($comment3);
     $this->assertTrue($conversation->save());
     $commentsData = Comment::getCommentsByRelatedModelTypeIdAndPageSize('Conversation', $conversation->id, 5);
     $this->assertEquals(3, count($commentsData));
 }
 public function testSearchByType()
 {
     $super = User::getByUsername('super');
     $steven = User::getByUsername('steven');
     Yii::app()->user->userModel = $super;
     $conversationModel = new Conversation(false);
     $searchAttributes = array();
     $conversation = new Conversation();
     $conversation->owner = $steven;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $conversationId = $conversation->id;
     //Super dont have created conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CREATED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super dont participate in any conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_PARTICIPANT);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super dont participate in any closed conversations
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CLOSED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(0, count($data));
     //Super participate in one conversation
     $conversation = Conversation::getById($conversationId);
     $conversationParticipant = new ConversationParticipant();
     $conversationParticipant->person = $super;
     $conversation->conversationParticipants->add($conversationParticipant);
     $this->assertTrue($conversation->save());
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_PARTICIPANT);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(1, count($data));
     //Super participate in a closed conversation
     $conversation = Conversation::getById($conversationId);
     $conversation->isClosed = true;
     $this->assertTrue($conversation->save());
     $metadataAdapter = new ConversationsSearchDataProviderMetadataAdapter($conversationModel, $super->id, $searchAttributes, ConversationsSearchDataProviderMetadataAdapter::LIST_TYPE_CLOSED);
     $searchAttributeData = $metadataAdapter->getAdaptedMetadata();
     $dataProvider = new RedBeanModelDataProvider('Conversation', null, false, $searchAttributeData);
     $data = $dataProvider->getData();
     $this->assertEquals(1, count($data));
 }
 public function testAddParicipantAndHaveParticipantRemoveSelf()
 {
     return;
     //Turn on once issue is fixed with SECURITY_OPTIMIZED and this bug.
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $fileModel = ZurmoTestHelper::createFileModel();
     $accounts = Account::getByName('anAccount');
     $steven = UserTestHelper::createBasicUser('steven');
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $sally = UserTestHelper::createBasicUser('sally');
     $conversation->addPermissions($sally, Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER);
     $conversation->save();
     //Log in as sally, and remove her permission
     Yii::app()->user->userModel = $sally;
     //Breaks because SecurableItem 2 spots using SECURITY_OPTIMIZATION == false, think it is the first spot
     //todo: fix.
     $conversation->removePermissions(Yii::app()->user->userModel, Permission::READ_WRITE_CHANGE_PERMISSIONS_CHANGE_OWNER, Permission::ALLOW);
 }
 public function create($recipient = null)
 {
     $user = Confide::user();
     $users = array();
     $userModels = null;
     if ($user->isStaff()) {
         $userModels = DB::table('doctor_patient')->where('doctor_patient.staff_id', '=', $user->id)->join('user', 'doctor_patient.user_id', '=', 'user.id')->select('user.id', 'first_name', 'last_name')->get();
         $users[''] = "-- Select a Patient --";
     } else {
         $userModels = DB::table('doctor_patient')->where('doctor_patient.user_id', '=', $user->id)->join('user', 'doctor_patient.staff_id', '=', 'user.id')->select('user.id', 'first_name', 'last_name')->get();
         $users[''] = "-- Select a Doctor --";
     }
     // Create users array
     foreach ($userModels as $userModel) {
         if ($user->isStaff()) {
             $users[$userModel->id] = $userModel->first_name . " " . $userModel->last_name;
         } else {
             $users[$userModel->id] = "Dr. " . $userModel->first_name . " " . $userModel->last_name;
         }
     }
     if (Request::isMethod('GET')) {
         return View::make('home/conversation/create', compact('user', 'users', 'recipient'));
     } elseif (Request::isMethod('POST')) {
         $messages = array();
         $validator = Validator::make(Input::all(), array('user_id' => 'required', 'subject' => 'required', 'message' => 'required'), array('user_id.required' => 'You must select a recipient.', 'subject.required' => 'You must include a subject.', 'messages.required' => 'You must include a message.'));
         // Get other errors
         if ($validator->fails()) {
             $messageBag = $validator->messages();
             foreach ($messageBag->all(':message<br>') as $message) {
                 $messages[] = $message;
             }
         }
         if (empty($messages)) {
             // Create a new Appointment with the given data
             $conversation = new Conversation();
             $conversation->fill(Input::all());
             $conversation->sender = $user->id;
             $conversation->receiver = Input::get('user_id');
             $conversation->save();
             return Redirect::route('conversation.show.all');
         } else {
             // Flash data to session vars to repopulate form later
             Input::flash();
             // Compile error messages
             $messages = implode($messages);
             return Redirect::route('conversation.create')->with(array('message' => 'Error:<br>' . $messages, 'message_type' => 'error'));
         }
     }
 }
 /**
  * @param DemoDataHelper $demoDataHelper
  */
 public function makeAll(&$demoDataHelper)
 {
     assert('$demoDataHelper instanceof DemoDataHelper');
     assert('$demoDataHelper->isSetRange("User")');
     assert('$demoDataHelper->isSetRange("Account")');
     $conversations = array();
     foreach (self::getConversationData() as $randomConversationData) {
         $postData = array();
         $conversation = new Conversation();
         $conversation->setScenario('importModel');
         $conversation->owner = $demoDataHelper->getRandomByModelName('User');
         $conversation->createdByUser = $conversation->owner;
         $conversation->conversationItems->add($demoDataHelper->getRandomByModelName('Account'));
         $conversation->subject = $randomConversationData['subject'];
         $conversation->description = $randomConversationData['description'];
         //Add some comments
         foreach ($randomConversationData['comments'] as $commentDescription) {
             $comment = new Comment();
             $comment->setScenario('importModel');
             $comment->createdByUser = $demoDataHelper->getRandomByModelName('User');
             $comment->description = $commentDescription;
             $conversation->comments->add($comment);
             self::addItemIdToPostData($postData, $comment->createdByUser->getClassId('Item'));
         }
         //Add Super user
         $comment = new Comment();
         $comment->description = 'Great idea guys. Keep it coming.';
         $conversation->comments->add($comment);
         self::addItemIdToPostData($postData, Yii::app()->user->userModel->getClassId('Item'));
         $saved = $conversation->save();
         assert('$saved');
         //any user who has made a comment should be added as a participant and resolve permissions
         $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
         ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
         $saved = $conversation->save();
         assert('$saved');
         $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
         $saved = $conversation->save();
         assert('$success');
         $conversations[] = $conversation->id;
     }
     $demoDataHelper->setRangeByModelName('Conversation', $conversations[0], $conversations[count($conversations) - 1]);
 }
Ejemplo n.º 9
0
 public function testsSendNotificationOnNewComment()
 {
     $super = User::getByUsername('super');
     $steven = User::getByUsername('steven');
     $jack = User::getByUsername('jack');
     $conversation = new Conversation();
     $conversation->owner = Yii::app()->user->userModel;
     $conversation->subject = 'My test subject2';
     $conversation->description = 'My test description2';
     $this->assertTrue($conversation->save());
     $comment = new Comment();
     $comment->description = 'This is the 1st test comment';
     //Confirm no email notifications are sitting in the queue
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     //No message was sent because Steven and Jack don't have primary email address
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, $super, array($steven, $jack));
     $this->assertEquals(0, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $super->primaryEmail->emailAddress = '*****@*****.**';
     $steven->primaryEmail->emailAddress = '*****@*****.**';
     $jack->primaryEmail->emailAddress = '*****@*****.**';
     $this->assertTrue($super->save());
     $this->assertTrue($steven->save());
     $this->assertTrue($jack->save());
     //Two email message were sent one to Steven and one to Jack
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, $super, array($steven, $jack));
     $this->assertEquals(2, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $emailMessages = EmailMessage::getAll();
     $emailMessage1 = $emailMessages[0];
     $emailMessage2 = $emailMessages[1];
     $this->assertCount(1, $emailMessage1->recipients);
     $this->assertCount(1, $emailMessage2->recipients);
     //One email message was sent to Super but not to Steven
     UserConfigurationFormAdapter::setValue($steven, true, 'turnOffEmailNotifications');
     CommentsUtil::sendNotificationOnNewComment($conversation, $comment, $jack, array($steven, $super));
     $this->assertEquals(3, Yii::app()->emailHelper->getQueuedCount());
     $this->assertEquals(0, Yii::app()->emailHelper->getSentCount());
     $emailMessages = EmailMessage::getAll();
     $emailMessage = $emailMessages[2];
     $this->assertEquals(1, count($emailMessage->recipients));
 }
Ejemplo n.º 10
0
 /**
  * @depends testResolveConversationParticipantsForExplicitModelPermissions
  */
 public function testGetUnreadConversationCount()
 {
     $super = User::getByUsername('super');
     $mary = User::getByUsername('mary');
     $count = Conversation::getUnreadCountByUser($super);
     $account2 = AccountTestHelper::createAccountByNameForOwner('anAccount2', $super);
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject2';
     $conversation->description = 'My test description2';
     $conversation->conversationItems->add($account2);
     $this->assertTrue($conversation->save());
     //when super adds a comment, it should remain same count
     $comment = new Comment();
     $comment->description = 'This is my first comment';
     $conversation->comments->add($comment);
     $this->assertTrue($conversation->save());
     $count = Conversation::getUnreadCountByUser($super);
     $this->assertEquals(1, $count);
     //Add mary as a participant
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $postData = array();
     $postData['itemIds'] = $super->getClassId('Item') . ',' . $mary->getClassId('Item');
     // Not Coding Standard
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $conversation->save();
     //when mary adds a comment, super's count should go up (assumming count was previously 0)
     Yii::app()->user->userModel = $mary;
     $comment = new Comment();
     $comment->description = 'This is mary\'s first comment';
     $conversation->comments->add($comment);
     $this->assertTrue($conversation->save());
     Yii::app()->user->userModel = $super;
     $count = Conversation::getUnreadCountByUser($super);
     $this->assertEquals(2, $count);
 }
 /**
  * @depends testResolveConversationParticipants
  */
 public function testResolveEmailInvitesByPeople()
 {
     $this->assertEquals(0, Notification::getCount());
     $this->assertEquals(0, EmailMessage::getCount());
     $super = Yii::app()->user->userModel;
     $super->primaryEmail->emailAddress = '*****@*****.**';
     NotificationTestHelper::setNotificationSettingsForUser($super, 'ConversationInvites');
     $jack = User::getByUsername('jack');
     $jack->primaryEmail->emailAddress = '*****@*****.**';
     NotificationTestHelper::setNotificationSettingsForUser($jack, 'ConversationInvites', true, false);
     $steven = User::getByUsername('steven');
     $steven->primaryEmail->emailAddress = '*****@*****.**';
     NotificationTestHelper::setNotificationSettingsForUser($steven, 'ConversationInvites', false, true);
     $mary = User::getByUsername('mary');
     $mary->primaryEmail->emailAddress = '*****@*****.**';
     NotificationTestHelper::setNotificationSettingsForUser($mary, 'ConversationInvites', false, false);
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'Test Resolve Conversation Participants';
     $conversation->description = 'This is for testing conversation participants.';
     $this->assertTrue($conversation->save());
     ConversationParticipantsUtil::resolveEmailInvitesByPeople($conversation, array($super, $jack, $steven, $mary));
     $this->assertEquals(2, Notification::getCount());
     $notifications = Notification::getAll();
     $this->assertContains('<h2 class="h2">Join the Conversation</h2>Clark Kent would like you to join a conversation <strong>"Test Resolve Conversation Participants"</strong><br/>', $notifications[0]->notificationMessage->htmlContent);
     $this->assertContains('Clark Kent would like you to join a conversation "Test Resolve Conversation Participants"', $notifications[0]->notificationMessage->textContent);
     $this->assertEquals(2, EmailMessage::getCount());
     $emailMessages = EmailMessage::getAll();
     $this->assertContains('<h2 class="h2">Join the Conversation</h2>Clark Kent would like you to join a conversation <strong>"Test Resolve Conversation Participants"</strong><br/>', $emailMessages[0]->content->htmlContent);
     $this->assertContains('Powered By <a href="http://www.zurmo.com">Zurmo</a>', $emailMessages[0]->content->htmlContent);
     $this->assertContains('Clark Kent would like you to join a conversation "Test Resolve Conversation Participants"', $emailMessages[0]->content->textContent);
     $this->assertContains('Manage your email preferences', $emailMessages[0]->content->textContent);
     $this->assertEquals('You have been invited to participate in a conversation', $emailMessages[0]->subject);
 }
 /**
  * @depends testIsUserAParticipant
  */
 public function testResolveConversationParticipants()
 {
     $super = Yii::app()->user->userModel;
     $jack = UserTestHelper::createBasicUser('jack');
     $steven = User::getByUsername('steven');
     $conversation = new Conversation();
     $conversation->owner = Yii::app()->user->userModel;
     $conversation->subject = 'Test Resolve Conversation Participants';
     $conversation->description = 'This is for testing conversation participants.';
     $this->assertTrue($conversation->save());
     $participants = ConversationParticipantsUtil::getConversationParticipants($conversation);
     $this->assertEquals(0, count($participants));
     $conversationParticipant = new ConversationParticipant();
     $conversationParticipant->person = $jack;
     $conversation->conversationParticipants->add($conversationParticipant);
     $this->assertEquals(0, count($participants));
     $participants = ConversationParticipantsUtil::getConversationParticipants($conversation);
     $this->assertEquals(1, count($participants));
     $conversationParticipant = new ConversationParticipant();
     $conversationParticipant->person = $steven;
     $conversation->conversationParticipants->add($conversationParticipant);
     $participants = ConversationParticipantsUtil::getConversationParticipants($conversation);
     $this->assertEquals(2, count($participants));
 }
 public function testMarkReadUnreadMassActionByModel()
 {
     $super = User::getByUsername('super');
     //Conversation model
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test conversation subject';
     $conversation->description = 'My test conversation description';
     $this->assertTrue($conversation->save());
     $conversationId = $conversation->id;
     $this->assertTrue((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mark conversation as unread
     $selectedIds = $conversationId;
     $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Conversation', 'MashableInboxForm' => array('massAction' => 'markUnread', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $conversation = Conversation::getById($conversationId);
     $this->assertFalse((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mark conversation as read
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Conversation', 'MashableInboxForm' => array('massAction' => 'markRead', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $conversation = Conversation::getById($conversationId);
     $this->assertTrue((bool) ConversationsUtil::hasUserReadConversationLatest($conversation, $super));
     //Mission model
     $mission = new Mission();
     $mission->owner = $super;
     $mission->description = 'My test mission description';
     $mission->status = Mission::STATUS_AVAILABLE;
     $this->assertTrue($mission->save());
     $missionId = $mission->id;
     $this->assertTrue((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
     //Mark mission as unread
     $selectedIds = $missionId;
     $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Mission', 'MashableInboxForm' => array('massAction' => 'markUnread', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $mission = Mission::getById($missionId);
     $this->assertFalse((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
     //Mark mission as read
     $this->setGetArray(array('ajax' => 'list-view', 'modelClassName' => 'Mission', 'MashableInboxForm' => array('massAction' => 'markRead', 'selectedIds' => $selectedIds)));
     $content = $this->runControllerWithNoExceptionsAndGetContent('mashableInbox/default/list');
     $mission = Mission::getById($missionId);
     $this->assertTrue((bool) MissionsUtil::hasUserReadMissionLatest($mission, $super));
 }
 public function createNewConversation()
 {
     $user = Auth::user();
     $input = Input::all();
     // get the lastest conversation ID
     $conversation = new Conversation();
     $conversation->name = "Untitled Conversation";
     $conversation->lastest_message = "The room has been created !";
     $conversation->leader_id = $user['id'];
     // save to database
     $conversation->save();
     // return to the browser
     return json_encode($conversation->id);
 }
 protected function createAndSaveNewConversationForUser(User $owner, User $participant)
 {
     foreach (Conversation::getAll() as $conversation) {
         $conversation->delete();
     }
     $conversation = new Conversation();
     $conversation->owner = $owner;
     $conversation->subject = 'My test conversation subject';
     $conversation->description = 'My test conversation description';
     $conversationParticipant = new ConversationParticipant();
     $conversationParticipant->person = $participant;
     $conversation->conversationParticipants->add($conversationParticipant);
     $this->assertTrue($conversation->save());
     return $conversation;
 }
 /**
  * Given a conversation and a user, mark that the user has read or not read the latest changes as a conversation
  * participant, or if the user is the owner, than as the owner.
  * @param Conversation $conversation
  * @param User $user
  * @param Boolean $hasReadLatest
  */
 public static function markUserHasReadLatest(Conversation $conversation, User $user, $hasReadLatest = true)
 {
     assert('$conversation->id > 0');
     assert('$user->id > 0');
     assert('is_bool($hasReadLatest)');
     $save = false;
     if ($user->getClassId('Item') == $conversation->owner->getClassId('Item')) {
         if ($conversation->ownerHasReadLatest != $hasReadLatest) {
             $conversation->ownerHasReadLatest = $hasReadLatest;
             $save = true;
         }
     } else {
         foreach ($conversation->conversationParticipants as $position => $participant) {
             if ($participant->person->getClassId('Item') == $user->getClassId('Item') && $participant->hasReadLatest != $hasReadLatest) {
                 $conversation->conversationParticipants[$position]->hasReadLatest = $hasReadLatest;
                 $save = true;
             }
         }
     }
     if ($save) {
         $conversation->save();
     }
 }
Ejemplo n.º 17
0
 public function store()
 {
     if (FEUsersHelper::isLogged()) {
         $current_user_id = Session::get('user')['id'];
         $r_user_id = Input::get('r_user_id');
         $conversations = Conversation::where(function ($query) use($current_user_id, $r_user_id) {
             $query->where('user1_id', '=', $current_user_id)->where('user2_id', '=', $r_user_id);
         })->orWhere(function ($query) use($current_user_id, $r_user_id) {
             $query->where('user1_id', '=', $r_user_id)->where('user2_id', '=', $current_user_id);
         })->orderBy('updated_at', 'DESC')->get();
         $message = new Message();
         if ($conversations->count() > 0) {
             $conversation = $conversations->first();
             $message->content = Input::get('content');
             $message->s_user_id = $current_user_id;
             $message->conversation_id = $conversation->id;
             $message->save();
             $conversation->updated_at = date('Y-m-d H:m:s');
             $conversation->save();
             return Redirect::to('message/' . $conversation->id);
         } else {
             $conversation = new Conversation();
             $conversation->user1_id = $current_user_id;
             $conversation->user2_id = Input::get('r_user_id');
             $conversation->save();
             $message->content = Input::get('content');
             $message->s_user_id = $current_user_id;
             $message->conversation_id = $conversation->id;
             $message->save();
             return Redirect::to('message/' . $conversation->id);
         }
     }
     return Redirect::to('/');
 }
 /**
  * @depends testCommentsAjaxListForRelatedModel
  */
 public function testClosingConversations()
 {
     if (!SECURITY_OPTIMIZED) {
         return;
     }
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = "Test closed";
     $conversation->description = "This is just to make the isClosed column in conversations table";
     $conversation->save();
     $conversations = Conversation::getAll();
     $this->assertEquals(2, count($conversations));
     $this->assertEquals($super->id, $conversations[0]->owner->id);
     //Conversation is opened
     $this->assertEquals(0, $conversations[0]->resolveIsClosedForNull());
     $this->setGetArray(array('id' => $conversations[0]->id));
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/changeIsClosed');
     //Conversation is closed
     $this->assertEquals(1, $conversations[0]->resolveIsClosedForNull());
     $this->setGetArray(array('id' => $conversations[0]->id));
     $this->runControllerWithNoExceptionsAndGetContent('conversations/default/changeIsClosed');
     //Conversation is Re-opened
     $this->assertEquals(0, $conversations[0]->resolveIsClosedForNull());
 }
Ejemplo n.º 19
0
 protected function makeANewUnreadConversationOwnedByCurrentUser()
 {
     $conversation = new Conversation();
     $conversation->owner = $this->user;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $conversation->ownerHasReadLatest = false;
     $this->assertTrue($conversation->save());
     return $conversation;
 }
 public function testMarkUserHasReadLatest()
 {
     $super = User::getByUsername('super');
     $steven = UserTestHelper::createBasicUser('steven');
     $conversation = new Conversation();
     $conversation->owner = $super;
     $conversation->subject = 'My test subject';
     $conversation->description = 'My test description';
     $this->assertTrue($conversation->save());
     $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation);
     $postData = array();
     $postData['itemIds'] = $steven->getClassId('Item');
     ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData, $explicitReadWriteModelPermissions);
     $this->assertTrue($conversation->save());
     $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions);
     $this->assertTrue($success);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(0, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //After running for super, nothing will change.
     ConversationsUtil::markUserHasReadLatest($conversation, $super);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(0, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //After running for steven, it will show read for him.
     ConversationsUtil::markUserHasReadLatest($conversation, $steven);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     $conversation->ownerHasReadLatest = false;
     $this->assertTrue($conversation->save());
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(0, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //Now try for Steven, nothing changes
     ConversationsUtil::markUserHasReadLatest($conversation, $steven);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(0, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
     //Now try for super, should change
     ConversationsUtil::markUserHasReadLatest($conversation, $super);
     $id = $conversation->id;
     $conversation->forget();
     unset($conversation);
     $conversation = Conversation::getById($id);
     $this->assertEquals(1, $conversation->ownerHasReadLatest);
     $this->assertEquals(1, $conversation->conversationParticipants->offsetGet(0)->hasReadLatest);
 }