예제 #1
0
 private function inject_batch_valuation($task_set_id)
 {
     $filter = $this->input->post('filter');
     $filter = is_array($filter) && count($filter) > 0 ? $filter : $this->get_batch_valuation_filter((int) $task_set_id);
     $this->store_batch_valuation_filter($filter, (int) $task_set_id);
     $task_set = new Task_set();
     $task_set->get_by_id($task_set_id);
     $task_set_permissions = new Task_set_permission();
     $task_set_permissions->where_related($task_set);
     $task_set_permissions->where('enabled', 1);
     $task_set_permissions->get_iterated();
     $solutions = new Solution();
     $solutions->where_related($task_set);
     $solutions->group_by('student_id');
     if (isset($filter['group']) && (int) $filter['group'] > 0) {
         $solutions->where_related('student/participant/group', 'id', (int) $filter['group']);
     }
     $solutions->get_iterated();
     $additional_student_ids = array(0);
     foreach ($solutions as $solution) {
         $additional_student_ids[] = $solution->student_id;
     }
     $data = array();
     if ($task_set->exists()) {
         $students = new Student();
         $students->where_related('participant', 'allowed', 1);
         $students->where_related('participant/course/task_set', 'id', intval($task_set_id));
         if ($task_set_permissions->result_count() == 0) {
             if (!is_null($task_set->group_id)) {
                 $students->where_related('participant/group', 'id', intval($task_set->group_id));
             }
         } else {
             $group_ids = array();
             foreach ($task_set_permissions as $task_set_permission) {
                 $group_ids[] = (int) $task_set_permission->group_id;
             }
             $students->where_in_related('participant/group', 'id', $group_ids);
         }
         $students->include_related('solution');
         $students->add_join_condition('`solutions`.`task_set_id` = ?', array($task_set->id));
         $students->order_by_as_fullname('fullname', 'asc');
         $students->order_by('email', 'asc');
         if (isset($filter['group']) && (int) $filter['group'] > 0) {
             $students->where_related('participant/group', 'id', (int) $filter['group']);
         }
         $students->or_where_in('id', $additional_student_ids);
         $students->get_iterated();
         foreach ($students as $student) {
             $data[$student->id] = clone $student;
         }
     }
     $this->parser->assign('batch_valuation_students', $data);
 }