/**
 * 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();
$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);
if (isguestuser()) {
    print_error('guestsarenotallowed');
}
$workshopplus = $DB->get_record('workshopplus', array('id' => $cm->instance), '*', MUST_EXIST);
$workshopplus = new workshopplus($workshopplus, $cm, $course);
$PAGE->set_url($workshopplus->submission_url(), array('cmid' => $cmid, 'id' => $id));
if ($edit) {
    $PAGE->url->param('edit', $edit);
}
if ($id) {
    // submission is specified
    $submission = $workshopplus->get_submission_by_id($id);
    $workshopplus->log('view submission', $workshopplus->submission_url($submission->id), $submission->id);
} else {
    // no submission specified
    if (!($submission = $workshopplus->get_submission_by_author($USER->id))) {
        $submission = new stdclass();
        $submission->id = null;
        $submission->authorid = $USER->id;
        $submission->example = 0;
        $submission->grade = null;
        $submission->gradeover = null;
        $submission->published = null;
        $submission->feedbackauthor = null;
        $submission->feedbackauthorformat = editors_get_preferred_format();
    }
}
/* Modified by      : Sayantan
 // load the assessment form and process the submitted data eventually
 $mform = $strategy->get_assessment_form($PAGE->url, 'assessment', $assessment, $assessmenteditable, array('editableweight' => $cansetassessmentweight, 'pending' => !empty($pending)));
 // 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);
     if ($workshopplus->overallfeedbackfiles) {
         $currentdata = file_prepare_standard_filemanager($currentdata, 'feedbackauthorattachment', $workshopplus->overall_feedback_attachment_options(), $workshopplus->context, 'mod_workshopplus', 'overallfeedback_attachment', $assessment->id);
     }
 }
 $mform->set_data($currentdata);
 if ($mform->is_cancelled()) {
     redirect($workshopplus->view_url());
 } elseif ($assessmenteditable and $data = $mform->get_data()) {
     if (is_null($assessment->grade)) {
         $workshopplus->log('add assessment', $workshopplus->assess_url($assessment->id), $assessment->submissionid);
     } else {
         $workshopplus->log('update assessment', $workshopplus->assess_url($assessment->id), $assessment->submissionid);
     }
     // Let the grading strategy subplugin save its data.
     $rawgrade = $strategy->save_assessment($assessment, $data);
     // Store the data managed by the workshopplus core.
     $coredata = (object) array('id' => $assessment->id);
     if (isset($data->feedbackauthor_editor)) {
         $coredata->feedbackauthor_editor = $data->feedbackauthor_editor;
         $coredata = file_postupdate_standard_editor($coredata, 'feedbackauthor', $workshopplus->overall_feedback_content_options(), $workshopplus->context, 'mod_workshopplus', 'overallfeedback_content', $assessment->id);
         unset($coredata->feedbackauthor_editor);
     }
     if (isset($data->feedbackauthorattachment_filemanager)) {
         $coredata->feedbackauthorattachment_filemanager = $data->feedbackauthorattachment_filemanager;
         $coredata = file_postupdate_standard_filemanager($coredata, 'feedbackauthorattachment', $workshopplus->overall_feedback_attachment_options(), $workshopplus->context, 'mod_workshopplus', 'overallfeedback_attachment', $assessment->id);
 *
 * @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());
$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);
    if ($workshopplus->overallfeedbackfiles) {
        $currentdata = file_prepare_standard_filemanager($currentdata, 'feedbackauthorattachment', $workshopplus->overall_feedback_attachment_options(), $workshopplus->context, 'mod_workshopplus', 'overallfeedback_attachment', $assessment->id);
    }
}
$mform->set_data($currentdata);
if ($mform->is_cancelled()) {
    redirect($workshopplus->view_url());
} elseif ($assessmenteditable and $data = $mform->get_data()) {
    if ($canmanage) {
        if (is_null($assessment->grade)) {
            $workshopplus->log('add reference assessment', $workshopplus->exassess_url($assessment->id), $assessment->submissionid);
        } else {
            $workshopplus->log('update reference assessment', $workshopplus->exassess_url($assessment->id), $assessment->submissionid);
        }
    } else {
        if (is_null($assessment->grade)) {
            $workshopplus->log('add example assessment', $workshopplus->exassess_url($assessment->id), $assessment->submissionid);
        } else {
            $workshopplus->log('update example assessment', $workshopplus->exassess_url($assessment->id), $assessment->submissionid);
        }
    }
    // Let the grading strategy subplugin save its data.
    $rawgrade = $strategy->save_assessment($assessment, $data);
    // Store the data managed by the workshopplus core.
    $coredata = (object) array('id' => $assessment->id);
    if (isset($data->feedbackauthor_editor)) {
 */
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')));
}
$workshopplus = $DB->get_record('workshopplus', array('id' => $cm->instance), '*', MUST_EXIST);
$workshopplus = new workshopplus($workshopplus, $cm, $course);
$PAGE->set_url($workshopplus->exsubmission_url($id), array('edit' => $edit));
$PAGE->set_title($workshopplus->name);
$PAGE->set_heading($course->fullname);
if ($edit) {
    $PAGE->navbar->add(get_string('exampleediting', 'workshopplus'));
} else {
    $PAGE->navbar->add(get_string('example', 'workshopplus'));
}
$output = $PAGE->get_renderer('mod_workshopplus');
if ($id) {
    // example is specified
    $example = $workshopplus->get_example_by_id($id);
    $workshopplus->log('view example', $workshopplus->exsubmission_url($example->id), $example->id);
} else {
    // 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