Beispiel #1
0
 public function select_group()
 {
     $group_id = $this->input->post('group_id');
     $this->_transaction_isolation();
     $this->db->trans_begin();
     $group = new Group();
     $group->get_by_id($group_id);
     if ($group->exists()) {
         $course = $group->course->get();
         if (is_null($course->groups_change_deadline) || date('U', strtotime($course->groups_change_deadline)) >= time()) {
             $student = new Student();
             $student->get_by_id($this->usermanager->get_student_id());
             if ($student->is_related_to('active_course', $course->id)) {
                 $participant = new Participant();
                 $participant->where_related($student);
                 $participant->where_related($course);
                 $participant->where('allowed', 1);
                 $participant->get();
                 if ($participant->exists()) {
                     if (!$participant->is_related_to($group)) {
                         $participant->save($group);
                         $participant->where_related($course);
                         $participant->where_related($group);
                         $participant->where('allowed', 1);
                         $participants_count = $participant->count();
                         $room = new Room();
                         $room->where_related($group)->order_by('capacity', 'asc')->limit(1)->get();
                         if ($participants_count > intval($room->capacity)) {
                             $this->db->trans_rollback();
                             $this->messages->add_message('lang:groups_message_group_is_full', Messages::MESSAGE_TYPE_ERROR);
                         } else {
                             $this->db->trans_commit();
                             $this->messages->add_message(sprintf($this->lang->line('groups_message_group_changed'), $this->lang->text($group->name)), Messages::MESSAGE_TYPE_SUCCESS);
                             $this->_action_success();
                             $this->output->set_internal_value('course_id', $participant->course_id);
                         }
                     } else {
                         $this->db->trans_rollback();
                         $this->messages->add_message('lang:groups_message_you_are_in_group', Messages::MESSAGE_TYPE_ERROR);
                     }
                 } else {
                     $this->db->trans_rollback();
                     $this->messages->add_message('lang:groups_message_cant_found_participant_record', Messages::MESSAGE_TYPE_ERROR);
                 }
             } else {
                 $this->db->trans_rollback();
                 $this->messages->add_message('lang:groups_message_cant_change_group_of_inactive_course', Messages::MESSAGE_TYPE_ERROR);
             }
         } else {
             $this->db->trans_rollback();
             $this->messages->add_message('lang:groups_message_groups_switching_disabled', Messages::MESSAGE_TYPE_ERROR);
         }
     } else {
         $this->db->trans_rollback();
         $this->messages->add_message('lang:groups_message_group_not_found', Messages::MESSAGE_TYPE_ERROR);
     }
     redirect(create_internal_url('groups'));
 }
 public function updateDetails()
 {
     if (Session::has('collId')) {
         $cId = Session::get('collId');
         $tmp = Participant::where('cId', $cId);
         $phone = Input::get('pPhone');
         $destination = getcwd() . "\\public\\img\\participants\\";
         if ($tmp) {
             $tmp->delete();
         }
         foreach (Input::get('pName') as $key => $name) {
             if (strlen($name) > 0) {
                 $p = new Participant();
                 $p->cId = $cId;
                 $p->pid = $key + 1;
                 $p->name = $name;
                 if (strlen($phone[$key]) > 0) {
                     $p->phone = $phone[$key];
                 }
                 $p->save();
             }
         }
         for ($i = 0; $i < sizeof(Input::file('image')); $i++) {
             if (Input::hasFile('image')) {
                 $file = Input::file('image');
                 $filename = "myfile" . $i . "." . $file[$i]->getClientOriginalExtension();
                 $flag = $file[$i]->move($destination, $filename);
             }
         }
         return Redirect::to('member');
     }
     return Redirect::to('reg');
 }
 public function updateDetails()
 {
     if (Session::has('sense')) {
         $cId = Session::get('sense')[1];
         $tmp = Participant::where('cId', $cId);
         $phone = Input::get('pPhone');
         if ($tmp) {
             $tmp->delete();
         }
         foreach (Input::get('pName') as $key => $name) {
             if (strlen($name) > 0) {
                 $p = new Participant();
                 $p->cId = $cId;
                 $p->pid = $key + 1;
                 $p->name = $name;
                 if (strlen($phone[$key]) > 0) {
                     $p->phone = $phone[$key];
                 }
                 $p->save();
             }
         }
         return Redirect::to('member/coll');
     }
     return Redirect::to('reg');
 }
