/** * @return ExtApp[] */ public static function getAutoJudgeServices() { if (self::$ServiceNames == null) { $apps = array(); foreach (self::$ServiceNames as $serviceName) { $service = new $serviceName(); $apps[$service->getName()] = $service; } self::$ServiceNames = $apps; } return self::$ServiceNames; }
// Check if user is administrator and if yes continue // Othewise exit with appropriate message $require_admin = true; require_once '../../include/baseTheme.php'; require_once 'modules/auth/auth.inc.php'; require_once 'modules/admin/extconfig/externals.php'; require_once 'modules/admin/extconfig/autojudgeapp.php'; $nameTools = $langAutoJudge; $navigation[] = array('url' => 'index.php', 'name' => $langAdmin); $navigation[] = array('url' => 'extapp.php', 'name' => $langExtAppConfig); $available_themes = active_subdirs("$webDir/template", 'theme.html'); // Scan the connectors directory and locate the appropriate classes $connectorClasses = AutojudgeApp::getAutoJudgeServices(); // Save new auto_judge.php if (isset($_POST['submit'])) { set_config('autojudge_connector', $_POST['formconnector']); foreach($connectorClasses as $curConnectorClass) { $connector = new $curConnectorClass(); foreach($connector->getConfigFields() as $curField => $curLabel) { set_config($curField, $_POST['form'.$curField]); } } // Display result message $tool_content .= "<div class='alert alert-success'>$langAutoJudgeUpdated</div>"; } // end of if($submit) // Display auto_judge.php edit form
function show_assignment($id, $display_graph_results = false) { global $tool_content, $m, $langBack, $langNoSubmissions, $langSubmissions, $langEndDeadline, $langWEndDeadline, $langNEndDeadline, $langWorkOnlineText, $langDays, $langDaysLeft, $langGradeOk, $course_code, $webDir, $urlServer, $langGraphResults, $m, $course_code, $themeimg, $works_url, $course_id, $langDelWarnUserAssignment, $langQuestionView, $langDelete, $langEditChange, $langAutoJudgeShowWorkResultRpt; $assign = Database::get()->querySingle("SELECT *, CAST(UNIX_TIMESTAMP(deadline)-UNIX_TIMESTAMP(NOW()) AS SIGNED) AS time FROM assignment WHERE course_id = ?d AND id = ?d", $course_id, $id); $nav[] = $works_url; assignment_details($id, $assign); $rev = (@($_REQUEST['rev'] == 1)) ? 'DESC' : 'ASC'; if (isset($_REQUEST['sort'])) { if ($_REQUEST['sort'] == 'am') { $order = 'am'; } elseif ($_REQUEST['sort'] == 'date') { $order = 'submission_date'; } elseif ($_REQUEST['sort'] == 'grade') { $order = 'grade'; } elseif ($_REQUEST['sort'] == 'filename') { $order = 'file_name'; } else { $order = 'surname'; } } else { $order = 'surname'; } $result1 = Database::get()->queryArray("SELECT * FROM assignment_submit AS assign, user WHERE assign.assignment_id = ?d AND user.id = assign.uid ORDER BY ?s ?s", $id, $order, $rev); $num_results = count($result1); if ($num_results > 0) { if ($num_results == 1) { $num_of_submissions = $m['one_submission']; } else { $num_of_submissions = sprintf("$m[more_submissions]", $num_results); } $gradeOccurances = array(); // Named array to hold grade occurances/stats $gradesExists = 0; foreach ($result1 as $row) { $theGrade = $row->grade; if ($theGrade) { $gradesExists = 1; if (!isset($gradeOccurances[$theGrade])) { $gradeOccurances[$theGrade] = 1; } else { if ($gradesExists) { ++$gradeOccurances[$theGrade]; } } } } if (!$display_graph_results) { $result = Database::get()->queryArray("SELECT assign.id id, assign.file_name file_name, assign.uid uid, assign.group_id group_id, assign.submission_date submission_date, assign.grade_submission_date grade_submission_date, assign.grade grade, assign.comments comments, assign.grade_comments grade_comments, assignment.grading_scale_id grading_scale_id, assignment.deadline deadline FROM assignment_submit AS assign, user, assignment WHERE assign.assignment_id = ?d AND assign.assignment_id = assignment.id AND user.id = assign.uid ORDER BY $order $rev", $id); $tool_content .= " <form action='$_SERVER[SCRIPT_NAME]?course=$course_code' method='post' class='form-inline'> <input type='hidden' name='grades_id' value='$id' /> <br> <div class='margin-bottom-thin'> <b>$langSubmissions:</b> $num_results </div> <div class='table-responsive'> <table class='table-default'> <tbody> <tr class='list-header'> <th width='3'> </th>"; sort_link($m['username'], 'username'); sort_link($m['am'], 'am'); $assign->submission_type ? $tool_content .= "<th>$langWorkOnlineText</th>" : sort_link($m['filename'], 'filename'); sort_link($m['sub_date'], 'date'); sort_link($m['grade'], 'grade'); $tool_content .= "<th width='5%' class='text-center'><i class='fa fa-cogs'></i></th></tr>"; $i = 1; foreach ($result as $row) { //is it a group assignment? if (!empty($row->group_id)) { $subContentGroup = "$m[groupsubmit] " . "<a href='../group/group_space.php?course=$course_code&group_id=$row->group_id'>" . "$m[ofgroup] " . gid_to_name($row->group_id) . "</a>"; } else { $subContentGroup = ''; } $uid_2_name = display_user($row->uid); $stud_am = Database::get()->querySingle("SELECT am FROM user WHERE id = ?d", $row->uid)->am; if ($assign->submission_type) { $filelink = "<a href='#' class='onlineText btn btn-xs btn-default' data-id='$row->id'>$langQuestionView</a>"; } else { $filelink = empty($row->file_name) ? ' ' : ("<a href='$_SERVER[SCRIPT_NAME]?course=$course_code&get=$row->id'>" . q($row->file_name) . "</a>"); } if(Session::has("grades")) { $grades = Session::get('grades'); $grade = $grades[$row->id]['grade']; } else { $grade = $row->grade; } if ($row->grading_scale_id) { $serialized_scale_data = Database::get()->querySingle('SELECT scales FROM grading_scale WHERE id = ?d AND course_id = ?d', $row->grading_scale_id, $course_id)->scales; $scales = unserialize($serialized_scale_data); $scale_options = "<option value> - </option>"; $scale_values = array_value_recursive('scale_item_value', $scales); if (!in_array($grade, $scale_values) && !is_null($grade)) { $grade = closest($grade, $scale_values)['value']; } foreach ($scales as $scale) { $scale_options .= "<option value='$scale[scale_item_value]'".($scale['scale_item_value'] == $grade ? " selected" : "").">$scale[scale_item_name]</option>"; } $grade_field = " <select name='grades[$row->id][grade]' class='form-control' id='scales'> $scale_options </select>"; } else { $grade_field = "<input class='form-control' type='text' value='$grade' name='grades[$row->id][grade]' maxlength='4' size='3'>"; } $late_sub_text = $row->deadline && $row->submission_date > $row->deadline ? "<div style='color:red;'><small>$m[late_submission]</small></div>" : ''; $tool_content .= " <tr> <td align='right' width='4' rowspan='2' valign='top'>$i.</td> <td>${uid_2_name}</td> <td width='85'>" . q($stud_am) . "</td> <td class='text-center' width='180'> $filelink </td> <td width='100'>" . nice_format($row->submission_date, TRUE) .$late_sub_text. "</td> <td width='5'> <div class='form-group ".(Session::getError("grade.$row->id") ? "has-error" : "")."'> $grade_field <span class='help-block'>".Session::getError("grade.$row->id")."</span> </div> </td> <td class='option-btn-cell'>". action_button(array( array( 'title' => $langEditChange, 'url' => "grade_edit.php?course=$course_code&assignment=$id&submission=$row->id", 'level' => 'primary', 'icon' => 'fa-edit' ), array( 'title' => $langDelete, 'url' => "$_SERVER[SCRIPT_NAME]?course=$course_code&id=$id&as_id=$row->id", 'class' => 'delete', 'icon' => 'fa-times', 'confirm' => $langDelWarnUserAssignment ) ))." </td> </tr> <tr> <td colspan='6'> <div>$subContentGroup</div>"; if (trim($row->comments != '')) { $tool_content .= "<div style='margin-top: .5em;'>" . q($row->comments) . '</div>'; } //professor comments if ($row->grade_comments || $row->grade != '') { $comments = "<br><div class='label label-primary'>" . nice_format($row->grade_submission_date) . "</div>"; } if (trim($row->grade_comments)) { $label = '<b>'.$m['gradecomments'] . '</b>:'; $comments .= " <span>" . standard_text_escape($row->grade_comments) . "</span>"; } else { $label = ''; $comments = ''; } $tool_content .= "<div style='padding-top: .5em;'>$label $comments "; if(AutojudgeApp::getAutojudge()->isEnabled()) { $reportlink = "work_result_rpt.php?course=$course_code&assignment=$id&submission=$row->id"; $tool_content .= "<a href='$reportlink'><b>$langAutoJudgeShowWorkResultRpt</b></a>"; } $tool_content .= " </td> </tr>"; $i++; } //END of Foreach $tool_content .= " </tbody> </table> </div> <div class='form-group'> <div class='col-xs-12'> <div class='checkbox'> <label> <input type='checkbox' value='1' name='email'> $m[email_users] </label> </div> </div> </div> <div class='pull-right'> <button class='btn btn-primary' type='submit' name='submit_grades'>$langGradeOk</button> </div> </form>"; } else { // display pie chart with grades results if ($gradesExists) { // Used to display grades distribution chart $graded_submissions_count = Database::get()->querySingle("SELECT COUNT(*) AS count FROM assignment_submit AS assign, user WHERE assign.assignment_id = ?d AND user.id = assign.uid AND assign.grade <> ''", $id)->count; $chart = new Plotter(); $chart->setTitle("$langGraphResults"); if ($assign->grading_scale_id) { $serialized_scale_data = Database::get()->querySingle('SELECT scales FROM grading_scale WHERE id = ?d AND course_id = ?d', $assign->grading_scale_id, $course_id)->scales; $scales = unserialize($serialized_scale_data); $scale_values = array_value_recursive('scale_item_value', $scales); } foreach ($gradeOccurances as $gradeValue => $gradeOccurance) { $percentage = round((100.0 * $gradeOccurance / $graded_submissions_count),2); if ($assign->grading_scale_id) { $key = closest($gradeValue, $scale_values, true)['key']; $gradeValue = $scales[$key]['scale_item_name']; } $chart->growWithPoint("$gradeValue ($percentage%)", $percentage); } $tool_content .= $chart->plot(); } } } else { $tool_content .= " <p class='sub_title1'>$langSubmissions:</p> <div class='alert alert-warning'>$langNoSubmissions</div>"; } }
function show_submission_details($id) { global $uid, $m, $langSubmittedAndGraded, $tool_content, $course_code, $langAutoJudgeEnable, $langAutoJudgeShowWorkResultRpt; $sub = Database::get()->querySingle("SELECT * FROM assignment_submit WHERE id = ?d", $id); if (!$sub) { die("Error: submission $id doesn't exist."); } if (!empty($sub->grade) or !empty($sub->grade_comment)) { $graded = TRUE; $notice = $langSubmittedAndGraded; } else { $graded = FALSE; $notice = $GLOBALS['langSubmitted']; } if ($sub->uid != $uid) { $notice .= "<br>$m[submitted_by_other_member] " . "<a href='../group/group_space.php?course=$course_code&group_id=$sub->group_id'>" . "$m[your_group] " . gid_to_name($sub->group_id) . "</a> (" . display_user($sub->uid) . ")"; } elseif ($sub->group_id) { $notice .= "<br>$m[groupsubmit] " . "<a href='../group/group_space.php?course=$course_code&group_id=$sub->group_id'>" . "$m[ofgroup] " . gid_to_name($sub->group_id) . "</a>"; } $tool_content .= " <div class='panel panel-default'> <div class='panel-heading list-header'> <h3 class='panel-title'>$m[SubmissionWorkInfo]</h3> </div> <div class='panel-body'> <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>".$m['SubmissionStatusWorkInfo'].":</strong> </div> <div class='col-sm-9'>$notice </div> </div> <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>" . $m['grade'] . ":</strong> </div> <div class='col-sm-9'>" . $sub->grade . " </div> </div> <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>" . $m['gradecomments'] . ":</strong> </div> <div class='col-sm-9'>" . $sub->grade_comments . " </div> </div> <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>" . $m['sub_date'] . ":</strong> </div> <div class='col-sm-9'>" . $sub->submission_date . " </div> </div> <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>" . $m['filename'] . ":</strong> </div> <div class='col-sm-9'><a href='$_SERVER[SCRIPT_NAME]?course=$course_code&get=$sub->id'>" . q($sub->file_name) . "</a> </div> </div>"; if(AutojudgeApp::getAutojudge()->isEnabled()) { $reportlink = "work_result_rpt.php?course=$course_code&assignment=$sub->assignment_id&submission=$sub->id"; $tool_content .= " <div class='row margin-bottom-fat'> <div class='col-sm-3'> <strong>" . $langAutoJudgeEnable . ":</strong> </div> <div class='col-sm-9'><a href='$reportlink'> $langAutoJudgeShowWorkResultRpt</a> </div> </div>"; } table_row($m['comments'], $sub->comments, true); $tool_content .= " </div> </div> "; }