<?php
/************************************************************************/
/* Maximus CMS: Web Portal System                                       */
/* ==============================                                       */
/*                                                                      */
/* Copyright (c) 2002 - 2006                                            */
/* http://www.php-maximus.fr                                            */
/* dev@php-maximus.org                                                  */
/*                                                                      */
/* This program is free software. You can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License.       */
/************************************************************************/
/* Based on PHP-NUKE: Web Portal System                                 */
/************************************************************************/
if (!defined('ADMIN_ALLOW') && !defined('ADMIN_MAX')) {
	die ("Access Denied");
}
if ($acces == 1) {
if($admintest && $adminsecu)  {
       @set_time_limit(600);
        $crlf="\n";

                // french Text
                $strNoTablesFound = "Aucune table en base de données.";
                $strDatabase = "Database ";
                $strTableStructure = "Structure des tables";
                $strDumpingData = "Dumping des tables";
                $strError = "Erreur";
                $strSQLQuery = "SQL-query";
                $strMySQLSaid = "Réponse serveur MySQL: ";
                $strBack = "Retour";
                $strDone = "Ok";
                $strat = "à";
                $strby = "par";
                $date_jour = date ("d-m-Y");

        $filename = $dbname."_".$date_jour.".sql";
/*
        header("Content-disposition: filename=$filename");
        header("Content-type: application/octetstream");
        header("Pragma: no-cache");
        header("Expires: 0");
*/
global $gzip;
$do_gzip_compress = ($gzip == 1);
                        if($do_gzip_compress)
                        {
                                @ob_start();
                                @ob_implicit_flush(0);
                                header("Content-Type: application/x-gzip; name=\"$filename.gz\"");
                                header("Content-disposition: attachment; filename=$filename.gz");
                        }
                        else
                        {
                                header("Content-Type: text/x-delimtext; name=\"$filename\"");
                                header("Content-disposition: attachment; filename=$filename");
                        }

        // doing some DOS-CRLF magic...
        $client = $_SERVER["HTTP_USER_AGENT"];
        if(ereg('[^(]*\((.*)\)[^)]*',$client,$regs))
        {
        $os = $regs[1];
        // this looks better under WinX
        if (eregi("Win",$os))
            $crlf="\r\n";
        }
/*
        function gzip_PrintFourChars($Val)
        {
            for ($i = 0; $i < 4; $i ++)
            {
                $return .= chr($Val % 256);
                $Val = floor($Val / 256);
            }
            return $return;
        }
*/
        function my_handler($sql_insert)
        {
            global $crlf;
            echo "$sql_insert;$crlf";
        }

        // Get the content of $table as a series of INSERT statements.
        // After every row, a custom callback function $handler gets called.
        // $handler must accept one parameter ($sql_insert);
        function get_table_content($db, $table, $handler)
        {
            $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
            $i = 0;
            while($row = mysql_fetch_row($result))
            {
        //        set_time_limit(60); // HaRa
                $table_list = "(";

                for($j=0; $j<mysql_num_fields($result);$j++)
                    $table_list .= mysql_field_name($result,$j).", ";

                $table_list = substr($table_list,0,-2);
                $table_list .= ")";

                if(isset($GLOBALS["showcolumns"]))
                    $schema_insert = "INSERT INTO $table $table_list VALUES (";
                else
                    $schema_insert = "INSERT INTO $table VALUES (";

                for($j=0; $j<mysql_num_fields($result);$j++)
                {
                    if(!isset($row[$j]))
                        $schema_insert .= " NULL,";
                    elseif($row[$j] != "")
                        $schema_insert .= " '".addslashes($row[$j])."',";
                    else
                        $schema_insert .= " '',";
                }
                $schema_insert = ereg_replace(",$", "", $schema_insert);
                $schema_insert .= ")";
                $handler(trim($schema_insert));
                $i++;
            }
            return (true);
        }

        // Return $table's CREATE definition
        // Returns a string containing the CREATE statement on success
        function get_table_def($db, $table, $crlf)
        {
            $schema_create = "";
            global $drop;
            if ($drop == 1) {
                $schema_create .= "DROP TABLE IF EXISTS $table;$crlf";
            }
            $schema_create .= "CREATE TABLE $table ($crlf";

            $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
            while($row = mysql_fetch_array($result))
            {
                $schema_create .= "   $row[Field] $row[Type]";

                if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
                    $schema_create .= " DEFAULT '$row[Default]'";
                if($row["Null"] != "YES")
                    $schema_create .= " NOT NULL";
                if($row["Extra"] != "")
                    $schema_create .= " $row[Extra]";
                $schema_create .= ",$crlf";
            }
            $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
            $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
            while($row = mysql_fetch_array($result))
            {
                $kname=$row['Key_name'];
                if (($kname != "PRIMARY") && ($row['Non_unique'] == 0))
                    $kname="UNIQUE|$kname";
                if ($row['Index_type'] == "FULLTEXT")
                    $kname="FULLTEXT|$kname";
                if (!isset($index[$kname]))
                     $index[$kname] = array();
                 $index[$kname][] = $row['Column_name'];
            }

            while(list($x, $columns) = @each($index))
            {
                 $schema_create .= ",$crlf";
                 if($x == "PRIMARY")
                     $schema_create .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
                 elseif (substr($x,0,6) == "UNIQUE")
                    $schema_create .= "   UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
                 elseif (substr($x,0,8) == "FULLTEXT")
                    $schema_create .= "   FULLTEXT ".substr($x,9)." (" . implode($columns, ", ") . ")";
                 else
                    $schema_create .= "   KEY $x (" . implode($columns, ", ") . ")";
            }

            $schema_create .= "$crlf)";
            return (stripslashes($schema_create));
        }

        function mysql_die($error = "")
        {
            echo "<b> $strError </b><p>";
            if(isset($sql_query) && !empty($sql_query))
            {
                echo "$strSQLQuery: <pre>$sql_query</pre><p>";
            }
            if(empty($error))
                echo $strMySQLSaid.mysql_error();
            else
                echo $strMySQLSaid.$error;
            echo "<br /><a href=\"javascript:history.go(-1)\">$strBack</a>";
            exit;
        }

        global $dbhost, $dbuname, $dbpass, $dbname, $tablelist;
        mysql_pconnect($dbhost, $dbuname, $dbpass);
        @mysql_select_db("$dbname") or die ("Base de données non sélectionnée");

        if (is_array($tablelist) && count($tablelist) > 0) {
            $tables = $tablelist;
            $num_tables = count($tablelist);
        } else {
            $tablelist = mysql_list_tables($dbname);
            $num_tables = @mysql_numrows($tablelist);
            if($num_tables > 0) for ($i = 0; $i < $num_tables; $i++) {
                $tables[] = mysql_tablename($tablelist, $i);
            }
        }

        if($num_tables == 0)
        {
            echo $strNoTablesFound;
        }
        else
        {
            $i = 0;
            $heure_jour = date ("H:i");
            print "# ========================================================$crlf";
            print "#$crlf";
            print "# $strDatabase : $dbname$crlf";
            print "# $strDone $date_jour $strat $heure_jour $strby $cookie[1] !$crlf";
            print "#$crlf";
            print "# ========================================================$crlf";
            print "$crlf";

            foreach($tables AS $table)
            {
                print $crlf;
                print "# --------------------------------------------------------$crlf";
                print "#$crlf";
                print "# $strTableStructure '$table'$crlf";
                print "#$crlf";
                print $crlf;

                echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";

            print "#$crlf";
            print "# $strDumpingData '$table'$crlf";
            print "#$crlf";
            print $crlf;

            get_table_content($dbname, $table, "my_handler");
            }
        }

        exit;}
}else {
	echo "Access Denied";
}