function um_component_database_get_table_fields($table_name) { global $config; $db = um_component_db_connect(); if ($db === false) { return array(); } switch ($config["dbtype"]) { case "mysql": $result = process_sql('SHOW COLUMNS FROM ' . $table_name . ' WHERE `Key` != "PRI"'); break; case "postgresql": //TODO: verificar que se extraen todos los campos menos clave primaria $result = process_sql("SELECT * FROM pg_indexes WHERE tablename = '" . $table_name . "'"); break; case "oracle": $result = process_sql("SELECT cols1.column_name as Fields, cols1.data_type as Type,\n\t\t\t\t\t CASE WHEN (cols1.nullable = 'Y') THEN 'YES' ELSE 'NO' END as \"Null\", \n\t\t\t\t\t cols1.data_default as \"Default\", '' as Extra\n\t\t\t\t\t FROM user_tab_columns cols1 \n\t\t\t\t\t WHERE cols1.table_name ='" . $table_name . "' \n\t\t\t\t\t AND cols1.column_name NOT IN (select distinct usr.column_name \n\t\t\t\t\t\t\t\t\t from user_cons_columns usr, user_constraints co \n\t\t\t\t\t\t\t\t\t where usr.constraint_name = co.constraint_name and \n\t\t\t\t\t\t\t\t\t constraint_type = 'P' and co.table_name = '" . $table_name . "') \n\t\t\t\t\t order by cols1.column_id"); break; } if ($result === false) { echo '<strong>Error getting table fields</strong> <br />'; return array(); } $cont = 0; $fields = array(); while (true) { $field = um_std_from_result($result, $cont); if ($field === false) { break; } $fields[$cont] = $field->Field; $cont++; } return $fields; }
function um_client_upgrade_to_package($package, $settings, $force = true, $update_offline = false) { $applied_updates = array(); $rollback = false; if (!is_object($package)) { return false; } if (!$update_offline) { um_client_db_connect($settings); um_component_db_connect(); foreach ($package->updates as $update) { $success = um_client_apply_update($update, $settings, $force); if (!$success) { echo '<p /><strong>Failed</strong> on:<br />'; um_client_print_update($update, $settings); $rollback = true; break; } array_push($applied_updates, $update); } if ($rollback) { foreach ($applied_updates as $update) { $success = um_client_rollback_update($update, $settings); } return false; } um_client_db_save_package($package, $settings); foreach ($package->updates as $update) { um_client_db_save_update($update); } um_db_update_setting('current_update', $package->id); //process_sql_commit(); } else { $data_queries = ''; $schema_queries = ''; $zip = new ZipArchive(); $temp_files = array(); $md5_dir = md5("update_" . $package->id); // Get the temp path on the server $path_script = explode('/', $_SERVER['SCRIPT_FILENAME']); $path_server = explode('/', $_SERVER['DOCUMENT_ROOT']); unset($path_script[count($path_script) - 1]); $tempDir = implode('/', $path_script) . '/temp/'; for ($i = 0; $i < count($path_server); $i++) { unset($path_script[$i]); } $tempDirServer = '/' . implode('/', $path_script) . '/temp/'; $package_name = 'package_' . $package->id . '.oum'; $zipArchive = $tempDir . $package_name; $zipArchiveServer = $tempDirServer . $package_name; @unlink($zipArchive); if ($zip->open($zipArchive, ZIPARCHIVE::CREATE) === true) { foreach ($package->updates as $update) { $filename = ''; switch ($update->type) { case 'code': case 'binary': $md5_name = md5($path_remote . $update->filename); $success = um_client_create_update_file($update->data, $tempDir . $md5_name); $zip->addFile($tempDir . $md5_name, $update->type . '/' . $update->filename); $temp_files[] = $tempDir . $md5_name; break; case 'db_data': $data = um_data_decode($update->data); if (substr($data, strlen($data) - 1, 1) != ';') { $data_queries .= $data . ";" . $update->db_table . ";" . $update->db_field . ";" . $update->db_field_value . ";" . $update->id . ";\n\n"; } else { $data_queries .= $data . $update->db_table . ";" . $update->db_field . ";" . $update->db_field_value . ";" . $update->id . ";\n\n"; } break; case 'db_schema': $data = um_data_decode($update->data); if (substr($data, strlen($data) - 1, 1) != ';') { $schema_queries .= $data . ";" . $update->id . ";\n\n"; } else { $schema_queries .= $data . $update->id . ";\n\n"; } break; } } // Creating the schema sql script $success = um_client_create_update_file(um_data_encode($schema_queries), $tempDir . "schema_db"); $zip->addFile($tempDir . "schema_db", '01_package_' . $package->id . '_schema.sql'); $temp_files[] = $tempDir . "schema_db"; // Creating the data sql script $success = um_client_create_update_file(um_data_encode($data_queries), $tempDir . "data_db"); $zip->addFile($tempDir . "data_db", '02_package_' . $package->id . '_data.sql'); $temp_files[] = $tempDir . "data_db"; // Creating the package info file $package_info = $package; unset($package_info->updates); $success = um_client_create_update_file(um_data_encode(json_encode($package_info)), $tempDir . "info_package"); $zip->addFile($tempDir . "info_package", 'info_package'); $temp_files[] = $tempDir . "info_package"; $zip->close(); // Clean temp files foreach ($temp_files as $file) { @unlink($file); } chdir($tempDir); header("Content-type: application/zip"); header("Content-Disposition: attachment; filename=" . $package_name); header("Pragma: no-cache"); header("Expires: 0"); readfile($package_name); return true; } } return true; }