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
 * Modification date: 31.03.2015
 * Description      : Added logic for $owngroupsubmission so that any member of the author's group can edit
*/
/**
 * Print a detailed representation of what a user has done with
 * a given particular instance of this module, for user activity reports.
 *
 * @return string HTML
 */
function workshopplus_user_complete($course, $user, $mod, $workshopplus)
{
    global $CFG, $DB, $OUTPUT;
    require_once dirname(__FILE__) . '/locallib.php';
    require_once $CFG->libdir . '/gradelib.php';
    $workshopplus = new workshopplus($workshopplus, $mod, $course);
    $grades = grade_get_grades($course->id, 'mod', 'workshopplus', $workshopplus->id, $user->id);
    if (!empty($grades->items[0]->grades)) {
        $submissiongrade = reset($grades->items[0]->grades);
        $info = get_string('submissiongrade', 'workshopplus') . ': ' . $submissiongrade->str_long_grade;
        echo html_writer::tag('li', $info, array('class' => 'submissiongrade'));
    }
    if (!empty($grades->items[1]->grades)) {
        $assessmentgrade = reset($grades->items[1]->grades);
        $info = get_string('gradinggrade', 'workshopplus') . ': ' . $assessmentgrade->str_long_grade;
        echo html_writer::tag('li', $info, array('class' => 'gradinggrade'));
    }
    if (has_capability('mod/workshopplus:viewallsubmissions', $workshopplus->context)) {
        $canviewsubmission = true;
        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, $user->id, $workshopplus->cm->groupingid, 'g.id');
                $sharedgroups = array_intersect_key($usersgroups, $authorsgroups);
                if (empty($sharedgroups)) {
                    $canviewsubmission = false;
                }
            }
        }
        if ($canviewsubmission and $submission = $workshopplus->get_submission_by_author($user->id)) {
            $title = format_string($submission->title);
            $url = $workshopplus->submission_url($submission->id);
            $link = html_writer::link($url, $title);
            $info = get_string('submission', 'workshopplus') . ': ' . $link;
            echo html_writer::tag('li', $info, array('class' => 'submission'));
        }
    }
    if (has_capability('mod/workshopplus:viewallassessments', $workshopplus->context)) {
        if ($assessments = $workshopplus->get_assessments_by_reviewer($user->id)) {
            foreach ($assessments as $assessment) {
                $a = new stdclass();
                $a->submissionurl = $workshopplus->submission_url($assessment->submissionid)->out();
                $a->assessmenturl = $workshopplus->assess_url($assessment->id)->out();
                $a->submissiontitle = s($assessment->submissiontitle);
                echo html_writer::tag('li', get_string('assessmentofsubmission', 'workshopplus', $a));
            }
        }
    }
}
    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);
    $output = $PAGE->get_renderer('mod_workshopplus');
    if (!$reviewersubmission) {
        // no money, no love
        $assessmenteditable = false;
        echo $output->header();
        echo $output->heading(format_string($workshopplus->name));
        notice(get_string('exampleneedsubmission', 'workshopplus'), new moodle_url('/mod/workshopplus/view.php', array('id' => $cm->id)));
        echo $output->footer();
        exit;
    } else {
        $examples = $workshopplus->get_examples_for_reviewer($assessment->reviewerid);
        foreach ($examples as $exampleid => $example) {
            if (is_null($example->grade)) {
                $assessmenteditable = false;
                echo $output->header();