예제 #1
0
파일: marking.php 프로젝트: sikeze/emarking
$PAGE->navbar->add(get_string('markingreport', 'mod_emarking'));
echo $OUTPUT->header();
echo $OUTPUT->heading($emarking->name);
// Print eMarking tabs.
echo $OUTPUT->tabtree(emarking_tabs($context, $cm, $emarking), "markingreport");
// Get rubric instance.
list($gradingmanager, $gradingmethod, $definition, $rubriccontroller) = emarking_validate_rubric($context, true, true);
// Calculates the number of criteria for this evaluation.
$numcriteria = count($definition->rubric_criteria);
$markingstats = $DB->get_record_sql("\n                SELECT  COUNT(distinct id) AS activities,\n                COUNT(DISTINCT student) AS students,\n                MAX(pages) AS maxpages,\n                MIN(pages) AS minpages,\n                ROUND(AVG(comments), 2) AS pctmarked,\n                SUM(missing) as missing,\n                SUM(submitted) as submitted,\n                SUM(grading) as grading,\n                SUM(graded) as graded,\n                SUM(published) as published,\n                SUM(regrading) as regrading\n                FROM (\n                SELECT  s.student,\n                s.id as submissionid,\n                CASE WHEN d.status < 10 THEN 1 ELSE 0 END AS missing,\n                CASE WHEN d.status = 10 THEN 1 ELSE 0 END AS submitted,\n                CASE WHEN d.status > 10 AND d.status < 20 AND COUNT(DISTINCT c.id) < {$numcriteria} THEN 1 ELSE 0 END AS grading,\n                CASE WHEN d.status > 10 AND d.status < 20 AND COUNT(DISTINCT c.id) = {$numcriteria} THEN 1 ELSE 0 END AS graded,\n                CASE WHEN d.status = 20 THEN 1 ELSE 0 END AS published,\n                CASE WHEN d.status > 20 THEN 1 ELSE 0 END AS regrading,\n                d.timemodified,\n                d.grade,\n                d.generalfeedback,\n                count(distinct p.id) as pages,\n                CASE WHEN 0 = {$numcriteria} THEN 0 ELSE COUNT(DISTINCT c.id) / {$numcriteria} END AS comments,\n                COUNT(distinct r.id) as regrades,\n                nm.course,\n                nm.id,\n                ROUND(SUM(l.score),2) AS score,\n                ROUND(SUM(c.bonus),2) AS bonus,\n                s.sort\n                FROM {emarking}  nm\n                INNER JOIN {emarking_submission}  s ON (nm.id = :emarkingid AND s.emarking = nm.id)\n                INNER JOIN {emarking_page}  p ON (p.submission = s.id)\n                INNER JOIN {emarking_draft}  d ON (d.submissionid = s.id AND d.qualitycontrol=0)\n                LEFT JOIN {emarking_comment}  c on (c.page = p.id AND c.draft = d.id AND c.levelid > 0)\n                LEFT JOIN {gradingform_rubric_levels}  l ON (c.levelid = l.id)\n                LEFT JOIN {emarking_regrade}  r ON (r.draft = d.id AND r.criterion = l.criterionid AND r.accepted = 0)\n                GROUP BY nm.id, s.student\n) as T\n                GROUP by id", array('emarkingid' => $emarking->id));
if (!$markingstats) {
    echo $OUTPUT->notification(get_string('nosubmissionspublished', 'mod_emarking'), 'notifyproblem');
    echo $OUTPUT->footer();
    die;
}
$datatable = "['Status', 'Students'],\n                ['" . emarking_get_string_for_status(EMARKING_STATUS_ABSENT) . "',          {$markingstats->missing}],\n                ['" . emarking_get_string_for_status(EMARKING_STATUS_SUBMITTED) . "',               {$markingstats->submitted}],\n                ['" . emarking_get_string_for_status(EMARKING_STATUS_GRADING) . "',         {$markingstats->grading}],\n                ['" . get_string('statusgradingfinished', 'mod_emarking') . "',               {$markingstats->graded}],\n                ['" . emarking_get_string_for_status(EMARKING_STATUS_PUBLISHED) . "',               {$markingstats->published}],\n                ['" . emarking_get_string_for_status(EMARKING_STATUS_REGRADING) . "',               {$markingstats->regrading}],\n                ";
$totalsubmissions = $markingstats->submitted + $markingstats->grading + $markingstats->graded + $markingstats->published + $markingstats->regrading;
$totalprogress = round($markingstats->graded / $totalsubmissions * 100, 2);
if ($numcriteria == 0 || $totalsubmissions == 0) {
    echo $OUTPUT->notification(get_string('nosubmissionsgraded', 'mod_emarking'), 'notifyproblem');
    echo $OUTPUT->footer();
    die;
}
$markingstatspercriterion = $DB->get_records_sql("\n                SELECT\n                a.id,\n                e.name,\n                d.name,\n                a.description,\n                ROUND(AVG(bb.score),2) as avgscore,\n                ROUND(STDDEV(bb.score),2) as stdevscore,\n                ROUND(MIN(b.score),2) as minscore,\n                ROUND(MAX(b.score),2) as maxscore,\n                ROUND(AVG(ec.bonus),2) AS avgbonus,\n                ROUND(STDDEV(ec.bonus),2) AS stdevbonus,\n                ROUND(MAX(ec.bonus),2) AS maxbonus,\n                ROUND(MIN(ec.bonus),2) AS minbonus,\n                COUNT(distinct s.id) AS submissions,\n                COUNT(distinct ec.id) AS comments,\n                COUNT(distinct r.id) AS regrades\n                FROM {course_modules}  c\n                INNER JOIN {context}  mc ON (c.id = :cmid AND c.id = mc.instanceid)\n                INNER JOIN {grading_areas}  ar ON (mc.id = ar.contextid)\n                INNER JOIN {grading_definitions}  d ON (ar.id = d.areaid)\n                INNER JOIN {gradingform_rubric_criteria}  a ON (d.id = a.definitionid)\n                INNER JOIN {gradingform_rubric_levels}  b ON (a.id = b.criterionid)\n                INNER JOIN {emarking}  e ON (e.id = c.instance)\n                INNER JOIN {emarking_submission}  s ON (s.emarking = e.id)\n                INNER JOIN {emarking_draft}  dr ON (dr.submissionid = s.id AND dr.qualitycontrol=0)\n                INNER JOIN {emarking_page}  p ON (p.submission = s.id)\n                LEFT JOIN {emarking_comment}  ec on (ec.page = p.id AND ec.draft = dr.id AND ec.levelid = b.id)\n                LEFT JOIN {emarking_regrade}  r ON (r.draft = d.id AND r.criterion = a.id)\n                LEFT JOIN {gradingform_rubric_levels}  bb ON (a.id = bb.criterionid AND ec.levelid = bb.id)\n                WHERE dr.status >= 10\n                GROUP BY a.id\n                ORDER BY a.sortorder\n                ", array('cmid' => $cm->id));
$datatablecriteria = "['Criterio', 'Corregido', 'Por recorregir', 'Por corregir'],";
foreach ($markingstatspercriterion as $statpercriterion) {
    $description = trim(preg_replace('/\\s\\s+/', ' ', $statpercriterion->description));
    $description = preg_replace("/\r?\n/", "\\n", addslashes($description));
    $datatablecriteria .= "['{$description}', " . ($statpercriterion->comments - $statpercriterion->regrades) . ", {$statpercriterion->regrades}, " . ($statpercriterion->submissions - $statpercriterion->comments) . "],";
}
$markingstatstotalcontribution = $DB->get_records_sql("\n                SELECT\n                ec.markerid,\n                CONCAT(u.firstname , ' ', u.lastname) AS markername,\n                COUNT(distinct ec.id) AS comments\n                FROM {emarking}  e\n                INNER JOIN {emarking_submission}  s ON (e.id = :emarkingid AND s.emarking = e.id)\n                INNER JOIN {emarking_draft}  d ON (d.submissionid = s.id AND d.qualitycontrol=0)\n                INNER JOIN {emarking_page}  p ON (p.submission = s.id)\n                INNER JOIN {emarking_comment}  ec on (ec.page = p.id AND ec.draft = d.id AND ec.levelid > 0)\n                INNER JOIN {user}  u ON (ec.markerid = u.id)\n                WHERE d.status >= 10\n                GROUP BY ec.markerid\n                ", array('emarkingid' => $emarking->id));
예제 #2
0
$totalcomments = 0;
foreach ($markingstatstotalcontribution as $contribution) {
    $totalcomments += $contribution->comments;
}
$datatabletotalcontributions = "[''," . round(($totalsubmissions * $numcriteria - $totalcomments) * 100 / ($totalsubmissions * $numcriteria), 2) . ",";
foreach ($markingstatstotalcontribution as $contributioner) {
    $datatabletotalcontributioner .= "'" . $contributioner->markername . "', ";
    $datatabletotalcontributions .= round($contributioner->comments * 100 / ($totalsubmissions * $numcriteria), 2) . ", ";
}
$datatabletotalcontributioner .= "]";
$datatabletotalcontributions .= "]";
$datatabletotalcontribution = $datatabletotalcontributioner . ", " . $datatabletotalcontributions;
$markingstatspermarker = $DB->get_recordset_sql("\n\t\tSELECT\n\t\ta.id,\n\t\ta.description,\n\t\tT.*\n\t\tFROM {course_modules} AS c\n\t\tINNER JOIN {context} AS mc ON (c.id = :cmid AND c.id = mc.instanceid)\n\t\tINNER JOIN {grading_areas} AS ar ON (mc.id = ar.contextid)\n\t\tINNER JOIN {grading_definitions} AS d ON (ar.id = d.areaid)\n\t\tINNER JOIN {gradingform_rubric_criteria} AS a ON (d.id = a.definitionid)\n\t\tINNER JOIN {emarking_marker_criterion} AS emc ON (emc.emarking = c.instance)\n\t\tINNER JOIN (\n\t\tSELECT bb.criterionid,\n\t\tec.markerid,\n\t\tu.lastname AS markername,\n\t\tROUND(AVG(bb.score),2) as avgscore,\n\t\tROUND(STDDEV(bb.score),2) as stdevscore,\n\t\tROUND(MIN(bb.score),2) as minscore,\n\t\tROUND(MAX(bb.score),2) as maxscore,\n\t\tROUND(AVG(ec.bonus),2) AS avgbonus,\n\t\tROUND(STDDEV(ec.bonus),2) AS stdevbonus,\n\t\tROUND(MAX(ec.bonus),2) AS maxbonus,\n\t\tROUND(MIN(ec.bonus),2) AS minbonus,\n\t\tCOUNT(distinct ec.id) AS comments,\n\t\tCOUNT(distinct r.id) AS regrades\n\t\tFROM\n\t\t{emarking} AS e\n\t\tINNER JOIN {emarking_submission} AS s ON (e.id = :emarkingid AND s.emarking = e.id)\n\t\tINNER JOIN {emarking_page} AS p ON (p.submission = s.id)\n\t\tLEFT JOIN {emarking_comment} as ec on (ec.page = p.id)\n\t\tLEFT JOIN {gradingform_rubric_levels} AS bb ON (ec.levelid = bb.id)\n\t\tLEFT JOIN {emarking_regrade} as r ON (r.submission = s.id AND r.criterion = bb.criterionid)\n\t\tLEFT JOIN {user} as u ON (ec.markerid = u.id)\n\t\tWHERE s.status >= 10\n\t\tGROUP BY ec.markerid, bb.criterionid) AS T\n\t\tON (a.id = T.criterionid AND emc.marker = T.markerid)\n\t\tGROUP BY T.markerid, a.id\n\t\t", array('cmid' => $cm->id, 'emarkingid' => $emarking->id));
$datamarkersavailable = false;
$datatablemarkers = "";
$datatablecontribution = "['Corrector', '" . emarking_get_string_for_status(EMARKING_STATUS_RESPONDED) . "', '" . emarking_get_string_for_status(EMARKING_STATUS_REGRADING) . "', '" . emarking_get_string_for_status(EMARKING_STATUS_GRADING) . "'],";
foreach ($markingstatspermarker as $permarker) {
    $description = trim(preg_replace('/\\s\\s+/', ' ', $permarker->description));
    $datatablemarkers .= "['{$permarker->markername} {$description}',\n\t" . $permarker->minscore . ",\n\t" . ($permarker->avgscore - $permarker->stdevscore) . ",\n\t" . ($permarker->avgscore + $permarker->stdevscore) . ",\n\t" . $permarker->maxscore . ",\n\t],";
    $datatablecontribution .= "['{$permarker->markername} {$description}',\n\t\t\t\t\t\t\t\t" . round(($permarker->comments - $permarker->regrades) * 100 / $totalsubmissions, 2) . ",\n\t\t\t\t\t\t\t\t" . round($permarker->regrades * 100 / $totalsubmissions, 2) . ",\n\t\t\t\t\t\t\t\t" . round(($totalsubmissions - $permarker->comments) * 100 / $totalsubmissions, 2) . "\n\t],";
    $datamarkersavailable = true;
}
$progress = round($totalcomments / ($totalsubmissions * $numcriteria) * 100, 2);
echo $OUTPUT->heading(get_string('marking', 'mod_emarking') . " : " . $progress . "% (" . $totalprogress . "% publicadas)", 3);
//$colors = '"#4D4D4D","#5DA5DA","#FAA43A","#60BD68","#F17CB0","#B2912F","#B276B2","#DECF3F","#F15854","#009987","#008270","#006D66","#006056","#008272","#006B5B","#005951","#00493F","#004F42","#004438","#BAEAD6","#A0E5CE","#5EDDC1","#00997C","#007C66","#006854","#9BDBC1","#8EE2BC","#7AD1B5","#54D8A8","#00B28C"';
$reportsdir = $CFG->wwwroot . '/mod/emarking/reports';
?>

	 <link rel="stylesheet" type="text/css"  href= "<?php 
