예제 #1
0
 public static function repopulate_table()
 {
     $sql = "DELETE FROM `TestTemplate`";
     mysql_query($sql);
     $sql = "SELECT * FROM `TestSection`";
     $z = mysql_query($sql);
     while ($r = mysql_fetch_array($z)) {
         set_time_limit(0);
         if ($r['TestSectionType_id'] == DS_TestSectionType::LOAD_HTML_TEMPLATE) {
             $ts = TestSection::from_mysql_id($r['id']);
             $vals = $ts->get_values();
             $template = Template::from_mysql_id($vals[0]);
             if ($template != null) {
                 $html = Template::output_html($template->HTML, $vals, $template->get_outputs(), $template->get_inserts());
                 $test_template = new TestTemplate();
                 $test_template->Test_id = $r['Test_id'];
                 $test_template->TestSection_id = $r['id'];
                 $test_template->Template_id = $vals[0];
                 $test_template->HTML = $html;
                 $test_template->effect_show = $template->effect_show;
                 $test_template->effect_hide = $template->effect_hide;
                 $test_template->effect_show_options = $template->effect_show_options;
                 $test_template->effect_hide_options = $template->effect_hide_options;
                 $test_template->mysql_save();
             }
         }
     }
 }
 public static function get_mapped_variables($TestSection_id)
 {
     $map = array();
     $ts = TestSection::from_mysql_id($TestSection_id);
     if ($ts == null || $ts->TestSectionType_id != DS_TestSectionType::QTI_INITIALIZATION) {
         return null;
     }
     $vals = $ts->get_values();
     for ($i = 1; $i < count($vals); $i = $i + 2) {
         $map[$vals[$i]] = $vals[$i + 1];
     }
     return $map;
 }
예제 #3
0
 public function get_next_not_child_TestSection($parent_counter = null)
 {
     if ($parent_counter == null) {
         $parent_counter = $this->parent_counter;
     }
     $sql = sprintf("SELECT * FROM `%s` WHERE `Test_id`=%d AND `id`>%d AND `parent_counter`=%d ORDER BY `id` ASC LIMIT 0,1", TestSection::get_mysql_table(), $this->Test_id, $this->id, $parent_counter);
     $z = mysql_query($sql);
     while ($r = mysql_fetch_array($z)) {
         return TestSection::from_mysql_result($r);
     }
     $parent = TestSection::from_property(array("Test_id" => $this->Test_id, "counter" => $parent_counter), false);
     return $this->get_next_not_child_TestSection($parent->parent_counter);
 }
*/
if (!isset($ini)) {
    require_once '../../Ini.php';
    $ini = new Ini();
}
$logged_user = User::get_logged_user();
if ($logged_user == null) {
    echo "<script>location.reload();</script>";
    die(Language::string(278));
}
$vals = array();
if (array_key_exists('value', $_POST)) {
    $vals = $_POST['value'];
}
if (array_key_exists('oid', $_POST) && $_POST['oid'] != 0) {
    $section = TestSection::from_mysql_id($_POST['oid']);
    $vals = $section->get_values();
}
?>
  

<div class="divSectionSummary sortableHandle">
    <table class="fullWidth tableSectionHeader">
        <tr>
            <!--<td class="tdSectionColumnIcon"></td>-->
            <td class="ui-widget-header tdSectionColumnCounter" id="tooltipSectionDetail_<?php 
