first commit

This commit is contained in:
2026-02-07 09:46:32 +08:00
commit 5fcd5dc646
443 changed files with 89466 additions and 0 deletions

279
db/access.php Normal file
View File

@@ -0,0 +1,279 @@
<?php
$mod_programming_capabilities = array(
'mod/programming:addinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewcontent' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_ALLOW,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewcontentatanytime' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:submitprogram' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:submitatanytime' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:submitforothers' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:deleteothersubmit' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewdetailresult' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewdetailresultincontest' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewsummaryresult' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewhistory' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:edittestcase' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewpubtestcase' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewhiddentestcase' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewotherprogram' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewotherresult' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewreport' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:viewresemble' => array(
'captype' => 'read',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_ALLOW,
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_ALLOW,
'admin' => CAP_ALLOW
)
),
'mod/programming:editresemble' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:updateresemble' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
'mod/programming:rejudge' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_MODULE,
'legacy' => array(
'guest' => CAP_PREVENT,
'student' => CAP_PREVENT,
'teacher' => CAP_PREVENT,
'editingteacher' => CAP_ALLOW,
'coursecreator' => CAP_PREVENT,
'admin' => CAP_ALLOW
)
),
);
?>

60
db/install.php Normal file
View File

@@ -0,0 +1,60 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file replaces the legacy STATEMENTS section in db/install.xml,
* lib.php/modulename_install() post installation hook and partially defaults.php
*
* @package mod
* @subpackage programming
* @copyright 2011 Your Name <your@email.adress>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Post installation procedure
*
* @see upgrade_plugins_modules()
*/
function xmldb_programming_install() {
global $DB;
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('gcc-3.3', 'C (GCC 3.3)', '.c', '.h')";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('g++-3.3', 'C++ (G++ 3.3)', '.cpp .cxx', '.h .hpp')";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('java-1.5', 'Java (Sun JDK 5)', '.java', NULL)";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('java-1.6', 'Java (Sun JDK 6)', '.java', NULL)";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('fpc-2.2', 'Pascal (Free Pascal 2)', '.pas', NULL)";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('python-2.5', 'Python 2.5', '.py', NULL)";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('gmcs-2.0', 'C# (Mono 2.0)', '.cs', NULL)";
$DB->execute($sql);
$sql="insert into {programming_languages} (name, description, sourceext, headerext) VALUES ('bash-3', 'Bash (Bash 3)', '.sh', NULL)";
$DB->execute($sql);
$DB->set_field('modules', 'visible', 0, array('name'=>'programming'));
}
/**
* Post installation recovery procedure
*
* @see upgrade_plugins_modules()
*/
function xmldb_programming_install_recovery() {
}

250
db/install.xml Normal file
View File

