Пример #1
0
 /**
  * @param \App\Filter\Results\Websites $filter
  * @return \App\Holder\Results\Base\Page
  */
 public function getResultsWebsites($filter)
 {
     $query = $this->entityManager->getRepository($this->repositoryName)->createQueryBuilder();
     $query->select("website");
     $query->addSelect("count(distinct subquestion.id_subquestion) as total_subquestions");
     $query->addSelect("countif('state','=','1') as total_correct_subquestions");
     $query->addSelect("countif('state','=','2') as total_almost_subquestions");
     $query->addSelect("countif('state','=','0') as total_wrong_subquestions");
     $query->addSelect("countif('state','=','3') as total_disqualified_subquestions");
     $query->addSelect("round((countif('state','=','1') / (countif('state','=','0') + countif('state','=','1') + countif('state','=','2')))*100,2) as total_correct_subquestions_percents");
     $query->from(\App\Model\Website::getClassName(), "website");
     $query->join(\App\Model\Page::getClassName(), "page", Join::WITH, "page.id_website = website.id_website")->addSelect("website");
     $query->leftJoin(\App\Model\Question::getClassName(), "question", Join::WITH, "page.id_page = question.id_page");
     $query->leftJoin(\App\Model\Subquestion::getClassName(), "subquestion", Join::WITH, "question.id_question = subquestion.id_question");
     $query->andWhere($query->expr()->eq("website.visible", 1));
     $query->andWhere($query->expr()->eq("page.visible", 1));
     if ($filter !== null) {
         $this->createNumberCondition($filter->getIdsWebsites(), $query, "website.id_website");
         $this->createNumberCondition($filter->getSubquestions(), $query, "count(distinct subquestion.id_subquestion)", true);
         $this->createNumberCondition($filter->getCorrect(), $query, "countif('state','=','1')", true);
         $this->createNumberCondition($filter->getAlmost(), $query, "countif('state','=','2')", true);
         $this->createNumberCondition($filter->getWrong(), $query, "countif('state','=','0')", true);
         $this->createNumberCondition($filter->getDisqualified(), $query, "countif('state','=','3')", true);
         $this->createNumberCondition($filter->getPercentages(), $query, "round((countif('state','=','1') / (countif('state','=','0') + countif('state','=','1') + countif('state','=','2')))*100,2)", true);
         if (is_array($filter->getOrderBy()) && count($filter->getOrderBy()) > 0) {
             $this->createOrders($filter->getOrderBy(), $query);
         } else {
             $query->orderBy("website.id_website");
         }
     }
     $query->groupBy("website.id_website");
     return $this->getHolders($query, new \App\Holder\Mapper\Results\Base\Website());
 }
Пример #2
0
 public function nextSequenceQuestion($question_id, $phase_id)
 {
     $question = Question::find($question_id);
     $next_sequence_question = Question::where('sequence_number', '>', $question->sequence_number)->where('phase_id', '=', $question->phase_id)->orderBy('sequence_number', 'asc')->first();
     if ($next_sequence_question) {
         return $next_sequence_question;
     }
     return FALSE;
 }
 /**
  * @param $result
  * @return \App\Holder\Subquestion
  */
 public function populate($result)
 {
     $holder = new \App\Holder\Subquestion();
     if (isset($result["wireframe_id_wireframe"])) {
         $holder->setWireframe(Service::populateEntity($result, Wireframe::getClassName(), "wireframe"));
     }
     if (isset($result["subquestion_id_subquestion"])) {
         $holder->setSubquestion(Service::populateEntity($result, \App\Model\Subquestion::getClassName(), "subquestion"));
     }
     if (isset($result["question_id_question"])) {
         $holder->setQuestion(Service::populateEntity($result, Question::getClassName(), "question"));
     }
     if (isset($result["page_id_page"])) {
         $holder->setPage(Service::populateEntity($result, Page::getClassName(), "page"));
     }
     if (isset($result["website_id_website"])) {
         $holder->setWebsite(Service::populateEntity($result, Website::getClassName(), "website"));
     }
     return $holder;
 }
 public function testIf_question_provider_returns_questions()
 {
     // Get our provider
     $question_selector = new QuestionProvider();
     // create random phase
     $phase_id = rand(1, 5);
     // create 1/2 dummy data and 1/2 wanted data
     $phase_wanted = factory(App\Model\Phase::class)->create(['id' => $phase_id]);
     $phase_not_wanted = factory(App\Model\Phase::class)->create(['id' => 777]);
     $number_of_questions = rand(1, 10);
     $counter = $number_of_questions;
     while ($counter > 0) {
         $phase_wanted->questions()->save(factory(App\Model\Question::class)->make());
         $phase_not_wanted->questions()->save(factory(App\Model\Question::class)->make());
         $counter--;
     }
     // call method
     $wanted_questions = $question_selector->getPhaseQuestions($phase_id);
     // assert we get our desired result set
     $this->assertEquals($number_of_questions, count($wanted_questions));
     $this->assertEquals(count($wanted_questions) * 2, count(Question::all()));
 }