Beispiel #4
0
 public function table_content()
 {
     $filter = $this->input->post('filter');
     $this->store_filter($filter);
     $participants = new Participant();
     $participants->include_related('student', 'fullname');
     $participants->include_related('student', 'email');
     $participants->include_related('course', 'name');
     $participants->include_related('course/period', 'name');
     $participants->include_related('group', 'name');
     if (isset($filter['student_fullname']) && trim($filter['student_fullname']) != '') {
         $participants->like_related('student', 'fullname', trim($filter['student_fullname']));
     }
     if (isset($filter['course']) && intval($filter['course']) > 0) {
         $participants->where_related('course', 'id', intval($filter['course']));
     }
     if (isset($filter['group']) && intval($filter['group']) > 0) {
         $participants->where_related('group', 'id', intval($filter['group']));
     }
     if (isset($filter['group_set'])) {
         if ($filter['group_set'] == 'none') {
             $participants->where('group_id', NULL);
         } else {
             if ($filter['group_set'] == 'assigned') {
                 $participants->group_start(' NOT', 'AND');
                 $participants->where('group_id', NULL);
                 $participants->group_end();
             }
         }
     }
     $order_by_direction = $filter['order_by_direction'] == 'desc' ? 'desc' : 'asc';
     if ($filter['order_by_field'] == 'student') {
         $participants->order_by_related_as_fullname('student', 'fullname', $order_by_direction);
         $participants->order_by_related('student', 'email', $order_by_direction);
     } elseif ($filter['order_by_field'] == 'course') {
         $participants->order_by_related('course/period', 'sorting', $order_by_direction);
         $participants->order_by_related_with_constant('course', 'name', $order_by_direction);
     } elseif ($filter['order_by_field'] == 'group') {
         $participants->order_by_related_with_constant('group', 'name', $order_by_direction);
     } elseif ($filter['order_by_field'] == 'status') {
         $participants->order_by('allowed', $order_by_direction);
     }
     $participants->get_paged_iterated(isset($filter['page']) ? intval($filter['page']) : 1, isset($filter['rows_per_page']) ? intval($filter['rows_per_page']) : 25);
     $this->parser->parse('backend/participants/table_content.tpl', array('participants' => $participants));
 }
