Fixed memory limit during database export.
[fa-stable.git] / admin / db / maintenance_db.inc
index 71081c5763e9b1f1ae0e992e90e85558d94c484d..ab7334f0258a387d721a93bfe4ba729c3725b2f6 100644 (file)
@@ -71,22 +71,23 @@ function write_config_db($new = false)
 
        if ($new)
                $tb_pref_counter++;
-       $n = count($db_connections);
        $msg = "<?php\n\n";
        $msg .= "/*Connection Information for the database\n";
        $msg .= "\$def_coy - the default company that is pre-selected on login\n\n";
        $msg .= "'host' - the computer ip address or name where the database is. The default is 'localhost' assuming that the web server is also the sql server.\n\n";
+       $msg .= "'port' - the computer port where the database is. The default is '3306'. Set empty for default.\n\n";
        $msg .= "'dbuser' - the user name under which the company database should be accessed.\n";
        $msg .= "  NB it is not secure to use root as the dbuser with no password - a user with appropriate privileges must be set up.\n\n";
        $msg .= "'dbpassword' - the password required for the dbuser to authorise the above database user.\n\n";
        $msg .= "'dbname' - the name of the database as defined in the RDMS being used. Typically RDMS allow many databases to be maintained under the same server.\n";
+       $msg .= "'collation' - the character set used for the database.\n";
        $msg .= "'tbpref' - prefix on table names, or '' if not used. Always use non-empty prefixes if multiply company use the same database.\n";
        $msg .= "*/\n\n\n";
 
        $msg .= "\$def_coy = " . $def_coy . ";\n\n";
        $msg .= "\$tb_pref_counter = " . $tb_pref_counter . ";\n\n";
        $msg .= "\$db_connections = " .var_export($db_connections, true);
-       $msg .= ";\n?>";
+       $msg .= ";\n";
 
        $filename = $path_to_root . "/config_db.php";
        // Check if the file exists and is writable first.
@@ -105,6 +106,7 @@ function write_config_db($new = false)
                        }
                        // Close file
                        fclose($zp);
+                       cache_invalidate($filename);
                }
        }
        else
@@ -142,7 +144,7 @@ function write_extensions($extensions=null, $company = -1)
 */\n\n";
 
        $msg .= "\$installed_extensions = ". var_export($extensions, true);
-       $msg .= ";\n?>";
+       $msg .= ";\n";
        $filename = $path_to_root . ($company==-1 ? '' : '/company/'.$company)
                .'/installed_extensions.php';
 
@@ -164,6 +166,7 @@ function write_extensions($extensions=null, $company = -1)
                }
                // Close file
                fclose($zp);
+               cache_invalidate($filename);
        }
        return true;
 }
@@ -207,7 +210,6 @@ function write_lang()
        global $path_to_root, $installed_languages, $dflt_lang;
 
        $installed_languages = array_natsort($installed_languages, 'code', 'code');
-       $n = count($installed_languages);
        $msg = "<?php\n\n";
 
        $msg .= "/* How to make new entries here for non-packaged languages:\n\n";
@@ -221,7 +223,7 @@ function write_lang()
 
        $msg .= "\$installed_languages = " . var_export($installed_languages, true);
        $msg .= ";\n";
-       $msg .= "\n\$dflt_lang = '$dflt_lang';\n?>\n";
+       $msg .= "\n\$dflt_lang = '$dflt_lang';\n";
 
        $path = $path_to_root . "/lang";
        $filename = $path.'/installed_languages.inc';
@@ -243,6 +245,7 @@ function write_lang()
                        }
                        // Close file
                        fclose($zp);
+                       cache_invalidate($filename);
                }
        }
        else
