protected function normalizeValue(TableColumn $col, $value) { if ($value === null && $col->isNullable()) { return null; } switch ($col->getBasicType()) { case 'date': if (is_string($value)) { return date('Y-m-d', strtotime($value)); } if (is_int($value)) { return date('Y-m-d', $value); } if ($value instanceof \DateTime) { return $value->format('Y-m-d'); } return $value; case 'datetime': if (is_string($value)) { return date('Y-m-d H:i:s', strtotime($value)); } if (is_int($value)) { return date('Y-m-d H:i:s', $value); } if ($value instanceof \DateTime) { return $value->format('Y-m-d H:i:s'); } return $value; case 'enum': if (is_int($value)) { return $value; } if (!in_array($value, $col->getValues())) { return 0; } return $value; case 'int': return (int) $value; default: return $value; } }
public function get_RCode() { $code = ""; $next = $this->get_next_TestSection(); $next_counter = $next != null ? $next->counter : 0; $end_of_loop = $this->is_end_of_loop(); $loop = null; $loop_vals = null; if ($end_of_loop) { $loop = $this->get_section_loop(); $loop_vals = $loop->get_values(); $next_counter = $loop->counter; } $vals = $this->get_values(); switch ($this->TestSectionType_id) { case DS_TestSectionType::START: $test = Test::from_mysql_id($this->Test_id); if ($test == null) { return sprintf("stop('Invalid test id: %s in section #%s')", $this->Test_id, $this->counter); } $code = sprintf("\n print('Starting test with id: %s')\n CONCERTO_TEST_ID <<- %s\n return(%d)\n ", $this->Test_id, $this->Test_id, $next_counter); break; case DS_TestSectionType::END: $code = sprintf("\n update.session.status(%d) \n update.session.counter(%d)\n return(%d)\n ", TestSession::TEST_SESSION_STATUS_COMPLETED, $next_counter, $next_counter); break; case DS_TestSectionType::CUSTOM: $cs = CustomSection::from_mysql_id($vals[0]); if ($cs == null) { return sprintf("stop('Invalid custom section #%s')", $this->counter); } $parameters = $cs->get_parameter_CustomSectionVariables(); $returns = $cs->get_return_CustomSectionVariables(); $code = ""; foreach ($parameters as $param) { $val = $param->name; for ($j = 0; $j < $vals[1] * 2; $j = $j + 2) { if ($vals[3 + $j] == $param->name && isset($vals[3 + $j + 1]) && $vals[3 + $j + 1] != "") { $val = $vals[3 + $j + 1]; break; } } $code .= sprintf("\n %s <- %s\n ", $param->name, $val); } $code .= $cs->code; foreach ($returns as $ret) { $val = $ret->name; for ($j = 0; $j < $vals[2] * 2; $j = $j + 2) { if ($vals[3 + $vals[1] * 2 + $j] == $ret->name && isset($vals[3 + $vals[1] * 2 + $j]) && $vals[3 + $vals[1] * 2 + $j] != "") { $val = $vals[3 + $vals[1] * 2 + $j + 1]; break; } } $code .= sprintf("\n %s <<- %s\n ", $val, $ret->name); } $code .= sprintf("\n return(%d)\n ", $this->end == 0 ? $next_counter : -2); break; case DS_TestSectionType::R_CODE: $code = sprintf("\n %s\n return(%d)\n ", $vals[0], $this->end == 0 ? $next_counter : -2); break; case DS_TestSectionType::LOWER_LEVEL_R_CODE: $code = sprintf("\n %s\n ", $vals[0]); break; case DS_TestSectionType::QTI_INITIALIZATION: $ai = QTIAssessmentItem::from_mysql_id($vals[0]); if ($ai == null) { return sprintf("stop('Invalid QTI assessment item id: %s in section #%s')", $vals[0], $this->counter); } $map = QTIAssessmentItem::get_mapped_variables($this->id); $result = $ai->validate($map, null, $this->id); if (json_decode($result)->result != 0) { return sprintf("stop('Validation failed on QTI assessment item id: %s in section #%s')", $vals[0], $this->counter); } $qtir = $ai->get_QTI_ini_R_code($map, $this->id); $code = sprintf("\n %s\n return(%d)\n ", $qtir, $this->end == 0 ? $next_counter : -2); break; case DS_TestSectionType::QTI_RESPONSE_PROCESSING: $ts = TestSection::from_property(array("counter" => $vals[0], "Test_id" => $this->Test_id), false); if ($ts == null) { return sprintf("stop('Invalid test section id: %s in section #%s')", $vals[0], $this->counter); } $tsvals = $ts->get_values(); $ai = QTIAssessmentItem::from_mysql_id($tsvals[0]); if ($ai == null) { return sprintf("stop('Invalid QTI assessment item id: %s in section #%s')", $tsvals[0], $this->counter); } $map = QTIAssessmentItem::get_mapped_variables($ts->id); $result = $ai->validate($map, null, $ts->id); if (json_decode($result)->result != 0) { return sprintf("stop('Validation failed on QTI assessment item id: %s in section #%s')", $tsvals[0], $this->counter); } $qtir = $ai->get_response_processing_R_code(); $code = sprintf("\n %s\n return(%d)\n ", $qtir, $this->end == 0 ? $next_counter : -2); break; case DS_TestSectionType::LOAD_HTML_TEMPLATE: $template_id = $vals[0]; $template = Template::from_mysql_id($template_id); if ($template == null) { return sprintf("stop('Invalid template id: %s in section #%s')", $template_id, $this->counter); } $code = sprintf("\n update.session.template_id(%d)\n if(!exists('TIME_LIMIT')) TIME_LIMIT <<- 0\n update.session.time_limit(TIME_LIMIT)\n update.session.status(%d)\n update.session.counter(%d)\n update.session.template_testsection_id(%d)\n update.session.HTML(%d,%d,%d)\n update.session.effects('%s','%s','%s','%s')\n return(%d)\n ", $template_id, TestSession::TEST_SESSION_STATUS_TEMPLATE, $next_counter, $this->id, $this->Test_id, $this->id, $template_id, addcslashes($template->effect_show, "'"), addcslashes($template->effect_hide, "'"), addcslashes($template->effect_show_options, "'"), addcslashes($template->effect_hide_options, "'"), $this->end == 0 ? -1 : -2); break; case DS_TestSectionType::GO_TO: $code = ""; foreach ($this->get_parent_loops_counters() as $loop) { $target = TestSection::from_property(array("Test_id" => $this->Test_id, "counter" => $vals[0]), false); if ($target != null) { $target_loops = $target->get_parent_loops_counters(); if (!in_array($loop, $target_loops)) { $code .= sprintf("\n %s <<- FALSE\n ", TestSection::build_for_initialization_variable($this->Test_id, $loop)); } } } $code .= sprintf("\n return(%d)\n ", $vals[0] == 0 ? $next_counter : $vals[0]); break; case DS_TestSectionType::IF_STATEMENT: $contents = TestSection::from_property(array("Test_id" => $this->Test_id, "parent_counter" => $this->counter)); $is_empty = count($contents) == 0; $code = ""; $next_not_child = $this->get_next_not_child_TestSection(); $next_not_child_counter = $next_not_child->counter; if ($end_of_loop) { $next_not_child_counter = $next_counter; } else { $is_end_of_loop = $this->is_end_of_loop(false); if ($is_end_of_loop) { $parent_loop = $this->get_section_loop(); if ($parent_loop != null) { $next_not_child_counter = $parent_loop->counter; } } } if ($is_empty) { $code .= sprintf("\n return(%d)\n ", $next_not_child_counter); break; } $additional_conds = ""; $i = 3; while (isset($vals[$i])) { $additional_conds .= sprintf("%s %s %s %s", $vals[$i], $vals[$i + 1], $vals[$i + 2], $vals[$i + 3]); $i += 4; } $code .= sprintf("\n if(%s %s %s %s) {\n return(%d)\n }\n else {\n return(%d)\n }\n ", $vals[0], $vals[1], $vals[2], $additional_conds, $next->counter, $next_not_child_counter); break; case DS_TestSectionType::TEST: $test = Test::from_mysql_id($vals[0]); if ($test == null) { return sprintf("stop('Invalid test id: %s in section #%s')", $vals[0], $this->counter); } else { $code = sprintf("\n CONCERTO_TEST_ID <<- %s\n ", $test->id); $parameters = $test->get_parameter_TestVariables(); $params_code = ""; $returns = $test->get_return_TestVariables(); $returns_code = ""; foreach ($parameters as $param) { $val = $param->name; for ($j = 0; $j < $vals[1] * 2; $j = $j + 2) { if ($vals[3 + $j] == $param->name && isset($vals[3 + $j + 1]) && $vals[3 + $j + 1] != "") { $val = $vals[3 + $j + 1]; break; } } $params_code .= sprintf("\n %s <- %s\n ", $param->name, $val); } foreach ($returns as $ret) { $val = $ret->name; for ($j = 0; $j < $vals[2] * 2; $j = $j + 2) { if ($vals[3 + $vals[1] * 2 + $j] == $ret->name && isset($vals[3 + $vals[1] * 2 + $j]) && $vals[3 + $vals[1] * 2 + $j] != "") { $val = $vals[3 + $vals[1] * 2 + $j + 1]; break; } } $returns_code .= sprintf("\n %s <<- %s\n ", $val, $ret->name); } $code .= sprintf("\n %s\n ", $params_code); $sections = TestSection::from_property(array("Test_id" => $test->id)); foreach ($sections as $section) { if ($section->TestSectionType_id != DS_TestSectionType::END) { $code .= $section->get_RFunction(); } else { $end_code = sprintf("\n CONCERTO_TEST_ID <<- %s\n %s\n return(%d)\n ", $this->Test_id, $returns_code, $next_counter); $code .= sprintf("\n %s <<- function(){\n print('Start of section with index: %s')\n %s\n }\n ", 'CONCERTO_Test' . $vals[0] . 'Section2', 2, $end_code); } } $code .= "\n return(1)\n "; } break; case DS_TestSectionType::LOOP: $contents = TestSection::from_property(array("Test_id" => $this->Test_id, "parent_counter" => $this->counter)); $is_empty = count($contents) == 0; $next_not_child = $this->get_next_not_child_TestSection(); $next_not_child_counter = $next_not_child->counter; if ($end_of_loop) { $next_not_child_counter = $next_counter; } else { $is_end_of_loop = $this->is_end_of_loop(false); if ($is_end_of_loop) { $parent_loop = $this->get_section_loop(); if ($parent_loop != null) { $next_not_child_counter = $parent_loop->counter; } } } $code = ""; if ($is_empty) { $code .= sprintf("\n return(%d)\n ", $next_not_child_counter); break; } if ($vals[0] == 1) { $code = sprintf("\n if(%s %s %s) {\n return(%d)\n }\n else {\n return(%d)\n }\n ", $vals[1], $vals[2], $vals[3], $next->counter, $next_not_child_counter); } else { $code = sprintf("\n if(exists('%s') && %s) {\n %s <<- %s + as.numeric(%s)\n }\n else {\n %s <<- TRUE\n %s <<- as.numeric(%s)\n }\n if(%s %s %s) {\n return(%d)\n }\n else {\n %s <<- FALSE\n return(%d)\n }\n ", $this->get_for_initialization_variable(), $this->get_for_initialization_variable(), $vals[1], $vals[1], $vals[5], $this->get_for_initialization_variable(), $vals[1], $vals[4], $vals[1], $vals[2], $vals[3], $next->counter, $this->get_for_initialization_variable(), $next_not_child_counter); } break; case DS_TestSectionType::FOR_LOOP: $contents = TestSection::from_property(array("Test_id" => $this->Test_id, "parent_counter" => $this->counter)); $is_empty = count($contents) == 0; $next_not_child = $this->get_next_not_child_TestSection(); $next_not_child_counter = $next_not_child->counter; if ($end_of_loop) { $next_not_child_counter = $next_counter; } else { $is_end_of_loop = $this->is_end_of_loop(false); if ($is_end_of_loop) { $parent_loop = $this->get_section_loop(); if ($parent_loop != null) { $next_not_child_counter = $parent_loop->counter; } } } $code = ""; if ($is_empty) { $code .= sprintf("\n return(%d)\n ", $next_not_child_counter); break; } $code = sprintf("\n if(exists('%s') && %s) {\n %s <<- %s + 1\n }\n else {\n %s <<- TRUE\n %s <<- 1\n }\n\n CONCERTO_TEMP_FOR_INDEX <- 1\n \n for(CONCERTO_TEMP_FOR_VALUE in %s){\n if(CONCERTO_TEMP_FOR_INDEX==%s){\n %s <<- CONCERTO_TEMP_FOR_VALUE\n return(%d)\n break\n }\n CONCERTO_TEMP_FOR_INDEX <- CONCERTO_TEMP_FOR_INDEX+1\n }\n \n %s <<- FALSE\n return(%d)\n ", $this->get_for_initialization_variable(), $this->get_for_initialization_variable(), $this->get_for_index_variable(), $this->get_for_index_variable(), $this->get_for_initialization_variable(), $this->get_for_index_variable(), $vals[1], $this->get_for_index_variable(), $vals[0], $next->counter, $this->get_for_initialization_variable(), $next_not_child_counter); break; case DS_TestSectionType::WHILE_LOOP: $contents = TestSection::from_property(array("Test_id" => $this->Test_id, "parent_counter" => $this->counter)); $is_empty = count($contents) == 0; $next_not_child = $this->get_next_not_child_TestSection(); $next_not_child_counter = $next_not_child->counter; if ($end_of_loop) { $next_not_child_counter = $next_counter; } else { $is_end_of_loop = $this->is_end_of_loop(false); if ($is_end_of_loop) { $parent_loop = $this->get_section_loop(); if ($parent_loop != null) { $next_not_child_counter = $parent_loop->counter; } } } $code = ""; if ($is_empty) { $code .= sprintf("\n return(%d)\n ", $next_not_child_counter); break; } $additional_conds = ""; $i = 3; while (isset($vals[$i])) { $additional_conds .= sprintf("%s %s %s %s", $vals[$i], $vals[$i + 1], $vals[$i + 2], $vals[$i + 3]); $i += 4; } $code = sprintf("\n if(%s %s %s %s) {\n return(%d)\n }\n else {\n return(%d)\n }\n ", $vals[0], $vals[1], $vals[2], $additional_conds, $next->counter, $next_not_child_counter); break; case DS_TestSectionType::TABLE_MOD: $type = $vals[0]; $set_count = $vals[2]; $where_count = $vals[1]; $table = Table::from_mysql_id($vals[3]); if ($table == null) { return sprintf("stop('Invalid table id: %s in section #%s')", $vals[3], $this->counter); } $set = ""; for ($i = 0; $i < $vals[2]; $i++) { $column = TableColumn::from_property(array("Table_id" => $vals[3], "index" => $vals[4 + $i * 2]), false); if ($column == null) { return sprintf("stop('Invalid table column index: %s of table id: %s in section #%s')", $vals[4 + $i * 2], $vals[3], $this->counter); } if ($i > 0) { $set .= ","; } $set .= sprintf("`%s`='\",dbEscapeStrings(CONCERTO_DB_CONNECTION,toString(%s)),\"'", $column->name, $vals[4 + $i * 2 + 1]); } $where = ""; for ($i = 0; $i < $vals[1]; $i++) { $j = 4 + $vals[2] * 2 + $i * 4; $column = TableColumn::from_property(array("Table_id" => $vals[3], "index" => $vals[$j + 1]), false); if ($column == null) { return sprintf("stop('Invalid table column index: %s of table id: %s in section #%s')", $vals[$j + 1], $vals[3], $this->counter); } if ($i > 0) { $where .= sprintf("%s", $vals[$j]); } $where .= sprintf("`%s` %s '\",dbEscapeStrings(CONCERTO_DB_CONNECTION,toString(%s)),\"'", $column->name, $vals[$j + 2], $vals[$j + 3]); } $sql = ""; if ($type == 0) { $sql .= sprintf("INSERT INTO `%s` SET %s", $table->get_table_name(), $set); } if ($type == 1) { $sql .= sprintf("UPDATE `%s` SET %s WHERE %s", $table->get_table_name(), $set, $where); } if ($type == 2) { $sql .= sprintf("DELETE FROM `%s` WHERE %s", $table->get_table_name(), $where); } $code = sprintf(' CONCERTO_SQL <- paste("%s",sep="") CONCERTO_SQL_RESULT <- dbSendQuery(CONCERTO_DB_CONNECTION,CONCERTO_SQL) return(%d) ', $sql, $this->end == 0 ? $next_counter : -2); break; case DS_TestSectionType::SET_VARIABLE: $type = $vals[2]; $columns_count = $vals[0]; $conds_count = $vals[1]; if ($type == 0) { $table = Table::from_mysql_id($vals[5]); if ($table == null) { return sprintf("stop('Invalid table id: %s in section #%s')", $vals[5], $this->counter); } $column = TableColumn::from_property(array("Table_id" => $table->id, "index" => $vals[6]), false); if ($column == null) { return sprintf("stop('Invalid table column index: %s of table id: %s in section #%s')", $vals[6], $table->id, $this->counter); } $sql = sprintf("SELECT `%s`", $column->name); for ($i = 1; $i <= $columns_count; $i++) { $column = TableColumn::from_property(array("Table_id" => $table->id, "index" => $vals[6 + $i]), false); if ($column == null) { return sprintf("stop('Invalid table column index: %s of table id: %s in section #%s')", $vals[6 + $i], $table->id, $this->counter); } $sql .= sprintf(",`%s`", $column->name); } $sql .= sprintf(" FROM `%s` ", $table->get_table_name()); if ($conds_count > 0) { $sql .= sprintf("WHERE "); $j = 7 + $columns_count; for ($i = 1; $i <= $conds_count; $i++) { if ($i > 1) { $link = $vals[$j]; $j++; } else { $j++; } $cond_col = TableColumn::from_property(array("Table_id" => $table->id, "index" => $vals[$j]), false); if ($cond_col == null) { return sprintf("stop('Invalid table column index: %s of table id: %s in section #%s')", $vals[$j], $table->id, $this->counter); } $j++; $operator = $vals[$j]; $j++; $exp = $vals[$j]; $j++; if ($i > 1) { $sql .= sprintf("%s `%s` %s '\",dbEscapeStrings(CONCERTO_DB_CONNECTION,toString(%s)),\"' ", $link, $cond_col->name, $operator, $exp); } else { $sql .= sprintf("`%s` %s '\",dbEscapeStrings(CONCERTO_DB_CONNECTION,toString(%s)),\"' ", $cond_col->name, $operator, $exp); } } } $code = sprintf(' CONCERTO_SQL <- paste("%s",sep="") CONCERTO_SQL_RESULT <- dbSendQuery(CONCERTO_DB_CONNECTION,CONCERTO_SQL) %s <<- fetch(CONCERTO_SQL_RESULT,n=-1) return(%d) ', $sql, $vals[4], $this->end == 0 ? $next_counter : -2); break; } if ($type == 1) { $code = sprintf(' %s <<- { %s } return(%d) ', $vals[4], $vals[3], $this->end == 0 ? $next_counter : -2); break; } } return TestSection::replace_invalid_code($code); }
*/ if (!isset($ini)) { require_once '../../Ini.php'; $ini = new Ini(); } $logged_user = User::get_logged_user(); if ($logged_user == null) { echo json_encode(array()); exit; } $obj = Table::from_mysql_id($_GET['oid']); if ($obj == null || !$logged_user->is_object_readable($obj)) { echo json_encode(array()); exit; } $table = array(); foreach ($obj->get_TableIndexes() as $index) { $columns = ""; foreach ($index->get_TableIndexColumns() as $col) { $tc = TableColumn::from_mysql_id($col->TableColumn_id); if ($tc != null) { if ($columns != "") { $columns .= ","; } $columns .= $tc->name; } } $row = array("id" => $index->id, "type" => $index->type, "columns" => $columns); array_push($table, $row); } echo json_encode($table);
public function get_TableColumn() { return TableColumn::from_mysql_id($this->TableColumn_id); }
/** * @param array $config * @return string */ public function getInputMarkup($config = array()) { $config['addEmptyOption'] = $this->addEmptyOption; $output = parent::getInputMarkup($config); return $output; }
public function rename_restricted_columns() { $sql = sprintf("SHOW COLUMNS FROM `%s`", $this->name); $z = mysql_query($sql); while ($r = mysql_fetch_array($z)) { $tc = TableColumn::from_mysql_result($r); if (in_array($tc->name, TableColumn::$restricted_names)) { $i = 1; $sql = ""; do { $new_name = $tc->name . "_" . $i; $sql = sprintf("ALTER TABLE `%s` CHANGE COLUMN `%s` `%s` %s", $this->name, $tc->name, $new_name, $tc->get_definition()); $i++; } while (!mysql_query($sql)); } } return 0; }
/** * Add a column to the definition * @param string $column the column name * @param array $definition optional array of data associated with the column * @return self */ public function addColumn(string $column, array $definition = []) : Table { $this->data['columns'][$column] = TableColumn::fromArray($column, $definition); return $this; }
public function import_from_csv($path, $delimeter = ",", $enclosure = '"', $header = false) { $this->mysql_delete_Table(); $row = 1; $column_names = array(); if (($handle = fopen($path, "r")) !== FALSE) { while (($data = fgetcsv($handle, 0, $delimeter, $enclosure)) !== FALSE) { if ($row == 1) { $sql = "CREATE TABLE " . $this->get_table_name() . " ("; for ($i = 1; $i <= count($data); $i++) { $column_name = "c" . $i; if ($header) { $column_name = Table::format_column_name($data[$i - 1]); } if (trim($column_name) == "") { continue; } array_push($column_names, $column_name); if ($i > 1) { $sql .= ","; } $sql .= "`" . $column_name . "` TEXT NOT NULL"; $sql2 = sprintf("INSERT INTO `%s` (`index`,`name`,`Table_id`,`type`) VALUES (%d,'%s',%d,'%s')", TableColumn::get_mysql_table(), $i, $column_name, $this->id, "text"); if (!mysql_query($sql2)) { return -4; } } $sql .= ") ENGINE = INNODB DEFAULT CHARSET=utf8;"; if (!mysql_query($sql)) { return -4; } if ($header) { $row++; continue; } } $sql = sprintf("INSERT INTO `%s` SET ", $this->get_table_name()); for ($i = 1; $i <= count($column_names); $i++) { if ($i > 1) { $sql .= ", "; } $sql .= sprintf("`%s`='%s'", $column_names[$i - 1], mysql_real_escape_string($data[$i - 1])); } if (!mysql_query($sql)) { return -4; } $row++; } } return 0; }
public static function validate_columns_name() { $sql = sprintf("SELECT * FROM `TableColumn`"); $z = mysql_query($sql); while ($r = mysql_fetch_array($z)) { set_time_limit(0); $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 = TableColumn::get_column_definition($r['type'], $r['length'], $r['attributes'], $r['null'], $r['auto_increment'], $r['default_value']); $old_name = $r['name']; $new_name = Table::format_column_name($old_name); 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 false; } } } return true; }
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)); }
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()); exit; } $obj = Table::from_mysql_id($_GET['oid']); if ($obj == null || !$logged_user->is_object_readable($obj)) { echo json_encode(array()); exit; } $sql = sprintf("SELECT * FROM `TableColumn` WHERE `Table_id`='%d'", $_GET['oid']); $table = array(); $z = mysql_query($sql); while ($r = mysql_fetch_array($z)) { $obj = TableColumn::from_mysql_id($r["id"]); $row = array("id" => $obj->id, "name" => $obj->name, "type" => $obj->type, "lengthValues" => $obj->length, "defaultValue" => $obj->default_value, "attributes" => $obj->attributes, "nullable" => $obj->null, "auto_increment" => $obj->auto_increment); array_push($table, $row); } echo json_encode($table);
} $logged_user = User::get_logged_user(); if ($logged_user == null) { echo json_encode(array()); exit; } $obj = Table::from_mysql_id($_GET['oid']); if ($obj == null || !$logged_user->is_object_readable($obj)) { echo json_encode(array()); exit; } $cols = array(); $i = 0; echo "["; if ($obj->has_table()) { $cols = TableColumn::from_property(array("Table_id" => $obj->id)); $sql = sprintf("SELECT * FROM `%s`", $obj->get_table_name()); $z = mysql_query($sql); while ($r = mysql_fetch_array($z)) { if ($i > 0) { echo ","; } $row = array(); foreach ($cols as $col) { $row[$col->name] = $r[$col->name]; } echo json_encode($row); $i++; } } echo "]";