/** * Override to handle sending email messages on new comment */ protected function afterSuccessfulSave($model) { assert('$model instanceof Item'); parent::afterSuccessfulSave($model); $user = Yii::app()->user->userModel; if ($this->relatedModel instanceof Conversation) { $participants = ConversationsUtil::resolvePeopleToSendNotificationToOnNewComment($this->relatedModel, $user); CommentsUtil::sendNotificationOnNewComment($this->relatedModel, $model, $user, $participants); } elseif ($this->relatedModel instanceof Mission) { $participants = MissionsUtil::resolvePeopleToSendNotificationToOnNewComment($this->relatedModel, $user); CommentsUtil::sendNotificationOnNewComment($this->relatedModel, $model, $user, $participants); } }
public function testResolvePeopleToSendNotificationToOnNewComment() { $super = User::getByUsername('super'); Yii::app()->user->userModel = $super; $steven = User::getByUsername('steven'); $missions = Mission::getAll(); $mission = $missions[0]; $super->primaryEmail->emailAddress = '*****@*****.**'; $this->assertTrue($super->save()); $steven->primaryEmail->emailAddress = '*****@*****.**'; $this->assertTrue($steven->save()); // super updated mission $participants = MissionsUtil::resolvePeopleToSendNotificationToOnNewComment($mission, $super); $this->assertEquals(1, count($participants)); $this->assertEquals($participants[0], $steven); // steven updated mission $participants = MissionsUtil::resolvePeopleToSendNotificationToOnNewComment($mission, $steven); $this->assertEquals(1, count($participants)); $this->assertEquals($participants[0], $super); }
/** * Alter takenByUserHasReadLatest and/or ownerHasReadLatest based on comments being added. * (non-PHPdoc) * @see Item::beforeSave() */ protected function beforeSave() { $missionRules = new MissionMashableInboxRules(); $personsToAddAsHaveNotReadLatest = array(); if (parent::beforeSave()) { if ($this->getIsNewModel()) { $this->unrestrictedSet('latestDateTime', DateTimeUtil::convertTimestampToDbFormatDateTime(time())); $personsToAddAsHaveNotReadLatest = MissionsUtil::resolvePeopleToSendNotificationToOnNewMission($this); } if (isset($this->originalAttributeValues['status']) && $this->originalAttributeValues['status'] != $this->status && $this->status == self::STATUS_TAKEN) { MissionsUtil::markAllUserHasReadLatestExceptOwnerAndTakenBy($this); } if ($this->comments->isModified()) { $this->unrestrictedSet('latestDateTime', DateTimeUtil::convertTimestampToDbFormatDateTime(time())); foreach ($this->comments as $comment) { if ($comment->id < 0) { if (Yii::app()->user->userModel != $this->owner) { $this->sendOwnerUnreadCommentNotification = true; } if (Yii::app()->user->userModel != $this->takenByUser && $this->takenByUser->id > 0) { $this->sendTakenByUserUnreadCommentNotification = true; } } } $people = MissionsUtil::resolvePeopleToSendNotificationToOnNewComment($this, Yii::app()->user->userModel); foreach ($people as $person) { if ($missionRules->hasUserReadLatest($this, $person)) { if (!in_array($person, $personsToAddAsHaveNotReadLatest)) { $personsToAddAsHaveNotReadLatest[] = $person; } } } } foreach ($personsToAddAsHaveNotReadLatest as $person) { $personWhoHaveNotReadLatest = $missionRules->makePersonWhoHasNotReadLatest($person); $personsToAddAsHaveNotReadLatest[] = $personWhoHaveNotReadLatest; $this->personsWhoHaveNotReadLatest->add($personWhoHaveNotReadLatest); } return true; } else { return false; } }
/** * Override to handle sending email messages on new comment */ protected function afterSuccessfulSave($model) { assert('$model instanceof Item'); parent::afterSuccessfulSave($model); $user = Yii::app()->user->userModel; if ($this->relatedModel instanceof Conversation) { $participants = ConversationsUtil::resolvePeopleToSendNotificationToOnNewComment($this->relatedModel, $user); CommentsUtil::sendNotificationOnNewComment($this->relatedModel, $model, $participants); } elseif ($this->relatedModel instanceof Mission) { $participants = MissionsUtil::resolvePeopleToSendNotificationToOnNewComment($this->relatedModel, $user); CommentsUtil::sendNotificationOnNewComment($this->relatedModel, $model, $participants); } elseif ($this->relatedModel instanceof Task) { TasksNotificationUtil::submitTaskNotificationMessage($this->relatedModel, TasksNotificationUtil::TASK_NEW_COMMENT, $model->createdByUser, $model); //Log the event if ($this->relatedModel->project->id > 0) { ProjectsUtil::logAddCommentEvent($this->relatedModel, $model->description); } } }