Beispiel #5
0
 /**
  * Returns all threads with new messages
  *
  * @return array
  */
 public function threadsWithNewMessages()
 {
     $threadsWithNewMessages = [];
     $participants = Participant::where('user_id', $this->id)->lists('last_read', 'thread_id');
     if ($participants) {
         $threads = Thread::whereIn('id', array_keys($participants))->get();
         foreach ($threads as $thread) {
             if ($thread->updated_at > $participants[$thread->id]) {
                 $threadsWithNewMessages[] = $thread->id;
             }
         }
     }
     return $threadsWithNewMessages;
 }
 public function event($id)
 {
     //add security to avoid stealing of information
     $user = Auth::user();
     Excel::create('roster', function ($excel) use($id) {
         $excel->sheet('Sheetname', function ($sheet) use($id) {
             $event = Evento::find($id);
             $team = array();
             if ($event->children->count() > 0) {
                 foreach ($event->children as $e) {
                     foreach ($e->participants as $member) {
                         $team[] = $member;
                     }
                 }
             } else {
                 $team = Participant::where('event_id', '=', $id)->with('event')->get();
             }
             $sheet->setOrientation('landscape');
             $sheet->loadView('export.lacrosse.roster', ['members' => $team]);
         });
     })->download('xlsx');
 }
 /**
  * Display a listing of the resource.
  * GET /player
  *
  * @return Response
  */
 public function index()
 {
     $user = Auth::user();
     $title = 'League Together - Club';
     $players = $user->players;
     $invites = [];
     //get player from follower
     foreach ($players as $player) {
         $member = Member::where('player_id', '=', $player->id)->where('accepted_on', '=', null)->where('declined_on', '=', null)->get();
         $participant = Participant::where('player_id', '=', $player->id)->where('accepted_on', '=', null)->where('declined_on', '=', null)->get();
         if ($member) {
             foreach ($member as $data) {
                 $invites[] = $data;
             }
         }
         if ($participant) {
             foreach ($participant as $data) {
                 $invites[] = $data;
             }
         }
     }
     return View::make('app.account.player.index')->with('page_title', $title)->with('players', $user->players)->with('invites', $invites)->withUser($user);
 }
 public function doAnnouncement($id)
 {
     global $club, $messageData, $messageSubject, $team, $sms, $user, $recipientMobile, $recipientEmail;
     $user = Auth::user();
     $club = $user->Clubs()->FirstOrFail();
     $event = Evento::where("id", "=", $id)->where("club_id", '=', $club->id)->FirstOrFail();
     $participants = Participant::where('event_id', '=', $event->id)->get();
     $messageData = Input::get('message');
     $messageSubject = Input::get('subject');
     $sms = substr($messageData, 0, 140) . " {$club->name} - Do not reply";
     $uuid = Uuid::generate();
     //get list of recepients
     $recipientUser = array();
     $recipientPlayer = array();
     $recipientContact = array();
     $recipientEmail = array();
     $recipientMobile = array();
     //do selection for children events
     if ($event->children->count() > 0) {
         foreach ($event->children as $e) {
             foreach ($e->participants as $member) {
                 //only members that accepted joined
                 if ($member->accepted_user) {
                     $user = User::find($member->accepted_user);
                     $player = Player::find($member->player_id);
                     $recipientUser[] = array('name' => $user->profile->firstname . " " . $user->profile->lastname, 'email' => $user->email, 'mobile' => $user->profile->mobile);
                     foreach ($player->contacts as $contact) {
                         $recipientContact[] = array('name' => $contact->firstname . " " . $contact->lastname, 'email' => $contact->email, 'mobile' => $contact->mobile);
                     }
                     //allow players with email and mobile
                     if ($player->mobile && $player->email) {
                         $recipientPlayer[] = array('name' => $player->firstname . " " . $player->lastname, 'email' => $player->email, 'mobile' => $player->mobile);
                     }
                 }
             }
         }
     } else {
         foreach ($participants as $member) {
             //only members that accepted joined
             if ($member->accepted_user) {
                 $user = User::find($member->accepted_user);
                 $player = Player::find($member->player_id);
                 $recipientUser[] = array('name' => $user->profile->firstname . " " . $user->profile->lastname, 'email' => $user->email, 'mobile' => $user->profile->mobile);
                 foreach ($player->contacts as $contact) {
                     $recipientContact[] = array('name' => $contact->firstname . " " . $contact->lastname, 'email' => $contact->email, 'mobile' => $contact->mobile);
                 }
                 //allow players with email and mobile
                 if ($player->mobile && $player->email) {
                     $recipientPlayer[] = array('name' => $player->firstname . " " . $player->lastname, 'email' => $player->email, 'mobile' => $player->mobile);
                 }
             }
         }
     }
     //send default function
     function sendmessage($destination)
     {
         global $club, $messageData, $messageSubject, $event, $sms, $user, $recipientMobile, $recipientEmail;
         foreach ($destination as $recipient) {
             //send email notification of acceptance queue
             $data = array('club' => $club, 'messageOriginal' => $messageData, 'subject' => $messageSubject, 'team' => $event);
             Mail::later(3, 'emails.announcement.default', $data, function ($message) use($recipient, $club, $messageSubject) {
                 $message->to($recipient['email'], $recipient['name'])->subject("{$messageSubject} | " . $club->name);
             });
             $recipientEmail[] = array('name' => $recipient['name'], 'email' => $recipient['email']);
             if (Input::get('sms')) {
                 $recipientMobile[] = array('name' => $recipient['name'], 'mobile' => $recipient['mobile']);
                 //queue sms
                 Queue::push(function ($job) use($recipient, $sms) {
                     Twilio::message($recipient['mobile'], $sms);
                     $job->delete();
                 });
             }
         }
     }
     // send to user
     sendmessage($recipientUser);
     //send to player
     if (Input::get('players')) {
         sendmessage($recipientPlayer);
     }
     //send to contacts
     if (Input::get('family')) {
         sendmessage($recipientContact);
     }
     //save message to database
     $announcement = new Announcement();
     $announcement->id = $uuid;
     $announcement->subject = $messageSubject;
     $announcement->message = $messageData;
     $announcement->sms = $sms;
     $announcement->to_email = serialize($recipientEmail);
     $announcement->to_sms = serialize($recipientMobile);
     $announcement->event_id = $event->id;
     $announcement->club_id = $club->id;
     $announcement->user_id = $user->id;
     //$status = $announcement->save();
     return array('success' => true, 'email' => $recipientEmail, 'mobile' => $recipientMobile);
 }