@@ -263,9 +266,10 @@ function write_lang()
 */
 function db_import($filename, $connection, $force=true, $init=true, $protect=false, $return_errors=false)
 {
-       global $db, $go_debug, $sql_trail;
+       global $db, $SysPrefs;
 
-       $sql_trail = false;
+       $trail = $SysPrefs->sql_trail;
+       $SysPrefs->sql_trail = false;
 
        $allowed_commands = array(
                "create"  => 'table_queries', 
@@ -277,6 +281,8 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal
                "drop table if exists" => 'drop_queries',
                "drop function if exists" => 'drop_queries',
                "drop trigger if exists" => 'drop_queries',
+               "select" => 'data_queries', 
+               "delete" => 'data_queries', 
                );
 
        $protected = array(
@@ -301,10 +307,15 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal
 
        $old_encoding = db_get_charset($db);
 
-       ini_set("max_execution_time", "180");
+       ini_set("max_execution_time", max("180", ini_get("max_execution_time")));
        db_query("SET foreign_key_checks=0");
+
+       if (isset($connection['collation']))
+               db_set_collation($db, $connection['collation']);
+
        $check_line_len = false;
-       // uncrompress gziped backup files
+
+       // uncompress gziped backup files
        if (strpos($filename, ".gz") || strpos($filename, ".GZ"))
        {       $lines = db_ungzip("lines", $filename);
                $check_line_len = true;
@@ -413,8 +424,8 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal
 /*/
        if ($return_errors)
        {       // prevent errors display
-               $save_debug = $go_debug;
-               $go_debug = 0;
+               $save_debug = $SysPrefs->go_debug;
+               $SysPrefs->go_debug = 0;
        }
        // execute drop tables if exists queries
        if (is_array($drop_queries))
@@ -457,7 +468,9 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal
        }
 
        if ($return_errors)
-               $go_debug = $save_debug;
+               $SysPrefs->go_debug = $save_debug;
+
+       $SysPrefs->sql_trail = $trail;
 
        db_query("SET foreign_key_checks=1");
        if ($delimiter != ';') db_query("delimiter ;"); // just for any case
@@ -530,33 +543,28 @@ function db_unzip($mode, $path)
        return explode("\n", $file_data);
 }
 
-function db_backup($conn, $ext='no', $comm='', $path=null)
+function db_backup($conn, $ext='no', $comm='', $path='')
 {
        if ($conn['tbpref'] != "")
                $filename = $conn['dbname'] . "_" . $conn['tbpref'] . date("Ymd_Hi") . ".sql";
        else
                $filename = $conn['dbname'] . "_" . date("Ymd_Hi") . ".sql";
 
-       if (!isset($path))
-               $path = BACKUP_PATH;
-
        return db_export($conn, $path . clean_file_name($filename), $ext, $comm);
 }
-//
 // Generates a dump of $db database
 //
 function db_export($conn, $filename, $zip='no', $comment='')
 {
 
-       global $app_title, $version, $power_url, $path_to_root;
+       global $SysPrefs, $version;
 
     $error = false;
     // set max string size before writing to file
     $max_size = 1048576 * 2; // 2 MB
     // changes max size if value can be retrieved
     if (ini_get("memory_limit"))
-       $max_size = 900000 * ini_get("memory_limit");
-
+       $max_size = 1048576 * (int)ini_get("memory_limit");
     // set backupfile name
     if ($zip == "gzip")
        $backupfile = $filename . ".gz";
@@ -572,8 +580,8 @@ function db_export($conn, $filename, $zip='no', $comment='')
     //create comment
     $out="# MySQL dump of database '".$conn["dbname"]."' on host '".$conn["host"]."'\n";
     $out.="# Backup Date and Time: ".date("Y-m-d H:i")."\n";
-    $out.="# Built by " . $app_title . " " . $version ."\n";
-    $out.="# ".$power_url."\n";
+    $out.="# Built by " . $SysPrefs->app_title . " " . $version ."\n";
+    $out.="# ".$SysPrefs->power_url."\n";
     $out.="# Company: ". @html_entity_decode($company, ENT_QUOTES, $_SESSION['language']->encoding)."\n";
     $out.="# User: ".$_SESSION["wa_current_user"]->name."\n\n";
     $out.="# Compatibility: ".get_company_pref('version_id')."\n\n";
@@ -589,8 +597,6 @@ function db_export($conn, $filename, $zip='no', $comment='')
                $out.="\n";
        }
 
-    //$out.="use ".$db.";\n"; we don't use this option.
-
        if (db_fixed())
        {
                db_set_encoding();
@@ -648,9 +654,6 @@ function db_export($conn, $filename, $zip='no', $comment='')
                        $out.="DROP TABLE IF EXISTS `".$tablename."`;\n\n";
                        $out.=$table_sql[$tablename];
 
-                       // add auto_increment value
-//                     if ($auto_incr[$tablename])
-//                             $out.=" AUTO_INCREMENT=".$auto_incr[$tablename];
                        $out.=" ;";
                        $out.="\n\n";
 
@@ -742,8 +745,6 @@ function db_export($conn, $filename, $zip='no', $comment='')
                return false;
        }
 
-       //if ($zip == "zip")
-       //      $zip = $time;
        if (save_to_file($backupfile, $zip, $out))
        {
                $out = "";
@@ -809,7 +810,6 @@ function order_sql_tables($tables, $fks)
 // returns backup file name if name has changed (zip), else TRUE. If saving failed, return value is FALSE
 function save_to_file($path, $zip, $fileData)
 {
-       global $path_to_root;
 
        $backupfile = basename($path);
 
@@ -922,7 +922,7 @@ function save_to_file($path, $zip, $fileData)
 
 function create_comp_dirs($comp_path, $comp_subdirs)
 {
-               $index = "<?php\nheader(\"Location: ../index.php\");\n?>";
+               $index = "<?php\nheader(\"Location: ../index.php\");\n";
            $cdir = $comp_path;
            @mkdir($cdir);
                $f = @fopen("$cdir/index.php", "wb");
@@ -995,4 +995,3 @@ function update_config_var($file, $variable, $value, $comment='')
 }
 
 
-?>
\ No newline at end of file