/** * * @param ProjectModel $projectModel * @param string $questionId * @param string $answerId * @param CommentModel $commentModel * @param string $mode * @return string activity id */ public static function updateComment($projectModel, $questionId, $answerId, $commentModel, $mode = "update") { $activity = new ActivityModel($projectModel); $question = new QuestionModel($projectModel, $questionId); $answer = $question->readAnswer($answerId); $text = new TextModel($projectModel, $question->textRef->asString()); $user = new UserModel($commentModel->userRef->asString()); $user2 = new UserModel($answer->userRef->asString()); $activity->action = $mode == 'update' ? ActivityModel::UPDATE_COMMENT : ActivityModel::ADD_COMMENT; $activity->userRef->id = $commentModel->userRef->asString(); $activity->userRef2->id = $answer->userRef->asString(); $activity->textRef->id = $text->id->asString(); $activity->questionRef->id = $questionId; $activity->addContent(ActivityModel::TEXT, $text->title); $activity->addContent(ActivityModel::ANSWER, $answer->content); $activity->addContent(ActivityModel::QUESTION, $question->getTitleForDisplay()); $activity->addContent(ActivityModel::COMMENT, $commentModel->content); $activity->addContent(ActivityModel::USER, $user->username); $activity->addContent(ActivityModel::USER2, $user2->username); $activityId = $activity->write(); UnreadActivityModel::markUnreadForProjectMembers($activityId, $projectModel); UnreadCommentModel::markUnreadForProjectMembers($commentModel->id->asString(), $projectModel, $questionId, $commentModel->userRef->asString()); return $activityId; }
public static function voteDown($userId, $projectId, $questionId, $answerId) { $projectModel = new ProjectModel($projectId); ProjectCommands::checkIfArchivedAndThrow($projectModel); $questionModel = new QuestionModel($projectModel, $questionId); // Check the vote lock. $vote = new UserVoteModel($userId, $projectId, $questionId); if (!$vote->hasVote($answerId)) { // Don't throw. There's no harm in this, just don't decrement the vote. return self::encodeAnswer($questionModel->readAnswer($answerId)); } // If ok down vote the question and remove the lock. $answerModel = $questionModel->readAnswer($answerId); $answerModel->score--; $questionModel->writeAnswer($answerModel); $vote->removeVote($answerId); $vote->write(); // Return the answer dto. return self::encodeAnswer($answerModel); }
public function testUpdateAnswerTags_ExistingAnswer_ChangePersists() { $environ = new MongoTestEnvironment(); $environ->clean(); $project = $environ->createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE); $text = new TextModel($project); $text->title = 'Text 1'; $usx = MongoTestEnvironment::usxSample(); $text->content = $usx; $textId = $text->write(); $question = new QuestionModel($project); $question->textRef->id = $textId; $questionId = $question->write(); $answer = new AnswerModel(); $answer->content = 'the answer'; $answer->tags[] = 'originalTag'; $answerId = $question->writeAnswer($answer); $tagsArray = array('updatedTag'); $dto = QuestionCommands::updateAnswerTags($project->id->asString(), $questionId, $answerId, $tagsArray); $question->read($questionId); $newAnswer = $question->readAnswer($answerId); $this->assertCount(1, $newAnswer->tags); $this->assertEquals('updatedTag', $newAnswer->tags[0]); $this->assertEquals('updatedTag', $dto[$answerId]['tags'][0]); }