Exemple #1
0
function exercise_list_submissions_for_admin($exercise)
{
    // list the teacher sublmissions first
    global $CFG, $USER;
    if (!($course = get_record("course", "id", $exercise->course))) {
        error("Course is misconfigured");
    }
    if (!($cm = get_coursemodule_from_instance("exercise", $exercise->id, $course->id))) {
        error("Course Module ID was incorrect");
    }
    $groupid = get_current_group($course->id);
    exercise_print_assignment_info($exercise);
    print_heading_with_help(get_string("administration"), "administration", "exercise");
    echo "<p align=\"center\"><b><a href=\"assessments.php?action=teachertable&amp;id={$cm->id}\">" . get_string("teacherassessmenttable", "exercise", $course->teacher) . "</a></b></p>\n";
    if (isteacheredit($course->id)) {
        // list any teacher submissions
        $table->head = array(get_string("title", "exercise"), get_string("submitted", "exercise"), get_string("action", "exercise"));
        $table->align = array("left", "left", "left");
        $table->size = array("*", "*", "*");
        $table->cellpadding = 2;
        $table->cellspacing = 0;
        if ($submissions = exercise_get_teacher_submissions($exercise)) {
            foreach ($submissions as $submission) {
                $action = "<a href=\"submissions.php?action=adminamendtitle&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("amendtitle", "exercise") . "</a>";
                if (isteacheredit($course->id)) {
                    $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("delete", "exercise") . "</a>";
                }
                $table->data[] = array(exercise_print_submission_title($exercise, $submission), userdate($submission->timecreated), $action);
            }
            print_heading(get_string("studentsubmissions", "exercise", $course->teacher), "center");
            print_table($table);
        }
    }
    // list student assessments
    // Get all the students...
    if ($users = get_course_students($course->id, "u.lastname, u.firstname")) {
        $timenow = time();
        unset($table);
        $table->head = array(get_string("name"), get_string("title", "exercise"), get_string("assessed", "exercise"), get_string("action", "exercise"));
        $table->align = array("left", "left", "left", "left");
        $table->size = array("*", "*", "*", "*");
        $table->cellpadding = 2;
        $table->cellspacing = 0;
        $nassessments = 0;
        foreach ($users as $user) {
            // check group membership, if necessary
            if ($groupid) {
                // check user's group
                if (!groups_is_member($groupid, $user->id)) {
                    continue;
                    // skip this user
                }
            }
            if ($assessments = exercise_get_user_assessments($exercise, $user)) {
                $title = '';
                foreach ($assessments as $assessment) {
                    if (!($submission = get_record("exercise_submissions", "id", $assessment->submissionid))) {
                        error("exercise_list_submissions_for_admin: Submission record not found!");
                    }
                    $title .= $submission->title;
                    // test for allocated assesments which have not been done
                    if ($assessment->timecreated < $timenow) {
                        // show only warm or cold assessments
                        $title .= " {" . number_format($assessment->grade * $exercise->grade / 100.0, 0);
                        if ($assessment->timegraded) {
                            $title .= "/" . number_format($assessment->gradinggrade * $exercise->gradinggrade / 100.0, 0);
                        }
                        $title .= "} ";
                        if ($realassessments = exercise_count_user_assessments_done($exercise, $user)) {
                            $action = "<a href=\"assessments.php?action=adminlistbystudent&amp;id={$cm->id}&amp;userid={$user->id}\">" . get_string("view", "exercise") . "</a>";
                        } else {
                            $action = "";
                        }
                        $nassessments++;
                        $table->data[] = array(fullname($user), $title, userdate($assessment->timecreated), $action);
                    }
                }
            }
        }
        if (isset($table->data)) {
            if ($groupid) {
                if (!groups_group_exists($groupid)) {
                    //TODO:
                    error("List unassessed student submissions: group not found");
                }
                print_heading("{$group->name} " . get_string("studentassessments", "exercise", $course->student) . " [{$nassessments}]");
            } else {
                print_heading(get_string("studentassessments", "exercise", $course->student) . " [{$nassessments}]");
            }
            print_table($table);
            echo "<p align=\"center\">" . get_string("noteonstudentassessments", "exercise");
            echo "<br />{" . get_string("maximumgrade") . ": {$exercise->grade} / " . get_string("maximumgrade") . ": {$exercise->gradinggrade}}</p>\n";
            // grading grade analysis
            unset($table);
            $table->head = array(get_string("count", "exercise"), get_string("mean", "exercise"), get_string("standarddeviation", "exercise"), get_string("maximum", "exercise"), get_string("minimum", "exercise"));
            $table->align = array("center", "center", "center", "center", "center");
            $table->size = array("*", "*", "*", "*", "*");
            $table->cellpadding = 2;
            $table->cellspacing = 0;
            if ($groupid) {
                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean, \n                        STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max \n                        FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a \n                        WHERE g.groupid = {$groupid} AND a.userid = g.userid AND a.timegraded > 0 \n                        AND a.exerciseid = {$exercise->id}");
            } else {
                // no group/all participants
                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean, \n                        STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max \n                        FROM {$CFG->prefix}exercise_assessments a \n                        WHERE a.timegraded > 0 AND a.exerciseid = {$exercise->id}");
            }
            $table->data[] = array($stats->count, number_format($stats->mean * $exercise->gradinggrade / 100.0, 1), number_format($stats->stddev * $exercise->gradinggrade / 100.0, 1), number_format($stats->max * $exercise->gradinggrade / 100.0, 1), number_format($stats->min * $exercise->gradinggrade / 100.0, 1));
            print_heading(get_string("gradinggrade", "exercise") . " " . get_string("analysis", "exercise"));
            print_table($table);
            echo "<p align=\"center\"><a href=\"assessments.php?id={$cm->id}&amp;action=regradestudentassessments\">" . get_string("regradestudentassessments", "exercise") . "</a> ";
            helpbutton("regrading", get_string("regradestudentassessments", "exercise"), "exercise");
            echo "</p>\n";
        }
    }
    // now the sudent submissions
    unset($table);
    if ($users) {
        $table->head = array(get_string("submittedby", "exercise"), get_string("title", "exercise"), get_string("submitted", "exercise"), get_string("action", "exercise"));
        $table->align = array("left", "left", "left", "left");
        $table->size = array("*", "*", "*", "*");
        $table->cellpadding = 2;
        $table->cellspacing = 0;
        $nsubmissions = 0;
        foreach ($users as $user) {
            // check group membership, if necessary
            if ($groupid) {
                // check user's group
                if (!groups_is_member($groupid, $user->id)) {
                    continue;
                    // skip this user
                }
            }
            if ($submissions = exercise_get_user_submissions($exercise, $user)) {
                foreach ($submissions as $submission) {
                    $action = "<a href=\"submissions.php?action=adminamendtitle&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("amendtitle", "exercise") . "</a>";
                    // has teacher already assessed this submission
                    if ($assessment = get_record_select("exercise_assessments", "submissionid = {$submission->id} AND userid = {$USER->id}")) {
                        $curtime = time();
                        if ($curtime - $assessment->timecreated > $CFG->maxeditingtime) {
                            $action .= " | <a href=\"assessments.php?action=assesssubmission&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("reassess", "exercise") . "</a>";
                        } else {
                            // there's still time left to edit...
                            $action .= " | <a href=\"assessments.php?action=assesssubmission&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("edit", "exercise") . "</a>";
                        }
                    } else {
                        // user has not assessed this submission
                        $action .= " | <a href=\"assessments.php?action=assesssubmission&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("assess", "exercise") . "</a>";
                    }
                    if ($nassessments = exercise_count_assessments($submission)) {
                        $action .= " | <a href=\"assessments.php?action=adminlist&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("view", "exercise") . " ({$nassessments})</a>";
                    }
                    if ($submission->late) {
                        $action .= " | <a href=\"submissions.php?action=adminlateflag&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("clearlateflag", "exercise") . "</a>";
                    }
                    $action .= " | <a href=\"submissions.php?action=adminconfirmdelete&amp;id={$cm->id}&amp;sid={$submission->id}\">" . get_string("delete", "exercise") . "</a>";
                    $title = $submission->title;
                    if ($submission->resubmit) {
                        $title .= "*";
                    }
                    $datesubmitted = userdate($submission->timecreated);
                    if ($submission->late) {
                        $datesubmitted = "<font color=\"red\">" . $datesubmitted . "</font>";
                    }
                    $table->data[] = array(fullname($user), $title . " " . exercise_print_submission_assessments($exercise, $submission), $datesubmitted, $action);
                    $nsubmissions++;
                }
            }
        }
        if (isset($table->data)) {
            if ($groupid) {
                if (!groups_group_exists($groupid)) {
                    error("List unassessed student submissions: group not found");
                }
                print_heading("{$group->name} " . get_string("studentsubmissions", "exercise", $course->student) . " [{$nsubmissions}]");
            } else {
                print_heading(get_string("studentsubmissions", "exercise", $course->student) . " [{$nsubmissions}]", "center");
            }
            print_table($table);
            echo "<p align=\"center\">[] - " . get_string("gradeforsubmission", "exercise");
            echo "<br />" . get_string("maximumgrade") . ": {$exercise->grade}</p>\n";
            echo "<p align=\"center\">" . get_string("resubmitnote", "exercise", $course->student) . "</p>\n";
            // grade analysis
            unset($table);
            $table->head = array(get_string("count", "exercise"), get_string("mean", "exercise"), get_string("standarddeviation", "exercise"), get_string("maximum", "exercise"), get_string("minimum", "exercise"));
            $table->align = array("center", "center", "center", "center", "center");
            $table->size = array("*", "*", "*", "*", "*");
            $table->cellpadding = 2;
            $table->cellspacing = 0;
            /// NOTE:  user_teachers was ripped from the following SQL without a proper fix - XXX TO DO
            if ($groupid) {
                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean, \n                        STDDEV(grade) AS stddev, MIN(grade) AS min, MAX(grade) AS max \n                        FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a, \n                        {$CFG->prefix}exercise_submissions s\n                        WHERE g.groupid = {$groupid} AND s.userid = g.userid AND a.submissionid = s.id \n                        AND a.exerciseid = {$exercise->id}");
            } else {
                // no group/all participants
                $stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean, \n                        STDDEV(grade) AS stddev, MIN(grade) AS min, MAX(grade) AS max \n                        FROM {$CFG->prefix}exercise_assessments a\n                        WHERE a.exerciseid = {$exercise->id}");
            }
            $table->data[] = array($stats->count, number_format($stats->mean * $exercise->grade / 100.0, 1), number_format($stats->stddev * $exercise->grade / 100.0, 1), number_format($stats->max * $exercise->grade / 100.0, 1), number_format($stats->min * $exercise->grade / 100.0, 1));
            print_heading(get_string("grade") . " " . get_string("analysis", "exercise"));
            print_table($table);
        }
    }
}
    exercise_list_user_submissions($exercise, $USER);
    echo "<hr size=\"1\" noshade=\"noshade\" />";
    // print upload form
    print_heading(get_string("submitexercisedescription", "exercise") . ":");
    exercise_print_upload_form($exercise);
} elseif ($action == 'teachersview') {
    if (!isteacher($course->id)) {
        error("Only teachers can look at this page");
    }
    /// Check to see if groups are being used in this exercise
    /// and if so, set $currentgroup to reflect the current group
    $groupmode = groupmode($course, $cm);
    // Groups are being used?
    $currentgroup = setup_and_print_groups($course, $groupmode, "view.php?id={$cm->id}");
    print_heading_with_help(get_string("managingassignment", "exercise"), "managing", "exercise");
    exercise_print_assignment_info($exercise);
    $tabs->names = array("1. " . get_string("phase1", "exercise"), "2. " . get_string("phase2", "exercise", $course->student), "3. " . get_string("phase3", "exercise", $course->student));
    if (isteacheredit($course->id)) {
        $tabs->urls = array("view.php?id={$cm->id}&amp;action=setupassignment", "view.php?id={$cm->id}&amp;action=openexercise", "view.php?id={$cm->id}&amp;action=makeleaguetableavailable");
    } else {
        // don't allow non-editing teacher to change phase
        $tabs->urls = array("view.php?id={$cm->id}", "view.php?id={$cm->id}", "view.php?id={$cm->id}");
    }
    if ($exercise->phase) {
        // phase 1 or more
        $tabs->highlight = $exercise->phase - 1;
    } else {
        $tabs->highlight = 0;
        // phase is zero
    }
    exercise_print_tabbed_heading($tabs);