Esempio n. 1
0
 /**
  * @return string|null
  */
 public function page()
 {
     switch ($this->page_type) {
         case 'area':
             $area = Area::find($this->page_id);
             return $area ? $area->name : null;
         case 'category':
             $category = Category::find($this->page_id);
             return $category ? $category->area->name . ' (' . $category->name . ') ' : null;
     }
 }
 /**
  * @return Response
  */
 public function api()
 {
     $data = [];
     $groups = User::find($this->userId, ['id'])->trainerGroups()->get(['area_id', 'category_id', 'name']);
     foreach ($groups as $group) {
         $key = $group->area_id . ($group->category_id ? '_' . $group->category_id : '');
         if (isset($data[$key])) {
             continue;
         }
         $area = Area::findOrFail($group->area_id, ['id', 'name']);
         $category = null;
         $query = Response::join('quiz', 'response.quiz_id', '=', 'quiz.id')->join('users', 'response.user_id', '=', 'users.id');
         if ($group->category_id) {
             $category = Category::findOrFail($group->category_id, ['id', 'name']);
             $query->where('category_id', $category->id);
         } else {
             $query->where('area_id', $area->id);
         }
         $applicants = $query->get(['response.id', 'response.created_at', 'full_name', 'email', 'school']);
         foreach ($applicants as $key => $applicant) {
             $applicants[$key]->id = (int) $applicant->id;
             $response = Response::findOrFail($applicant->id);
             $choices = $applicant->trainerchoices()->lists('choice', 'trainer_id');
             $choice = isset($choices[$this->userId]) ? (int) $choices[$this->userId] : null;
             if ($choice !== 1 && !is_null($choice)) {
                 $applicants->forget($key);
                 continue;
             }
             $responses = [];
             foreach ($response->questions as $rquestion) {
                 if (!$rquestion->question) {
                     continue;
                 }
                 $answers = [];
                 $roptions = $rquestion->options->lists('response', 'quiz_question_option_id');
                 foreach ($rquestion->question->options as $option) {
                     if (array_key_exists($option->id, $roptions)) {
                         if ($rquestion->question->type == 'text' || $rquestion->question->type == 'textbox') {
                             $answer = html_entity_decode($roptions[$option->id]);
                         } else {
                             $answer = true;
                         }
                     } else {
                         $answer = false;
                     }
                     $answers[] = ['option' => $option->option ? html_entity_decode($option->option) : null, 'answer' => $answer];
                 }
                 $responses[] = ['question' => $rquestion->question->question, 'question_type' => $rquestion->question->type, 'answers' => $answers];
             }
             $applicant->responses = $responses;
         }
         $applicants->values();
         $data[$key] = ['applicants' => $applicants, 'area' => $area, 'category' => $category];
     }
     return json(array_values($data), 200);
 }
Esempio n. 3
0
 public function store($areaSlug, $categorySlug = null)
 {
     $area = $this->areaRepo->getBySlug($areaSlug, 1, $this->user()->county_id);
     if (is_null($area) || !$area->open) {
         return view('errors.missing');
     }
     $category = null;
     if (!is_null($categorySlug)) {
         $category = Category::where('slug', $categorySlug)->first();
         if (is_null($category)) {
             return view('errors.missing');
         }
     }
     if ($category) {
         $quiz = $category->quiz;
     } else {
         $quiz = $area->quiz;
         if ($quiz && $quiz->category_id) {
             return view('errors.missing');
         }
     }
     if (Auth::user()->hasResponse($quiz->id)) {
         return json('-1');
     }
     $questions = Input::get('question');
     parse_str(Input::get('trainers'), $trainers);
     $max = 10000;
     foreach ($quiz->questions as $i => $question) {
         if (!$question->required) {
             continue;
         }
         $value = @$questions[$question->id];
         if (is_array($value)) {
             foreach ($value as $val) {
                 if (empty($val) || mb_strlen($val) > $max) {
                     $value = $val;
                 }
             }
         }
         $extra = in_array($question->type, ['text', 'textbox']) ? "|max:{$max}" : '';
         $input['question_' . $question->id] = $value;
         $rules['question_' . $question->id] = 'required' . $extra;
         $messages['question_' . $question->id . '.required'] = $question->id;
         $messages['question_' . $question->id . '.max'] = trans('app.question_max', ['question' => $i + 1, 'max' => $max]);
     }
     $validator = Validator::make($input, $rules, $messages);
     if ($validator->fails()) {
         throw new FormValidationException('Validation failed', $validator->errors());
     }
     $rresponse = Response::create(['user_id' => \Auth::user()->id, 'quiz_id' => $quiz->id]);
     if (isset($trainers['trainer']) && is_array($trainers['trainer'])) {
         $areaTrainers = $area->present()->trainers->lists('id');
         foreach ($trainers['trainer'] as $choice => $id) {
             if (!in_array($id, $areaTrainers)) {
                 continue;
             }
             $rresponse->trainerchoices()->save(new TrainerChoice(['trainer_id' => $id, 'choice' => ++$choice]));
         }
     }
     foreach ($quiz->questions as $question) {
         $rquestion = Question::create(['response_id' => $rresponse->id, 'question_id' => $question->id]);
         if ($question->type === 'dropdown' || $question->type === 'singlechoice') {
             $roption = Option::create(['response_question_id' => $rquestion->id, 'quiz_question_option_id' => $questions[$question->id], 'response' => e($questions[$question->id])]);
         } else {
             foreach ($question->options as $option) {
                 if (isset($questions[$question->id][$option->id])) {
                     $roption = Option::create(['response_question_id' => $rquestion->id, 'quiz_question_option_id' => $option->id, 'response' => e($questions[$question->id][$option->id])]);
                 }
             }
         }
     }
     flash(true);
     return json(1);
 }
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $_
  * @param  int  $id
  * @return Response
  */
 public function destroy($_, $id)
 {
     $category = Category::findOrFail($id);
     $category->delete();
     return json(1);
     // return Redirect::route('admin.areas.edit', $category->area->id)->withDelete(true);
 }
Esempio n. 5
0
 public function categoryList()
 {
     $areaTable = Area::getTableName();
     $categoryTable = Category::getTableName();
     return $this->entity->categories()->join($areaTable, "{$categoryTable}.area_id", '=', $areaTable . '.' . $this->entity->getKeyName())->get(["{$areaTable}.slug as area_slug", "{$categoryTable}.slug as slug", "{$categoryTable}.name as name"]);
 }