public static function getUrlToEmail($model) { if ($model instanceof Conversation) { return ConversationParticipantsUtil::getUrlToConversationDetailAndRelationsView($model->id); } elseif ($model instanceof Mission) { return Yii::app()->createAbsoluteUrl('missions/default/details/', array('id' => $model->id)); } }
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'); }
/** * @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]); }
/** * @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); }
/** * Process email invites for participants * (non-PHPdoc) * @see ZurmoControllerUtil::afterSuccessfulSave() */ protected function afterSuccessfulSave($model) { assert('$model instanceof Conversation'); ConversationParticipantsUtil::resolveEmailInvitesByPeople($model, $this->peopleAddedAsConversationParticipants); }
/** * @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); }
public function actionUpdateParticipants($id) { $postData = PostUtil::getData(); if (isset($postData['ConversationParticipantsForm'])) { $conversation = Conversation::getById((int) $id); $explicitReadWriteModelPermissions = ExplicitReadWriteModelPermissionsUtil::makeBySecurableItem($conversation); $currentUserWasParticipant = ConversationParticipantsUtil::isUserAParticipant($conversation, Yii::app()->user->userModel); $peopleAdded = ConversationParticipantsUtil::resolveConversationHasManyParticipantsFromPost($conversation, $postData['ConversationParticipantsForm'], $explicitReadWriteModelPermissions); ConversationParticipantsUtil::resolveEmailInvitesByPeople($conversation, $peopleAdded); $saved = $conversation->save(); if ($saved) { $success = ExplicitReadWriteModelPermissionsUtil::resolveExplicitReadWriteModelPermissions($conversation, $explicitReadWriteModelPermissions); $currentUserIsParticipant = ConversationParticipantsUtil::isCurrentUserAParticipant($conversation); if ($currentUserWasParticipant && !$currentUserIsParticipant) { echo 'redirectToList'; } } else { throw new FailedToSaveModelException(); } } }
/** * @param Conversation $conversation * @return array */ public static function resolvePeopleOnConversation(Conversation $conversation) { $people = ConversationParticipantsUtil::getConversationParticipants($conversation); $people[] = $conversation->owner; return $people; }
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); }
/** * @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)); }