public function showUser($group, $userId)
 {
     $user = User::findOrFail($userId);
     $query = Response::join('quiz', 'quiz.id', '=', 'quiz_id')->where('user_id', $user->id)->where('area_id', $group->area_id);
     if ($group->category_id) {
         $query->where('category_id', $group->category_id);
     }
     if (!($response = $query->first(['response.id']))) {
         return abort(404);
     }
     return view('admin.members.user', compact('user', 'response', 'group'));
 }
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function index()
 {
     if (Request::wantsJson()) {
         $query = Response::join('quiz', 'response.quiz_id', '=', 'quiz.id')->join('areas', function ($join) {
             $join->on('quiz.area_id', '=', 'areas.id')->where('areas.county_id', '=', config('app.county'));
         })->leftJoin('area_categories', 'quiz.category_id', '=', 'area_categories.id')->join('users', 'users.id', '=', 'user_id');
         $input = Input::only('draw', 'columns', 'search', 'order', 'start', 'length');
         $input['columns'][4] = ['data' => 4, 'searchable' => 'true'];
         $dt = new DataTables($query, $input);
         $dt->column('full_name')->column('areas.name', 'area_name')->column('response.created_at', 'created_at')->column('user_id')->column('area_categories.name', 'category_name')->column('response.id', 'id');
         $data = $dt->get(function ($result) {
             return [['id' => $result->user_id, 'name' => $result->full_name], ['area' => $result->area_name, 'category' => $result->category_name], $result->created_at->format('d-m-Y H:i'), $result->id];
         });
         return json($data);
     }
     return view('admin.responses.index');
 }
 public function create($areaId, $groupId)
 {
     $area = Area::findOrFail($areaId);
     $group = Group::findOrFail($groupId);
     $query = Response::join('users', 'users.id', '=', 'response.user_id')->join('quiz', 'quiz.id', '=', 'response.quiz_id')->where('area_id', $areaId);
     if ($group->category_id) {
         $query->where('category_id', $group->category_id);
     }
     $users = $query->get(['full_name', 'users.id', 'email', 'phone', 'school', 'response.id as response_id']);
     $from = $group->category ? $group->category : $area;
     $groups = $from->groups()->lists('id');
     foreach ($users as $key => $user) {
         if (DB::table('area_group_user')->whereIn('area_group_id', array_values($groups))->where('user_id', $user->id)->exists()) {
             $users->forget($key);
         }
     }
     return view('admin.groups.user', ['group' => Group::findOrFail($groupId), 'users' => $users]);
 }
 /**
  * @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);
 }