Beispiel #9
0
 public function mail_to_course($course_id)
 {
     $course = new Course();
     $course->include_related('period', 'name');
     $course->get_by_id((int) $course_id);
     if ($course->exists()) {
         $groups = new Group();
         $groups->where_related_course('id', $course->id);
         $groups->order_by_with_constant('name', 'asc');
         $groups->get_iterated();
         $groups_students = array();
         foreach ($groups as $group) {
             $groups_students[$group->id] = array('name' => $group->name, 'students' => array());
         }
         $groups_students[0] = array('name' => 'lang:admin_courses_mail_to_course_group_name_unassigned_students', 'students' => array());
         $participants = new Participant();
         $participants->where('allowed', 1);
         $participants->include_related('student');
         $participants->where_related_course('id', $course->id);
         $participants->order_by_related_as_fullname('student', 'fullname', 'asc');
         $participants->get_iterated();
         foreach ($participants as $participant) {
             $groups_students[(int) $participant->group_id]['students'][(int) $participant->student_id] = array('fullname' => $participant->student_fullname, 'email' => $participant->student_email);
         }
         $this->parser->assign('groups_students', $groups_students);
     }
     $this->_add_tinymce4();
     $this->parser->add_js_file('admin_courses/mail_form.js');
     $this->parser->add_css_file('admin_courses.css');
     $this->parser->parse('backend/courses/mail_to_course.tpl', array('course' => $course));
 }
Beispiel #10
0
 public function signup_to_course($course_id)
 {
     $this->output->set_content_type('application/json');
     $output = new stdClass();
     $output->status = FALSE;
     $output->message = '';
     $output->content = '';
     $this->_transaction_isolation();
     $this->db->trans_begin();
     $student = new Student();
     $student->get_by_id($this->usermanager->get_student_id());
     $course = new Course();
     $course->where('hide_in_lists', 0);
     $course->get_by_id($course_id);
     if ($course->exists()) {
         if ($course->is_subscription_allowed()) {
             if ($student->participant->where_related($course)->count() == 0) {
                 if ($course->auto_accept_students == 1) {
                     $participants = new Participant();
                     $participants->where_related_course($course);
                     $participants->where('allowed', 1);
                     $participants_count = $participants->count();
                     if ($participants_count >= (int) $course->capacity) {
                         $output->message = $this->lang->line('courses_message_course_is_full');
                         $output->status = FALSE;
                         $this->db->trans_rollback();
                     } else {
                         $participant = new Participant();
                         $participant->allowed = 1;
                         $participant->save(array($student, $course));
                         $this->db->trans_commit();
                         $output->message = sprintf($this->lang->line('courses_message_signed_up_for_course_approved'), $this->lang->text($course->name));
                         $this->parser->assign('course', $course);
                         $output->content = $this->parser->parse('frontend/courses/single_course.tpl', array(), TRUE);
                         $output->status = TRUE;
                         $this->_action_success();
                     }
                 } else {
                     $participant = new Participant();
                     $participant->allowed = 0;
                     $participant->save(array($student, $course));
                     $this->db->trans_commit();
                     $output->message = sprintf($this->lang->line('courses_message_signed_up_for_course'), $this->lang->text($course->name));
                     $this->parser->assign('course', $course);
                     $output->content = $this->parser->parse('frontend/courses/single_course.tpl', array(), TRUE);
                     $output->status = TRUE;
                     $this->_action_success();
                 }
             } else {
                 $output->message = $this->lang->line('courses_message_already_in_course_or_waiting_for_approwal');
                 $this->db->trans_rollback();
             }
         } else {
             $output->message = $this->lang->line('courses_message_subscription_disallowed');
             $this->db->trans_rollback();
         }
     } else {
         $output->message = $this->lang->line('courses_message_course_not_found');
         $this->db->trans_rollback();
     }
     $this->output->set_output(json_encode($output));
 }