echo $_POST['counter'];
?>
" title=""><?php 
echo $_POST['counter'];
?>
예제 #5
0
 public static function forward($tid, $sid, $hash, $values, $btn_name, $debug, $time, $resume_from_last_template = false)
 {
     $session = null;
     $result = array();
     if ($sid != null && $hash != null) {
         $session = TestSession::authorized_session($sid, $hash);
         if ($session != null) {
             if ($values == null) {
                 $values = array();
             }
             if ($btn_name != null) {
                 array_push($values, json_encode(array("name" => "LAST_PRESSED_BUTTON_NAME", "value" => $btn_name)));
             }
             if (Ini::$timer_tamper_prevention && $session->time_limit > 0 && $time - $session->time_tamper_prevention - Ini::$timer_tamper_prevention_tolerance > $session->time_limit) {
                 if ($session->debug == 1) {
                     TestSession::unregister($session->id);
                 } else {
                     $session->close();
                 }
                 $result = array("data" => array("HASH" => $hash, "TIME_LIMIT" => 0, "HTML" => "", "TEST_ID" => 0, "TEST_SESSION_ID" => $sid, "STATUS" => TestSession::TEST_SESSION_STATUS_TAMPERED, "TEMPLATE_ID" => 0, "HEAD" => "", "FINISHED" => 1));
                 if ($session->debug == 1) {
                     $result["debug"] = array("code" => 0, "return" => "", "output" => "");
                 }
             } else {
                 if (!$resume_from_last_template) {
                     $result = $session->resume($values);
                 } else {
                     $ts = TestSection::from_mysql_id($session->Template_TestSection_id);
                     if ($ts == null) {
                         $result = $session->resume($values);
                     } else {
                         $result = $session->run_Test($ts->counter, $values);
                     }
                 }
             }
         } else {
             $result = array("data" => array("HASH" => $hash, "TIME_LIMIT" => 0, "HTML" => "", "TEST_ID" => 0, "TEST_SESSION_ID" => $sid, "STATUS" => TestSession::TEST_SESSION_STATUS_TAMPERED, "TEMPLATE_ID" => 0, "HEAD" => "", "FINISHED" => 1), "debug" => array("code" => 0, "return" => "", "output" => ""));
         }
     } else {
         if ($tid != null) {
             if ($debug == 1) {
                 $debug = true;
             } else {
                 $debug = false;
             }
             $session = TestSession::start_new($tid, $debug);
             if ($values == null) {
                 $values = array();
             }
             $test = $session->get_Test();
             if ($test != null) {
                 $values = $test->verified_input_values($values);
             } else {
                 $result = array("data" => array("HASH" => $hash, "TIME_LIMIT" => 0, "HTML" => "", "TEST_ID" => $tid, "TEST_SESSION_ID" => $sid, "STATUS" => TestSession::TEST_SESSION_STATUS_TAMPERED, "TEMPLATE_ID" => 0, "HEAD" => "", "FINISHED" => 1), "debug" => array("code" => 0, "return" => "", "output" => ""));
                 return $result;
             }
             $result = $session->run_test(null, $values);
         }
     }
     return $result;
 }
예제 #6
0
 public function mysql_save_from_post($post)
 {
     $lid = parent::mysql_save_from_post($post);
     $obj = static::from_mysql_id($lid);
     if ($obj != null) {
         $xml_hash = $obj->calculate_xml_hash();
         $obj->xml_hash = $xml_hash;
         $obj->mysql_save();
         $tt = TestTemplate::from_property(array("Template_id" => $lid));
         foreach ($tt as $elem) {
             $ts = TestSection::from_mysql_id($elem->TestSection_id);
             $vals = $ts->get_values();
             $html = Template::output_html($obj->HTML, $vals, $obj->get_outputs(), $obj->get_inserts());
             $elem->HTML = $html;
             $elem->mysql_save();
         }
     }
     return $lid;
 }
