$id); if (! $cm = get_coursemodule_from_id('programming', $id)) { print_error('invalidcoursemodule'); } } else { $params = array('course' => $cid); if(! $cm = get_coursemodule_from_instance('programming' , $cid ) ){ print_error('invalidcoursemodule'); } } $PAGE->set_url('/mod/programming/view.php', $params); if (! $course = $DB->get_record('course', array('id' => $cm->course))) { print_error('coursemisconf'); } if (! $programming = $DB->get_record('programming', array('id' => $cm->instance))) { print_error('invalidprogrammingid', 'programming'); } require_login($course->id, true, $cm); $context = context_module::instance($cm->id); if (!$cm->visible) { require_capability('moodle/course:viewhiddenactivities', $context); } require_capability('mod/programming:viewcontent', $context); /// Print the page header $PAGE->set_title($programming->name); $PAGE->set_heading(format_string($course->fullname)); $PAGE->requires->css('/mod/programming/js/dp/SyntaxHighlighter.css'); $PAGE->requires->js('/mod/programming/js/dp/shCore.js'); $PAGE->requires->js('/mod/programming/js/dp/shBrushCSharp.js'); echo $OUTPUT->header(); /// Print tabs $renderer = $PAGE->get_renderer('mod_programming'); $tabs = programming_navtab('view', null, $course, $programming, $cm); echo $renderer->render_navtab($tabs); /// Print the main part of the page $fields = 'id,programmingid,seq,input,output,cmdargs,timelimit,memlimit,nproc,pub,weight,memo,timemodified'; $pubtests = $DB->get_records('programming_tests', array('programmingid' => $programming->id, 'pub' => 1), 'seq',$fields); $presetcodes = $DB->get_records('programming_presetcode', array('programmingid' => $programming->id), 'sequence'); $datafiles = $DB->get_records('programming_datafile', array('programmingid' => $programming->id), 'seq', 'id, programmingid, filename, isbinary, datasize, checkdatasize'); $notlate = $programming->allowlate || time() <= $programming->timeclose; print_content(); /// Finish the page echo $OUTPUT->footer($course); function print_content() { global $CFG, $OUTPUT, $cm, $programming, $context; global $datafiles, $presetcodes, $viewpubtestcase, $pubtests; echo html_writer::tag('h2', $programming->name); if ($programming->showmode == PROGRAMMING_SHOWMODE_NORMAL) { echo $OUTPUT->box_start('time-table'); $table = new html_table(); $table->data = array(); $table->data[] = array(get_string('grade','mod_programming'), $programming->grade, get_string('timeopen', 'programming'), userdate($programming->timeopen)); $table->data[] = array(get_string('discount', 'programming'), $programming->discount/10.0, get_string('timediscount', 'programming'), userdate($programming->timediscount)); $table->data[] = array(get_string('allowlate', 'programming'), get_string($programming->allowlate ? 'yes' : 'no'), get_string('timeclose', 'programming'), userdate($programming->timeclose)); if($programming->inputfile) { $table->data[] = array(get_string('inputfile', 'programming'), ''.$programming->inputfile.'', get_string('outputfile', 'programming'), ''.$programming->outputfile.''); } echo html_writer::table($table); echo $OUTPUT->box_end(); } else { echo html_writer::start_tag('span', array('class' => 'limit')); echo get_string('timelimit', 'programming'); echo programming_format_timelimit($programming->timelimit); echo ' '; echo get_string('memlimit', 'programming'); echo programming_format_memlimit($programming->memlimit); echo html_writer::end_tag('span'); } echo $OUTPUT->box_start('description'); echo $OUTPUT->box_start('intro'); echo format_module_intro('programming', $programming, $cm->id); echo $OUTPUT->box_end(); if (is_array($datafiles) && !empty($datafiles)) { echo $OUTPUT->box_start('datafile'); echo html_writer::tag('h3', get_string('datafile', 'programming')); echo html_writer::start_tag('ul'); foreach ($datafiles as $datafile) { $url = new moodle_url('/mod/programming/datafile/download.php', array('id' => $cm->id, 'datafile' => $datafile->id)); echo html_writer::tag('li', $OUTPUT->action_link($url, $datafile->filename, null, array('title' => get_string('presstodownload', 'programming')))); } echo html_writer::end_tag('ul'); echo $OUTPUT->box_end(); } if (is_array($presetcodes) && !empty($presetcodes)) { echo $OUTPUT->box_start('presetcode'); echo html_writer::tag('h3', get_string('presetcode', 'programming')); foreach ($presetcodes as $pcode) { echo html_writer::tag('h4', programming_get_presetcode_name($pcode)); echo html_writer::tag('textarea', htmlspecialchars(programming_format_presetcode($pcode)), array('rows' => 20, 'cols' => 60, 'name' => 'code', 'class' => 'c#', 'id' => 'code')); } echo $OUTPUT->box_end(); } $viewpubtestcase = has_capability('mod/programming:viewpubtestcase', $context); if ($viewpubtestcase && $programming->showmode == PROGRAMMING_SHOWMODE_NORMAL && count($pubtests) > 0) { $strshowasplaintext = get_string('showasplaintext', 'programming'); echo $OUTPUT->box_start('testcase-table'); $table = new html_table(); $table->head = array( ' ', get_string('input', 'programming').$OUTPUT->help_icon('input', 'programming'), get_string('expectedoutput', 'programming').$OUTPUT->help_icon('expectedoutput', 'programming'), get_string('timelimit', 'programming').$OUTPUT->help_icon('timelimit', 'programming'), get_string('memlimit', 'programming').$OUTPUT->help_icon('memlimit', 'programming'), get_string('extraproc', 'programming').$OUTPUT->help_icon('nproc', 'programming')); $table->colclasses[1] = 'programming-io'; $table->colclasses[2] = 'programming-io'; $table->data = array(); $i = 0; $ioid = 0; foreach ($pubtests as $programmingtest) { $row = array(); $row[] = get_string('testcasen', 'programming', $programmingtest->seq); $url = new moodle_url($CFG->wwwroot.'/mod/programming/testcase/download_io.php', array('id' => $cm->id, 'test' => $programmingtest->id, 'type' => 'in', 'download' => 0)); $action = new popup_action('click', $url, '_blank', array('height' => 300, 'width' => 400)); $html = $OUTPUT->action_link($url, $strshowasplaintext, $action, array('class' => 'showasplaintext small')); $html.= programming_format_io($programmingtest->input, true); $row[] = $html; $url->param('type', 'out'); $action = new popup_action('click', $url, '_blank', array('height' => 300, 'width' => 400)); $html = $OUTPUT->action_link($url, $strshowasplaintext, $action, array('class' => 'showasplaintext small')); $html.= programming_format_io($programmingtest->output, true); $row[] = $html; $row[] = programming_format_timelimit($programmingtest->timelimit); $row[] = programming_format_memlimit($programmingtest->memlimit); $row[] = $programmingtest->nproc; $table->data[] = $row; } echo html_writer::table($table); echo $OUTPUT->box_end(); } echo $OUTPUT->box_end(); // description }