Beispiel #11
0
 private function remove_points_iteration($task_set, $points_to_remove, $task_set_id, $task_set_course_id, $task_set_group_id, &$error_code = 0, &$students = NULL)
 {
     $this->_transaction_isolation();
     $this->db->trans_begin();
     if (!is_null($task_set->upload_end_time)) {
         $timestamp_end = strtotime($task_set->upload_end_time);
         if (time() > $timestamp_end) {
             $participants = new Participant();
             $participants->select('*');
             $participants->select_subquery('(SELECT `solutions`.`id` FROM `solutions` WHERE `solutions`.`task_set_id` = ' . $task_set_id . ' AND `solutions`.`student_id` = `${parent}`.`student_id`)', 'solution_id');
             $participants->where_related_course('id', $task_set_course_id);
             if ($task_set->group->exists() && !is_null($task_set_group_id)) {
                 $participants->where_related_group('id', $task_set_group_id);
             }
             $participants->where('allowed', 1);
             $participants->get_iterated();
             $notify_students = array(0);
             foreach ($participants as $participant) {
                 if (is_null($participant->solution_id) && !is_null($participant->student_id)) {
                     $solution = new Solution();
                     $solution->task_set_id = $task_set_id;
                     $solution->student_id = $participant->student_id;
                     $solution->teacher_id = $this->usermanager->get_teacher_id();
                     $solution->points = -$points_to_remove;
                     $solution->revalidate = 0;
                     if ($solution->save()) {
                         $notify_students[] = $participant->student_id;
                     }
                 }
             }
             if ($this->db->trans_status()) {
                 $this->db->trans_commit();
                 $students = new Student();
                 $students->where_in('id', $notify_students);
                 $students->get();
                 //$result->mail_sent = $this->_send_multiple_emails($students, 'lang:admin_solutions_remove_points_notification_subject', 'file:emails/backend/solutions/remove_points_notify.tpl', array('task_set' => $task_set, 'points_to_remove' => $points_to_remove));
                 return TRUE;
             } else {
                 $this->db->trans_rollback();
                 //$result->message = $this->lang->line('admin_solutions_remove_points_error_unknown');
                 $error_code = 1;
                 return FALSE;
             }
         } else {
             $this->db->trans_rollback();
             //$result->message = $this->lang->line('admin_solutions_remove_points_error_task_set_upload_limit_not_reached');
             $error_code = 2;
             return FALSE;
         }
     } else {
         $this->db->trans_rollback();
         //$result->message = $this->lang->line('admin_solutions_remove_points_error_task_set_upload_not_limited');
         $error_code = 3;
         return FALSE;
     }
 }
