#!/usr/bin/php -q This script is only meant to run at the command line.'); } $no_http_headers = true; include(dirname(__FILE__) . '/../include/global.php'); /* process calling arguments */ $parms = $_SERVER['argv']; array_shift($parms); $table = ''; $create = true; if (sizeof($parms)) { foreach($parms as $parameter) { if (strpos($parameter, '=')) { list($arg, $value) = explode('=', $parameter); } else { $arg = $parameter; $value = ''; } switch ($arg) { case '--table': $table = trim(sql_clean($value)); break; case '--update': $create = false; break; case '--version': case '-V': case '-v': display_version(); exit; case '--help': case '-H': case '-h': display_help(); exit; default: } } } if ($table == '') { echo "ERROR: You must provide a table name\n"; display_help(); exit; } else { echo sqltable_to_php($table, $create); } function sqltable_to_php ($table, $create) { global $config, $database_default; include_once($config['library_path'] . '/database.php'); $result = db_fetch_assoc('SHOW tables FROM `' . $database_default . '`'); $tables = array(); $text = ''; if (sizeof($result)) { foreach($result as $index => $arr) { foreach ($arr as $t) { $tables[] = $t; } } }else{ echo "ERROR: Obtaining list of tables from $database_default\n"; exit; } if (in_array($table, $tables)) { $result = db_fetch_assoc("SHOW columns FROM $table"); $cols = array(); $pri = array(); $keys = array(); $text = "\n\$data = array();\n"; if (sizeof($result)) { foreach ($result as $r) { $text .= "\$data['columns'][] = array("; $text .= "'name' => '" . $r['Field'] . "'"; if (strpos(strtolower($r['Type']), ' unsigned') !== FALSE) { $r['Type'] = str_ireplace(' unsigned', '', $r['Type']); $text .= ", 'unsigned' => true"; } $text .= ", 'type' => \"" . $r['Type'] . "\""; $text .= ", 'NULL' => " . (strtolower($r['Null']) == 'no' ? 'false' : 'true'); if (trim($r['Default']) != '') { $text .= ", 'default' => '" . $r['Default'] . "'"; } if (trim($r['Extra']) != '') { if (strtolower($r['Extra']) == 'auto_increment') { $text .= ", 'auto_increment' => true"; } } $text .= ");\n"; } }else{ echo "ERROR: Obtaining list of columns from $table\n"; exit; } $result = db_fetch_assoc("SHOW INDEX FROM $table"); if (sizeof($result)) { foreach ($result as $r) { if ($r['Key_name'] == 'PRIMARY') { $pri[] = $r['Column_name']; } else { $keys[$r['Key_name']][$r['Seq_in_index']] = $r['Column_name']; } } if (!empty($pri)) { $text .= "\$data['primary'] = array('" . implode("','", $pri) . "');\n"; } if (!empty($keys)) { foreach ($keys as $n => $k) { $text .= "\$data['keys'][] = array('name' => '$n', 'columns' => array('" . implode("','", $k) . "'));\n"; } } }else{ echo "ERROR: Obtaining list of indexes from $table\n"; exit; } $result = db_fetch_row("SELECT ENGINE, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_NAME = '$table'"); if (sizeof($result)) { $text .= "\$data['type'] = '" . $result['ENGINE'] . "';\n"; $text .= "\$data['comment'] = '" . $result['TABLE_COMMENT'] . "';\n"; if ($create) { $text .= "db_table_create ('$table', \$data);\n"; } else { $text .= "db_update_table ('$table', \$data, false);\n"; } }else{ echo "ERROR: Unable to get tables details from Information Schema\n"; exit; } } return $text; } function sql_clean($text) { $text = str_replace(array("\\", '/', "'", '"', '|'), '', $text); return $text; } /* display_version - displays version information */ function display_version() { $version = db_fetch_cell('SELECT cacti FROM version'); echo "Cacti Add Device Utility, Version $version, " . COPYRIGHT_YEARS . "\n"; } function display_help() { display_version(); echo "\nusage: sqltable_to_php.php --table=table_name [--update]\n\n"; echo "A simple developers utility to create a save schema for a newly created or\n"; echo "modified database table. These save schema's can be placed into a plugins\n"; echo "setup.php file in order to create the tables inside of a plugin as a part of\n"; echo "it's install function.\n\n"; echo "Required:\n"; echo "--table=table_name - The table that you want exportred\n\n"; echo "Optional:\n"; echo "--update - The utility provides create syntax. If the update flag is\n"; echo " specified, the utility will provide update syntax\n\n"; }