@@ -0,0 +1,250 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="mod/programming/db" VERSION="20100412" COMMENT="XMLDB file for Moodle mod/programming"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
<TABLES>
<TABLE NAME="programming" COMMENT="programming table retrofitted from MySQL" NEXT="programming_languages">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="course"/>
<FIELD NAME="course" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="name"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="course" NEXT="intro"/>
<FIELD NAME="intro" TYPE="text" LENGTH="medium" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="introformat"/>
<FIELD NAME="introformat" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="intro" NEXT="grade"/>
<FIELD NAME="grade" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="introformat" NEXT="globalid"/>
<FIELD NAME="globalid" TYPE="char" LENGTH="10" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="grade" NEXT="timeopen"/>
<FIELD NAME="timeopen" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="globalid" NEXT="timeclose"/>
<FIELD NAME="timeclose" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timeopen" NEXT="timelimit"/>
<FIELD NAME="timelimit" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="timeclose" NEXT="memlimit"/>
<FIELD NAME="memlimit" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="timelimit" NEXT="nproc"/>
<FIELD NAME="nproc" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="memlimit" NEXT="timediscount"/>
<FIELD NAME="timediscount" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="130000000" SEQUENCE="false" ENUM="false" PREVIOUS="nproc" NEXT="discount"/>
<FIELD NAME="discount" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="9" SEQUENCE="false" ENUM="false" PREVIOUS="timediscount" NEXT="allowlate"/>
<FIELD NAME="allowlate" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="discount" NEXT="attempts"/>
<FIELD NAME="attempts" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="allowlate" NEXT="keeplatestonly"/>
<FIELD NAME="keeplatestonly" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="attempts" NEXT="inputfile"/>
<FIELD NAME="inputfile" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="keeplatestonly" NEXT="outputfile"/>
<FIELD NAME="outputfile" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="inputfile" NEXT="presetcode"/>
<FIELD NAME="presetcode" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="outputfile" NEXT="generator"/>
<FIELD NAME="generator" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="presetcode" NEXT="validator"/>
<FIELD NAME="validator" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="generator" NEXT="generatortype"/>
<FIELD NAME="generatortype" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="validator" NEXT="validatortype"/>
<FIELD NAME="validatortype" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="generatortype" NEXT="validatorlang"/>
<FIELD NAME="validatorlang" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="validatortype" NEXT="showmode"/>
<FIELD NAME="showmode" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" ENUM="false" PREVIOUS="validatorlang" NEXT="timemodified"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="showmode"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="mdl_prog_cou_ix" UNIQUE="false" FIELDS="course"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_languages" COMMENT="programming_languages table retrofitted from MySQL" PREVIOUS="programming" NEXT="programming_tests">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="name"/>
<FIELD NAME="name" TYPE="char" LENGTH="20" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="description"/>
<FIELD NAME="description" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="sourceext"/>
<FIELD NAME="sourceext" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="description" NEXT="langmode"/>
<FIELD NAME="langmode" TYPE="char" LENGTH="50" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="sourceext" NEXT="headerext"/>
<FIELD NAME="headerext" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="langmode"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
<TABLE NAME="programming_tests" COMMENT="programming_tests table retrofitted from MySQL" PREVIOUS="programming_languages" NEXT="programming_submits">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="seq"/>
<FIELD NAME="seq" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="input"/>
<FIELD NAME="input" TYPE="text" LENGTH="medium" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="seq" NEXT="gzinput"/>
<FIELD NAME="gzinput" TYPE="binary" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="input" NEXT="output"/>
<FIELD NAME="output" TYPE="text" LENGTH="medium" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="gzinput" NEXT="gzoutput"/>
<FIELD NAME="gzoutput" TYPE="binary" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="output" NEXT="cmdargs"/>
<FIELD NAME="cmdargs" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="gzoutput" NEXT="timelimit"/>
<FIELD NAME="timelimit" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="cmdargs" NEXT="memlimit"/>
<FIELD NAME="memlimit" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="timelimit" NEXT="nproc"/>
<FIELD NAME="nproc" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="memlimit" NEXT="pub"/>
<FIELD NAME="pub" TYPE="int" LENGTH="3" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="nproc" NEXT="weight"/>
<FIELD NAME="weight" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="3" SEQUENCE="false" ENUM="false" PREVIOUS="pub" NEXT="memo"/>
<FIELD NAME="memo" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="weight" NEXT="timemodified"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="memo"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="mdl_progtest_pro_ix" UNIQUE="false" FIELDS="programmingid" NEXT="mdl_progtest_pub_ix"/>
<INDEX NAME="mdl_progtest_pub_ix" UNIQUE="false" FIELDS="pub" PREVIOUS="mdl_progtest_pro_ix"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_submits" COMMENT="Programs submitted by users are stored in this table." PREVIOUS="programming_tests" NEXT="programming_test_results">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="userid"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="timemodified"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="userid" NEXT="language"/>
<FIELD NAME="language" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="timemodified" NEXT="code"/>
<FIELD NAME="code" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="language" NEXT="codelines"/>
<FIELD NAME="codelines" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="code" NEXT="codesize"/>
<FIELD NAME="codesize" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="codelines" NEXT="status"/>
<FIELD NAME="status" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="codesize" NEXT="compilemessage"/>
<FIELD NAME="compilemessage" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="status" NEXT="timeused"/>
<FIELD NAME="timeused" TYPE="float" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="compilemessage" NEXT="memused"/>
<FIELD NAME="memused" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="timeused" NEXT="judgeresult"/>
<FIELD NAME="judgeresult" TYPE="char" LENGTH="5" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="memused" NEXT="passed"/>
<FIELD NAME="passed" TYPE="int" LENGTH="1" NOTNULL="false" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="judgeresult"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="questionid" UNIQUE="false" FIELDS="programmingid, userid, language, status" NEXT="timemodified"/>
<INDEX NAME="timemodified" UNIQUE="false" FIELDS="timemodified" PREVIOUS="questionid" NEXT="passed"/>
<INDEX NAME="passed" UNIQUE="false" FIELDS="passed" PREVIOUS="timemodified" NEXT="prog_timeused"/>
<INDEX NAME="prog_timeused" UNIQUE="false" FIELDS="programmingid, timeused" PREVIOUS="passed" NEXT="prog_memused"/>
<INDEX NAME="prog_memused" UNIQUE="false" FIELDS="programmingid, memused" PREVIOUS="prog_timeused" NEXT="prog_judgeresult"/>
<INDEX NAME="prog_judgeresult" UNIQUE="false" FIELDS="programmingid, judgeresult" PREVIOUS="prog_memused"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_test_results" COMMENT="programming_test_results table retrofitted from MySQL" PREVIOUS="programming_submits" NEXT="programming_result">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="submitid"/>
<FIELD NAME="submitid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="testid"/>
<FIELD NAME="testid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="submitid" NEXT="passed"/>
<FIELD NAME="passed" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="testid" NEXT="exitcode"/>
<FIELD NAME="exitcode" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="passed" NEXT="exitsignal"/>
<FIELD NAME="exitsignal" TYPE="int" LENGTH="3" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="exitcode" NEXT="output"/>
<FIELD NAME="output" TYPE="binary" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="exitsignal" NEXT="stderr"/>
<FIELD NAME="stderr" TYPE="binary" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="output" NEXT="timeused"/>
<FIELD NAME="timeused" TYPE="float" NOTNULL="false" UNSIGNED="false" SEQUENCE="false" ENUM="false" PREVIOUS="stderr" NEXT="memused"/>
<FIELD NAME="memused" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="false" SEQUENCE="false" ENUM="false" PREVIOUS="timeused" NEXT="judgeresult"/>
<FIELD NAME="judgeresult" TYPE="char" LENGTH="5" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="memused"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for programming_test_results"/>
</KEYS>
<INDEXES>
<INDEX NAME="submitid" UNIQUE="false" FIELDS="submitid, testid, passed" NEXT="testid"/>
<INDEX NAME="testid" UNIQUE="false" FIELDS="testid" PREVIOUS="submitid" NEXT="timeused"/>
<INDEX NAME="timeused" UNIQUE="false" FIELDS="timeused" PREVIOUS="testid"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_result" COMMENT="Record submit count and latestsubmit for each user of each programming exercise." PREVIOUS="programming_test_results" NEXT="programming_resemble">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="userid"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="submitcount"/>
<FIELD NAME="submitcount" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="userid" NEXT="latestsubmitid"/>
<FIELD NAME="latestsubmitid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="submitcount"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for programming_result"/>
</KEYS>
<INDEXES>
<INDEX NAME="programming-user" UNIQUE="false" FIELDS="programmingid, userid"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_resemble" COMMENT="programming_resemble table retrofitted from MySQL" PREVIOUS="programming_result" NEXT="programming_langlimit">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="matchedcount"/>
<FIELD NAME="matchedcount" TYPE="int" LENGTH="4" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="matchedlines"/>
<FIELD NAME="matchedlines" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="matchedcount" NEXT="submitid1"/>
<FIELD NAME="submitid1" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="matchedlines" NEXT="percent1"/>
<FIELD NAME="percent1" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="submitid1" NEXT="submitid2"/>
<FIELD NAME="submitid2" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="percent1" NEXT="percent2"/>
<FIELD NAME="percent2" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="submitid2" NEXT="flag"/>
<FIELD NAME="flag" TYPE="int" LENGTH="2" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="percent2"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for programming_resemble"/>
</KEYS>
<INDEXES>
<INDEX NAME="proglines" UNIQUE="false" FIELDS="programmingid, flag, matchedcount"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_langlimit" COMMENT="programming_langlimit table retrofitted from MySQL" PREVIOUS="programming_resemble" NEXT="programming_datafile">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="languageid"/>
<FIELD NAME="languageid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for programming_langlimit" NEXT="programminglanguage"/>
<KEY NAME="programminglanguage" TYPE="unique" FIELDS="programmingid, languageid" PREVIOUS="primary" NEXT="languageprogramming"/>
<KEY NAME="languageprogramming" TYPE="unique" FIELDS="languageid, programmingid" PREVIOUS="programminglanguage"/>
</KEYS>
</TABLE>
<TABLE NAME="programming_datafile" COMMENT="programming_datafile table retrofitted from MySQL" PREVIOUS="programming_langlimit" NEXT="programming_presetcode">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="seq"/>
<FIELD NAME="seq" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="filename"/>
<FIELD NAME="filename" TYPE="char" LENGTH="50" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="seq" NEXT="isbinary"/>
<FIELD NAME="isbinary" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="filename" NEXT="datasize"/>
<FIELD NAME="datasize" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="isbinary" NEXT="data"/>
<FIELD NAME="data" TYPE="binary" LENGTH="medium" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="datasize" NEXT="checkdatasize"/>
<FIELD NAME="checkdatasize" TYPE="int" LENGTH="10" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="data" NEXT="checkdata"/>
<FIELD NAME="checkdata" TYPE="binary" LENGTH="medium" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="checkdatasize" NEXT="memo"/>
<FIELD NAME="memo" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="checkdata" NEXT="timemodified"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="memo"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="mdl_progdata_profil_uix"/>
<KEY NAME="mdl_progdata_profil_uix" TYPE="unique" FIELDS="programmingid, filename" PREVIOUS="primary"/>
</KEYS>
<INDEXES>
<INDEX NAME="mdl_progdata_proseq_ix" UNIQUE="false" FIELDS="programmingid, seq"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_presetcode" COMMENT="programming_presetcode table retrofitted from MySQL" PREVIOUS="programming_datafile" NEXT="programming_testers">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="programmingid"/>
<FIELD NAME="programmingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="languageid"/>
<FIELD NAME="languageid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="programmingid" NEXT="name"/>
<FIELD NAME="name" TYPE="char" LENGTH="50" NOTNULL="true" SEQUENCE="false" ENUM="false" PREVIOUS="languageid" NEXT="sequence"/>
<FIELD NAME="sequence" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="presetcode"/>
<FIELD NAME="presetcode" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="sequence" NEXT="presetcodeforcheck"/>
<FIELD NAME="presetcodeforcheck" TYPE="text" LENGTH="small" NOTNULL="false" SEQUENCE="false" ENUM="false" PREVIOUS="presetcode"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="mdl_progpres_prolannam_uix"/>
<KEY NAME="mdl_progpres_prolannam_uix" TYPE="unique" FIELDS="programmingid, languageid, name" PREVIOUS="primary"/>
</KEYS>
<INDEXES>
<INDEX NAME="mdl_progpres_proseq_ix" UNIQUE="false" FIELDS="programmingid, sequence"/>
</INDEXES>
</TABLE>
<TABLE NAME="programming_testers" COMMENT="Judging information is saved in this table." PREVIOUS="programming_presetcode">
<FIELDS>
<FIELD NAME="submitid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" NEXT="testerid"/>
<FIELD NAME="testerid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false" ENUM="false" PREVIOUS="submitid" NEXT="priority"/>
<FIELD NAME="priority" TYPE="int" LENGTH="1" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="testerid" NEXT="state"/>
<FIELD NAME="state" TYPE="int" LENGTH="2" NOTNULL="false" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="priority"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="submitid"/>
</KEYS>
<INDEXES>
<INDEX NAME="idx_testerid" UNIQUE="false" FIELDS="testerid"/>
</INDEXES>
</TABLE>
</TABLES>
<STATEMENTS>
<STATEMENT NAME="insert programming_languages" TYPE="insert" TABLE="programming_languages" COMMENT="Initial insert of records on table programming_languages">
<SENTENCES>
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('gcc-3.3', 'C (GCC 3.3)', '.c', '.h')" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('g++-3.3', 'C++ (G++ 3.3)', '.cpp .cxx', '.h .hpp')" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('java-1.5', 'Java (Sun JDK 5)', '.java', NULL)" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('java-1.6', 'Java (Sun JDK 6)', '.java', NULL)" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('fpc-2.2', 'Pascal (Free Pascal 2)', '.pas', NULL)" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('python-2.5', 'Python 2.5', '.py', NULL)" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('gmcs-2.0', 'C# (Mono 2.0)', '.cs', NULL)" />
<SENTENCE TEXT="(name, description, sourceext, headerext) VALUES ('bash-3', 'Bash (Bash 3)', '.sh', NULL)" />
</SENTENCES>
</STATEMENT>
</STATEMENTS>
</XMLDB>

