/**
 * Given an object containing all the necessary data,
 * (defined by the form in mod_form.php) this function
 * will update an existing instance with new data.
 *
 * @param stdClass $workshopplus An object from the form in mod_form.php
 * @return bool success
 */
function workshopplus_update_instance(stdclass $workshopplus)
{
    global $CFG, $DB;
    require_once dirname(__FILE__) . '/locallib.php';
    $workshopplus->timemodified = time();
    $workshopplus->id = $workshopplus->instance;
    $workshopplus->useexamples = (int) (!empty($workshopplus->useexamples));
    $workshopplus->usepeerassessment = 1;
    $workshopplus->useselfassessment = (int) (!empty($workshopplus->useselfassessment));
    $workshopplus->latesubmissions = (int) (!empty($workshopplus->latesubmissions));
    $workshopplus->phaseswitchassessment = (int) (!empty($workshopplus->phaseswitchassessment));
    // todo - if the grading strategy is being changed, we may want to replace all aggregated peer grades with nulls
    $DB->update_record('workshopplus', $workshopplus);
    $context = context_module::instance($workshopplus->coursemodule);
    // process the custom wysiwyg editors
    if ($draftitemid = $workshopplus->instructauthorseditor['itemid']) {
        $workshopplus->instructauthors = file_save_draft_area_files($draftitemid, $context->id, 'mod_workshopplus', 'instructauthors', 0, workshopplus::instruction_editors_options($context), $workshopplus->instructauthorseditor['text']);
        $workshopplus->instructauthorsformat = $workshopplus->instructauthorseditor['format'];
    }
    if ($draftitemid = $workshopplus->instructreviewerseditor['itemid']) {
        $workshopplus->instructreviewers = file_save_draft_area_files($draftitemid, $context->id, 'mod_workshopplus', 'instructreviewers', 0, workshopplus::instruction_editors_options($context), $workshopplus->instructreviewerseditor['text']);
        $workshopplus->instructreviewersformat = $workshopplus->instructreviewerseditor['format'];
    }
    if ($draftitemid = $workshopplus->conclusioneditor['itemid']) {
        $workshopplus->conclusion = file_save_draft_area_files($draftitemid, $context->id, 'mod_workshopplus', 'conclusion', 0, workshopplus::instruction_editors_options($context), $workshopplus->conclusioneditor['text']);
        $workshopplus->conclusionformat = $workshopplus->conclusioneditor['format'];
    }
    // re-save the record with the replaced URLs in editor fields
    $DB->update_record('workshopplus', $workshopplus);
    // update gradebook items
    workshopplus_grade_item_update($workshopplus);
    workshopplus_grade_item_category_update($workshopplus);
    // update calendar events
    workshopplus_calendar_update($workshopplus, $workshopplus->coursemodule);
    return true;
}
 /**
  * Prepares the form before data are set
  *
  * Additional wysiwyg editor are prepared here, the introeditor is prepared automatically by core.
  * Grade items are set here because the core modedit supports single grade item only.
  *
  * @param array $data to be set
  * @return void
  */
 public function data_preprocessing(&$data)
 {
     if ($this->current->instance) {
         // editing an existing workshopplus - let us prepare the added editor elements (intro done automatically)
         $draftitemid = file_get_submitted_draft_itemid('instructauthors');
         $data['instructauthorseditor']['text'] = file_prepare_draft_area($draftitemid, $this->context->id, 'mod_workshopplus', 'instructauthors', 0, workshopplus::instruction_editors_options($this->context), $data['instructauthors']);
         $data['instructauthorseditor']['format'] = $data['instructauthorsformat'];
         $data['instructauthorseditor']['itemid'] = $draftitemid;
         $draftitemid = file_get_submitted_draft_itemid('instructreviewers');
         $data['instructreviewerseditor']['text'] = file_prepare_draft_area($draftitemid, $this->context->id, 'mod_workshopplus', 'instructreviewers', 0, workshopplus::instruction_editors_options($this->context), $data['instructreviewers']);
         $data['instructreviewerseditor']['format'] = $data['instructreviewersformat'];
         $data['instructreviewerseditor']['itemid'] = $draftitemid;
         $draftitemid = file_get_submitted_draft_itemid('conclusion');
         $data['conclusioneditor']['text'] = file_prepare_draft_area($draftitemid, $this->context->id, 'mod_workshopplus', 'conclusion', 0, workshopplus::instruction_editors_options($this->context), $data['conclusion']);
         $data['conclusioneditor']['format'] = $data['conclusionformat'];
         $data['conclusioneditor']['itemid'] = $draftitemid;
     } else {
         // adding a new workshopplus instance
         $draftitemid = file_get_submitted_draft_itemid('instructauthors');
         file_prepare_draft_area($draftitemid, null, 'mod_workshopplus', 'instructauthors', 0);
         // no context yet, itemid not used
         $data['instructauthorseditor'] = array('text' => '', 'format' => editors_get_preferred_format(), 'itemid' => $draftitemid);
         $draftitemid = file_get_submitted_draft_itemid('instructreviewers');
         file_prepare_draft_area($draftitemid, null, 'mod_workshopplus', 'instructreviewers', 0);
         // no context yet, itemid not used
         $data['instructreviewerseditor'] = array('text' => '', 'format' => editors_get_preferred_format(), 'itemid' => $draftitemid);
         $draftitemid = file_get_submitted_draft_itemid('conclusion');
         file_prepare_draft_area($draftitemid, null, 'mod_workshopplus', 'conclusion', 0);
         // no context yet, itemid not used
         $data['conclusioneditor'] = array('text' => '', 'format' => editors_get_preferred_format(), 'itemid' => $draftitemid);
     }
 }
