public function save_configuration($widget_id) { $widget = new Admin_widget(); $widget->where_related('teacher', 'id', $this->usermanager->get_teacher_id()); $widget->get_by_id((int) $widget_id); if ($widget->exists()) { try { $widget_class = $this->load->admin_widget($widget->widget_type, $widget->id, unserialize($widget->widget_config)); $data = $this->input->post('configure'); if ($widget_class->validateConfiguration($data)) { $data_to_save = $widget_class->mergeConfiguration(unserialize($widget->widget_config), $data); $widget->widget_config = serialize($data_to_save); if ($widget->save()) { $this->messages->add_message($this->lang->line('admin_widget_configure_message_save_success'), Messages::MESSAGE_TYPE_SUCCESS); redirect(create_internal_url('admin_widget/configure/' . $widget_id)); } else { $this->messages->add_message($this->lang->line('admin_widget_configure_message_save_error'), Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_widget/configure/' . $widget_id)); } } else { $this->configure($widget_id); } } catch (Exception $e) { $this->configure($widget_id); } } else { $this->configure($widget_id); } }
function smarty_function_internal_url($params, $template) { if (isset($params['url'])) { $simple = FALSE; if (isset($params['simple']) && (is_bool($params['simple']) || is_numeric($params['simple']) || strtolower($params['simple']) === 'true')) { $simple = (bool) $params['simple']; } return create_internal_url($params['url'], $simple); } return ''; }
public function show($controller, $topic, $idiom = NULL) { $file_path = $controller . '/' . $topic . '.html'; $path = APPPATH . 'manual/' . (is_null($idiom) ? $this->lang->get_current_idiom() : $idiom) . '/' . $file_path; if (file_exists($path)) { $help_content = file_get_contents($path); $help_content_parsed = $this->parser->string_parse($help_content); $this->parser->parse('frontend/help/show.tpl', array('help_content' => $help_content_parsed)); } else { $options = array(); $dirs = scandir(APPPATH . 'manual'); foreach ($dirs as $dir) { if ($dir !== '.' && $dir !== '..' && is_dir(APPPATH . 'manual/' . $dir)) { if (file_exists(APPPATH . 'manual/' . $dir . '/' . $file_path)) { $options[$dir] = create_internal_url('help/show/' . $controller . '/' . $topic . '/' . $dir); } } } $this->parser->parse('frontend/help/show_error.tpl', array('options' => $options)); } }
/** * Main constructor, initialise controller. * Database will be connected, libraries for usermanager and messages will be loaded and translations model will be loaded. * All user data will be send to smarty template. */ public function __construct() { parent::__construct(); $this->load->config('list'); $this->load->config('lockdown'); if ($this->config->item('system_lockdown') === TRUE) { if (!$this->input->is_ajax_request()) { redirect(create_internal_url('maintenance', TRUE)); } die; } if ($this->input->is_cli_request()) { echo 'Error: You can\'t call this controller from CLI!'; die; } $this->load->database(); $this->load->library('usermanager'); $this->load->library('messages'); $this->load->model('translations'); $this->usermanager->set_student_data_to_smarty(); $this->usermanager->set_teacher_data_to_smarty(); }
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 post_comment_reply($task_id, $comment_id) { $this->usermanager->student_login_protected_redirect(); $this->create_comment(); redirect(create_internal_url('tasks/reply_at_comment/' . $task_id . '/' . $comment_id)); }
public function insert_to_task_set() { $this->load->library('form_validation'); $task_set_id = intval($this->input->post('task_set_id')); $this->_transaction_isolation(); $this->db->trans_begin(); $task_set = new Task_set(); $task_set->get_by_id($task_set_id); $this->form_validation->set_rules('task_id', 'task_id', 'required'); $this->form_validation->set_rules('task_set_id', 'task_set_id', 'required'); if ($task_set->exists()) { if ($task_set->content_type == 'task_set') { $this->form_validation->set_rules('points_total', 'lang:admin_tasks_add_to_task_set_form_field_points_total', 'required|number|greater_than_equal[0]'); $this->form_validation->set_rules('test_max_points', 'lang:admin_tasks_add_to_task_set_form_field_test_max_points', 'required|number|greater_than_equal[0]'); $this->form_validation->set_rules('test_min_points', 'lang:admin_tasks_add_to_task_set_form_field_test_min_points', 'required|number|less_than_field_or_equal[test_max_points]'); } else { $this->form_validation->set_rules('max_projects_selections', 'lang:admin_tasks_add_to_task_set_form_field_max_projects_selections', 'required|integer|greater_than[0]'); } } if ($this->form_validation->run()) { $task_id = intval($this->input->post('task_id')); $points_total = floatval($this->input->post('points_total')); $test_max_points = floatval($this->input->post('test_max_points')); $test_min_points = floatval($this->input->post('test_min_points')); $bonus_task = (int) (bool) intval($this->input->post('bonus_task')); $max_projects_selections = intval($this->input->post('max_projects_selections')); $internal_comment = $this->input->post('internal_comment'); $task = new Task(); $task->get_by_id($task_id); if (!$task->exists()) { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_tasks_error_message_task_not_found', Messages::MESSAGE_TYPE_ERROR); } elseif (!$task_set->exists()) { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_tasks_add_to_task_set_nothing_opened', Messages::MESSAGE_TYPE_ERROR); } elseif ($task_set->is_related_to($task)) { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_tasks_add_to_task_set_already_related', Messages::MESSAGE_TYPE_ERROR); } else { $related_task = $task_set->task->include_join_fields()->order_by('join_sorting', 'desc')->limit(1)->get(); $new_sorting = $related_task->exists() ? intval($related_task->join_sorting) + 1 : 1; $task_set->save($task); $task_set->set_join_field($task, 'points_total', $points_total); $task_set->set_join_field($task, 'test_max_points', $test_max_points); $task_set->set_join_field($task, 'test_min_points', $test_min_points); $task_set->set_join_field($task, 'sorting', $new_sorting); $task_set->set_join_field($task, 'bonus_task', $bonus_task); $task_set->set_join_field($task, 'max_projects_selections', $max_projects_selections); $task_set->set_join_field($task, 'internal_comment', $internal_comment); if ($this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_tasks_add_to_task_set_save_success', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_tasks_add_to_task_set_save_failed', Messages::MESSAGE_TYPE_ERROR); } } redirect(create_internal_url('admin_tasks/add_to_task_set/task_id/' . $task_id)); } else { $this->db->trans_rollback(); $this->add_to_task_set(); } }
public function delete_avatar() { $this->usermanager->student_login_protected_redirect(); $student = new Student(); $student->get_by_id($this->usermanager->get_student_id()); $student->delete_avatar(); $this->_action_success(); redirect(create_internal_url('students/my_account')); }
public function upload_solution($task_set_id_url, $task_id_url) { $task_set_id = url_get_id($task_set_id_url); $task_id = url_get_id($task_id_url); $this->_transaction_isolation(); $this->db->trans_begin(); $date = date('Y-m-d H:i:s'); $student = new Student(); $student->get_by_id($this->usermanager->get_student_id()); $course = new Course(); $course->where_related('active_for_student', 'id', $student->id); $course->where_related('participant', 'student_id', $student->id); $course->where_related('participant', 'allowed', 1); $course->include_related('period', 'name'); $course->get(); $task_set = new Task_set(); $task_set->where_related($course); $task_set->where('published', 1); $task_set->group_start(); $task_set->where('publish_start_time <=', $date); $task_set->or_where('publish_start_time', NULL); $task_set->group_end(); $task_set->get_by_id($task_set_id); $task = $task_set->task->include_join_fields()->get_by_id($task_id); $project_selection = new Project_selection(); $project_selection->where_related($student); $project_selection->where_related($task_set); $project_selection->where_related($task); $project_selection->get(); if ($student->exists() && $course->exists() && $task_set->exists() && $task->exists() && $project_selection->exists()) { if ($date <= $task_set->upload_end_time) { $config['upload_path'] = 'private/uploads/solutions/task_set_' . intval($task_set_id) . '/'; $config['allowed_types'] = 'zip'; $config['max_size'] = intval($this->config->item('maximum_solition_filesize')); $current_version = $task_set->get_student_file_next_version($student->id); $config['file_name'] = $student->id . '_' . $this->normalize_student_name($student) . '_' . substr(md5(time() . rand(-500000, 500000)), 0, 4) . '_' . $current_version . '.zip'; @mkdir($config['upload_path'], DIR_READ_MODE); $this->load->library('upload', $config); if ($this->upload->do_upload('file')) { $solution = new Solution(); $solution->where('task_set_id', $task_set->id); $solution->where('student_id', $student->id); $solution->get(); $revalidate = 1; if ($solution->exists()) { $solution->ip_address = $_SERVER["REMOTE_ADDR"]; $solution->revalidate = $revalidate; $solution->save(); } else { $solution = new Solution(); $solution->ip_address = $_SERVER["REMOTE_ADDR"]; $solution->revalidate = $revalidate; $solution->save(array('student' => $student, 'task_set' => $task_set)); } $solution_version = new Solution_version(); $solution_version->ip_address = $_SERVER["REMOTE_ADDR"]; $solution_version->version = $current_version; $solution_version->save($solution); if ($this->db->trans_status()) { $log = new Log(); $log->add_student_solution_upload_log(sprintf($this->lang->line('projects_task_solution_upload_log_message'), $config['file_name']), $student, $solution->id); $this->db->trans_commit(); $this->messages->add_message('lang:projects_task_solution_uploaded', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); $this->output->set_internal_value('task_set_id', $solution->task_set_id); $this->output->set_internal_value('task_id', $task->id); } else { $this->db->trans_rollback(); @unlink($config['upload_path'] . $config['file_name']); $this->messages->add_message('lang:projects_task_solution_canceled_due_db_error', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('projects/task/' . $task_set_id_url . '/' . $task_id_url)); } else { $this->db->trans_rollback(); $this->parser->assign('file_error_message', $this->upload->display_errors('', '')); $this->task($task_set_id_url, $task_id_url); } } else { $this->db->trans_rollback(); $this->messages->add_message('lang:projects_task_solution_upload_time_error', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('projects/task/' . $task_set_id_url . '/' . $task_id_url)); } } else { $this->db->trans_rollback(); $this->messages->add_message('lang:projects_task_solution_database_data_wrong_error', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('projects/task/' . $task_set_id_url . '/' . $task_id_url)); } }
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); } }
public function set_columns() { $this->_transaction_isolation(); $this->db->trans_begin(); $teacher = new Teacher(); $teacher->get_by_id($this->usermanager->get_teacher_id()); $teacher->widget_columns = (int) $this->input->post('widget_columns'); if ($teacher->widget_columns >= 1 && $teacher->widget_columns <= 4) { if ($teacher->save()) { $widget = new Admin_widget(); $widget->where_related('teacher', $teacher); $widget->where('column >', $teacher->widget_columns); $widget->limit(1); $widget->get(); if ($widget->exists()) { $widget->where('column', $teacher->widget_columns); $widget->where_related('teacher', $teacher); $widget->limit(1); $widget->order_by('position', 'desc'); $widget->get(); $position = 1; if ($widget->exists()) { $position += $widget->position; } $widget->select('id'); $widget->where('column >', $teacher->widget_columns); $widget->where_related('teacher', $teacher); $widget->order_by('column', 'asc'); $widget->order_by('position', 'asc'); $widget->get(); $updates = TRUE; foreach ($widget->all as $widget_to_update) { $widget_to_update->column = $teacher->widget_columns; $widget_to_update->position = $position; if (!$widget_to_update->save()) { $updates = FALSE; } else { $position++; } } if ($updates) { $this->db->trans_commit(); $this->messages->add_message($this->lang->line('admin_dashboard_message_columns_saved'), Messages::MESSAGE_TYPE_SUCCESS); } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_dashboard_message_columns_save_fail'), Messages::MESSAGE_TYPE_ERROR); } } else { $this->db->trans_commit(); $this->messages->add_message($this->lang->line('admin_dashboard_message_columns_saved'), Messages::MESSAGE_TYPE_SUCCESS); } } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_dashboard_message_columns_save_fail'), Messages::MESSAGE_TYPE_ERROR); } } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_dashboard_message_columns_save_fail_count'), Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_dashboard')); }
public function clear_all_compiled() { $this->smarty->clearCompiledTemplate(); $this->messages->add_message($this->lang->line('admin_settings_message_compiled_cleared')); redirect(create_internal_url('admin_settings')); }
public function log_in_as_student() { $uri_data = $this->uri->ruri_to_assoc(3); if (isset($uri_data['student_id'])) { $student = new Student(); $student->get_by_id((int) $uri_data['student_id']); if ($this->usermanager->force_student_login($student)) { $this->messages->add_message('lang:students_force_loged_in', Messages::MESSAGE_TYPE_SUCCESS); redirect(create_internal_url('/')); } } $this->messages->add_message('lang:admin_students_failed_to_force_login', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_students')); }
/** * This function will redirects browser to login page for teacher when no teacher is authentificated. * @param boolean $send_current_url if this is set to TRUE (default), current url will be encoded and sent to login page, so user will be redirected back to it after successful login. */ public function teacher_login_protected_redirect($send_current_url = TRUE) { if (!$this->is_teacher_session_valid()) { $current_url = encode_for_url($this->clear_current_url()); $redirects = $this->CI->config->item('login_redirects'); $redirect_student = $send_current_url ? '/' . trim($redirects['teacher'], '/') . '/current_url/' . $current_url . '/' : '/' . trim($redirects['teacher'], '/') . '/'; $this->CI->messages->keep_messages(); redirect(create_internal_url($redirect_student)); die; } }
public function save_new_constant() { $this->load->library('form_validation'); $this->form_validation->set_rules('translation[constant]', 'lang:admin_translationseditor_new_constant_field_constant', 'required|callback__valid_constant|callback__free_constant'); $this->form_validation->set_message('_valid_constant', $this->lang->line('admin_translationseditor_new_constant_form_error_valid_constant')); $this->form_validation->set_message('_free_constant', $this->lang->line('admin_translationseditor_new_constant_form_error_free_constant')); if ($this->form_validation->run()) { $translation = $this->input->post('translation'); $constant = $translation['constant']; $this->_transaction_isolation(); $this->db->trans_begin(); if (count($translation['text']) > 0) { foreach ($translation['text'] as $idiom => $text) { $this->translations->save_translation($constant, $idiom, $text); } } if ($this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message($this->lang->line('admin_translationseditor_new_constant_message_added'), Messages::MESSAGE_TYPE_SUCCESS); } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_translationseditor_new_constant_message_save_failed'), Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_translationseditor/new_constant')); } else { $this->new_constant(); } }
public function post_comment_reply($task_set_id, $reply_at_id) { $this->load->library('form_validation'); $this->form_validation->set_rules('comment[text]', 'lang:admin_task_sets_comments_form_field_text', 'required_no_html'); if ($this->form_validation->run()) { $this->add_comment($task_set_id, $reply_at_id); redirect(create_internal_url('admin_task_sets/reply_at_comment/' . $task_set_id . '/' . $reply_at_id)); } else { $this->reply_at_comment($task_set_id, $reply_at_id); } }
public function update_teacher() { $this->usermanager->teacher_login_protected_redirect(); $this->load->library('form_validation'); $teacher_id = intval($this->input->post('teacher_id')); $this->form_validation->set_rules('teacher[fullname]', 'lang:admin_teachers_list_form_field_fullname', 'required|max_length[255]'); $this->form_validation->set_rules('teacher[email]', 'lang:admin_teachers_list_form_field_email', 'required|valid_email|callback__email_available[' . $teacher_id . ']'); $this->form_validation->set_rules('teacher[password]', 'lang:admin_teachers_list_form_field_password', 'min_length_optional[6]|max_length_optional[20]'); $this->form_validation->set_message('_email_available', $this->lang->line('admin_teachers_list_form_error_email_not_available')); $this->_transaction_isolation(); $this->db->trans_begin(); if ($this->form_validation->run()) { $teacher = new Teacher(); $teacher->where('id !=', $this->usermanager->get_teacher_id())->get_by_id($teacher_id); if ($teacher->exists()) { $teacher_data = $this->input->post('teacher'); $teacher->from_array($teacher_data, array('fullname', 'email')); if (isset($teacher_data['password']) && !empty($teacher_data['password'])) { $teacher->password = sha1($teacher_data['password']); } if ($teacher->save() && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_teachers_list_account_save_successful', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_teachers_list_account_save_fail', Messages::MESSAGE_TYPE_ERROR); } } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_teachers_list_teacher_not_found', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_teachers/list_index')); } else { $this->edit_teacher(); } }
public function save_test_configuration($test_id) { $this->_transaction_isolation(); $this->db->trans_begin(); $test = new Test(); $test->get_by_id(intval($test_id)); if ($test->exists()) { $this->load->library('form_validation'); $this->form_validation->set_rules('test[name]', 'lang:admin_tests_test_form_field_name', 'required'); $this->form_validation->set_rules('test[timeout]', 'lang:admin_tests_test_form_field_timeout', 'required|greater_than_equal[100]'); $valid = TRUE; $test_object = $this->load->test($test->type); try { $test_object->initialize($test); $valid = $test_object->validate_test_configuration(); } catch (TestException $e) { $this->db->trans_rollback(); $this->messages->add_message($e->getMessage(), Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_tests/configure_test/' . $test_id)); die; } if ($this->form_validation->run() && $valid) { $test_data = $this->input->post('test'); $test->name = $test_data['name']; $test->timeout = (int) $test_data['timeout']; $test->enabled = isset($test_data['enabled']) ? 1 : 0; $test->enable_scoring = isset($test_data['enable_scoring']) ? 1 : 0; $test->instructions = isset($test_data['instructions']) ? remove_base_url($test_data['instructions']) : ''; $can_save = TRUE; try { $config_data = is_array($this->input->post('configuration')) ? $this->input->post('configuration') : array(); $upload_data = array(); $can_save = $test_object->handle_uploads($upload_data); $config_data = array_merge($config_data, $upload_data); $test->configuration = serialize($test_object->prepare_test_configuration($config_data)); } catch (TestException $e) { $this->db->trans_rollback(); $this->messages->add_message($e->getMessage(), Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_tests/configure_test/' . $test_id)); die; } if ($can_save) { $overlay = $this->input->post('overlay'); if ($test->save() && $this->lang->save_overlay_array(remove_base_url_from_overlay_array($overlay, 'instructions')) && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_tests_flash_message_configuration_saved', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_tests_flash_message_configuration_save_failed', Messages::MESSAGE_TYPE_SUCCESS); } redirect(create_internal_url('admin_tests/configure_test/' . $test_id)); } else { $this->db->trans_rollback(); $this->configure_test($test_id); } } else { $this->db->trans_rollback(); $this->configure_test($test_id); } } else { $this->db->trans_rollback(); redirect(create_internal_url('admin_tests/configure_test/' . $test_id)); } }
public function send_group_mail($group_id) { $group = new Group(); $group->get_by_id($group_id); if ($group->exists()) { $this->load->library('form_validation'); $this->form_validation->set_rules('group_mail[subject]', 'lang:admin_groups_group_email_form_field_subject', 'required'); $this->form_validation->set_rules('group_mail[body]', 'lang:admin_groups_group_email_form_field_body', 'required_no_html'); $this->form_validation->set_rules('group_mail[from]', 'lang:admin_groups_group_email_form_field_from', 'required'); $this->form_validation->set_rules('group_mail[student][]', 'lang:admin_groups_group_email_form_field_students', 'required'); if ($this->form_validation->run()) { $data = $this->input->post('group_mail'); $students = new Student(); $students->where_related('participant/group', 'id', $group->id); $students->where_related('participant/course', 'id', $group->course_id); $students->where_related('participant', 'allowed', 1); $students->where_in('id', $data['student']); $students->get(); if ($students->exists()) { $from = NULL; $from_name = ''; $teacher = new Teacher(); $teacher->get_by_id($this->usermanager->get_teacher_id()); if ($data['from'] == 'me') { $from = $teacher->email; $from_name = $teacher->fullname; } $sender_copy = isset($data['sender_copy']) && $data['sender_copy'] == 1 ? TRUE : FALSE; $sender_email = $teacher->email; if ($this->_send_multiple_emails($students, $data['subject'], '{$data.body|add_base_url}', array('data' => $data), $from, $from_name, $sender_copy, $sender_email)) { $this->messages->add_message('lang:admin_groups_group_email_success_sent', Messages::MESSAGE_TYPE_SUCCESS); } else { $this->messages->add_message('lang:admin_groups_group_email_error_send_failed', Messages::MESSAGE_TYPE_ERROR); } } else { $this->messages->add_message('lang:admin_groups_group_email_error_no_students_selected', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_groups/group_mail/' . $group_id)); } else { $this->group_mail($group_id); } } else { $this->messages->add_message('lang:admin_groups_group_email_error_group_not_found', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_groups/group_mail/' . $group_id)); } }
public function update() { $this->load->library('form_validation'); $this->form_validation->set_rules('task_set_type[name]', 'lang:admin_task_set_types_form_field_name', 'required'); $this->form_validation->set_rules('task_set_type_id', 'id', 'required'); if ($this->form_validation->run()) { $task_set_type_id = intval($this->input->post('task_set_type_id')); $task_set_type = new Task_set_type(); $task_set_type->get_by_id($task_set_type_id); if ($task_set_type->exists()) { $task_set_type_data = $this->input->post('task_set_type'); $task_set_type->from_array($task_set_type_data, array('name')); $this->_transaction_isolation(); $this->db->trans_begin(); if ($task_set_type->save() && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_task_set_types_flash_message_save_successful', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_task_set_types_flash_message_save_failed', Messages::MESSAGE_TYPE_ERROR); } } else { $this->messages->add_message('lang:admin_task_set_types_error_task_set_type_not_found', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_task_set_types/index')); } else { $this->edit(); } }
public function update() { $this->load->library('form_validation'); $period_id = intval($this->input->post('period_id')); $this->form_validation->set_rules('period_id', 'id', 'required'); $this->form_validation->set_rules('period[name]', 'lang:admin_periods_form_field_name', 'required|callback__is_unique_name_not_in[' . $period_id . ']'); $this->form_validation->set_message('_is_unique_name_not_in', $this->lang->line('admin_periods_form_error_message_is_unique_name_not_in')); if ($this->form_validation->run()) { $period = new Period(); $period->get_by_id($period_id); if ($period->exists()) { $period_data = $this->input->post('period'); $period->from_array($period_data, array('name')); $this->_transaction_isolation(); $this->db->trans_begin(); if ($period->save() && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_periods_flash_message_save_successful', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_periods_flash_message_save_failed', Messages::MESSAGE_TYPE_ERROR); } } else { $this->messages->add_message('lang:admin_periods_error_period_not_found', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_periods/index')); } else { $this->edit(); } }
public function download_solutions($task_set_id) { $task_set = new Task_set(); $task_set->get_by_id((int) $task_set_id); if ($task_set->exists()) { $task_set->download_all_solutions(); } else { $this->messages->add_message('lang:admin_solutions_solutions_download_unknown_task_set', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_solutions')); } }
public function add_participant() { $this->load->library('form_validation'); $this->form_validation->set_rules('participant[course]', 'lang:admin_participants_form_field_course', 'required'); $this->form_validation->set_rules('participant[students][]', 'lang:admin_participants_form_field_students', 'required'); if ($this->form_validation->run()) { $this->_transaction_isolation(); $this->db->trans_begin(); $process_ok = TRUE; $participant_data = $this->input->post('participant'); $course = new Course(); $course->get_by_id(intval($participant_data['course'])); $group = new Group(); $group->get_by_id(intval(@$participant_data['group'])); if (!$course->exists()) { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_participants_message_course_not_exists', Messages::MESSAGE_TYPE_ERROR); $process_ok = FALSE; } if ($process_ok && $course->exists()) { if ($group->exists() && !$group->is_related_to($course)) { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_participants_message_group_not_belongs_to_course', Messages::MESSAGE_TYPE_ERROR); $process_ok = FALSE; } } $disapproved = 0; $added = 0; if ($process_ok) { foreach ($participant_data['students'] as $student_id) { $student = new Student(); $student->where_related('participant/course', 'id', $course->id); $student->get_by_id($student_id); if ($student->exists()) { continue; } $student->get_by_id($student_id); $participant = new Participant(); $participant->allowed = intval(@$participant_data['allowed']); $participant->save(array($student, $course, $group)); $added++; if ($participant->allowed == 1) { $disallowe_participant = FALSE; if ($course->participant->where('allowed', 1)->count() > intval($course->capacity)) { $disallowe_participant = TRUE; } if ($group->exists()) { $group_for_test = new Group(); $rooms = $group_for_test->room; $rooms->select_min('capacity'); $rooms->where('group_id', '${parent}.id', FALSE); $group_for_test->select_subquery($rooms, 'group_capacity'); $group_for_test->include_related_count('participant'); $group_for_test->where_related_participant('allowed', 1); $group_for_test->get_by_id(intval($group->id)); if ($group_for_test->exists()) { if (intval($group_for_test->participant_count) > intval($group_for_test->group_capacity)) { $disallowe_participant = TRUE; } } } if ($disallowe_participant) { $participant->allowed = 0; $participant->save(); $disapproved++; } } } } if ($this->db->trans_status() && $process_ok) { $this->db->trans_commit(); $info_approved = intval(@$participant_data['allowed']) == 1 ? $added - $disapproved : 0; $info_disappoved = intval(@$participant_data['allowed']) == 1 ? $disapproved : $added; $message = sprintf($this->lang->line('admin_participants_message_addition_successfull'), $info_approved, $info_disappoved); $this->messages->add_message($message, Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_participants_messages_error_in_addition_transaction', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_participants/add_participant_form')); } else { $this->add_participant_form(); } }
public function update() { $this->load->library('form_validation'); $this->form_validation->set_rules('category[name]', 'lang:admin_categories_form_field_category_name', 'required'); $this->form_validation->set_rules('category[parent_id]', 'lang:admin_categories_form_field_parent_category', 'required'); $this->form_validation->set_rules('category_id', 'id', 'required'); if ($this->form_validation->run()) { $categori_id = $this->input->post('category_id'); $category = new Category(); $category->get_by_id($categori_id); if ($category->exists()) { $category_data = $this->input->post('category'); $category->name = $category_data['name']; $this->_transaction_isolation(); $this->db->trans_begin(); $cansave = TRUE; if ($category_data['parent_id'] == 'root') { $category->parent_id = NULL; } else { $parent = new Category(); $parent->get_by_id(intval($category_data['parent_id'])); if (!$parent->exists()) { $cansave = FALSE; } else { $category->parent_id = intval($category_data['parent_id']); } } if ($cansave && $category->save() && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_categories_flash_message_save_successful', Messages::MESSAGE_TYPE_SUCCESS); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_categories_flash_message_save_failed', Messages::MESSAGE_TYPE_ERROR); } } else { $this->messages->add_message('lang:admin_categories_error_category_not_found', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_categories/index')); } else { $this->edit(); } }
public function download_solutions($course_id) { $course = new Course(); $course->get_by_id((int) $course_id); if ($course->exists()) { $course->download_all_solutions(); } else { $this->messages->add_message('lang:admin_courses_message_cant_download_solutions', Messages::MESSAGE_TYPE_ERROR); redirect(create_internal_url('admin_courses')); } }
public function update($group_id) { $this->load->library('form_validation'); $this->form_validation->set_rules('room[name]', 'lang:admin_rooms_form_field_name', 'required'); $this->form_validation->set_rules('room[time_begin]', 'lang:admin_rooms_form_field_time_begin', 'required|callback__is_time'); $this->form_validation->set_rules('room[time_end]', 'lang:admin_rooms_form_field_time_end', 'required|callback__is_time|callback__is_later_time'); $this->form_validation->set_rules('room[time_day]', 'lang:admin_rooms_form_field_time_day', 'required|callback__is_day'); $this->form_validation->set_rules('room[capacity]', 'lang:admin_rooms_form_field_capacity', 'required|integer|greater_than[0]'); $this->form_validation->set_rules('room_id', 'room_id', 'required'); $this->form_validation->set_message('_is_time', $this->lang->line('admin_rooms_form_error_message_is_time')); $this->form_validation->set_message('_is_day', $this->lang->line('admin_rooms_form_error_message_is_day')); $this->form_validation->set_message('_is_later_time', $this->lang->line('admin_rooms_form_error_message_is_later_time')); if ($this->form_validation->run()) { $room_id = intval($this->input->post('room_id')); $room = new Room(); $room->get_by_id($room_id); if ($room->exists()) { $room_data = $this->input->post('room'); $room->from_array($room_data, array('name', 'time_day')); $room->time_begin = $this->time_to_int($room_data['time_begin']); $room->time_end = $this->time_to_int($room_data['time_end']); $room->capacity = intval($room_data['capacity']); $this->_transaction_isolation(); $this->db->trans_begin(); if (trim($room_data['teachers_plain']) != '') { $room->teachers_plain = trim($room_data['teachers_plain']); } else { $room->teachers_plain = NULL; } $current_teachers = $room->teacher->get(); $room->delete($current_teachers->all); $teachers = new Teacher(); if (is_array($room_data['teachers']) && count($room_data['teachers'])) { foreach ($room_data['teachers'] as $teacher_id) { $teachers->or_where('id', $teacher_id); } $teachers->get(); } if ($room->save(array($teachers->all)) && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message('lang:admin_rooms_flash_message_save_successful', Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); $room->group->get(); $this->output->set_internal_value('course_id', $room->group->course_id); } else { $this->db->trans_rollback(); $this->messages->add_message('lang:admin_rooms_flash_message_save_failed', Messages::MESSAGE_TYPE_ERROR); } } else { $this->messages->add_message('lang:admin_rooms_error_room_not_found', Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_rooms/index/' . $group_id)); } else { $this->edit($group_id); } }
public function update($restriction_id) { $this->load->library('form_validation'); $this->form_validation->set_rules('restriction[ip_addresses]', 'lang:admin_restrictions_form_field_ip_addresses', 'required|callback__ip_addresses_validation'); $this->form_validation->set_rules('restriction[start_time]', 'lang:admin_restrictions_form_field_start_time', 'required|datetime'); $this->form_validation->set_rules('restriction[end_time]', 'lang:admin_restrictions_form_field_end_time', 'required|datetime|callback__time_compare'); $this->form_validation->set_message('_ip_addresses_validation', $this->lang->line('admin_restrictions_form_validation_message_ip_addresses')); $this->form_validation->set_message('_time_compare', $this->lang->line('admin_restrictions_form_validation_message_time_compare')); if ($this->form_validation->run()) { $this->_transaction_isolation(); $this->db->trans_begin(); $restriction = new Restriction(); $restriction->get_by_id((int) $restriction_id); if ($restriction->exists()) { $restriction->from_array($this->input->post('restriction')); if ($restriction->save() && $this->db->trans_status()) { $this->db->trans_commit(); $this->messages->add_message($this->lang->line('admin_restrictions_flash_messages_update_successful'), Messages::MESSAGE_TYPE_SUCCESS); $this->_action_success(); } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_restrictions_flash_messages_update_failed'), Messages::MESSAGE_TYPE_ERROR); } } else { $this->db->trans_rollback(); $this->messages->add_message($this->lang->line('admin_restrictions_error_message_restriction_not_found'), Messages::MESSAGE_TYPE_ERROR); } redirect(create_internal_url('admin_restrictions')); } else { $this->edit($restriction_id); } }