121
db/mysql.php Normal file
View File

@@ -0,0 +1,121 @@
<?PHP
// THIS FILE IS DEPRECATED! PLEASE DO NOT MAKE CHANGES TO IT!
//
// IT IS USED ONLY FOR UPGRADES FROM BEFORE MOODLE 1.7, ALL
// LATER CHANGES SHOULD USE upgrade.php IN THIS DIRECTORY.
function programming_upgrade($oldversion) {
/// This function does anything necessary to upgrade
/// older versions to match current functionality
global $CFG;
if ($oldversion < 2005090101) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming_tests` ADD `weight` TINYINT(3) NOT NULL DEFAULT '3'");
}
if ($oldversion < 2005100103) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `keeplatestonly` TINYINT(3) NOT NULL DEFAULT 0 AFTER attempts");
}
if ($oldversion < 2006030412) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `timediscount` INT(10) NOT NULL DEFAULT '130000000' AFTER `memlimit`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `discount` FLOAT NOT NULL DEFAULT '8' AFTER `timediscount`");
}
if ($oldversion < 2006040200) {
// Add new columns to test results
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` ADD `status` INT(10) NOT NULL DEFAULT '0' AFTER `passed`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` ADD `stderr` TEXT NULL AFTER `output`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` CHANGE `output` `output` TEXT NULL");
// Change the type of column language of submits
execute_sql("UPDATE `{$CFG->prefix}programming_submits` set language=1 where language='c89' or language='c99'");
execute_sql("UPDATE `{$CFG->prefix}programming_submits` set language=2 where language='c++98'");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_submits` CHANGE `language` `language` INT(10) NULL");
// Create a table for languages
execute_sql("CREATE TABLE {$CFG->prefix}programming_languages ( id int(10) NOT NULL auto_increment, name varchar(20) NOT NULL, PRIMARY KEY (id)) COMMENT='programming language'");
execute_sql("INSERT INTO {$CFG->prefix}programming_languages VALUES (1, 'gcc-3.3')");
execute_sql("INSERT INTO {$CFG->prefix}programming_languages VALUES (2, 'g++-3.3')");
}
if ($oldversion < 2006040312) {
// Add new columns to test results
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` ADD exitcode TINYINT(3) NOT NULL DEFAULT '0' AFTER `status`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` ADD signal TINYINT(3) NOT NULL DEFAULT '0' AFTER `exitcode`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` DROP `status`");
}
if ($oldversion < 2006040512) {
execute_sql("
CREATE TABLE {$CFG->prefix}programming_langlimit (
id int(10) NOT NULL AUTO_INCREMENT,
programmingid int(10) NOT NULL,
languageid int(10) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY programminglanguage(programmingid, languageid),
UNIQUE KEY languageprogramming(languageid, programmingid)
) COMMENT='programming language limit';
");
}
if ($oldversion < 2006040617) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming_tests` CHANGE `input` `input` MEDIUMTEXT NOT NULL");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_tests` CHANGE `output` `output` MEDIUMTEXT NOT NULL");
}
if ($oldversion < 2006062300) {
execute_sql("
CREATE TABLE `{$CFG->prefix}programming_resemble` (
id int(10) NOT NULL auto_increment,
programmingid int(10) NOT NULL default '0',
matchedcount int(4) NOT NULL default '0',
matchedlines text,
submitid1 int(10) NOT NULL default '0',
percent1 int(2) NOT NULL default '0',
submitid2 int(10) NOT NULL default '0',
percent2 int(2) NOT NULL default '0',
flag tinyint(2) NOT NULL default '0',
PRIMARY KEY (id),
KEY proglines (programmingid, flag, matchedcount)
) COMMENT='resemble info returned by moss';
");
}
if ($oldversion < 2006070301) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `generatortype` tinyint(1) NOT NULL DEFAULT '0'");
execute_sql("ALTER TABLE `{$CFG->prefix}programming` CHANGE `generator` `generator` TEXT");
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `validatortype` tinyint(1) NOT NULL DEFAULT '0'");
execute_sql("ALTER TABLE `{$CFG->prefix}programming` CHANGE `validator` `validator` TEXT");
}
if ($oldversion < 2006112801) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming_submits` ADD `codelines` int(10) NOT NULL default '0' AFTER `code`");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_submits` ADD `codesize` int(10) NOT NULL default '0' AFTER `codelines`");
execute_sql("UPDATE `{$CFG->prefix}programming_submits` SET codesize = CHAR_LENGTH(code)");
execute_sql("UPDATE `{$CFG->prefix}programming_submits` SET codelines = codesize - CHAR_LENGTH(REPLACE(code, '\n', ''))");
}
if ($oldversion < 2006112802) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming` ADD `showmode` TINYINT(1) NOT NULL DEFAULT '1'");
}
if ($oldversion < 2006121001) {
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` CHANGE `output` `output` TEXT CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL");
execute_sql("ALTER TABLE `{$CFG->prefix}programming_test_results` CHANGE `stderr` `stderr` TEXT CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL");
}
return true;
}
?>

