MetaTables();
$export="";
$export .="#------------------------------------------"."\n";
$export .="# LimeSurvey Database Dump of `$databasename`"."\n";
if ($allowexportalldb==0) {
$export .="# Only prefixed tables with: ". $dbprefix ."\n";
}
$export .="# Date of Dump: ". date("d-M-Y") ."\n";
$export .="#------------------------------------------"."\n\n\n";
foreach($tables as $table) {
if ($allowexportalldb==0) {
if ($dbprefix==substr($table, 0, strlen($dbprefix))) {
$export .= defdump($table);
$export .= datadump($table);
}
}
else {
$export .= defdump($table);
$export .= datadump($table);
}
}
$file_name = "LimeSurvey_{$databasename}_dump_".date_shift(date("Y-m-d H:i:s"), "Y-m-d", $timeadjust).".sql";
Header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=$file_name");
Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
echo $export;
exit;
}
else
{
$dumpdboutput= "
\n"
."
\n"
."\t| ".$clang->gT("Export database")." |
\n"
."\t| ".$clang->gT("The database export is only available for MySQL databases. For other database types please use the according backup mechanism to create a database dump.")." |
"
."
";
return;
}
function defdump($tablename)
{
global $connect;
$def = "";
$def .="#------------------------------------------"."\n";
$def .="# Table definition for $tablename"."\n";
$def .="#------------------------------------------"."\n";
$def .= "DROP TABLE IF EXISTS $tablename;"."\n"."\n";
$def .= "CREATE TABLE $tablename ("."\n";
$result = db_execute_assoc("SHOW COLUMNS FROM $tablename") or die("Table $tablename not existing in database");
while($row = $result->FetchRow())
{
$def .= " `$row[Field]` $row[Type]";
if (!is_null($row["Default"])) $def .= " DEFAULT '$row[Default]'";
if ($row["Null"] != "YES") $def .= " NOT NULL";
if ($row["Extra"] != "") $def .= " $row[Extra]";
$def .= ",\n";
}
$def = preg_replace("#,\n$#","", $def);
$result = db_execute_assoc("SHOW KEYS FROM $tablename");
while($row = $result->FetchRow())
{
$kname=$row["Key_name"];
if(($kname != "PRIMARY") && ($row["Non_unique"] == 0)) $kname="UNIQUE|$kname";
if(!isset($index[$kname])) $index[$kname] = array();
$index[$kname][] = $row["Column_name"];
}
while(list($x, $columns) = @each($index))
{
$def .= ",\n";
if($x == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
else $def .= " KEY $x (" . implode($columns, ", ") . ")";
}
$def .= "\n);\n\n\n";
return (stripslashes($def));
}
function datadump ($table) {
global $connect;
$result = "#------------------------------------------"."\n";
$result .="# Table data for $table"."\n";
$result .="#------------------------------------------"."\n";
$query = db_execute_num("select * from $table");
$num_fields = $query->FieldCount();
$numrow = $query->RecordCount();
while($row=$query->FetchRow()){
@set_time_limit(5);
$result .= "INSERT INTO ".$table." VALUES(";
for($j=0; $j<$num_fields; $j++) {
if (isset($row[$j]) && !is_null($row[$j]))
{
$row[$j] = addslashes($row[$j]);
$row[$j] = preg_replace("#\n#","\\n",$row[$j]);
$result .= "\"$row[$j]\"";
}
else
{
$result .= "NULL";
}
if ($j<($num_fields-1)) $result .= ",";
}
$result .= ");\n";
} // while
return $result . "\n\n\n";
}
?>