public function update_permission($task_set_id, $task_set_permission_id)
 {
     $this->load->library('form_validation');
     $this->form_validation->set_rules('task_set_permission[group_id]', 'lang:admin_task_sets_form_field_group_id', 'required');
     $task_set_permission_data = $this->input->post('task_set_permission');
     $this->form_validation->set_rules('task_set_permission[deadline_notification_emails_handler]', 'lang:admin_task_sets_form_field_deadline_notification_emails_handler', 'required');
     if (isset($task_set_permission_data['deadline_notification_emails_handler']) && $task_set_permission_data['deadline_notification_emails_handler'] == 2) {
         $this->form_validation->set_rules('task_set_permission[deadline_notification_emails]', 'lang:admin_task_sets_form_field_deadline_notification_emails', 'required|valid_emails');
     } else {
         $this->form_validation->set_rules('task_set_permission[deadline_notification_emails]', 'lang:admin_task_sets_form_field_deadline_notification_emails', 'zero_or_more_valid_emails');
     }
     if ($this->form_validation->run()) {
         $this->_transaction_isolation();
         $this->db->trans_begin();
         $task_set = new Task_set();
         $task_set->get_by_id((int) $task_set_id);
         $task_set_permission = new Task_set_permission();
         $task_set_permission->get_by_id((int) $task_set_permission_id);
         if ($task_set->exists() && !is_null($task_set->course_id)) {
             if ($task_set_permission->exists() && $task_set_permission->is_related_to($task_set)) {
                 $task_set_permission_upload_end_time = $task_set_permission->upload_end_time;
                 $task_set_permission->enabled = isset($task_set_permission_data['enabled']) ? 1 : 0;
                 $task_set_permission->group_id = $task_set_permission_data['group_id'];
                 $task_set_permission->room_id = intval($task_set_permission_data['room_id']) > 0 ? intval($task_set_permission_data['room_id']) : NULL;
                 $task_set_permission->publish_start_time = preg_match(Task_sets::REGEXP_PATTERN_DATETYME, $task_set_permission_data['publish_start_time']) ? $task_set_permission_data['publish_start_time'] : NULL;
                 $task_set_permission->upload_end_time = preg_match(Task_sets::REGEXP_PATTERN_DATETYME, $task_set_permission_data['upload_end_time']) ? $task_set_permission_data['upload_end_time'] : NULL;
                 $task_set_permission->deadline_notification_emails = $task_set_permission_data['deadline_notification_emails'];
                 $task_set_permission->deadline_notification_emails_handler = $task_set_permission_data['deadline_notification_emails_handler'];
                 if ($task_set_permission->upload_end_time !== $task_set_permission_upload_end_time) {
                     $task_set_permission->deadline_notified = 0;
                 }
                 if ($task_set_permission->save()) {
                     $task_set_permissions = new Task_set_permission();
                     $task_set_permissions->where_related($task_set);
                     $task_set_permissions->where('group_id', $task_set_permission->group_id);
                     if ($task_set_permissions->count() > 1) {
                         $this->db->trans_rollback();
                         $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_save_for_the_same_group', Messages::MESSAGE_TYPE_ERROR);
                     } else {
                         $this->db->trans_commit();
                         $this->messages->add_message('lang:admin_task_set_permissions_success_message_saved', Messages::MESSAGE_TYPE_SUCCESS);
                         $this->_action_success();
                     }
                 } else {
                     $this->db->trans_rollback();
                     $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_save', Messages::MESSAGE_TYPE_ERROR);
                 }
             } else {
                 $this->db->trans_rollback();
                 $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_find_task_set_permission_or_is_not_related_to_task_set', Messages::MESSAGE_TYPE_ERROR);
             }
         } else {
             $this->db->trans_rollback();
             $this->messages->add_message('lang:admin_task_set_permissions_error_message_cant_find_task_set_or_course', Messages::MESSAGE_TYPE_ERROR);
         }
         redirect(create_internal_url('admin_task_set_permissions/edit_permission/' . (int) $task_set_id) . '/' . (int) $task_set_permission_id);
     } else {
         $this->edit_permission($task_set_id, $task_set_permission_id);
     }
 }