Beispiel #12
0
 public function import_single_line()
 {
     $this->output->set_content_type('application/json');
     $firstname = $this->input->post('firstname');
     $lastname = $this->input->post('lastname');
     $fullname = $this->input->post('fullname');
     $email = $this->input->post('email');
     $options = $this->input->post('options');
     $this->parser->assign('firstname', $firstname);
     $this->parser->assign('lastname', $lastname);
     $this->parser->assign('fullname', $fullname);
     $this->parser->assign('email', $email);
     if ((trim($firstname) != '' && trim($lastname) != '' || trim($fullname) != '') && trim($email) != '') {
         $student_fullname = trim($fullname) != '' ? trim($fullname) : trim($firstname) . ' ' . trim($lastname);
         $this->_transaction_isolation();
         $this->db->trans_begin();
         $student = new Student();
         $student->where('email', trim($email));
         $student->get();
         if ($student->exists()) {
             if ($student->fullname != $student_fullname) {
                 $student->fullname = $student_fullname;
                 $student->save();
                 $this->db->trans_commit();
             } else {
                 $this->db->trans_rollback();
             }
             $this->parser->assign('error_message', 'lang:admin_students_csv_import_error_message_student_exists');
         } else {
             $this->load->library('form_validation');
             if ($this->form_validation->valid_email(trim($email))) {
                 $student->email = trim($email);
                 $student->fullname = $student_fullname;
                 $password = '';
                 if ($options['password_type'] == 'default') {
                     $password = $this->config->item('student_import_default_password');
                 } elseif ($options['password_type'] == 'random') {
                     $password = md5(base64_encode(rand(0, 99999999999) . time() . $student->fullname . $student->email) . $this->config->item('encryption_key'));
                     $password = substr($password, 0, rand(6, 20));
                 }
                 $student->password = $password != '' ? sha1($password) : '';
                 $student->language = $this->config->item('language');
                 if ($student->save()) {
                     $this->parser->assign('password', $password);
                     $this->db->trans_commit();
                     $this->parser->assign('success_message', 'lang:admin_students_csv_import_successfully_imported');
                     if ((bool) $options['send_mail']) {
                         if ($password == '') {
                             $this->_transaction_isolation();
                             $this->db->trans_begin();
                             $student->generate_random_password_token();
                             $this->db->trans_commit();
                         }
                         $this->_init_language_for_student($student);
                         $this->load->library('email');
                         $this->email->from_system();
                         $this->email->to($student->email);
                         $this->email->subject($this->lang->line('admin_students_csv_import_email_subject'));
                         $this->email->build_message_body('file:emails/backend/students/csv_import_email.tpl', array('student' => $student, 'password' => $password));
                         $sent = $this->email->send();
                         $this->_init_language_for_teacher();
                         if ($sent) {
                             $this->parser->assign('email_success_message', 'lang:admin_students_csv_import_email_sent_successfully');
                         } else {
                             $this->parser->assign('email_error_message', 'lang:admin_students_csv_import_email_sent_failed');
                         }
                     }
                 } else {
                     $this->db->trans_rollback();
                     $this->parser->assign('error_message', 'lang:admin_students_csv_import_error_message_student_save_error');
                 }
             } else {
                 $this->db->trans_rollback();
                 $this->parser->assign('error_message', 'lang:admin_students_csv_import_error_message_student_email_invalid');
             }
         }
         if ($student->exists()) {
             $this->parser->assign('student_id', $student->id);
             if (intval($options['assign_to_course']) > 0) {
                 $this->_transaction_isolation();
                 $this->db->trans_begin();
                 $course = new Course();
                 $course->get_by_id(intval($options['assign_to_course']));
                 if ($course->exists()) {
                     $participant = new Participant();
                     $participant->where_related('student', 'id', $student->id);
                     $participant->where_related('course', 'id', $course->id);
                     $participant->get();
                     if (!$participant->exists()) {
                         $participant->allowed = 0;
                         if ($participant->save(array('student' => $student, 'course' => $course))) {
                             $this->db->trans_commit();
                             $this->parser->assign('course_assignment_success_message', 'lang:admin_students_csv_import_successfully_added_course_participation');
                             $this->db->trans_begin();
                             $course = new Course();
                             $course->get_by_id(intval($options['assign_to_course']));
                             $participant->allowed = 1;
                             $participant->save();
                             $participants = new Participant();
                             $participants->where_related($course);
                             $participants->where('allowed', 1);
                             $participants_count = $participants->count();
                             if ($participants_count <= $course->capacity) {
                                 $this->db->trans_commit();
                                 $this->parser->assign('course_assignment_approwal_success_message', 'lang:admin_students_csv_import_successfully_added_course_participation_approwal');
                             } else {
                                 $this->db->trans_rollback();
                                 $this->parser->assign('course_assignment_approwal_error_message', 'lang:admin_students_csv_import_error_message_added_course_participation_approwal');
                             }
                         } else {
                             $this->db->trans_rollback();
                             $this->parser->assign('course_assignment_error_message', 'lang:admin_students_csv_import_error_message_participation_save_failed');
                         }
                     } else {
                         $this->db->trans_rollback();
                         $this->parser->assign('course_assignment_error_message', 'lang:admin_students_csv_import_error_message_already_in_course');
                     }
                 } else {
                     $this->db->trans_rollback();
                     $this->parser->assign('course_assignment_error_message', 'lang:admin_students_csv_import_error_message_course_not_found');
                 }
             }
         }
     } else {
         $this->parser->assign('error_message', 'lang:admin_students_csv_import_error_message_nothing_to_import');
     }
     $html = $this->parser->parse('backend/students/import_single_line.tpl', array(), TRUE);
     $this->output->set_output(json_encode($html));
 }
