Example #1
0
 public function takeQuiz()
 {
     //check if quiz can be taken by student,
     //based on the time and the ID number
     $page_title = 'Cannot Take Quiz';
     $page_content = View::make('no_quiz');
     $id_number = Session::get('id_number');
     $quiz_code = Session::get('quiz_code');
     $current_datetime = Carbon::now()->toDateTimeString();
     $quiz_schedule = QuizSchedule::where('quiz_code', '=', $quiz_code)->whereRaw(DB::raw("'{$current_datetime}' BETWEEN datetime_from AND datetime_to"))->first();
     if ($quiz_schedule) {
         $quiz_schedule_id = $quiz_schedule->id;
         $class_id = $quiz_schedule->class_id;
         $quiz_id = $quiz_schedule->quiz_id;
         $student = StudentClass::where('student_id', '=', $id_number)->where('class_id', '=', $class_id)->first();
         if ($student) {
             //when a student takes a quiz, a row is created on the
             //student_quizzes table, add the started_at, quiz_id, and student_id
             //when another student comes along and inputs the same id number
             //and quiz code, they won't be allowed since the quiz is already taken
             $student_quiz_count = StudentQuiz::where('student_id', '=', $id_number)->where('quiz_id', '=', $quiz_id)->count();
             if ($student_quiz_count === 0) {
                 //can take
                 //get quiz details and show it to the student
                 $quiz = Quiz::where('id', '=', $quiz_id)->first();
                 Session::put('quiz_id', $quiz_id);
                 Session::put('quiz_title', $quiz->title);
                 $items = QuizItem::where('quiz_id', '=', $quiz_id)->orderByRaw("RAND()")->get();
                 $item_ids = DB::table('quiz_items')->where('quiz_id', '=', $quiz_id)->lists('id');
                 $quiz_items_answers = DB::table('quiz_items_answers')->whereIn('quiz_item_id', $item_ids)->get();
                 $quiz_items_choices = DB::table('quiz_items_choices')->whereIn('quiz_item_id', $item_ids)->get();
                 $quiz_items = array();
                 foreach ($items as $item) {
                     $quiz_items[$item->id] = array('question' => $item->question);
                 }
                 foreach ($quiz_items_choices as $qic) {
                     $quiz_items[$qic->quiz_item_id]['choices'][] = $qic->choice;
                 }
                 $seconds = $quiz->minutes * 60 + 1;
                 $page_data = array('quiz' => $quiz, 'quiz_items' => $quiz_items, 'seconds' => $seconds);
                 //create student quiz
                 $student_quiz = new StudentQuiz();
                 $student_quiz->student_id = $id_number;
                 $student_quiz->quiz_id = $quiz_id;
                 $student_quiz->quiz_schedule_id = $quiz_schedule_id;
                 $student_quiz->started_at = Carbon::now()->toDateTimeString();
                 $student_quiz->save();
                 $page_title = 'Take Quiz';
                 $page_content = View::make('quiz', $page_data);
             }
         }
     }
     $this->layout->title = $page_title;
     $this->layout->quiz = true;
     $this->layout->content = $page_content;
 }
 public function deleteQuestion($id)
 {
     QuizItem::find($id)->update(array('delflag' => 1));
 }
Example #3
0
 public function updateQuiz($quiz_id)
 {
     $quiz = Quiz::find($quiz_id);
     $quiz->title = Input::get('title');
     $quiz->minutes = Input::get('minutes');
     $quiz->details = Input::get('details');
     $quiz->save();
     $questions = Input::get('question');
     $answers = Input::get('answer');
     $choices = Input::get('choice');
     if (!empty($questions['old'])) {
         $old_questions = $questions['old'];
         $old_answers = $answers['old'];
         $quiz_items = DB::table('quiz_items')->where('quiz_id', '=', $quiz_id)->get();
         foreach ($quiz_items as $question_index => $quiz_item) {
             $quiz_item_id = $quiz_item->id;
             $quiz_item = QuizItem::find($quiz_item_id);
             $quiz_item->quiz_id = $quiz_id;
             $quiz_item->question = $old_questions[$question_index];
             $quiz_item->save();
             $current_number_of_answers = 0;
             if (!empty($old_answers[$quiz_item_id])) {
                 $quiz_items_answers = DB::table('quiz_items_answers')->where('quiz_item_id', '=', $quiz_item_id)->get();
                 $item_answers = $old_answers[$quiz_item_id];
                 $total_answers = count($item_answers) - 1;
                 foreach ($quiz_items_answers as $qia_index => $qia) {
                     $answer = QuizItemAnswer::find($qia->id);
                     $answer->answer = $item_answers[$qia_index];
                     $answer->save();
                     $current_number_of_answers += 1;
                 }
                 $answer_index = $current_number_of_answers;
                 for ($x = $answer_index; $x <= $total_answers; $x++) {
                     $quiz_item_answer = new QuizItemAnswer();
                     $quiz_item_answer->quiz_item_id = $quiz_item_id;
                     $quiz_item_answer->answer = $item_answers[$x];
                     $quiz_item_answer->save();
                 }
             }
             if (!empty($choices['old'])) {
                 $item_choices = array();
                 $old_choices = $choices['old'];
                 $total_choices = count($old_choices);
                 $current_number_of_choices = 0;
                 $quiz_items_choices = DB::table('quiz_items_choices')->where('quiz_item_id', '=', $quiz_item_id)->get();
                 $current_number_of_choices = count($quiz_items_choices);
                 if (!empty($old_choices[$quiz_item_id])) {
                     $item_choices = $old_choices[$quiz_item_id];
                     foreach ($quiz_items_choices as $qic_index => $qic) {
                         $choice = QuizItemChoice::find($qic->id);
                         $choice->choice = $item_choices[$qic_index];
                         $choice->save();
                     }
                 }
                 if (!empty($item_choices)) {
                     while ($current_number_of_choices < $total_choices) {
                         if (!empty($item_choices[$current_number_of_choices])) {
                             $choice = $item_choices[$current_number_of_choices];
                             $quiz_item_choice = new QuizItemChoice();
                             $quiz_item_choice->quiz_item_id = $quiz_item_id;
                             $quiz_item_choice->choice = $choice;
                             $quiz_item_choice->save();
                         }
                         $current_number_of_choices += 1;
                     }
                 }
             }
         }
     }
     if (!empty($questions['new'])) {
         $new_questions = $questions['new'];
         $new_answers = $answers['new'];
         foreach ($new_questions as $index => $question) {
             $quiz_item = new QuizItem();
             $quiz_item->quiz_id = $quiz_id;
             $quiz_item->question = $question;
             $quiz_item->save();
             $quiz_item_id = $quiz_item->id;
             if (!empty($new_answers[$index])) {
                 $item_answers = $new_answers[$index];
                 foreach ($item_answers as $answer) {
                     $quiz_item_answer = new QuizItemAnswer();
                     $quiz_item_answer->quiz_item_id = $quiz_item_id;
                     $quiz_item_answer->answer = $answer;
                     $quiz_item_answer->save();
                 }
             }
             if (!empty($choices['new'][$index])) {
                 $new_choices = $choices['new'];
                 $item_choices = $new_choices[$index];
                 foreach ($item_choices as $choice) {
                     $quiz_item_choice = new QuizItemChoice();
                     $quiz_item_choice->quiz_item_id = $quiz_item_id;
                     $quiz_item_choice->choice = $choice;
                     $quiz_item_choice->save();
                 }
             }
         }
     }
     return Redirect::back()->with('message', array('type' => 'success', 'text' => 'Quiz Updated!'));
 }