/**
 * Display the geogebra applet
 *
 * @param type $geogebra
 * @param type $cm
 * @param type $context
 * @param type $attempt
 * @param type $ispreview if is a preview or not
 * @param type $timenow
 */
function geogebra_view_applet($geogebra, $cm, $context, $attempt = null, $ispreview = false)
{
    global $OUTPUT, $PAGE, $CFG, $USER;
    $timenow = time();
    if ($attempt) {
        $viewmode = 'view';
        $userid = $attempt->userid;
    } else {
        $userid = $USER->id;
        if ($ispreview) {
            $viewmode = 'preview';
        } else {
            $viewmode = 'submit';
        }
    }
    $isopen = empty($geogebra->timeavailable) || $geogebra->timeavailable < $timenow;
    if (!$isopen) {
        $content .= $OUTPUT->notify(get_string('notopenyet', 'geogebra', userdate($geogebra->timeavailable)));
        if (!$ispreview) {
            return $content;
        }
    }
    $isclosed = !empty($geogebra->timedue) && $geogebra->timedue < $timenow;
    if ($isclosed) {
        $content .= $OUTPUT->notify(get_string('expired', 'geogebra', userdate($geogebra->timedue)));
        if (!$ispreview) {
            return $content;
        }
    }
    $attempts = geogebra_count_finished_attempts($geogebra->id, $userid);
    if ($ispreview || $geogebra->maxattempts < 0 || $attempts < $geogebra->maxattempts) {
        // Show results when viewmode is "view"
        if (!empty($attempt)) {
            // TODO: Change $USER by selected userid
            geogebra_view_userid_results($geogebra, $userid, $cm, $context, $viewmode, $attempt);
        } else {
            if (!$ispreview) {
                echo $OUTPUT->box_start('generalbox');
                if ($geogebra->maxattempts < 0) {
                    echo get_string('unlimitedattempts', 'geogebra') . '<br/>';
                } else {
                    if ($attempts == $geogebra->maxattempts - 1) {
                        echo get_string('lastattemptremaining', 'geogebra') . '<br/>';
                    } else {
                        echo get_string('attemptsremaining', 'geogebra') . ($geogebra->maxattempts - $attempts) . '<br/>';
                    }
                }
                // If there is some unfinished attempt, show it
                $attempt = geogebra_get_unfinished_attempt($geogebra->id, $userid);
                if (!empty($attempt)) {
                    echo '(' . get_string('resumeattempt', 'geogebra') . ')';
                }
                echo $OUTPUT->box_end();
            }
        }
        geogebra_print_content($geogebra, $context);
        // If not preview mode, load state
        $parsedvars = null;
        if ($attempt) {
            parse_str($attempt->vars, $parsedvars);
        }
        if (isset($parsedvars['state'])) {
            // Continue previuos attempt
            $eduxtecadapterparameters = http_build_query(array('state' => $parsedvars['state'], 'grade' => $parsedvars['grade'], 'duration' => $parsedvars['duration'], 'attempts' => $parsedvars['attempts']), '', '&');
        } else {
            // New attempt
            $attempts = geogebra_count_finished_attempts($geogebra->id, $userid) + 1;
            $eduxtecadapterparameters = http_build_query(array('attempts' => $attempts), '', '&');
        }
        $PAGE->requires->js('/mod/geogebra/geogebra_view.js');
        echo '<form id="geogebra_form" method="POST" action="attempt.php">';
        echo '<input type="hidden" name="appletInformation" />';
        echo '<input type="hidden" name="id" value="' . $context->instanceid . '"/>';
        echo '<input type="hidden" name="n" value="' . $geogebra->id . '"/>';
        echo '<input type="hidden" name="f" value="0"/>';
        // Only show submit buttons if not view mode
        if (empty($attempt) || !$attempt->finished) {
            echo '<input id="geogebra_form_save" type="button" value="' . get_string('savewithoutsubmitting', 'geogebra') . '" />';
            echo '<input id="geogebra_form_submit" type="button" value="' . get_string('submitandfinish', 'geogebra') . '" />';
        }
        echo '<input type="hidden" name="prevAppletInformation" value="' . $eduxtecadapterparameters . '" />';
        echo ' </form>';
    } else {
        echo $OUTPUT->box(get_string('msg_noattempts', 'geogebra'), 'generalbox boxaligncenter');
    }
    geogebra_view_dates($geogebra, $context, $timenow);
}
require_once dirname(__FILE__) . '/locallib.php';
$id = optional_param('id', 0, PARAM_INT);
// course_module ID, or
if ($id) {
    $cm = get_coursemodule_from_id('geogebra', $id, 0, false, MUST_EXIST);
    $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
    $geogebra = $DB->get_record('geogebra', array('id' => $cm->instance), '*', MUST_EXIST);
} else {
    print_error('You must specify a course_module ID or an instance ID');
}
require_login($course, true, $cm);
$context = context_module::instance($cm->id);
require_capability('mod/geogebra:view', $context);
$PAGE->set_url('/mod/geogebra/report.php', array('id' => $cm->id));
$PAGE->set_title(format_string($geogebra->name));
$PAGE->set_heading(format_string($course->fullname));
$PAGE->set_context($context);
echo $OUTPUT->header();
echo $OUTPUT->heading(get_string('results', 'geogebra'));
groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/geogebra/report.php?id=' . $cm->id);
echo '<div class="reportlink">' . geogebra_submittedlink() . '</div>';
$cangrade = is_siteadmin() || has_capability('moodle/grade:edit', $context, $USER->id, false);
$action = optional_param('action', false, PARAM_TEXT);
if ($cangrade) {
    // User can grade (probably is a teacher) so, by default, show results page
    geogebra_view_results($geogebra, $context, $cm, $course, $action);
} else {
    // Show GGB applet with last attempt
    geogebra_view_userid_results($geogebra, $USER->id, $cm, $context, $action);
}
echo $OUTPUT->footer();