예제 #7
0
<script>
    $(function(){
        $( "#divTestLogic" ).sortable({
            items: "> div.sortable",
            handle: ".sortableHandle",
            opacity:0.5,
            axis:"y",
            forcePlaceholderSize:true,
            placeholder:"ui-state-highlight"
        });
        
        Test.contentsToRefresh=0;
<?php 
if ($oid != 0) {
    $sections = TestSection::from_property(array("Test_id" => $obj->id));
    ?>
                Methods.modalProgress(null, <?php 
    echo count($sections);
    ?>
);
                Test.listenToSectionChanged=false;
                Test.setCounter(<?php 
    echo $obj->get_max_counter();
    ?>
);
    <?php 
    $late_refresh_sections = array();
    foreach ($sections as $section) {
        $vals = $section->get_values();
        ?>
 public function get_TestSection()
 {
     return TestSection::from_mysql_id($this->TestSection_id);
 }
예제 #9
0
 public function to_XML()
 {
     $xml = new DOMDocument();
     $element = $xml->createElement("Test");
     $element->setAttribute("id", $this->id);
     $element->setAttribute("xml_hash", $this->xml_hash);
     $xml->appendChild($element);
     $name = $xml->createElement("name", htmlspecialchars($this->name, ENT_QUOTES, "UTF-8"));
     $element->appendChild($name);
     $description = $xml->createElement("description", htmlspecialchars($this->description, ENT_QUOTES, "UTF-8"));
     $element->appendChild($description);
     $open = $xml->createElement("open", htmlspecialchars($this->open, ENT_QUOTES, "UTF-8"));
     $element->appendChild($open);
     $loader_Template_id = $xml->createElement("loader_Template_id", htmlspecialchars($this->loader_Template_id, ENT_QUOTES, "UTF-8"));
     $element->appendChild($loader_Template_id);
     $sections = $xml->createElement("TestSections");
     $element->appendChild($sections);
     $ts = TestSection::from_property(array("Test_id" => $this->id));
     foreach ($ts as $s) {
         $elem = $s->to_XML();
         $elem = $xml->importNode($elem, true);
         $sections->appendChild($elem);
     }
     $test_protected_variables = $xml->createElement("TestProtectedVariables");
     $element->appendChild($test_protected_variables);
     $tpv = $this->get_TestProtectedVariables();
     foreach ($tpv as $var) {
         $elem = $var->to_XML();
         $elem = $xml->importNode($elem, true);
         $test_protected_variables->appendChild($elem);
     }
     $test_variables = $xml->createElement("TestVariables");
     $element->appendChild($test_variables);
     $tv = $this->get_TestVariables();
     foreach ($tv as $var) {
         $elem = $var->to_XML();
         $elem = $xml->importNode($elem, true);
         $test_variables->appendChild($elem);
     }
     return $element;
 }
예제 #10
0
 public static function update_db($simulate = false, $only_recalculate_hash = false, $only_repopulate_TestTemplate = false, $only_validate_column_names = false, $only_create_db = false)
 {
     require '../Ini.php';
     $ini = new Ini();
     if ($only_create_db) {
         return self::create_db_structure();
     }
     if ($only_recalculate_hash) {
         OModule::calculate_all_xml_hashes();
         return json_encode(array("result" => 0));
     }
     if ($only_repopulate_TestTemplate) {
         TestTemplate::repopulate_table();
         return json_encode(array("result" => 0));
     }
     if ($only_validate_column_names) {
         $result = TableColumn::validate_columns_name();
         return json_encode(array("result" => $result ? 0 : 1));
     }
     $versions_to_update = array();
     $previous_version = Setting::get_setting("version");
     if ($previous_version == null) {
         $previous_version = Ini::$version;
     }
     $recalculate_hash = false;
     $repopulate_TestTemplate = false;
     $validate_column_names = false;
     if (Ini::does_patch_apply("3.3.0", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.3.0");
         } else {
             ///COMPATIBILITY FIX FOR V3.0.0 START
             $sql = "SHOW COLUMNS FROM `User` WHERE `Field`='last_activity'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) > 0) {
                 $sql = "ALTER TABLE `User` CHANGE `last_activity` `last_login` timestamp NOT NULL default '0000-00-00 00:00:00';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //DS_TableColumnType - numeric split to integer and float
             $id_4_found = false;
             $sql = "SELECT * FROM `DS_TableColumnType`";
             $z = mysql_query($sql);
             while ($r = mysql_fetch_array($z)) {
                 switch ($r['id']) {
                     case 2:
                         if ($r['name'] != "integer") {
                             $sql2 = "UPDATE `DS_TableColumnType` SET `name`='integer', value='integer' WHERE `id`=2";
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                         }
                         break;
                     case 3:
                         if ($r['name'] != "float") {
                             $sql2 = "UPDATE `DS_TableColumnType` SET `name`='float', value='float' WHERE `id`=3";
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                         }
                         break;
                     case 4:
                         $id_4_found = true;
                         if ($r['name'] != "HTML") {
                             $sql2 = "UPDATE `DS_TableColumnType` SET `name`='HTML', value='HTML' WHERE `id`=4";
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                         }
                         break;
                 }
             }
             if (!$id_4_found) {
                 $sql2 = "INSERT INTO `DS_TableColumnType` SET `id`=4, `name`='HTML', value='HTML', `position`=4";
                 if (!mysql_query($sql2)) {
                     return json_encode(array("result" => 1, "param" => $sql2));
                 }
             }
             //TableColumn - change numeric and float MySQL type
             $sql = sprintf("SELECT * FROM `TableColumn`");
             $z = mysql_query($sql);
             while ($r = mysql_fetch_array($z)) {
                 $table = Table::from_mysql_id($r['Table_id']);
                 if ($table == null) {
                     continue;
                 }
                 if (!$table->has_table()) {
                     $table->mysql_delete();
                     continue;
                 }
                 $table_name = $table->get_table_name();
                 $type = "TEXT NOT NULL";
                 switch ($r['TableColumnType_id']) {
                     case 2:
                         $type = "BIGINT NOT NULL";
                         break;
                     case 3:
                         $type = "DOUBLE NOT NULL";
                         break;
                 }
                 $old_name = $r['name'];
                 $new_name = Table::format_column_name($old_name);
                 if ($r['TableColumnType_id'] == 3) {
                     $sql2 = sprintf("UPDATE `TableColumn` SET `TableColumnType_id`='%d' WHERE `id`='%d'", 4, $r['id']);
                     if (!mysql_query($sql2)) {
                         return json_encode(array("result" => 1, "param" => $sql2));
                     }
                 }
                 if ($old_name != $new_name) {
                     $sql2 = sprintf("ALTER TABLE `%s` CHANGE `%s` `%s` %s;", $table_name, $old_name, $new_name, $type);
                     $i = 1;
                     while (!mysql_query($sql2)) {
                         $new_name = "col" . $i;
                         $sql2 = sprintf("ALTER TABLE `%s` CHANGE `%s` `%s` %s;", $table_name, $old_name, $new_name, $type);
                         $i++;
                     }
                     $sql2 = sprintf("UPDATE `TableColumn` SET `name`='%s' WHERE `id`='%d'", $new_name, $r['id']);
                     if (!mysql_query($sql2)) {
                         return json_encode(array("result" => 1, "param" => $sql2));
                     }
                 }
             }
             Setting::set_setting("version", "3.3.0");
             return json_encode(array("result" => 0, "param" => "3.3.0"));
         }
     }
     if (Ini::does_patch_apply("3.4.0", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.4.0");
         } else {
             //Test - add session_count field
             $sql = "SHOW COLUMNS FROM `Test` WHERE `Field`='session_count'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Test` ADD `session_count` bigint(20) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSectionValue - indexes changes
             $sql = sprintf("SELECT `TestSection`.`id`, `TestSection`.`TestSectionType_id` FROM `TestSection` WHERE `TestSectionType_id` IN (%d,%d,%d)", DS_TestSectionType::LOAD_HTML_TEMPLATE, DS_TestSectionType::SET_VARIABLE, DS_TestSectionType::CUSTOM);
             $z = mysql_query($sql);
             while ($r = mysql_fetch_array($z)) {
                 set_time_limit(0);
                 switch ($r[1]) {
                     case DS_TestSectionType::LOAD_HTML_TEMPLATE:
                         $params_count = 0;
                         $returns_count = 0;
                         $sql2 = sprintf("SELECT `index`,`value` FROM `%s` WHERE `TestSection_id`=%d AND (`index`=1 OR `index`=2) ", TestSectionValue::get_mysql_table(), $r[0]);
                         $z2 = mysql_query($sql2);
                         while ($r2 = mysql_fetch_array($z2)) {
                             if ($r2['index'] == 1) {
                                 $params_count = $r2['value'];
                             }
                             if ($r2['index'] == 2) {
                                 $returns_count = $r2['value'];
                             }
                         }
                         $delete_index = 3 + $params_count + 1;
                         for ($i = 0; $i < $returns_count; $i++) {
                             $sql2 = sprintf("DELETE FROM `%s` WHERE `TestSection_id`=%d AND `index` IN (%d,%d)", TestSectionValue::get_mysql_table(), $r[0], $delete_index, $delete_index + 1);
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                             $sql2 = sprintf("UPDATE `%s` SET `index`=`index`-2 WHERE `TestSection_id`=%d AND `index`>%d", TestSectionValue::get_mysql_table(), $r[0], $delete_index);
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                             $delete_index++;
                         }
                         break;
                     case DS_TestSectionType::SET_VARIABLE:
                         $sql2 = sprintf("DELETE FROM `%s` WHERE `TestSection_id`=%d AND `index` IN (4,5)", TestSectionValue::get_mysql_table(), $r[0]);
                         if (!mysql_query($sql2)) {
                             return json_encode(array("result" => 1, "param" => $sql2));
                         }
                         $sql2 = sprintf("UPDATE `%s` SET `index`=`index`-2 WHERE `TestSection_id`=%d AND `index`>%d", TestSectionValue::get_mysql_table(), $r[0], 5);
                         if (!mysql_query($sql2)) {
                             return json_encode(array("result" => 1, "param" => $sql2));
                         }
                         break;
                     case DS_TestSectionType::CUSTOM:
                         $params_count = 0;
                         $returns_count = 0;
                         $csid = 0;
                         $sql2 = sprintf("SELECT `value` FROM `%s` WHERE `TestSection_id`=%d AND `index`=0 ", TestSectionValue::get_mysql_table(), $r[0]);
                         $z2 = mysql_query($sql2);
                         $r2 = mysql_fetch_array($z2);
                         $csid = $r2['value'];
                         $sql2 = sprintf("SELECT * FROM `%s` WHERE `CustomSection_id`=%d AND `type`=0", CustomSectionVariable::get_mysql_table(), $csid);
                         $params_count = mysql_num_rows(mysql_query($sql2));
                         $sql2 = sprintf("SELECT * FROM `%s` WHERE `CustomSection_id`=%d AND `type`=1", CustomSectionVariable::get_mysql_table(), $csid);
                         $returns_count = mysql_num_rows(mysql_query($sql2));
                         $delete_index = 1 + $params_count + 1;
                         for ($i = 0; $i < $returns_count; $i++) {
                             $sql2 = sprintf("DELETE FROM `%s` WHERE `TestSection_id`=%d AND `index` IN (%d,%d)", TestSectionValue::get_mysql_table(), $r[0], $delete_index, $delete_index + 1);
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                             $sql2 = sprintf("UPDATE `%s` SET `index`=`index`-2 WHERE `TestSection_id`=%d AND `index`>%d", TestSectionValue::get_mysql_table(), $r[0], $delete_index);
                             if (!mysql_query($sql2)) {
                                 return json_encode(array("result" => 1, "param" => $sql2));
                             }
                             $delete_index++;
                         }
                         break;
                 }
             }
             //TestSession - added new fields
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='status'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `status` tinyint(4) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='time_limit'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `time_limit` int(11) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='HTML'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `HTML` text NOT NULL default '';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='Template_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `Template_id` bigint(20) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='time_tamper_prevention'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE  `TestSession` ADD  `time_tamper_prevention` INT NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='hash'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `hash` text NOT NULL default '';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='r_type'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE  `TestSession` ADD  `r_type` TINYINT( 1 ) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.4.0");
             return json_encode(array("result" => 0, "param" => "3.4.0"));
         }
     }
     if (Ini::does_patch_apply("3.4.1", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.4.1");
         } else {
             //TestSession - added Template_TestSection_id field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='Template_TestSection_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `Template_TestSection_id` bigint(20) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.4.1");
             return json_encode(array("result" => 0, "param" => "3.4.1"));
         }
     }
     if (Ini::does_patch_apply("3.4.3", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.4.3");
         } else {
             //TestSection - added end field
             $sql = "SHOW COLUMNS FROM `TestSection` WHERE `Field`='end'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSection` ADD `end` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - added new fields
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='debug'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `debug` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='release'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `release` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='serialized'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `serialized` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.4.3");
             return json_encode(array("result" => 0, "param" => "3.4.3"));
         }
     }
     if (Ini::does_patch_apply("3.5.0", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.5.0");
         } else {
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='serialized'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `serialized` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Table - added description field
             $sql = "SHOW COLUMNS FROM `Table` WHERE `Field`='description'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Table` ADD `description` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - fix Timestamp fields names
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='created' OR `Field`='udpated'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 2) {
                 $sql = "ALTER TABLE `TableColumn` CHANGE `created` `updated_temp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TableColumn` CHANGE `udpated` `created` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TableColumn` CHANGE `updated_temp` `updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - added description field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='description'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `description` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Test - added description field
             $sql = "SHOW COLUMNS FROM `Test` WHERE `Field`='description'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Test` ADD `description` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSection - fix Timestamp fields
             $sql = "SHOW COLUMNS FROM `TestSection` WHERE `Field`='created' OR `Field`='updated'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 2) {
                 $sql = "ALTER TABLE `TestSection` CHANGE `created` `updated_temp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TestSection` CHANGE `updated` `created` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TestSection` CHANGE `updated_temp` `updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSectionValue - fix Timestamp fields
             $sql = "SHOW COLUMNS FROM `TestSectionValue` WHERE `Field`='created' OR `Field`='updated'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 2) {
                 $sql = "ALTER TABLE `TestSectionValue` CHANGE `created` `updated_temp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TestSectionValue` CHANGE `updated` `created` TIMESTAMP NOT NULL DEFAULT  '0000-00-00 00:00:00';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
                 $sql = "ALTER TABLE `TestSectionValue` CHANGE `updated_temp` `updated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.5.0");
             return json_encode(array("result" => 0, "param" => "3.5.0"));
         }
     }
     if (Ini::does_patch_apply("3.5.2", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.5.2");
         } else {
             //TestSection - fixed name of r_type field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='r_typ'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) > 0) {
                 $sql = "ALTER TABLE `TestSession` CHANGE `r_typ` `r_type` tinyint(1) NOT NULL default '0';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.5.2");
             return json_encode(array("result" => 0, "param" => "3.5.2"));
         }
     }
     if (Ini::does_patch_apply("3.6.0", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.0");
         } else {
             //DS_TestSectionType - added loop and test inclusion section
             $sql = "INSERT INTO `DS_TestSectionType` SET `id`=10, `name`='loop', `value`='10', `position`=10;";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "msg" => $sql));
             }
             $sql = "INSERT INTO `DS_TestSectionType` SET `id`=11, `name`='test inclusion', `value`='11', `position`=11;";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             //Template - added head field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='head'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `head` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.6.0");
             return json_encode(array("result" => 0, "param" => "3.6.0"));
         }
     }
     if (Ini::does_patch_apply("3.6.2", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.2");
         } else {
             //CustomSection - added xml_hash
             $sql = "SHOW COLUMNS FROM `CustomSection` WHERE `Field`='xml_hash'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `CustomSection` ADD `xml_hash` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Table - added xml_hash
             $sql = "SHOW COLUMNS FROM `Table` WHERE `Field`='xml_hash'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Table` ADD `xml_hash` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - added xml_hash
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='xml_hash'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `xml_hash` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Test - added xml_hash
             $sql = "SHOW COLUMNS FROM `Test` WHERE `Field`='xml_hash'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Test` ADD `xml_hash` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.6.2");
             return json_encode(array("result" => 0, "param" => "3.6.2"));
         }
     }
     if (Ini::does_patch_apply("3.6.7", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.7");
         } else {
             //User - added new fields
             $sql = "SHOW COLUMNS FROM `User` WHERE `Field`='UserInstitutionType_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `User` ADD `UserInstitutionType_id` int(11) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             $sql = "SHOW COLUMNS FROM `User` WHERE `Field`='institution_name'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `User` ADD `institution_name` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //UserType - changed Sharing_id of standard user type to public
             $sql = "UPDATE `UserType` SET `Sharing_id`=3 WHERE `id`=4;";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             Setting::set_setting("version", "3.6.7");
             return json_encode(array("result" => 0, "param" => "3.6.7"));
         }
     }
     if (Ini::does_patch_apply("3.6.8", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.8");
         } else {
             //TestSectionValue - indexes changes
             $sections = TestSection::from_property(array("TestSectionType_id" => DS_TestSectionType::LOAD_HTML_TEMPLATE));
             foreach ($sections as $section) {
                 $sql = sprintf("DELETE FROM `%s` WHERE `TestSection_id`=%d AND `index`>=3", TestSectionValue::get_mysql_table(), $section->id);
                 $vals = $section->get_values();
                 $template = Template::from_mysql_id($vals[0]);
                 if ($template == null) {
                     continue;
                 }
                 $inserts = $template->get_inserts();
                 $returns = $template->get_outputs();
                 $j = 3;
                 $i = 3;
                 foreach ($inserts as $ins) {
                     $tsv = new TestSectionValue();
                     $tsv->TestSection_id = $section->id;
                     $tsv->index = $j;
                     $tsv->value = $ins;
                     $tsv->mysql_save();
                     $tsv = new TestSectionValue();
                     $tsv->TestSection_id = $section->id;
                     $tsv->index = $j + 1;
                     $tsv->value = isset($vals[$i]) ? $vals[$i] : $ins;
                     $tsv->mysql_save();
                     $j = $j + 2;
                     $i++;
                 }
                 foreach ($returns as $ret) {
                     $tsv = new TestSectionValue();
                     $tsv->TestSection_id = $section->id;
                     $tsv->index = $j;
                     $tsv->value = $ret['name'];
                     $tsv->mysql_save();
                     $tsv = new TestSectionValue();
                     $tsv->TestSection_id = $section->id;
                     $tsv->index = $j + 1;
                     $tsv->value = isset($vals[$i]) ? $vals[$i] : $ret['name'];
                     $tsv->mysql_save();
                     $j = $j + 2;
                     $i++;
                 }
             }
             Setting::set_setting("version", "3.6.8");
             return json_encode(array("result" => 0, "param" => "3.6.8"));
         }
         $validate_column_names = true;
     }
     if (Ini::does_patch_apply("3.6.10", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.10");
         } else {
             //User - change of password field
             $sql = "SHOW COLUMNS FROM `User` WHERE `Field`='md5_password'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) > 0) {
                 $sql = "ALTER TABLE `User` CHANGE `md5_password` `password` text NOT NULL default '';";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.6.10");
             return json_encode(array("result" => 0, "param" => "3.6.10"));
         }
     }
     if (Ini::does_patch_apply("3.6.11", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.6.11");
         } else {
             //DS_TestSectionType - add new section type
             $sql = "\r\n                INSERT INTO `DS_TestSectionType` (`id`, `name`, `value`, `position`) VALUES\r\n                (12, 'lower level R code', '12', 12);\r\n                ";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             Setting::set_setting("version", "3.6.11");
             return json_encode(array("result" => 0, "param" => "3.6.11"));
         }
     }
     if (Ini::does_patch_apply("3.7.2", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.7.2");
         } else {
             //DS_Module - add new module type
             $sql = "\r\n                INSERT INTO `DS_Module` (`id`, `name`, `value`, `position`) VALUES\r\n                (8, 'QTI assessment item', 'QTIAssessmentItem', 8);\r\n                ";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             //UserTypeRight - add default user type rights for new module
             $sql = "\r\n                INSERT INTO `UserTypeRight` (`id`, `updated`, `created`, `Module_id`, `UserType_id`, `read`, `write`, `ownership`) VALUES\r\n                (21, '2012-01-18 18:59:34', '2012-01-18 18:59:34', 8, 1, 5, 5, 1),\r\n                (22, '2012-02-03 18:29:48', '2012-02-03 18:29:48', 8, 4, 3, 3, 0);\r\n                ";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             Setting::set_setting("version", "3.7.2");
             return json_encode(array("result" => 0, "param" => "3.7.2"));
         }
     }
     if (Ini::does_patch_apply("3.7.3", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.7.3");
         } else {
             //DS_TestSectionType - add new section types
             $sql = "\r\n                INSERT INTO `DS_TestSectionType` (`id`, `name`, `value`, `position`) VALUES\r\n                (13, 'QTI item initialization', '13', 13),\r\n                (14, 'QTI item response processing', '14', 14);\r\n                ";
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             Setting::set_setting("version", "3.7.3");
             return json_encode(array("result" => 0, "param" => "3.7.3"));
         }
     }
     if (Ini::does_patch_apply("3.7.4", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.7.4");
         } else {
             //Test - add open field
             $sql = "SHOW COLUMNS FROM `Test` WHERE `Field`='open'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Test` ADD `open` tinyint(1) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.7.4");
             return json_encode(array("result" => 0, "param" => "3.7.4"));
         }
     }
     if (Ini::does_patch_apply("3.7.5", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.7.5");
         } else {
             //TestSectionValue - custom section values
             $ts = TestSection::from_property(array("TestSectionType_id" => DS_TestSectionType::CUSTOM));
             foreach ($ts as $custom) {
                 $value = TestSectionValue::from_property(array("TestSection_id" => $custom->id, "index" => 0), false);
                 $custom->delete_values();
                 $value->id = 0;
                 $value->mysql_save();
                 $value->id = 0;
                 $value->index = 1;
                 $value->value = 0;
                 $value->mysql_save();
                 $value->id = 0;
                 $value->index = 2;
                 $value->value = 0;
                 $value->mysql_save();
             }
             Setting::set_setting("version", "3.7.5");
             return json_encode(array("result" => 0, "param" => "3.7.5"));
         }
     }
     if (Ini::does_patch_apply("3.7.6", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.7.6");
         } else {
             //TestSectionValue - test section values
             $ts = TestSection::from_property(array("TestSectionType_id" => DS_TestSectionType::TEST));
             foreach ($ts as $custom) {
                 $value = TestSectionValue::from_property(array("TestSection_id" => $custom->id, "index" => 0), false);
                 $custom->delete_values();
                 $value->id = 0;
                 $value->mysql_save();
                 $value->id = 0;
                 $value->index = 1;
                 $value->value = 0;
                 $value->mysql_save();
                 $value->id = 0;
                 $value->index = 2;
                 $value->value = 0;
                 $value->mysql_save();
             }
             Setting::set_setting("version", "3.7.6");
             return json_encode(array("result" => 0, "param" => "3.7.6"));
         }
     }
     if (Ini::does_patch_apply("3.8.6", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.8.6");
         } else {
             //Test - add loader_Template_id field
             $sql = "SHOW COLUMNS FROM `Test` WHERE `Field`='loader_Template_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Test` ADD `loader_Template_id` bigint(20) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - add effect_show field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='effect_show'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `effect_show` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - add effect_hide field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='effect_hide'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `effect_hide` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - add effect_show_options field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='effect_show_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `effect_show_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //Template - add effect_hide_options field
             $sql = "SHOW COLUMNS FROM `Template` WHERE `Field`='effect_hide_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `Template` ADD `effect_hide_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             ///
             //TestTemplate - add effect_show field
             $sql = "SHOW COLUMNS FROM `TestTemplate` WHERE `Field`='effect_show'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestTemplate` ADD `effect_show` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestTemplate - add effect_hide field
             $sql = "SHOW COLUMNS FROM `TestTemplate` WHERE `Field`='effect_hide'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestTemplate` ADD `effect_hide` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestTemplate - add effect_show_options field
             $sql = "SHOW COLUMNS FROM `TestTemplate` WHERE `Field`='effect_show_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestTemplate` ADD `effect_show_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestTemplate - add effect_hide_options field
             $sql = "SHOW COLUMNS FROM `TestTemplate` WHERE `Field`='effect_hide_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestTemplate` ADD `effect_hide_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             ///
             //TestSession - add effect_show field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='effect_show'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `effect_show` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add effect_hide field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='effect_hide'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `effect_hide` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add effect_show_options field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='effect_show_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `effect_show_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add effect_hide_options field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='effect_hide_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `effect_hide_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             ///
             //TestSession - add loader_effect_show field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_effect_show'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_effect_show` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_effect_hide field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_effect_hide'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_effect_hide` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_effect_show_options field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_effect_show_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_effect_show_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_effect_hide_options field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_effect_hide_options'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_effect_hide_options` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_Template_id field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_Template_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_Template_id` bigint(20) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_HTML field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_HTML'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_HTML` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TestSession - add loader_head field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='loader_head'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TestSession` ADD `loader_head` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.8.6");
             return json_encode(array("result" => 0, "param" => "3.8.6"));
         }
         $repopulate_TestTemplate = true;
     }
     if (Ini::does_patch_apply("3.8.7", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.8.7");
         } else {
             //TableColumn - add type field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='type'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `type` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - add length field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='length'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `length` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - add default_value field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='default_value'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `default_value` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - add attributes field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='attributes'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `attributes` text NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - add null field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='null'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `null` tinyint(1) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - add auto_increment field
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='auto_increment'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) == 0) {
                 $sql = "ALTER TABLE `TableColumn` ADD `auto_increment` tinyint(1) NOT NULL;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             //TableColumn - fill type column text
             $sql = "UPDATE `TableColumn` SET `type`='text' WHERE `TableColumnType_id`=1 OR `TableColumnType_id`=4";
             $z = mysql_query($sql);
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             //TableColumn - fill type column integer
             $sql = "UPDATE `TableColumn` SET `type`='bigint' WHERE `TableColumnType_id`=2";
             $z = mysql_query($sql);
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             //TableColumn - fill type column double
             $sql = "UPDATE `TableColumn` SET `type`='double' WHERE `TableColumnType_id`=3";
             $z = mysql_query($sql);
             if (!mysql_query($sql)) {
                 return json_encode(array("result" => 1, "param" => $sql));
             }
             //TableColumn - remove DS_TableColumnType_id
             $sql = "SHOW COLUMNS FROM `TableColumn` WHERE `Field`='TableColumnType_id'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) > 0) {
                 $sql = "ALTER TABLE `TableColumn` DROP `TableColumnType_id`;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.8.7");
             return json_encode(array("result" => 0, "param" => "3.8.7"));
         }
     }
     if (Ini::does_patch_apply("3.8.8", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.8.8");
         } else {
             Setting::set_setting("version", "3.8.8");
             return json_encode(array("result" => 0, "param" => "3.8.8"));
         }
         $recalculate_hash = true;
     }
     if (Ini::does_patch_apply("3.9.0", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.9.0");
         } else {
             ///TestSession - removing r_type field
             $sql = "SHOW COLUMNS FROM `TestSession` WHERE `Field`='r_type'";
             $z = mysql_query($sql);
             if (mysql_num_rows($z) > 0) {
                 $sql = "ALTER TABLE `TestSession` DROP `r_type`;";
                 if (!mysql_query($sql)) {
                     return json_encode(array("result" => 1, "param" => $sql));
                 }
             }
             Setting::set_setting("version", "3.9.0");
             return json_encode(array("result" => 0, "param" => "3.9.0"));
         }
     }
     if (Ini::does_patch_apply("3.9.2", $previous_version)) {
         if ($simulate) {
             array_push($versions_to_update, "3.9.2");
         } else {
             //DS_TestSectionType - adding two new loop sections
             $sql = "INSERT INTO `DS_TestSectionType` (`id`, `name`, `value`, `position`) VALUES \r\n                    (15, 'FOR loop', '15', 15),\r\n                    (16, 'WHILE loop', '16', 16)";
             $z = mysql_query($sql);
             Setting::set_setting("version", "3.9.2");
             return json_encode(array("result" => 0, "param" => "3.9.2"));
         }
     }
     if ($simulate) {
         return json_encode(array("versions" => $versions_to_update, "validate_column_names" => $validate_column_names, "repopulate_TestTemplate" => $repopulate_TestTemplate, "recalculate_hash" => $recalculate_hash, "create_db" => self::create_db_structure(true)));
     }
     return json_encode(array("result" => 2));
 }
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
if (!isset($ini)) {
    require_once '../../Ini.php';
    $ini = new Ini();
}
$logged_user = User::get_logged_user();
if ($logged_user == null) {
    echo json_encode(array("result" => -1));
    exit;
}
$session = TestSession::start_new($_POST['Test_id']);
$test = $session->get_Test();
if ($test == null) {
    echo json_encode(array("result" => -2));
    exit;
}
$section = TestSection::from_property(array("Test_id" => $test->id, "counter" => $_POST['counter']), false);
$close = true;
$next_section = $section->get_next_TestSection();
$next_counter = 0;
if ($next_section != null) {
    $next_counter = $next_section->counter;
}
$result = $session->debug_syntax($section->id, $close);
$session->remove();
echo json_encode(array("result" => 0, "response" => $result, "next_counter" => $next_counter));
 of the License, and not any of the later versions.

 This program 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 this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/
if (!isset($ini)) {
    require_once '../../Ini.php';
    $ini = new Ini();
}
$logged_user = User::get_logged_user();
if ($logged_user == null) {
    echo json_encode(array("result" => -1));
    exit;
}
$test = Test::from_mysql_id($_POST['oid']);
if (!$logged_user->is_object_readable($test)) {
    echo json_encode(array("result" => -2));
    exit;
}
$obj = TestSection::from_property(array("Test_id" => $_POST['oid'], "counter" => $_POST['counter']), false);
if ($obj == null) {
    echo json_encode(array("result" => 0, "code" => ""));
    exit;
}
echo json_encode(array("result" => 0, "code" => $obj->get_RCode()));