function status_of_last_submission_to($entity) { return Status::to_status($this->last_submission_to($entity)); }
function write_submission_summary($entities, $users) { // determine summary $num_passed = array(); $num_failed = array(); $num_missed_deadline = array(); $num_none = array(); foreach ($entities as $e => $entity) { $num_passed[$e] = $num_failed[$e] = $num_missed_deadline[$e] = $num_none[$e] = 0; foreach ($users as $userinfo) { $subms = $userinfo['subms']; $subm = isset($subms[$e]) ? $subms[$e] : false; if (Status::is_passed(Status::to_status($subm))) { $num_passed[$e]++; } else { if (Status::is_failed(Status::to_status($subm))) { $num_failed[$e]++; } else { if (Status::is_missed_deadline(Status::to_status($subm))) { $num_missed_deadline[$e]++; } else { $num_none[$e]++; } } } } } $sum = array(); foreach ($entities as $e => $entity) { $sum[$e] = $num_passed[$e] + $num_failed[$e] + $num_missed_deadline[$e] + $num_none[$e]; } echo '<tr class="first-child"><td class="summary">passed</td>'; foreach ($entities as $e => $entity) { echo '<td>' . $num_passed[$e] . ' (' . number_format(100.0 * $num_passed[$e] / $sum[$e], 1) . '%)</td>'; } echo "</tr>\n"; echo '<tr><td class="summary">failed</td>'; foreach ($entities as $e => $entity) { echo '<td>' . $num_failed[$e] . ' (' . number_format(100.0 * $num_failed[$e] / $sum[$e], 1) . '%)</td>'; } echo "</tr>\n"; echo '<tr><td class="summary">missed deadline</td>'; foreach ($entities as $e => $entity) { echo '<td>' . $num_missed_deadline[$e] . ' (' . number_format(100.0 * $num_missed_deadline[$e] / $sum[$e], 1) . '%)</td>'; } echo "</tr>\n"; echo '<tr><td class="summary">not submitted</td>'; foreach ($entities as $e => $entity) { echo '<td>' . $num_none[$e] . ' (' . number_format(100.0 * $num_none[$e] / $sum[$e], 1) . '%)</td>'; } echo "</tr>\n"; }
static function to_css_class($status) { $status = Status::to_status($status); switch (Status::base_status_group($status)) { case Status::NOT_DONE: return "skipped"; case Status::PENDING: return $status == STATUS::MISSED_DEADLINE ? "misseddeadline" : "pending"; case Status::JUDGING: return "judging"; case Status::PASSED: return "passed"; case Status::FAILED: return "failed"; default: return "unknown-status"; } }
function write_submitable_page() { $submissions = Authentication::current_user()->submissions_to($this->entity); $made_submission = isset($_REQUEST['made_submission']) ? $_REQUEST['made_submission'] : false; $this->write_block_begin('Problem description'); $this->write_submitable_entity_info(); $this->write_block_end(); // submission form $last_submission = Authentication::current_user()->last_submission_to($this->entity); if ($this->entity->active()) { $passed = Status::to_status($last_submission) >= Status::PENDING && !isset($_FILES['file']); // no new submission $this->write_block_begin('Submit', 'collapsable block' . ($passed ? ' collapsed' : '')); $this->write_submit_form(); $this->write_block_end(); } echo "<h2>Submissions</h2>"; $this->write_messages('submit-confirm'); // submissions that were made if (empty($submissions)) { echo "<em>no submissions have been made for this assignment.</em>"; } else { $i = count($submissions); foreach ($submissions as $subm) { // is this an interesting submission? $made_this_submission = $made_submission !== false && $subm->submissionid == $made_submission; $is_interesting = $this->entity->is_more_interesting_submission($subm, $last_submission) || $made_this_submission; if ($is_interesting) { $last_submission = $subm; } // write $this->write_block_begin('Submission ' . $i, 'collapsable block submission ' . ($is_interesting ? '' : 'collapsed ') . ($made_this_submission ? 'appear ' : '') . Status::to_css_class($subm), '', "submission-{$subm->submissionid}"); write_submission($subm, $this->entity); $this->write_block_end(); $i--; } } }