Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sharedtest #11

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 44 additions & 1 deletion backup/moodle2/backup_vpl_stepslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,13 @@ protected function get_iterator($processor) {
$path = $CFG->dataroot . '/vpl_data/' . $vplid . '/usersdata/' . $userid . '/' . $subid . '/';
return $this->get_files( $path, 'submittedfiles' );
break;
case 'shared_test' :
$vplid = $this->find_first_parent_by_name( 'vpl' )->get_value();
$subid = $this->find_first_parent_by_name( 'id' )->get_value();
$userid = 0;
$path = $CFG->dataroot . '/vpl_data/' . $vplid . '/usersdata/' . $userid . '/' . $subid . '/';
return $this->get_files( $path, 'submittedfiles' );
break;
default :
throw new Exception( 'Type of element error for backup_nested_group' );
}
Expand Down Expand Up @@ -177,6 +184,27 @@ protected function define_structure() {
'name',
'content'
) );
$submissionsshared = new backup_nested_element( 'submissionsshared' );
$submissionshared = new backup_nested_element( 'submissionshared', array (
'id'
), array (
'vpl',
'userid',
'datesubmitted',
'comments',
'grader',
'dategraded',
'grade',
'mailed',
'highlight'
) );
$sharedtests = new backup_nested_element( 'shared_tests' );
$sharedtest = new backup_nested_filegroup( 'shared_test', array (
'id'
), array (
'name',
'content'
) );
// Build the tree.
$vpl->add_child( $requiredfiles );
$vpl->add_child( $executionfiles );
Expand All @@ -190,6 +218,12 @@ protected function define_structure() {
$submissions->add_child( $submission );
$submission->add_child( $submissionfiles );
$submissionfiles->add_child( $submissionfile );

$vpl->add_child( $submissionsshared );
$submissionsshared->add_child( $submissionshared );
$submissionshared->add_child( $sharedtests );
$sharedtests->add_child( $sharedtest );

// Define sources.
$vpl->set_source_table( 'vpl', array (
'id' => backup::VAR_ACTIVITYID
Expand All @@ -211,11 +245,20 @@ protected function define_structure() {
$query .= ' (SELECT max(id) as maxid FROM {vpl_submissions}';
$query .= ' WHERE {vpl_submissions}.vpl = ? GROUP BY {vpl_submissions}.userid) AS ls';
$query .= ' on ls.maxid = s.id';
$query .= ' WHERE s.userid != 0';
$submission->set_source_sql( $query, array (
backup::VAR_ACTIVITYID
) );
}

$query = 'SELECT s.* FROM {vpl_submissions} AS s';
$query .= ' inner join';
$query .= ' (SELECT max(id) as maxid FROM {vpl_submissions}';
$query .= ' WHERE {vpl_submissions}.vpl = ? GROUP BY {vpl_submissions}.userid) AS ls';
$query .= ' on ls.maxid = s.id';
$query .= ' WHERE s.userid = 0';
$submissionshared->set_source_sql( $query, array (backup::VAR_ACTIVITYID) );

// Define id annotations.
$vpl->annotate_ids( 'scale', 'grade' );
$vpl->annotate_ids( 'vpl', 'basedon' );
Expand All @@ -226,4 +269,4 @@ protected function define_structure() {
$vpl->annotate_files( 'mod_vpl', 'intro', null );
return $this->prepare_activity_structure( $vpl );
}
}
}
15 changes: 13 additions & 2 deletions backup/moodle2/restore_vpl_stepslib.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ protected function define_structure() {
'/activity/vpl/submissions/submission/submission_files/submission_file'
);
}
$paths [] = new restore_path_element ( 'submissionshared', '/activity/vpl/submissionsshared/submissionshared' );
$paths [] = new restore_path_element (
'shared_test',
'/activity/vpl/submissionsshared/submissionshared/shared_tests/shared_test'
);

// Return the paths wrapped into standard activity structure.
return $this->prepare_activity_structure ( $paths );
Expand Down Expand Up @@ -100,7 +105,7 @@ protected function process_submission($data) {
$data = ( object ) $data;
$oldid = $data->id;
$data->vpl = $this->get_new_parentid ( 'vpl' );
$data->userid = $this->get_mappingid ( 'user', $data->userid );
$data->userid = empty($data->userid) ? 0 : $this->get_mappingid ( 'user', $data->userid );
$data->grader = $this->get_mappingid ( 'user', $data->grader );
$newitemid = $DB->insert_record ( 'vpl_submissions', $data );
$this->set_mapping ( 'submission', $oldid, $newitemid );
Expand All @@ -126,7 +131,13 @@ protected function process_submission_file($data) {
$path = $CFG->dataroot . '/vpl_data/' . $vplid . '/usersdata/' . $sub->userid . '/' . $subid . '/';
$this->process_groupfile ( $data, $path );
}
protected function process_submissionshared($data) {
$this->process_submission($data);
}
protected function process_shared_test($data) {
$this->process_submission_file($data);
}
protected function after_execute() {
// Add choice related files, no need to match by itemname (just internally handled context).
}
}
}
6 changes: 4 additions & 2 deletions forms/edit.json.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