92
db/upgrade.php Normal file
View File

@@ -0,0 +1,92 @@
<?php
// This file keeps track of upgrades to
// the programming module
//
// Sometimes, changes between versions involve
// alterations to database structures and other
// major things that may break installations.
//
// The upgrade function in this file will attempt
// to perform all the necessary actions to upgrade
// your older installtion to the current version.
//
// If there's something it cannot do itself, it
// will tell you what you need to do.
//
// The commands in here will all be database-neutral,
// using the functions defined in lib/ddllib.php
function xmldb_programming_upgrade($oldversion=0) {
global $CFG, $THEME, $DB;
$result = true;
$dbman = $DB->get_manager();
/// And upgrade begins here. For each one, you'll need one
/// block of code similar to the next one. Please, delete
/// this comment lines once this file start handling proper
/// upgrade code.
/// if ($result && $oldversion < YYYYMMDD00) { //New version in version.php
/// $result = result of "/lib/ddllib.php" function calls
/// }
//2012051101
//2011062402 is the latest version fits for moodle1.9x
if ($result && $oldversion < 2011062402) {
$prefix = $DB->get_prefix();
$sql = "ALTER TABLE `{$prefix}programming` CHANGE COLUMN `description` `intro` longtext NOT NULL,";
$sql .= "CHANGE COLUMN `descformat` `introformat` tinyint(2) NOT NULL DEFAULT 0;";
$DB->change_database_structure($sql);
upgrade_mod_savepoint(true, 2011062402, 'programming');
}
if ($result && $oldversion < 2012081804) {
$prefix = $DB->get_prefix();
$sql = "ALTER TABLE {$prefix}programming_presetcode CHANGE COLUMN presetcodeforcheck presetcodeforcheck LONGTEXT NULL;";
$DB->change_database_structure($sql);
upgrade_mod_savepoint(true, 2012081804, 'programming');
}
//2012080803
if ($result && $oldversion < 2012081903) {
$prefix = $DB->get_prefix();
$sql = "ALTER TABLE {$prefix}programming_datafile CHANGE COLUMN checkdatasize checkdatasize bigint(10) NULL, CHANGE COLUMN checkdata checkdata longblob NULL;";
$DB->change_database_structure($sql);
upgrade_mod_savepoint(true, 2012081903, 'programming');
}
//2012122601
if ($result && $oldversion < 2012122601) {
$table = new xmldb_table('programming_languages');
$field = new xmldb_field('langmode', XMLDB_TYPE_CHAR, '50', null,
null, null, null, 'headerext');
// add field langmode for programming_languages .
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
// Set the cutoffdate to the duedate if preventlatesubmissions was enabled.
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-csrc' WHERE name = 'gcc-3.3'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-c++src' WHERE name = 'g++-3.3'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-java' WHERE name = 'java-1.5'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-java' WHERE name = 'java-1.6'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-pascal' WHERE name = 'fpc-2.2'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-python' WHERE name = 'python-2.5'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-csharp' WHERE name = 'gmcs-2.0'";
$DB->execute($sql);
$sql = "UPDATE {programming_languages} SET langmode = 'text/x-sh' WHERE name = 'bash-3'";
$DB->execute($sql);
}
upgrade_mod_savepoint(true, 2012122601, 'programming');
}
return $result;
}
?>