$v->rule('required', array('questionCatName')); $v->labels(array('questionCatName' => "{$langTheField} {$langTitle}")); if ($v->validate()) { $q_cat_name = $_POST['questionCatName']; if (isset($_GET['modifyCat'])) { $q_cat_id = $_GET['modifyCat']; Database::get()->query("UPDATE exercise_question_cats SET question_cat_name = ?s " . "WHERE question_cat_id = ?d", $q_cat_name, $q_cat_id); Session::Messages($langEditCatSuccess, 'alert-success'); } else { $PollActive = 1; $q_cat_id = Database::get()->query("INSERT INTO exercise_question_cats\n (question_cat_name, course_id)\n VALUES (?s, ?d)", $q_cat_name, $course_id)->lastInsertID; Session::Messages($langNewCatSuccess, 'alert-success'); } redirect_to_home_page("modules/exercise/question_categories.php?course={$course_code}"); } else { Session::flashPost()->Messages($langFormErrors)->Errors($v->errors()); if (isset($_GET['modifyCat'])) { $cat_id = intval($_GET['modifyCat']); redirect_to_home_page("modules/exercise/question_categories.php?course={$course_code}&modifyCat={$cat_id}"); } else { redirect_to_home_page("modules/exercise/question_categories.php??course={$course_code}&newCat=yes"); } } } elseif (isset($_GET['modifyCat']) || isset($_GET['newCat'])) { $pageName = isset($_GET['newCat']) ? $langNewCat : $langEditCat; $navigation = array(array("url" => "index.php?course={$course_code}", "name" => $langExercices), array("url" => "question_categories.php?course={$course_code}", "name" => $langQuestionCats)); $form_action_url = "{$_SERVER['SCRIPT_NAME']}?course={$course_code}"; $form_action_url .= isset($_GET['modifyCat']) ? "&modifyCat=" . intval($_GET['modifyCat']) : "&newCat=yes"; if (isset($_GET['modifyCat'])) { $q_cat = Database::get()->querySingle("SELECT * FROM exercise_question_cats WHERE question_cat_id = ?d", $_GET['modifyCat']); }
function edit_assignment($id) { global $tool_content, $langBackAssignment, $langEditSuccess, $m, $langTheField, $langEditError, $course_code, $works_url, $course_id, $uid, $workPath, $langFormErrors; $v = new Valitron\Validator($_POST); $v->rule('required', array('title', 'max_grade')); $v->rule('numeric', array('max_grade')); $v->labels(array('title' => "{$langTheField} {$m['title']}", 'max_grade' => "{$langTheField} {$m['max_grade']}")); if ($v->validate()) { $row = Database::get()->querySingle("SELECT * FROM assignment WHERE id = ?d", $id); $title = $_POST['title']; $desc = purify($_POST['desc']); $deadline = trim($_POST['WorkEnd']) == FALSE ? '0000-00-00 00:00' : date('Y-m-d H:i', strtotime($_POST['WorkEnd'])); $late_submission = isset($_POST['late_submission']) && trim($_POST['WorkEnd']) != FALSE ? 1 : 0; $group_submissions = $_POST['group_submissions']; $max_grade = filter_input(INPUT_POST, 'max_grade', FILTER_VALIDATE_FLOAT); $assign_to_specific = filter_input(INPUT_POST, 'assign_to_specific', FILTER_VALIDATE_INT); $assigned_to = filter_input(INPUT_POST, 'ingroup', FILTER_VALIDATE_INT, FILTER_REQUIRE_ARRAY); $auto_judge = filter_input(INPUT_POST, 'auto_judge', FILTER_VALIDATE_INT); $auto_judge_scenarios = serialize($_POST['auto_judge_scenarios']); $lang = filter_input(INPUT_POST, 'lang'); if ($assign_to_specific == 1 && empty($assigned_to)) { $assign_to_specific = 0; } if (!isset($_POST['comments'])) { $comments = ''; } else { $comments = purify($_POST['comments']); } if (!isset($_FILES) || !$_FILES['userfile']['size']) { $_FILES['userfile']['name'] = ''; $_FILES['userfile']['tmp_name'] = ''; $filename = $row->file_path; $file_name = $row->file_name; } else { validateUploadedFile($_FILES['userfile']['name'], 2); if (preg_match('/\\.(ade|adp|bas|bat|chm|cmd|com|cpl|crt|exe|hlp|hta|' . 'inf|ins|isp|jse|lnk|mdb|mde|msc|msi|msp|mst|pcd|pif|reg|scr|sct|shs|' . 'shb|url|vbe|vbs|wsc|wsf|wsh)$/', $_FILES['userfile']['name'])) { $tool_content .= "<p class=\"caution\">{$langUnwantedFiletype}: {$_FILES['userfile']['name']}<br />"; $tool_content .= "<a href=\"{$_SERVER['SCRIPT_NAME']}?course={$course_code}&id={$id}\">{$langBack}</a></p><br />"; return; } $local_name = uid_to_name($uid); $am = Database::get()->querySingle("SELECT am FROM user WHERE id = ?d", $uid)->am; if (!empty($am)) { $local_name .= $am; } $local_name = greek_to_latin($local_name); $local_name = replace_dangerous_char($local_name); $secret = $row->secret_directory; $ext = get_file_extension($_FILES['userfile']['name']); $filename = "{$secret}/{$local_name}" . (empty($ext) ? '' : '.' . $ext); if (move_uploaded_file($_FILES['userfile']['tmp_name'], "{$workPath}/admin_files/{$filename}")) { @chmod("{$workPath}/admin_files/{$filename}", 0644); $file_name = $_FILES['userfile']['name']; } } Database::get()->query("UPDATE assignment SET title = ?s, description = ?s, deadline = ?t, late_submission = ?d, comments = ?s,\n group_submissions = ?d, max_grade = ?d, assign_to_specific = ?d, file_path = ?s, file_name = ?s,\n auto_judge = ?d, auto_judge_scenarios = ?s, lang = ?s WHERE course_id = ?d AND id = ?d", $title, $desc, $deadline, $late_submission, $comments, $group_submissions, $max_grade, $assign_to_specific, $filename, $file_name, $auto_judge, $auto_judge_scenarios, $lang, $course_id, $id); Database::get()->query("DELETE FROM assignment_to_specific WHERE assignment_id = ?d", $id); if ($assign_to_specific && !empty($assigned_to)) { if ($group_submissions == 1) { $column = 'group_id'; $other_column = 'user_id'; } else { $column = 'user_id'; $other_column = 'group_id'; } foreach ($assigned_to as $assignee_id) { Database::get()->query("INSERT INTO assignment_to_specific ({$column}, {$other_column}, assignment_id) VALUES (?d, ?d, ?d)", $assignee_id, 0, $id); } } Log::record($course_id, MODULE_ID_ASSIGN, LOG_MODIFY, array('id' => $id, 'title' => $title, 'description' => $desc, 'deadline' => $deadline, 'group' => $group_submissions)); \Session::Messages($langEditSuccess, 'alert-success'); redirect_to_home_page("modules/work/index.php?course={$course_code}"); } else { // $new_or_modify = isset($_GET['NewExercise']) ? "&NewExercise=Yes" : "&exerciseId=$_GET[exerciseId]&modifyExercise=yes"; Session::flashPost()->Messages($langFormErrors)->Errors($v->errors()); redirect_to_home_page("modules/work/index.php?course={$course_code}&id={$id}&choice=edit"); } }
/** * @brief insert grades for activity * @global string $tool_content * @global type $langGradebookEdit * @param type $gradebook_id * @param type $actID */ function insert_grades($gradebook_id, $actID) { global $tool_content, $langGradebookEdit, $gradebook, $langTheField, $course_code, $langFormErrors, $m; $errors = []; $v = new Valitron\Validator($_POST['usersgrade']); $v->addRule('emptyOrNumeric', function($field, $value, array $params) { if(is_numeric($value) || empty($value)) return true; }); foreach ($_POST['usersgrade'] as $userID => $userInp) { $v->rule('emptyOrNumeric', array("$userID")); $v->rule('min', array("$userID"), 0); $v->rule('max', array("$userID"), $gradebook->range); $v->labels(array( "$userID" => "$langTheField $m[grade]" )); } if($v->validate()) { foreach ($_POST['usersgrade'] as $userID => $userInp) { if ($userInp == '') { Database::get()->query("DELETE FROM gradebook_book WHERE gradebook_activity_id = ?d AND uid = ?d", $actID, getDirectReference($userID)); } else { // //check if there is record for the user for this activity $checkForBook = Database::get()->querySingle("SELECT COUNT(id) AS count, id FROM gradebook_book WHERE gradebook_activity_id = ?d AND uid = ?d", $actID, getDirectReference($userID)); if ($checkForBook->count) { // update Database::get()->query("UPDATE gradebook_book SET grade = ?f WHERE id = ?d", $userInp/$gradebook->range, $checkForBook->id); } else { // insert Database::get()->query("INSERT INTO gradebook_book SET uid = ?d, gradebook_activity_id = ?d, grade = ?f, comments = ?s", getDirectReference($userID), $actID, $userInp/$gradebook->range, ''); } } } } else { Session::flashPost()->Messages($langFormErrors)->Errors($v->errors()); redirect_to_home_page("modules/gradebook/index.php?course=$course_code&gradebook_id=".getIndirectReference($gradebook->id)."&ins=".getIndirectReference($actID)); } $message = "<div class='alert alert-success'>$langGradebookEdit</div>"; $tool_content .= $message . "<br/>"; }
function submit_grades($grades_id, $grades, $email = false) { global $tool_content, $langGrades, $langWorkWrongInput, $course_id, $course_code, $langFormErrors, $langTheField, $m; $assignment = Database::get()->querySingle("SELECT * FROM assignment WHERE id = ?d", $grades_id); $errors = []; foreach ($grades as $key => $grade) { $v = new Valitron\Validator($grade); $v->addRule('emptyOrNumeric', function($field, $value, array $params) { if(is_numeric($value) || empty($value)) return true; }); $v->rule('emptyOrNumeric', array('grade')); $v->rule('min', array('grade'), 0); $v->rule('max', array('grade'), $assignment->max_grade); $v->labels(array( 'grade' => "$langTheField $m[grade]" )); if(!$v->validate()) { $valitron_errors = $v->errors(); $errors["grade.$key"] = $valitron_errors['grade']; } } if(empty($errors)) { foreach ($grades as $sid => $grade) { $sid = intval($sid); $val = Database::get()->querySingle("SELECT grade from assignment_submit WHERE id = ?d", $sid)->grade; $grade = is_numeric($grade['grade']) ? $grade['grade'] : null; if ($val !== $grade) { if (Database::get()->query("UPDATE assignment_submit SET grade = ?f, grade_submission_date = NOW(), grade_submission_ip = ?s WHERE id = ?d", $grade, $_SERVER['REMOTE_ADDR'], $sid)->affectedRows > 0) { Log::record($course_id, MODULE_ID_ASSIGN, LOG_MODIFY, array('id' => $sid, 'title' => $assignment->title, 'grade' => $grade)); //update gradebook if needed if ($assignment->group_submissions) { $group_id = Database::get()->querySingle("SELECT group_id FROM assignment_submit WHERE id = ?d", $sid)->group_id; $user_ids = Database::get()->queryArray("SELECT user_id FROM group_members WHERE group_id = ?d", $group_id); foreach ($user_ids as $user_id) { update_gradebook_book($user_id, $assignment->id, $grade/$assignment->max_grade, GRADEBOOK_ACTIVITY_ASSIGNMENT); } } else { $quserid = Database::get()->querySingle("SELECT uid FROM assignment_submit WHERE id = ?d", $sid)->uid; update_gradebook_book($quserid, $assignment->id, $grade/$assignment->max_grade, GRADEBOOK_ACTIVITY_ASSIGNMENT); } if ($email) { grade_email_notify($grades_id, $sid, $grade, ''); } Session::Messages($langGrades, 'alert-success'); } } } Session::Messages($langGrades, 'alert-success'); } else { Session::flashPost()->Messages($langFormErrors)->Errors($errors); } redirect_to_home_page("modules/work/index.php?course=$course_code&id=$grades_id"); }
function submit_category() { global $course_id, $langCategoryAdded, $langCategoryModded, $categoryname, $description, $langFormErrors, $course_code; register_posted_variables(array('categoryname' => true, 'description' => true), 'all', 'trim'); $set_sql = "SET name = ?s, description = ?s"; $terms = array($categoryname, purify($description)); $v = new Valitron\Validator($_POST); $v->rule('required', array('categoryname')); if($v->validate()) { if (isset($_POST['id'])) { $id = getDirectReference($_POST['id']); Database::get()->query("UPDATE `group_category` $set_sql WHERE course_id = ?d AND id = ?d", $terms, $course_id, $id); $log_type = LOG_MODIFY; } else { $id = Database::get()->query("INSERT INTO `group_category` $set_sql, course_id = ?d", $terms, $course_id)->lastInsertID; $log_type = LOG_INSERT; } $txt_description = ellipsize(canonicalize_whitespace(strip_tags($description)), 50, '+'); Log::record($course_id, MODULE_ID_LINKS, $log_type, array('id' => $id, 'category' => $categoryname, 'description' => $txt_description)); } else { Session::flashPost()->Messages($langFormErrors)->Errors($v->errors()); redirect_to_home_page("modules/group/group_category.php?course=$course_code&addcategory=1"); } }