$id = required_param('id', PARAM_INT); // course id
$action = required_param('action', PARAM_ALPHANUMEXT);
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
$vpl = new mod_vpl($id);
//TODO use or not sesskey
//require_sesskey();
Expand All @@ -56,7 +56,9 @@
if (!$vpl->is_submit_able()) {
throw new Exception(get_string('notavailable'));
}
if (!$userid || $userid == $USER->id) { // Make own submission
if (!$userid) { // Make mod test submission
$vpl->require_capability ( VPL_MANAGE_CAPABILITY );
} else if ($userid == $USER->id) { // Make own submission
$userid = $USER->id;
$vpl->require_capability ( VPL_SUBMIT_CAPABILITY );
if (! $vpl->pass_network_check ()) {
Expand Down
7 changes: 4 additions & 3 deletions forms/edit.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
vpl_editor_util::generate_requires();
require_login();
$id = required_param('id',PARAM_INT);
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
$copy = optional_param('privatecopy',false,PARAM_INT);
$subid = optional_param('submissionid',false,PARAM_INT);
$vpl = new mod_vpl($id);
Expand All @@ -50,8 +50,9 @@
if(!$vpl->is_submit_able()){
print_error('notavailable');
}
if(!$userid || $userid == $USER->id){//Edit own submission
$userid = $USER->id;
if(!$userid){//Edit mod test submission
$vpl->require_capability(VPL_MANAGE_CAPABILITY);
}else if($userid == $USER->id){//Edit own submission
$vpl->require_capability(VPL_SUBMIT_CAPABILITY);
}
else { //Edit other user submission
Expand Down
5 changes: 2 additions & 3 deletions forms/evaluation.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,9 @@
$id = required_param('id',PARAM_INT);
$vpl = new mod_vpl($id);
$vpl->prepare_page('forms/evaluation.php', array('id' => $id));
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
if((!$userid || $userid == $USER->id)
&& $vpl->get_instance()->evaluate){//Evaluate own submission
$userid = $USER->id;
$vpl->require_capability(VPL_SUBMIT_CAPABILITY);
}else { //Evaluate other user submission
$vpl->prepare_page('forms/evaluation.php', array('id' => $id, 'userid' => $userid));
Expand All @@ -52,7 +51,7 @@
$course = $vpl->get_course();
$instance = $vpl->get_instance();
echo '<h2>'.s(get_string('evaluating',VPL)).'</h2>';
$userinfo=$DB->get_record('user',array('id' => $userid));
$userinfo=$DB->get_record('user',array('id' => $userid ? $userid : $USER->id));
$text = ' '.$vpl->user_picture($userinfo);
$text .= ' '.fullname($userinfo);
echo $OUTPUT->box($text);
Expand Down
7 changes: 4 additions & 3 deletions forms/submission.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
require_login();

$id = required_param('id',PARAM_INT);
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
$vpl = new mod_vpl($id);
if($userid){
$vpl->prepare_page('forms/submission.php', array('id' => $id, 'userid' => $userid));
Expand All @@ -41,8 +41,9 @@
if(!$vpl->is_submit_able()){
notice(get_string('notavailable'));
}
if(!$userid || $userid == $USER->id){//Make own submission
$userid = $USER->id;
if(!$userid) {//Make mod test submission
$vpl->require_capability(VPL_MANAGE_CAPABILITY);
}else if($userid == $USER->id){//Make own submission
if($vpl->get_instance()->restrictededitor){
$vpl->require_capability(VPL_MANAGE_CAPABILITY);
}
Expand Down
12 changes: 10 additions & 2 deletions forms/submissionview.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
require_login();

$id = required_param('id',PARAM_INT);
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
$vpl = new mod_vpl($id);
if($userid){
$vpl->prepare_page('forms/submissionview.php', array('id' => $id, 'userid' => $userid));
Expand All @@ -47,7 +47,15 @@

$submissionid = optional_param('submissionid',FALSE,PARAM_INT);
//Read records
if($userid && $userid != $USER->id){
if(!$userid){
$vpl->require_capability(VPL_MANAGE_CAPABILITY);
$grader = FALSE;
if($submissionid){
$subinstance = $DB->get_record('vpl_submissions', array('id' => $submissionid));
}else{
$subinstance = $vpl->last_user_submission($userid);
}
} else if($userid != $USER->id){
//Grader
$vpl->require_capability(VPL_GRADE_CAPABILITY);
$grader =TRUE;
Expand Down
14 changes: 6 additions & 8 deletions jail/default_scripts/csharp_debug.sh
Original file line number Diff line number Diff line change
@@ -1,22 +1,20 @@
#!/bin/bash
# $Id: csharp_debug.sh,v 1.4 2012-09-24 15:13:22 juanca Exp $
# Default C# language run script for VPL
# Default C# language debug script for VPL
# Copyright (C) 2012 Juan Carlos Rodríguez-del-Pino
# License http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
# Author Juan Carlos Rodríguez-del-Pino <[email protected]>

#load common script and check programs
. common_script.sh
export MONO_ENV_OPTIONS=--gc=sgen
export MONO_GC_PARAMS=max-heap-size=64m
check_program gmcs
check_program mdb
check_program gdb
check_program mcs
#compile
gmcs -out:output.exe *.cs
mcs -debug -out:output.exe *.cs
if [ -f output.exe ] ; then
echo "handle SIGXCPU SIG33 SIG35 SIGPWR nostop noprint" >> .dbinit
cat common_script.sh > vpl_execution
echo "export MONO_ENV_OPTIONS=--gc=sgen" >> vpl_execution
echo "export MONO_GC_PARAMS=max-heap-size=64m" >> vpl_execution
echo "mdb output.exe" >> vpl_execution
echo "gdb -args mono --debug output.exe" >> vpl_execution
chmod +x vpl_execution
fi
9 changes: 3 additions & 6 deletions jail/default_scripts/csharp_run.sh
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
#!/bin/bash
# $Id: csharp_run.sh,v 1.4 2012-09-24 15:13:21 juanca Exp $
# Default C# language run script for VPL
# Copyright (C) 2014 Juan Carlos Rodríguez-del-Pino
# Copyright (C) Juan Carlos Rodríguez-del-Pino
# License http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
# Author Juan Carlos Rodríguez-del-Pino <[email protected]>

#load common script and check programs
. common_script.sh
check_program gmcs
check_program mcs
check_program mono
get_source_files cs
#compile
export MONO_ENV_OPTIONS=--gc=sgen
export MONO_GC_PARAMS=max-heap-size=64m
gmcs -pkg:dotnet -out:output.exe $SOURCE_FILES
mcs -pkg:dotnet -out:output.exe $SOURCE_FILES
if [ -f output.exe ] ; then
cat common_script.sh > vpl_execution
echo "export MONO_ENV_OPTIONS=--gc=sgen" >> vpl_execution
echo "export MONO_GC_PARAMS=max-heap-size=64m" >> vpl_execution
echo "mono output.exe" >> vpl_execution
chmod +x vpl_execution
for FILENAME in $SOURCE_FILES
Expand Down
3 changes: 2 additions & 1 deletion lang/en/vpl.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,8 @@
$string['submittedon'] = 'Submitted on';
$string['submittedonp'] = 'Submitted on {$a}';
$string['sureresetfiles'] = 'Do you want to lost all your work and reset the files to its original state?';
$string['test'] = 'Test activity';
$string['usertest'] = 'Teacher test activity';
$string['sharedtest'] = 'Shared test activity';
$string['testcases'] = 'Test cases';
$string['timelimited'] ='Time limited';
$string['timeout'] ='Timeout';
Expand Down
15 changes: 11 additions & 4 deletions lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -561,18 +561,25 @@ function vpl_extend_settings_navigation(settings_navigation $settings, navigatio
if($setjails){
$advance->add($strsetjails,new moodle_url('/mod/vpl/forms/local_jail_servers.php', $parms), navigation_node::TYPE_SETTING);
}
$testact = $vplnode->create(get_string('test',VPL), null, navigation_node::TYPE_CONTAINER);
$testact = $vplnode->create(get_string('usertest',VPL), null, navigation_node::TYPE_CONTAINER);
$vplnode->add_node($testact,$fkn);
$strdescription = get_string('description',VPL);
$strsubmission = get_string('submission',VPL);
$stredit = get_string('edit',VPL);
$parmsuser = array('id' => $PAGE->cm->id, 'userid' => $USER->id);
$strsubmissionview = get_string('submissionview',VPL);
$testact->add($strsubmission,new moodle_url('/mod/vpl/forms/submission.php', $parms), navigation_node::TYPE_SETTING);
$testact->add($stredit,new moodle_url('/mod/vpl/forms/edit.php', $parms), navigation_node::TYPE_SETTING);
$testact->add($strsubmissionview,new moodle_url('/mod/vpl/forms/submissionview.php', $parms), navigation_node::TYPE_SETTING);
$testact->add($strsubmission,new moodle_url('/mod/vpl/forms/submission.php', $parmsuser), navigation_node::TYPE_SETTING);
$testact->add($stredit,new moodle_url('/mod/vpl/forms/edit.php', $parmsuser), navigation_node::TYPE_SETTING);
$testact->add($strsubmissionview,new moodle_url('/mod/vpl/forms/submissionview.php', $parmsuser), navigation_node::TYPE_SETTING);
$testact->add(get_string('grade'),new moodle_url('/mod/vpl/forms/gradesubmission.php', $parmsuser), navigation_node::TYPE_SETTING);
$testact->add(get_string('previoussubmissionslist',VPL),new moodle_url('/mod/vpl/views/previoussubmissionslist.php', $parmsuser), navigation_node::TYPE_SETTING);

$modtestact = $vplnode->create(get_string('sharedtest',VPL), null, navigation_node::TYPE_CONTAINER);
$vplnode->add_node($modtestact,$fkn);
$modtestact->add($strsubmission,new moodle_url('/mod/vpl/forms/submission.php', $parms), navigation_node::TYPE_SETTING);
$modtestact->add($stredit,new moodle_url('/mod/vpl/forms/edit.php', $parms), navigation_node::TYPE_SETTING);
$modtestact->add($strsubmissionview,new moodle_url('/mod/vpl/forms/submissionview.php', $parms), navigation_node::TYPE_SETTING);

$nodeindex = $vplnode->create($vplindex, new moodle_url('/mod/vpl/index.php', array('id'=>$PAGE->cm->course)), navigation_node::TYPE_SETTING);
$vplnode->add_node($nodeindex,$fkn);
}
Expand Down
8 changes: 5 additions & 3 deletions locallib.php
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,11 @@ function vpl_mod_href(){
$l=count($parms);
$href = $CFG->wwwroot.'/mod/vpl/'.$parms[0];
for( $p=1;$p<$l-1; $p+=2 ) {
$href .= ($p>1?'&amp;':'?')
.urlencode($parms[$p]).'='
.urlencode($parms[$p+1]);
if ($parms[$p] != 'userid' || !empty($parms[$p+1])) {
$href .= ($p>1?'&amp;':'?')
.urlencode($parms[$p]).'='
.urlencode($parms[$p+1]);
}
}
return $href;
}
Expand Down
4 changes: 2 additions & 2 deletions version.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2015080600; //Current module version 3.1.4
$plugin->version = 2015081600; //Current module version 3.1.5
$plugin->cron = 300; //cron check this module every 5 minutes
$plugin->requires = 2014051200; // Moodle 2.7
$plugin->maturity = MATURITY_STABLE;
$plugin->release = '3.1.4';
$plugin->release = '3.1.5';
$plugin->component = 'mod_vpl';
20 changes: 12 additions & 8 deletions views/downloadsubmission.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,18 @@
require_login();
$id = required_param('id',PARAM_INT);
$vpl = new mod_vpl($id);
$userid = optional_param('userid',FALSE,PARAM_INT);
$userid = optional_param('userid',0,PARAM_INT);
$submissionid = optional_param('submissionid',FALSE,PARAM_INT);
if(!$vpl->has_capability(VPL_GRADE_CAPABILITY)){
$userid = FALSE;
$submissionid = FALSE;
}
//Read record
if($userid && $userid != $USER->id){

if (!$userid) {
$vpl->require_capability(VPL_GRADE_CAPABILITY);
$grader = FALSE;
if($submissionid){
$subinstance = $DB->get_record('vpl_submissions',array('id' => $submissionid));
}else{
$subinstance = $vpl->last_user_submission($userid);
}
} else if($userid != $USER->id){
//Grader
$vpl->require_capability(VPL_GRADE_CAPABILITY);
$grader =TRUE;
Expand Down Expand Up @@ -72,7 +76,7 @@
}
$submissionid = $subinstance->id;

if($vpl->is_inconsistent_user($subinstance->userid,$userid)){
if($userid && $vpl->is_inconsistent_user($subinstance->userid,$userid)){
throw new Exception('vpl submission user inconsistence');
}
if($vpl->get_instance()->id != $subinstance->vpl){
Expand Down
Loading