/** * Regular jobs to execute via cron * * @return boolean true on success, false otherwise */ function workshopplus_cron() { global $CFG, $DB; $now = time(); mtrace(' processing workshopplus subplugins ...'); cron_execute_plugin_type('workshopplusallocation', 'workshopplus allocation methods'); // now when the scheduled allocator had a chance to do its job, check if there // are some workshoppluss to switch into the assessment phase $workshoppluss = $DB->get_records_select("workshopplus", "phase = 20 AND phaseswitchassessment = 1 AND submissionend > 0 AND submissionend < ?", array($now)); if (!empty($workshoppluss)) { mtrace('Processing automatic assessment phase switch in ' . count($workshoppluss) . ' workshopplus(s) ... ', ''); require_once $CFG->dirroot . '/mod/workshopplus/locallib.php'; foreach ($workshoppluss as $workshopplus) { $cm = get_coursemodule_from_instance('workshopplus', $workshopplus->id, $workshopplus->course, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); $workshopplus = new workshopplus($workshopplus, $cm, $course); $workshopplus->switch_phase(workshopplus::PHASE_ASSESSMENT); $workshopplus->log('update switch phase', $workshopplus->view_url(), $workshopplus->phase); // disable the automatic switching now so that it is not executed again by accident // if the teacher changes the phase back to the submission one $DB->set_field('workshopplus', 'phaseswitchassessment', 0, array('id' => $workshopplus->id)); // todo inform the teachers } mtrace('done'); } return true; }
$phase = required_param('phase', PARAM_INT); // the code of the new phase $confirm = optional_param('confirm', false, PARAM_BOOL); // confirmation $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); $workshopplus = new workshopplus($workshopplus, $cm, $course); $PAGE->set_url($workshopplus->switchphase_url($phase), array('cmid' => $cmid, 'phase' => $phase)); require_login($course, false, $cm); require_capability('mod/workshopplus:switchphase', $PAGE->context); if ($confirm) { if (!confirm_sesskey()) { throw new moodle_exception('confirmsesskeybad'); } if (!$workshopplus->switch_phase($phase)) { print_error('errorswitchingphase', 'workshopplus', $workshopplus->view_url()); } $workshopplus->log('update switch phase', $workshopplus->view_url(), $workshopplus->phase); redirect($workshopplus->view_url()); } $PAGE->set_title($workshopplus->name); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('switchingphase', 'workshopplus')); // // Output starts here // echo $OUTPUT->header(); echo $OUTPUT->heading(format_string($workshopplus->name)); echo $OUTPUT->confirm(get_string('switchphase' . $phase . 'info', 'workshopplus'), new moodle_url($PAGE->url, array('confirm' => 1)), $workshopplus->view_url()); echo $OUTPUT->footer();
//set edition field if (!$canallocate and !$currentgroupid) { $edit = false; } ////////////end by Morteza if ($submission->id and ($ownsubmission or $canviewall or $isreviewer)) { // ok you can go } elseif ($submission->id and $ispublished) { // ok you can go $seenaspublished = true; } elseif (is_null($submission->id) and $cansubmit) { // ok you can go } elseif ($grouphassubmitted and $groupsubmission->id == $id) { // ok you can go } else { print_error('nopermissions', 'error', $workshopplus->view_url(), 'view or create submission'); } if ($assess and $submission->id and !$isreviewer and $canallocate and $workshopplus->assessing_allowed($USER->id)) { require_sesskey(); $assessmentid = $workshopplus->add_allocation($submission, $USER->id); redirect($workshopplus->assess_url($assessmentid)); } if ($edit) { require_once dirname(__FILE__) . '/submission_form.php'; $maxfiles = $workshopplus->nattachments; $maxbytes = $workshopplus->maxbytes; $contentopts = array('trusttext' => true, 'subdirs' => false, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes, 'context' => $workshopplus->context, 'return_types' => FILE_INTERNAL | FILE_EXTERNAL); $attachmentopts = array('subdirs' => true, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes, 'return_types' => FILE_INTERNAL); $submission = file_prepare_standard_editor($submission, 'content', $contentopts, $workshopplus->context, 'mod_workshopplus', 'submission_content', $submission->id); $submission = file_prepare_standard_filemanager($submission, 'attachment', $attachmentopts, $workshopplus->context, 'mod_workshopplus', 'submission_attachment', $submission->id); $mform = new workshopplus_submission_form($PAGE->url, array('current' => $submission, 'workshopplus' => $workshopplus, 'contentopts' => $contentopts, 'attachmentopts' => $attachmentopts));
* @package mod * @subpackage workshopplus * @copyright 2010 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'; $id = required_param('id', PARAM_INT); // course_module ID $tool = required_param('tool', PARAM_ALPHA); $cm = get_coursemodule_from_id('workshopplus', $id, 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); $workshopplus = new workshopplus($workshopplus, $cm, $course); require_sesskey(); switch ($tool) { case 'clearaggregatedgrades': require_capability('mod/workshopplus:overridegrades', $workshopplus->context); $workshopplus->log('update clear aggregated grades'); $workshopplus->clear_submission_grades(); $workshopplus->clear_grading_grades(); break; case 'clearassessments': require_capability('mod/workshopplus:overridegrades', $workshopplus->context); $workshopplus->log('update clear assessments'); $workshopplus->clear_assessments(); break; } redirect($workshopplus->view_url());
if (groups_get_activity_groupmode($workshopplus->cm) == SEPARATEGROUPS) { // user must have accessallgroups or share at least one group with the submission author if (!has_capability('moodle/site:accessallgroups', $workshopplus->context)) { $usersgroups = groups_get_activity_allowed_groups($workshopplus->cm); $authorsgroups = groups_get_all_groups($workshopplus->course->id, $submission->authorid, $workshopplus->cm->groupingid, 'g.id'); $sharedgroups = array_intersect_key($usersgroups, $authorsgroups); if (empty($sharedgroups)) { $canviewallsubmissions = false; } } } } if ($isreviewer or $isauthor or $canviewallassessments and $canviewallsubmissions) { // such a user can continue } else { print_error('nopermissions', 'error', $workshopplus->view_url(), 'view this assessment'); } if ($isauthor and !$isreviewer and !$canviewallassessments and $workshopplus->phase != workshopplus::PHASE_CLOSED) { // authors can see assessments of their work at the end of workshopplus only print_error('nopermissions', 'error', $workshopplus->view_url(), 'view assessment of own work before workshopplus is closed'); } // only the reviewer is allowed to modify the assessment if ($isreviewer and $workshopplus->assessing_allowed($USER->id)) { $assessmenteditable = true; } else { $assessmenteditable = false; } // check that all required examples have been assessed by the user if ($assessmenteditable and $workshopplus->useexamples and $workshopplus->examplesmode == workshopplus::EXAMPLES_BEFORE_ASSESSMENT and !has_capability('mod/workshopplus:manageexamples', $workshopplus->context)) { // the reviewer must have submitted their own submission $reviewersubmission = $workshopplus->get_submission_by_author($assessment->reviewerid);
require_login($course, false, $cm); if (isguestuser()) { print_error('guestsarenotallowed'); } $workshopplus = new workshopplus($workshopplus, $cm, $course); $PAGE->set_url($workshopplus->exassess_url($assessment->id)); $PAGE->set_title($workshopplus->name); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('assessingexample', 'workshopplus')); $currenttab = 'assessment'; $canmanage = has_capability('mod/workshopplus:manageexamples', $workshopplus->context); $isreviewer = $USER->id == $assessment->reviewerid; if ($isreviewer or $canmanage) { // such a user can continue } else { print_error('nopermissions', 'error', $workshopplus->view_url(), 'assess example submission'); } // only the reviewer is allowed to modify the assessment if ($canmanage and $assessment->weight == 1 or $isreviewer and $workshopplus->assessing_examples_allowed()) { $assessmenteditable = true; } else { $assessmenteditable = false; } // load the grading strategy logic $strategy = $workshopplus->grading_strategy_instance(); // load the assessment form and process the submitted data eventually $mform = $strategy->get_assessment_form($PAGE->url, 'assessment', $assessment, $assessmenteditable); // Set data managed by the workshopplus core, subplugins set their own data themselves. $currentdata = (object) array('feedbackauthor' => $assessment->feedbackauthor, 'feedbackauthorformat' => $assessment->feedbackauthorformat); if ($assessmenteditable and $workshopplus->overallfeedbackmode) { $currentdata = file_prepare_standard_editor($currentdata, 'feedbackauthor', $workshopplus->overall_feedback_content_options(), $workshopplus->context, 'mod_workshopplus', 'overallfeedback_content', $assessment->id);
require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; require_once dirname(__FILE__) . '/locallib.php'; $cmid = required_param('cmid', PARAM_INT); // course module $confirm = optional_param('confirm', false, PARAM_BOOL); // confirmation // the params to be re-passed to view.php $page = optional_param('page', 0, PARAM_INT); $sortby = optional_param('sortby', 'lastname', PARAM_ALPHA); $sorthow = optional_param('sorthow', 'ASC', PARAM_ALPHA); $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); $workshopplus = new workshopplus($workshopplus, $cm, $course); $PAGE->set_url($workshopplus->aggregate_url(), compact('confirm', 'page', 'sortby', 'sorthow')); require_login($course, false, $cm); require_capability('mod/workshopplus:overridegrades', $PAGE->context); // load and init the grading evaluator $evaluator = $workshopplus->grading_evaluation_instance(); $settingsform = $evaluator->get_settings_form($PAGE->url); if ($settingsdata = $settingsform->get_data()) { $workshopplus->aggregate_submission_grades(); // updates 'grade' in {workshopplus_submissions} $evaluator->update_grading_grades($settingsdata); // updates 'gradinggrade' in {workshopplus_assessments} $workshopplus->aggregate_grading_grades(); // updates 'gradinggrade' in {workshopplus_aggregations} $workshopplus->log('update aggregate grades'); } redirect(new moodle_url($workshopplus->view_url(), compact('page', 'sortby', 'sorthow')));
$workshopplusrecord = $DB->get_record('workshopplus', array('id' => $w), '*', MUST_EXIST); $course = $DB->get_record('course', array('id' => $workshopplusrecord->course), '*', MUST_EXIST); $cm = get_coursemodule_from_instance('workshopplus', $workshopplusrecord->id, $course->id, false, MUST_EXIST); } require_login($course, true, $cm); require_capability('mod/workshopplus:view', $PAGE->context); $workshopplus = new workshopplus($workshopplusrecord, $cm, $course); // Mark viewed $completion = new completion_info($course); $completion->set_module_viewed($cm); $eventdata = array(); $eventdata['objectid'] = $workshopplus->id; $eventdata['context'] = $workshopplus->context; $eventdata['courseid'] = $course->id; $eventdata['other']['content'] = $workshopplus->phase; $PAGE->set_url($workshopplus->view_url()); $event = \mod_workshopplus\event\course_module_viewed::create($eventdata); $event->add_record_snapshot('course', $course); $event->add_record_snapshot('workshopplus', $workshopplusrecord); $event->add_record_snapshot('course_modules', $cm); $event->set_page_detail(); $event->trigger(); // If the phase is to be switched, do it asap. This just has to happen after triggering // the event so that the scheduled allocator had a chance to allocate submissions. if ($workshopplus->phase == workshopplus::PHASE_SUBMISSION and $workshopplus->phaseswitchassessment and $workshopplus->submissionend > 0 and $workshopplus->submissionend < time()) { $workshopplus->switch_phase(workshopplus::PHASE_ASSESSMENT); $workshopplus->log('update switch phase', $workshopplus->view_url(), $workshopplus->phase); // Disable the automatic switching now so that it is not executed again by accident // if the teacher changes the phase back to the submission one. $DB->set_field('workshopplus', 'phaseswitchassessment', 0, array('id' => $workshopplus->id)); $workshopplus->phaseswitchassessment = 0;
// no example specified - create new one require_capability('mod/workshopplus:manageexamples', $workshopplus->context); $example = new stdclass(); $example->id = null; $example->authorid = $USER->id; $example->example = 1; } $canmanage = has_capability('mod/workshopplus:manageexamples', $workshopplus->context); $canassess = has_capability('mod/workshopplus:peerassess', $workshopplus->context); $refasid = $DB->get_field('workshopplus_assessments', 'id', array('submissionid' => $example->id, 'weight' => 1)); if ($example->id and ($canmanage or $workshopplus->assessing_examples_allowed() and $canassess)) { // ok you can go } elseif (is_null($example->id) and $canmanage) { // ok you can go } else { print_error('nopermissions', 'error', $workshopplus->view_url(), 'view or manage example submission'); } if ($id and $delete and $confirm and $canmanage) { require_sesskey(); $workshopplus->delete_submission($example); redirect($workshopplus->view_url()); } if ($id and $assess and $canmanage) { // reference assessment of an example is the assessment with the weight = 1. There should be just one // such assessment require_sesskey(); if (!$refasid) { $refasid = $workshopplus->add_allocation($example, $USER->id, 1); } redirect($workshopplus->exassess_url($refasid)); }
if ($assessment->submissionid != $example->id) { print_error('invalidarguments'); } $mformassessment = $strategy->get_assessment_form($PAGE->url, 'assessment', $assessment, false); if ($refasid = $DB->get_field('workshopplus_assessments', 'id', array('submissionid' => $example->id, 'weight' => 1))) { $reference = $workshopplus->get_assessment_by_id($refasid); $mformreference = $strategy->get_assessment_form($PAGE->url, 'assessment', $reference, false); } $canmanage = has_capability('mod/workshopplus:manageexamples', $workshopplus->context); $isreviewer = $USER->id == $assessment->reviewerid; if ($canmanage) { // ok you can go } elseif ($isreviewer and $workshopplus->assessing_examples_allowed()) { // ok you can go } else { print_error('nopermissions', 'error', $workshopplus->view_url(), 'compare example assessment'); } $PAGE->set_title($workshopplus->name); $PAGE->set_heading($course->fullname); $PAGE->navbar->add(get_string('examplecomparing', 'workshopplus')); // Output starts here $output = $PAGE->get_renderer('mod_workshopplus'); echo $output->header(); echo $output->heading(format_string($workshopplus->name)); echo $output->heading(get_string('assessedexample', 'workshopplus'), 3); echo $output->render($workshopplus->prepare_example_submission($example)); // if the reference assessment is available, display it if (!empty($mformreference)) { $options = array('showreviewer' => false, 'showauthor' => false, 'showform' => true); $reference = $workshopplus->prepare_example_reference_assessment($reference, $mformreference, $options); $reference->title = get_string('assessmentreference', 'workshopplus');