* @subpackage workshopplus * @copyright 2009 David Mudrak <*****@*****.**> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once dirname(__FILE__) . '/locallib.php'; $cmid = required_param('cmid', PARAM_INT); $cm = get_coursemodule_from_id('workshopplus', $cmid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); require_login($course, false, $cm); require_capability('mod/workshopplus:editdimensions', $PAGE->context); $workshopplus = $DB->get_record('workshopplus', array('id' => $cm->instance), '*', MUST_EXIST); $workshopplus = new workshopplus($workshopplus, $cm, $course); // todo: check if there already is some assessment done and do not allowed the change of the form // once somebody already used it to assess $PAGE->set_url($workshopplus->editform_url()); $PAGE->set_title($workshopplus->name); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('editingassessmentform', 'workshopplus')); // load the grading strategy logic $strategy = $workshopplus->grading_strategy_instance(); // load the form to edit the grading strategy dimensions $mform = $strategy->get_edit_strategy_form($PAGE->url); if ($mform->is_cancelled()) { redirect($workshopplus->view_url()); } elseif ($data = $mform->get_data()) { if ($data->workshopplusid != $workshopplus->id or $data->strategy != $workshopplus->strategy) { // this may happen if someone changes the workshopplus setting while the user had the // editing form opened throw new invalid_parameter_exception('Invalid workshopplus ID or the grading strategy has changed.'); }
/** * Prepare an individual workshopplus plan for the given user. * * @param workshopplus $workshopplus instance * @param int $userid whom the plan is prepared for */ public function __construct(workshopplus $workshopplus, $userid) { global $DB; $this->workshopplus = $workshopplus; $this->userid = $userid; //--------------------------------------------------------- // * SETUP | submission | assessment | evaluation | closed //--------------------------------------------------------- $phase = new stdclass(); $phase->title = get_string('phasesetup', 'workshopplus'); $phase->tasks = array(); if (has_capability('moodle/course:manageactivities', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('taskintro', 'workshopplus'); $task->link = $workshopplus->updatemod_url(); $task->completed = !(trim($workshopplus->intro) == ''); $phase->tasks['intro'] = $task; } if (has_capability('moodle/course:manageactivities', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('taskinstructauthors', 'workshopplus'); $task->link = $workshopplus->updatemod_url(); $task->completed = !(trim($workshopplus->instructauthors) == ''); $phase->tasks['instructauthors'] = $task; } if (has_capability('mod/workshopplus:editdimensions', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('editassessmentform', 'workshopplus'); $task->link = $workshopplus->editform_url(); if ($workshopplus->grading_strategy_instance()->form_ready()) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_SETUP) { $task->completed = false; } $phase->tasks['editform'] = $task; } if ($workshopplus->useexamples and has_capability('mod/workshopplus:manageexamples', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('prepareexamples', 'workshopplus'); if ($DB->count_records('workshopplus_submissions', array('example' => 1, 'workshopplusid' => $workshopplus->id)) > 0) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_SETUP) { $task->completed = false; } $phase->tasks['prepareexamples'] = $task; } if (empty($phase->tasks) and $workshopplus->phase == workshopplus::PHASE_SETUP) { // if we are in the setup phase and there is no task (typical for students), let us // display some explanation what is going on $task = new stdclass(); $task->title = get_string('undersetup', 'workshopplus'); $task->completed = 'info'; $phase->tasks['setupinfo'] = $task; } $this->phases[workshopplus::PHASE_SETUP] = $phase; //--------------------------------------------------------- // setup | * SUBMISSION | assessment | evaluation | closed //--------------------------------------------------------- $phase = new stdclass(); $phase->title = get_string('phasesubmission', 'workshopplus'); $phase->tasks = array(); if (has_capability('moodle/course:manageactivities', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('taskinstructreviewers', 'workshopplus'); $task->link = $workshopplus->updatemod_url(); if (trim($workshopplus->instructreviewers)) { $task->completed = true; } elseif ($workshopplus->phase >= workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } $phase->tasks['instructreviewers'] = $task; } if ($workshopplus->useexamples and $workshopplus->examplesmode == workshopplus::EXAMPLES_BEFORE_SUBMISSION and has_capability('mod/workshopplus:submit', $workshopplus->context, $userid, false) and !has_capability('mod/workshopplus:manageexamples', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('exampleassesstask', 'workshopplus'); $examples = $this->get_examples(); $a = new stdclass(); $a->expected = count($examples); $a->assessed = 0; foreach ($examples as $exampleid => $example) { if (!is_null($example->grade)) { $a->assessed++; } } $task->details = get_string('exampleassesstaskdetails', 'workshopplus', $a); if ($a->assessed == $a->expected) { $task->completed = true; } elseif ($workshopplus->phase >= workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } $phase->tasks['examples'] = $task; } if (has_capability('mod/workshopplus:submit', $workshopplus->context, $userid, false)) { $task = new stdclass(); $task->title = get_string('tasksubmit', 'workshopplus'); $task->link = $workshopplus->submission_url(); if ($DB->record_exists('workshopplus_submissions', array('workshopplusid' => $workshopplus->id, 'example' => 0, 'authorid' => $userid))) { $task->completed = true; } elseif ($workshopplus->phase >= workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } else { $task->completed = null; // still has a chance to submit } $phase->tasks['submit'] = $task; } if (has_capability('mod/workshopplus:allocate', $workshopplus->context, $userid)) { if ($workshopplus->phaseswitchassessment) { $task = new stdClass(); $allocator = $DB->get_record('workshopplusallocation_scheduled', array('workshopplusid' => $workshopplus->id)); if (empty($allocator)) { $task->completed = false; } else { if ($allocator->enabled and is_null($allocator->resultstatus)) { $task->completed = true; } else { if ($workshopplus->submissionend > time()) { $task->completed = null; } else { $task->completed = false; } } } $task->title = get_string('setup', 'workshopplusallocation_scheduled'); $task->link = $workshopplus->allocation_url('scheduled'); $phase->tasks['allocatescheduled'] = $task; } $task = new stdclass(); $task->title = get_string('allocate', 'workshopplus'); $task->link = $workshopplus->allocation_url(); $numofauthors = $workshopplus->count_potential_authors(false); $numofsubmissions = $DB->count_records('workshopplus_submissions', array('workshopplusid' => $workshopplus->id, 'example' => 0)); $sql = 'SELECT COUNT(s.id) AS nonallocated FROM {workshopplus_submissions} s LEFT JOIN {workshopplus_assessments} a ON (a.submissionid=s.id) WHERE s.workshopplusid = :workshopplusid AND s.example=0 AND a.submissionid IS NULL'; $params['workshopplusid'] = $workshopplus->id; $numnonallocated = $DB->count_records_sql($sql, $params); if ($numofsubmissions == 0) { $task->completed = null; } elseif ($numnonallocated == 0) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_SUBMISSION) { $task->completed = false; } else { $task->completed = null; // still has a chance to allocate } $a = new stdclass(); $a->expected = $numofauthors; $a->submitted = $numofsubmissions; $a->allocate = $numnonallocated; $task->details = get_string('allocatedetails', 'workshopplus', $a); unset($a); $phase->tasks['allocate'] = $task; if ($numofsubmissions < $numofauthors and $workshopplus->phase >= workshopplus::PHASE_SUBMISSION) { $task = new stdclass(); $task->title = get_string('someuserswosubmission', 'workshopplus'); $task->completed = 'info'; $phase->tasks['allocateinfo'] = $task; } } if ($workshopplus->submissionstart) { $task = new stdclass(); $task->title = get_string('submissionstartdatetime', 'workshopplus', workshopplus::timestamp_formats($workshopplus->submissionstart)); $task->completed = 'info'; $phase->tasks['submissionstartdatetime'] = $task; } if ($workshopplus->submissionend) { $task = new stdclass(); $task->title = get_string('submissionenddatetime', 'workshopplus', workshopplus::timestamp_formats($workshopplus->submissionend)); $task->completed = 'info'; $phase->tasks['submissionenddatetime'] = $task; } if ($workshopplus->submissionstart < time() and $workshopplus->latesubmissions) { $task = new stdclass(); $task->title = get_string('latesubmissionsallowed', 'workshopplus'); $task->completed = 'info'; $phase->tasks['latesubmissionsallowed'] = $task; } if (isset($phase->tasks['submissionstartdatetime']) or isset($phase->tasks['submissionenddatetime'])) { if (has_capability('mod/workshopplus:ignoredeadlines', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('deadlinesignored', 'workshopplus'); $task->completed = 'info'; $phase->tasks['deadlinesignored'] = $task; } } $this->phases[workshopplus::PHASE_SUBMISSION] = $phase; //--------------------------------------------------------- // setup | submission | * ASSESSMENT | evaluation | closed //--------------------------------------------------------- $phase = new stdclass(); $phase->title = get_string('phaseassessment', 'workshopplus'); $phase->tasks = array(); $phase->isreviewer = has_capability('mod/workshopplus:peerassess', $workshopplus->context, $userid); if ($workshopplus->phase == workshopplus::PHASE_SUBMISSION and $workshopplus->phaseswitchassessment and has_capability('mod/workshopplus:switchphase', $workshopplus->context, $userid)) { $task = new stdClass(); $task->title = get_string('switchphase30auto', 'mod_workshopplus', workshopplus::timestamp_formats($workshopplus->submissionend)); $task->completed = 'info'; $phase->tasks['autoswitchinfo'] = $task; } if ($workshopplus->useexamples and $workshopplus->examplesmode == workshopplus::EXAMPLES_BEFORE_ASSESSMENT and $phase->isreviewer and !has_capability('mod/workshopplus:manageexamples', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('exampleassesstask', 'workshopplus'); $examples = $workshopplus->get_examples_for_reviewer($userid); $a = new stdclass(); $a->expected = count($examples); $a->assessed = 0; foreach ($examples as $exampleid => $example) { if (!is_null($example->grade)) { $a->assessed++; } } $task->details = get_string('exampleassesstaskdetails', 'workshopplus', $a); if ($a->assessed == $a->expected) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } $phase->tasks['examples'] = $task; } if (empty($phase->tasks['examples']) or !empty($phase->tasks['examples']->completed)) { $phase->assessments = $workshopplus->get_assessments_by_reviewer($userid); $numofpeers = 0; // number of allocated peer-assessments $numofpeerstodo = 0; // number of peer-assessments to do $numofself = 0; // number of allocated self-assessments - should be 0 or 1 $numofselftodo = 0; // number of self-assessments to do - should be 0 or 1 foreach ($phase->assessments as $a) { if ($a->authorid == $userid) { $numofself++; if (is_null($a->grade)) { $numofselftodo++; } } else { $numofpeers++; if (is_null($a->grade)) { $numofpeerstodo++; } } } unset($a); if ($numofpeers) { $task = new stdclass(); if ($numofpeerstodo == 0) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } $a = new stdclass(); $a->total = $numofpeers; $a->todo = $numofpeerstodo; $task->title = get_string('taskassesspeers', 'workshopplus'); $task->details = get_string('taskassesspeersdetails', 'workshopplus', $a); unset($a); $phase->tasks['assesspeers'] = $task; } if ($workshopplus->useselfassessment and $numofself) { $task = new stdclass(); if ($numofselftodo == 0) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_ASSESSMENT) { $task->completed = false; } $task->title = get_string('taskassessself', 'workshopplus'); $phase->tasks['assessself'] = $task; } } if ($workshopplus->assessmentstart) { $task = new stdclass(); $task->title = get_string('assessmentstartdatetime', 'workshopplus', workshopplus::timestamp_formats($workshopplus->assessmentstart)); $task->completed = 'info'; $phase->tasks['assessmentstartdatetime'] = $task; } if ($workshopplus->assessmentend) { $task = new stdclass(); $task->title = get_string('assessmentenddatetime', 'workshopplus', workshopplus::timestamp_formats($workshopplus->assessmentend)); $task->completed = 'info'; $phase->tasks['assessmentenddatetime'] = $task; } if (isset($phase->tasks['assessmentstartdatetime']) or isset($phase->tasks['assessmentenddatetime'])) { if (has_capability('mod/workshopplus:ignoredeadlines', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('deadlinesignored', 'workshopplus'); $task->completed = 'info'; $phase->tasks['deadlinesignored'] = $task; } } $this->phases[workshopplus::PHASE_ASSESSMENT] = $phase; //--------------------------------------------------------- // setup | submission | assessment | * EVALUATION | closed //--------------------------------------------------------- $phase = new stdclass(); $phase->title = get_string('phaseevaluation', 'workshopplus'); $phase->tasks = array(); if (has_capability('mod/workshopplus:overridegrades', $workshopplus->context)) { $expected = $workshopplus->count_potential_authors(false); $calculated = $DB->count_records_select('workshopplus_submissions', 'workshopplusid = ? AND (grade IS NOT NULL OR gradeover IS NOT NULL)', array($workshopplus->id)); $task = new stdclass(); $task->title = get_string('calculatesubmissiongrades', 'workshopplus'); $a = new stdclass(); $a->expected = $expected; $a->calculated = $calculated; $task->details = get_string('calculatesubmissiongradesdetails', 'workshopplus', $a); if ($calculated >= $expected) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_EVALUATION) { $task->completed = false; } $phase->tasks['calculatesubmissiongrade'] = $task; $expected = $workshopplus->count_potential_reviewers(false); $calculated = $DB->count_records_select('workshopplus_aggregations', 'workshopplusid = ? AND gradinggrade IS NOT NULL', array($workshopplus->id)); $task = new stdclass(); $task->title = get_string('calculategradinggrades', 'workshopplus'); $a = new stdclass(); $a->expected = $expected; $a->calculated = $calculated; $task->details = get_string('calculategradinggradesdetails', 'workshopplus', $a); if ($calculated >= $expected) { $task->completed = true; } elseif ($workshopplus->phase > workshopplus::PHASE_EVALUATION) { $task->completed = false; } $phase->tasks['calculategradinggrade'] = $task; } elseif ($workshopplus->phase == workshopplus::PHASE_EVALUATION) { $task = new stdclass(); $task->title = get_string('evaluategradeswait', 'workshopplus'); $task->completed = 'info'; $phase->tasks['evaluateinfo'] = $task; } if (has_capability('moodle/course:manageactivities', $workshopplus->context, $userid)) { $task = new stdclass(); $task->title = get_string('taskconclusion', 'workshopplus'); $task->link = $workshopplus->updatemod_url(); if (trim($workshopplus->conclusion)) { $task->completed = true; } elseif ($workshopplus->phase >= workshopplus::PHASE_EVALUATION) { $task->completed = false; } $phase->tasks['conclusion'] = $task; } $this->phases[workshopplus::PHASE_EVALUATION] = $phase; //--------------------------------------------------------- // setup | submission | assessment | evaluation | * CLOSED //--------------------------------------------------------- $phase = new stdclass(); $phase->title = get_string('phaseclosed', 'workshopplus'); $phase->tasks = array(); $this->phases[workshopplus::PHASE_CLOSED] = $phase; // Polish data, set default values if not done explicitly foreach ($this->phases as $phasecode => $phase) { $phase->title = isset($phase->title) ? $phase->title : ''; $phase->tasks = isset($phase->tasks) ? $phase->tasks : array(); if ($phasecode == $workshopplus->phase) { $phase->active = true; } else { $phase->active = false; } if (!isset($phase->actions)) { $phase->actions = array(); } foreach ($phase->tasks as $taskcode => $task) { $task->title = isset($task->title) ? $task->title : ''; $task->link = isset($task->link) ? $task->link : null; $task->details = isset($task->details) ? $task->details : ''; $task->completed = isset($task->completed) ? $task->completed : null; } } // Add phase switching actions if (has_capability('mod/workshopplus:switchphase', $workshopplus->context, $userid)) { foreach ($this->phases as $phasecode => $phase) { if (!$phase->active) { $action = new stdclass(); $action->type = 'switchphase'; $action->url = $workshopplus->switchphase_url($phasecode); $phase->actions[] = $action; } } } }
* @copyright 2009 David Mudrak <*****@*****.**> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once dirname(__FILE__) . '/locallib.php'; $cmid = required_param('cmid', PARAM_INT); $cm = get_coursemodule_from_id('workshopplus', $cmid, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $workshopplus = $DB->get_record('workshopplus', array('id' => $cm->instance), '*', MUST_EXIST); require_login($course, false, $cm); if (isguestuser()) { print_error('guestsarenotallowed'); } $workshopplus = new workshopplus($workshopplus, $cm, $course); require_capability('mod/workshopplus:editdimensions', $workshopplus->context); $PAGE->set_url($workshopplus->previewform_url()); $PAGE->set_title($workshopplus->name); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('editingassessmentform', 'workshopplus'), $workshopplus->editform_url(), navigation_node::TYPE_CUSTOM); $PAGE->navbar->add(get_string('previewassessmentform', 'workshopplus')); $currenttab = 'editform'; // load the grading strategy logic $strategy = $workshopplus->grading_strategy_instance(); // load the assessment form $mform = $strategy->get_assessment_form($workshopplus->editform_url(), 'preview'); // output starts here echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($workshopplus->name)); echo $OUTPUT->heading(get_string('assessmentform', 'workshopplus'), 3); $mform->display(); echo $OUTPUT->footer();