From 556e4c1ef189e63a08df9f0ffab386cbbacf5313 Mon Sep 17 00:00:00 2001
From: mcramer <m.cramer@pixcept.de>
Date: Sat, 27 Oct 2012 05:03:43 -0400
Subject: [PATCH] Bugfix: Backup did not work correctly on multiple databases in one web. "X Copies" were not preserved per database so not all databases were backed up Bugfix: Select box did behave strange in some cases

---
 interface/web/js/jquery.tipsy.js |   12 ++++++++++--
 server/cron_daily.php            |   35 +++++++++++++++++++----------------
 2 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/interface/web/js/jquery.tipsy.js b/interface/web/js/jquery.tipsy.js
index efe9612..52c35b3 100644
--- a/interface/web/js/jquery.tipsy.js
+++ b/interface/web/js/jquery.tipsy.js
@@ -250,12 +250,13 @@
             var input,
                 self = this,
                 select = this.element,
+                internal = false,
                 selected = select.children( ":selected" ),
                 value = selected.val() ? selected.text() : "",
                 wrapper = this.wrapper = $( "<span>" )
                     .addClass( "ui-combobox" )
                     .insertAfter( select );
-
+            
             input = $( "<input>" ).css( { "width": (select.is(':visible') ? (elwidth > 15 ? elwidth - 15 : 1) : 350), "height": (elheight > 0 ? elheight : 16) });
             select.hide();
             input.appendTo( wrapper )
@@ -293,7 +294,10 @@
                         } else if($(select).attr('onchange')) {
                             eval($(select).attr('onchange'));
                         } else {
-                            if(!ui.item.internal) $(select).change();
+                            if(!ui.item.internal) {
+                                internal = true;
+                                $(select).change();
+                            }
                         }
                         if (jQuery(".panel #Filter").length > 0) {
                             jQuery(".panel #Filter").trigger('click');
@@ -352,6 +356,10 @@
                 return el;
             };
             select.change(function(e) {
+                if(internal == true) {
+                    internal = false;
+                    return;
+                }
                 var matcher = new RegExp( "" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "", "i" ),
                     matchtext = $(this).val();
                     valid = false,
diff --git a/server/cron_daily.php b/server/cron_daily.php
index dcc84ec..f0d5f57 100644
--- a/server/cron_daily.php
+++ b/server/cron_daily.php
@@ -747,25 +747,28 @@
 				$dir_handle = dir($db_backup_dir);
 				$files = array();
 				while (false !== ($entry = $dir_handle->read())) {
-					if($entry != '.' && $entry != '..' && substr($entry,0,2) == 'db' && is_file($db_backup_dir.'/'.$entry)) {
-						$files[] = $entry;
+					if($entry != '.' && $entry != '..' && preg_match('/^db_(.*?)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql.gz$/', $entry, $matches) && is_file($db_backup_dir.'/'.$entry)) {
+                        if(array_key_exists($matches[1], $files) == false) $files[$matches[1]] = array();
+						$files[$matches[1]][] = $entry;
 					}
 				}
 				$dir_handle->close();
-
-				rsort($files);
-
-				for ($n = $backup_copies; $n <= 10; $n++) {
-					if(isset($files[$n]) && is_file($db_backup_dir.'/'.$files[$n])) {
-						unlink($db_backup_dir.'/'.$files[$n]);
-						$sql = "SELECT backup_id FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($files[$n])."'";
-						$tmp = $app->dbmaster->queryOneRecord($sql);
-						//$app->dbmaster->datalogDelete('web_backup', 'backup_id', $tmp['backup_id']);
-						$sql = "DELETE FROM web_backup WHERE backup_id = ".intval($tmp['backup_id']);
-						$app->db->query($sql);
-						$app->dbmaster->query($sql);
-					}
-				}
+                
+                reset($files);
+                foreach($files as $db_name => $filelist) {
+                    rsort($filelist);
+                    for ($n = $backup_copies; $n <= 10; $n++) {
+                        if(isset($filelist[$n]) && is_file($db_backup_dir.'/'.$filelist[$n])) {
+                            unlink($db_backup_dir.'/'.$filelist[$n]);
+                            $sql = "SELECT backup_id FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = $web_id AND filename = '".$app->db->quote($filelist[$n])."'";
+                            $tmp = $app->dbmaster->queryOneRecord($sql);
+                            //$app->dbmaster->datalogDelete('web_backup', 'backup_id', $tmp['backup_id']);
+                            $sql = "DELETE FROM web_backup WHERE backup_id = ".intval($tmp['backup_id']);
+                            $app->db->query($sql);
+                            $app->dbmaster->query($sql);
+                        }
+                    }
+                }
 
 				unset($files);
 				unset($dir_handle);

--
Gitblit v1.9.1