Beispiel #13
0
 public function select_project($task_set_id, $task_id, $student_id)
 {
     $output = new stdClass();
     $output->message = '';
     $output->status = FALSE;
     $this->_transaction_isolation();
     $this->db->trans_begin();
     $task_set = new Task_set();
     $task_set->where('content_type', 'project');
     $task_set->get_by_id((int) $task_set_id);
     $task = new Task();
     $task->get_by_id((int) $task_id);
     $student = new Student();
     $student->get_by_id((int) $student_id);
     $course = new Course();
     $course->where_related_task_set($task_set);
     $course->get();
     $participant = new Participant();
     $participant->where_related_course($course);
     $participant->where_related($student);
     $participant->where('allowed', 1);
     $participant->get();
     $project_selection = new Project_selection();
     $project_selection->where_related_student($student);
     $project_selection->where_related_task_set($task_set);
     $project_selection->get();
     if ($task_set->exists() && $task->exists() && $task_set->is_related_to($task) && $student->exists() && $course->exists() && $participant->exists()) {
         if ($task_set->get_student_files_count($student->id) == 0) {
             $all_project_selections = new Project_selection();
             $all_project_selections->where_related_task_set($task_set);
             $all_project_selections->where_related_task($task);
             $currently_selected = $all_project_selections->count();
             $jf_task = $task_set->task->include_join_fields()->get_by_id($task_id);
             $maximum_selections = (int) $jf_task->join_max_projects_selections;
             if ($project_selection->exists()) {
                 if (!$project_selection->is_related_to($task)) {
                     if ($currently_selected < $maximum_selections) {
                         $project_selection->save($task);
                         $output->status = TRUE;
                         $output->message = $this->lang->line('admin_task_sets_project_selection_success');
                     } else {
                         $output->message = $this->lang->line('admin_task_sets_project_selection_no_room');
                     }
                 } else {
                     $output->message = $this->lang->line('admin_task_sets_project_selection_already_selected');
                 }
             } else {
                 if ($currently_selected < $maximum_selections) {
                     $project_selection->save(array('student' => $student, 'task_set' => $task_set, 'task' => $task));
                     $output->status = TRUE;
                     $output->message = $this->lang->line('admin_task_sets_project_selection_success');
                 } else {
                     $output->message = $this->lang->line('admin_task_sets_project_selection_no_room');
                 }
             }
         } else {
             $output->message = $this->lang->line('admin_task_sets_project_selection_already_submited_solutions');
         }
     } else {
         $output->message = $this->lang->line('admin_task_sets_project_selection_cant_find_data');
     }
     if ($output->status) {
         $this->db->trans_commit();
         $this->_action_success();
     } else {
         $this->db->trans_rollback();
     }
     $this->output->set_content_type('application/json');
     $this->output->set_output(json_encode($output));
 }