if ($edit) {
    $PAGE->navbar->add(get_string('mysubmission', 'workshopplus'), $workshopplus->submission_url(), navigation_node::TYPE_CUSTOM);
    $PAGE->navbar->add(get_string('editingsubmission', 'workshopplus'));
} elseif ($ownsubmission) {
    $PAGE->navbar->add(get_string('mysubmission', 'workshopplus'));
} else {
    $PAGE->navbar->add(get_string('submission', 'workshopplus'));
}
// Output starts here
$output = $PAGE->get_renderer('mod_workshopplus');
echo $output->header();
echo $output->heading(format_string($workshopplus->name), 2);
// show instructions for submitting as thay may contain some list of questions and we need to know them
// while reading the submitted answer
if (trim($workshopplus->instructauthors)) {
    $instructions = file_rewrite_pluginfile_urls($workshopplus->instructauthors, 'pluginfile.php', $PAGE->context->id, 'mod_workshopplus', 'instructauthors', 0, workshopplus::instruction_editors_options($PAGE->context));
    print_collapsible_region_start('', 'workshopplus-viewlet-instructauthors', get_string('instructauthors', 'workshopplus'));
    echo $output->box(format_text($instructions, $workshopplus->instructauthorsformat, array('overflowdiv' => true)), array('generalbox', 'instructions'));
    print_collapsible_region_end();
}
// if in edit mode, display the form to edit the submission
if ($edit) {
    if (!empty($CFG->enableplagiarism)) {
        require_once $CFG->libdir . '/plagiarismlib.php';
        echo plagiarism_print_disclosure($cm->id);
    }
    $mform->display();
    echo $output->footer();
    die;
}
// else display the submission
                 $buttontext = get_string('assess', 'workshopplus');
             } else {
                 $class = ' graded';
                 $submission->status = 'graded';
                 $buttontext = get_string('reassess', 'workshopplus');
             }
             echo $output->box_start('generalbox assessment-summary' . $class);
             echo $output->render($workshopplus->prepare_submission_summary($submission, $shownames));
             echo $output->box_end();
         }
         print_collapsible_region_end();
     }
     break;
 case workshopplus::PHASE_CLOSED:
     if (trim($workshopplus->conclusion)) {
         $conclusion = file_rewrite_pluginfile_urls($workshopplus->conclusion, 'pluginfile.php', $workshopplus->context->id, 'mod_workshopplus', 'conclusion', 0, workshopplus::instruction_editors_options($workshopplus->context));
         print_collapsible_region_start('', 'workshopplus-viewlet-conclusion', get_string('conclusion', 'workshopplus'));
         echo $output->box(format_text($conclusion, $workshopplus->conclusionformat, array('overflowdiv' => true)), array('generalbox', 'conclusion'));
         print_collapsible_region_end();
     }
     $finalgrades = $workshopplus->get_gradebook_grades($USER->id);
     if (!empty($finalgrades)) {
         print_collapsible_region_start('', 'workshopplus-viewlet-yourgrades', get_string('yourgrades', 'workshopplus'));
         echo $output->box_start('generalbox grades-yourgrades');
         echo $output->render($finalgrades);
         echo $output->box_end();
         print_collapsible_region_end();
     }
     if (has_capability('mod/workshopplus:viewallassessments', $PAGE->context)) {
         $perpage = get_user_preferences('workshopplus_perpage', 10);
         $groupid = groups_get_activity_group($workshopplus->cm, true);