/** * Get question option answer's stats info * @throws BadRequestHttpException * @return array, [{"option": "Yes", "count": 12}] */ public function actionAnswers() { $params = $this->getQuery(); if (empty($params['questionId'])) { throw new BadRequestHttpException(Yii::t('common', 'parameters_missing')); } $question = Question::findByPk(new MongoId($params['questionId'])); if (empty($question) || $question->type === Question::TYPE_INPUT) { throw new InvalidParameterException(Yii::t('content', 'invalid_question')); } //turn unix timestamp to string $startDateStr = isset($params['startTime']) ? TimeUtil::msTime2String($params['startTime'], 'Y-m-d') : null; $endDateStr = isset($params['endTime']) ? TimeUtil::msTime2String($params['endTime'], 'Y-m-d') : null; $stats = StatsQuestionnaireAnswerDaily::getQuestionOptionStats(new MongoId($params['questionId']), $startDateStr, $endDateStr); $statsMap = ArrayHelper::map($stats, 'option', 'count'); $options = []; $count = []; foreach ($question->options as $option) { $options[] = $option['content']; $count[] = empty($statsMap[$option['content']]) ? 0 : $statsMap[$option['content']]; } return ['options' => $options, 'count' => $count]; }
public function actionView($id) { $questionnaireId = new MongoId($id); $questionnaire = Questionnaire::findByPk($questionnaireId); if (empty($questionnaire)) { throw new InvalidParameterException(Yii::t('common', 'invalid_questionnaire')); } $questionnaire = $questionnaire->toArray(); $questionnaire['userCount'] = QuestionnaireLog::countByQuestionnaireId($questionnaireId); foreach ($questionnaire['questions'] as &$question) { $questionId = new MongoId($question['id']); $stats = StatsQuestionnaireAnswerDaily::getQuestionOptionStats($questionId); $statsMap = ArrayHelper::map($stats, 'option', 'count'); if ($question['type'] !== Question::TYPE_INPUT) { foreach ($question['options'] as &$option) { $option['count'] = empty($statsMap[$option['content']]) ? 0 : $statsMap[$option['content']]; } } } return $questionnaire; }