echo $reportsdir;
?>
예제 #3
0
/**
 * Gets the icon used the a submission status
 *
 * @param int $status
 *            the submission status
 * @param boolean $prefix
 *            if the icon should include the status description as prefix
 * @param int $pctmarked
 *            if a percentage of marking for the draft is given, when 100% replaces grading for ready for publishing
 * @return string the icon HTML
 */
function emarking_get_draft_status_icon($status, $prefix = false, $pctmarked = 0)
{
    global $OUTPUT;
    $html = '';
    switch ($status) {
        case EMARKING_STATUS_MISSING:
            $html = $OUTPUT->pix_icon('i/warning', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_ABSENT:
            $html = $OUTPUT->pix_icon('t/block', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_SUBMITTED:
            $html = $OUTPUT->pix_icon('i/user', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_GRADING:
            if ($pctmarked > 0) {
                $html = $OUTPUT->pix_icon('i/grade_partiallycorrect', emarking_get_string_for_status($status, $pctmarked));
            } else {
                $html = $OUTPUT->pix_icon('i/grade_partiallycorrect', emarking_get_string_for_status($status));
            }
            break;
        case EMARKING_STATUS_PUBLISHED:
            $html = $OUTPUT->pix_icon('i/grade_correct', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_REGRADING:
            $html = $OUTPUT->pix_icon('i/flagged', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_REGRADING_RESPONDED:
            $html = $OUTPUT->pix_icon('i/unflagged', emarking_get_string_for_status($status));
            break;
        case EMARKING_STATUS_ACCEPTED:
            $html = $OUTPUT->pix_icon('t/locked', emarking_get_string_for_status($status));
            break;
        default:
            $html = $OUTPUT->pix_icon('t/block', emarking_get_string_for_status(EMARKING_STATUS_ABSENT));
            break;
    }
    if ($prefix) {
        $html = emarking_get_string_for_status($status, $pctmarked) . "&nbsp;" . $html;
    }
    return $html;
}
예제 #4
0
    $tsort = $showpages->get_sql_sort();
}
// Get submissions with extra info to show
$sql = "\nSELECT  {$firstselect}\n\t\tIFNULL(NM.groupid,0) as groupid, \n\t\tIFNULL(NM.realsubmissionid,0) as realsubmission,\n\t\tIFNULL(NM.status,0) as status,\n\t\tIFNULL(NM.pages,0) as pages, \n\t\tIFNULL(NM.comments,0) as comments,\n\t\tCASE WHEN 0 = {$numcriteria} THEN 0 ELSE ROUND( IFNULL(NM.comments,0) / {$numcriteria} * 100, 0) END as pctmarked,\n\t\tCASE WHEN 0 = {$numcriteriauser} THEN 0 ELSE ROUND( IFNULL(NM.commentsassigned,0) / {$numcriteriauser} * 100, 0) END as pctmarkeduser,\n\t\tIFNULL(NM.grade,0) as grade, \n\t\tIFNULL(NM.score,0) as score, \n\t\tIFNULL(NM.bonus,0) as bonus, \n\t\tIFNULL(NM.regrades,0) as regrades, \n\t\tIFNULL(NM.generalfeedback,'') as feedback,\n\t\tIFNULL(NM.timemodified, 0) as timemodified,\n\t\tgi.grademax as grademax,\n\t\tgi.grademin as grademin,\n\t\tNM.sort,\n\t\tNM.commentsassignedids,\n\t\tNM.criteriaids,\n\t\tNM.criteriascores\nFROM {user_enrolments} ue\nINNER JOIN {enrol} e ON (e.id = ue.enrolid AND e.courseid = ?)\nINNER JOIN {context} c ON (c.contextlevel = 50 AND c.instanceid = e.courseid)\nINNER JOIN {role_assignments} ra ON (ra.contextid = c.id AND ra.userid = ue.userid)\nINNER JOIN {role} as r on (r.id = ra.roleid AND r.shortname = 'student')\nINNER JOIN {user} u ON (ue.userid = u.id)\nLEFT JOIN (\n\tSELECT s.student, \n\t\ts.id as submissionid, \n\t\ts.submissionid as realsubmissionid, \n\t\ts.groupid as groupid,\n\t\ts.status, \n\t\ts.timemodified,\n\t\ts.grade,\n\t\ts.generalfeedback, \n\t\tcount(distinct p.id) as pages,\n\t\tcount(distinct c.id) as comments,\n\t\tcount(distinct r.id) as regrades,\n\t\tcount(distinct mc.id) as commentsassigned,\n\t\tIFNULL(GROUP_CONCAT(mc.id),'') as commentsassignedids,\n\t\tIFNULL(GROUP_CONCAT(l.criterionid),'') as criteriaids,\n\t\tIFNULL(GROUP_CONCAT(l.score + c.bonus),'') as criteriascores,\n\t\tnm.course, \n\t\tnm.id,\n\t\tround(sum(l.score),2) as score,\n\t\tround(sum(c.bonus),2) as bonus,\n\t\ts.sort\n\tFROM {emarking} AS nm\n\t{$submissiondraft}\n\tLEFT JOIN {emarking_comment} as c on (c.page = p.id AND c.levelid > 0)\n\tLEFT JOIN {gradingform_rubric_levels} as l ON (c.levelid = l.id)\n\tLEFT JOIN {emarking_regrade} as r ON (r.submission = s.id AND r.criterion = l.criterionid AND r.accepted = 0)\n\tLEFT JOIN {emarking_marker_criterion} AS mc ON (mc.criterion = l.criterionid AND mc.emarking = nm.id AND mc.marker=?)\n\t{$groupbydraft}\n) AS NM ON (u.id = NM.student AND e.courseid = NM.course)\nLEFT JOIN {grade_items} AS gi ON (gi.iteminstance = NM.id AND gi.itemmodule = 'emarking' AND gi.itemtype = 'mod')\n{$userfilter}\n{$orderby}";
//die(print_r($sql));
// Run the query on the database
$emarkingpages = $DB->get_records_sql($sql, array($course->id, $emarking->id, $USER->id), $page * $perpage, $perpage);
$unpublishedsubmissions = 0;
// Prepare data for the table
foreach ($emarkingpages as $pageinfo) {
    // Student info
    $profileurl = new moodle_url('/user/view.php', array('id' => $pageinfo->id, 'course' => $course->id));
    $userinfo = $emarking->anonymous ? get_string('anonymousstudent', 'mod_emarking') : $OUTPUT->user_picture($pageinfo) . '&nbsp;<a href="' . $profileurl . '">' . $pageinfo->firstname . ' ' . $pageinfo->lastname . '</a>';
    // Submission status
    $pages = intval($pageinfo->pages);
    $status = emarking_get_string_for_status($pageinfo->status);
    // Add warning icon if there are missing pages in submission
    if ($emarking->totalpages > 0 && $emarking->totalpages > $pages) {
        $status .= '<br/>' . $OUTPUT->pix_icon('i/risk_xss', get_string('missingpages', 'mod_emarking'));
    }
    // Completion matrix
    $matrix = '';
    $markedcriteria = explode(",", $pageinfo->criteriaids);
    $markedcriteriascores = explode(",", $pageinfo->criteriascores);
    if (count($markedcriteria) > 0 && $numcriteria > 0) {
        $matrix = "<div id='sub-{$pageinfo->submission}' class='modal hide fade' aria-hidden='true' style='display:none;'>\n\t<div class='modal-header'>\n\t\t<button type='button' class='close' data-dismiss='modal' aria-hidden='true'>�</button>\n\t\t<h3>{$emarking->name}</h3>\n\t\t<h4>{$userinfo}</h4>\n\t\t</div><div class='modal-body'><table width='100%'>";
        $matrix .= "<tr><th>" . get_string('criterion', 'mod_emarking') . "</th><th style='text-align:center'>" . get_string('corrected', 'mod_emarking') . "</th></tr>";
        foreach ($rubriccriteria->rubric_criteria as $criterion) {
            $matrix .= "<tr><td>" . $criterion['description'] . "</td><td style='text-align:center'>";
            $key = array_search($criterion['id'], $markedcriteria);
            if ($key !== false) {