Пример #5
0
 /**
  * @param $result
  * @return IHolder
  */
 public function populate($result)
 {
     $holder = new \App\Holder\Results\Base\Question();
     if (isset($result["question_id_question"])) {
         $holder->setQuestion(Service::populateEntity($result, \App\Model\Question::getClassName(), "question"));
     }
     if (isset($result["subquestion_id_subquestion"])) {
         $holder->setSubquestion(Service::populateEntity($result, \App\Model\Subquestion::getClassName(), "subquestion"));
     }
     if (isset($result["page_id_page"])) {
         $holder->setPage(Service::populateEntity($result, \App\Model\Page::getClassName(), "page"));
     }
     if (isset($result["website_id_website"])) {
         $holder->setWebsite(Service::populateEntity($result, \App\Model\Website::getClassName(), "website"));
     }
     if (isset($result["respondent_id_respondent"])) {
         $holder->setRespondent(Service::populateEntity($result, \App\Model\Respondent::getClassName(), "respondent"));
     }
     if (isset($result["respondentwebsite_id_respondent_website"])) {
         $holder->setRespondentWebsite(Service::populateEntity($result, \App\Model\RespondentWebsite::getClassName(), "respondentwebsite"));
     }
     return $holder;
 }
 public function getQuestionDetail()
 {
     $request = Request::capture();
     $token = $request->input('token');
     $questionId = $request->input('questionId');
     $userId = AuthController::getUserIdByToken($token);
     if ($userId == null) {
         return Utility::response_format(Utility::RESPONSE_CODE_AUTH_ERROR, '', '认证失败');
     }
     if ($questionId == null) {
         return Utility::response_format(Utility::RESPONSE_CODE_Error, '', 'questionId不能为空');
     }
     $question = Question::select('id', 'title', 'content', 'publish_time', 'user_id')->where('id', $questionId)->first()->toArray();
     //        print_r($question);
     // 个人信息
     $userInfo = UserInfo::select('user_name', 'head_pic')->where('user_id', $question['user_id'])->first()->toArray();
     $question = array_merge($question, $userInfo);
     // 图片
     $picIds = QuestionPictures::select('pic_id')->where('question_id', $question['id'])->get()->toArray();
     $pics = Picture::whereIn('id', $picIds)->get()->toArray();
     $question = array_merge($question, ['image' => $pics]);
     //            print_r($question);
     // 标签
     $tagIds = QuestionTags::select('tag_id')->where('question_id', $question['id'])->get()->toArray();
     $tags = Tags::whereIn('id', $tagIds)->get()->toArray();
     $question = array_merge($question, ['tags' => $tags]);
     // 回答 时间倒序 前三条
     $answers = Answer::select('*')->where('question_id', $questionId)->orderBy('answer_time', 'desc')->paginate(3, '*', 'page', 1)->toArray();
     $result = array();
     foreach ($answers['data'] as $answer) {
         // 个人信息
         $userInfo = UserInfo::select('user_name', 'head_pic')->where('user_id', $answer['user_id'])->first()->toArray();
         $answer = array_merge($answer, $userInfo);
         // 回答的评论数
         $comments = Comment::select('*')->where('answer_id', $answer['id'])->get()->toArray();
         $answer = array_merge($answer, ['commentNumber' => count($comments)]);
         array_push($result, $answer);
     }
     $question = array_merge($question, ['answers' => $result]);
     // 回答 最热门 三条
     //        ....
     return Utility::response_format(Utility::RESPONSE_CODE_SUCCESS, $question, '请求成功');
 }
Пример #7
0
 /**
  * @param \App\Filter\Results\Subquestions $filter
  * @return \App\Holder\Results\Base\Question[]
  */
 public function getResultsSubquestion($filter = null)
 {
     $query = $this->entityManager->getRepository($this->repositoryName)->createQueryBuilder();
     $query->select("subquestion");
     $query->addSelect("question");
     $query->from(Model\Subquestion::getClassName(), "subquestion");
     $query->join(Model\Question::getClassName(), "question", Join::WITH, "subquestion.id_question = question.id_question")->addSelect("question");
     $query->join(Model\Page::getClassName(), "page", Join::WITH, "question.id_page = page.id_page")->addSelect("page");
     $query->join(Model\Website::getClassName(), "website", Join::WITH, "page.id_website = website.id_website")->addSelect("website");
     $query->join(Model\Respondent::getClassName(), "respondent", Join::WITH, "question.id_respondent = respondent.id_respondent")->addSelect("respondent");
     $query->leftJoin(Model\RespondentWebsite::getClassName(), "respondentwebsite", Join::WITH, $query->expr()->andX($query->expr()->eq('respondent.id_respondent', 'respondentwebsite.id_respondent'), $query->expr()->eq('website.id_website', 'respondentwebsite.id_website')))->addSelect("respondentwebsite");
     if ($filter !== null) {
         $this->createNumberCondition($filter->getIdRespondents(), $query, "respondent.id_respondent");
         $this->createNumberCondition($filter->getIdWireframe(), $query, "subquestion.id_wireframe");
         $this->createNumberCondition($filter->getSeconds(), $query, "subquestion.seconds");
         $this->createNumberCondition($filter->getTypes(), $query, "subquestion.question_type");
         $this->createNumberCondition($filter->getState(), $query, "subquestion.state");
         $this->createNumberCondition($filter->getKnowns(), $query, "respondentwebsite.period");
         $this->createNumberCondition($filter->getPages(), $query, "page.id_page");
         $this->createNumberCondition($filter->getWebsites(), $query, "website.id_website");
         $this->createNumberCondition($filter->getDatetimes(), $query, "subquestion.datetime");
         $this->createNumberCondition($filter->getIds(), $query, "subquestion.id_subquestion");
         $this->createNumberCondition($filter->getIdsQuestions(), $query, "question.id_question");
         $this->createStringCondition($filter->getAnswer(), $query, "subquestion.answer", "subquestion.answer");
         $this->createStringCondition($filter->getReason(), $query, "subquestion.reason", "subquestion.answer");
     }
     if (is_array($filter->getOrderBy()) && count($filter->getOrderBy()) > 0) {
         $this->createOrders($filter->getOrderBy(), $query);
     } else {
         $query->orderBy("subquestion.id_subquestion", "desc");
     }
     return $this->getHolders($query, new \App\Holder\Mapper\Results\Base\Question());
 }
Пример #8
0
 /**
  * @param $id_respondent
  * @return \App\Holder\Results\Respondent\Base
  */
 public function getResultsRespondentDetail($id_respondent)
 {
     $query = $this->entityManager->getRepository($this->repositoryName)->createQueryBuilder();
     $query->select("respondent");
     $query->addSelect("count(distinct question.id_question) as total_questions");
     $query->addSelect("count(distinct subquestion.id_subquestion) as total_subquestions");
     $query->addSelect("countif('state','=','1') as total_correct_subquestions");
     $query->addSelect("countif('state','=','0') as total_wrong_subquestions");
     $query->addSelect("countif('state','=','2') as total_almost_subquestions");
     $query->addSelect("countif('state','=','3') as total_disqualified_subquestions");
     $query->addSelect("countif('state','is','null') as total_unknown_subquestions");
     $query->addSelect("round((countif('state','=','1') / (countif('state','=','0') + countif('state','=','1') + countif('state','=','2')))*100,2) as total_correct_subquestions_percents");
     $query->addSelect("avg(subquestion.seconds) avg_seconds");
     $query->addSelect("sum(subquestion.seconds) total_seconds");
     $query->from(Model\Respondent::getClassName(), "respondent");
     $query->leftJoin(Model\Question::getClassName(), "question", Join::WITH, "question.id_respondent = respondent.id_respondent");
     $query->leftJoin(Model\Subquestion::getClassName(), "subquestion", Join::WITH, "subquestion.id_question = question.id_question");
     $query->where($query->expr()->eq("respondent.id_respondent", $id_respondent));
     return $this->getHolder($query, new \App\Holder\Mapper\Results\Respondent\Base());
 }
Пример #9
0
 public function getChildQuestions($question_id)
 {
     return Question::where('parent_id', '=', $question_id)->orderBy('sequence_number')->get();
 }