From bbb1427caabba60e4329d4b3653fbf29d5ddddcc Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Tue, 19 Apr 2011 16:41:24 -0400
Subject: [PATCH] Gracefully shrug on database errors

---
 program/include/rcube_mdb2.php             |    4 +++-
 program/steps/settings/delete_identity.inc |    4 ++--
 program/steps/settings/folders.inc         |    4 ++--
 program/localization/en_US/messages.inc    |    1 +
 program/include/rcube_user.php             |    2 +-
 program/steps/settings/edit_identity.inc   |    2 +-
 6 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php
index 36a5950..7675e84 100644
--- a/program/include/rcube_mdb2.php
+++ b/program/include/rcube_mdb2.php
@@ -266,7 +266,9 @@
 
                 raise_error(array('code' => 500, 'type' => 'db',
                     'line' => __LINE__, 'file' => __FILE__,
-                    'message' => $this->db_error_msg), true, true);
+                    'message' => $this->db_error_msg), true, false);
+                
+                $result = false;
             }
             else {
                 $result = $q->execute($params);
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index 75faf47..c9936d6 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -288,7 +288,7 @@
 
         // we'll not delete last identity
         if ($sql_arr['ident_count'] <= 1)
-            return false;
+            return -1;
 
         $this->db->query(
             "UPDATE ".get_table_name('identities').
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index d787f83..aa3d308 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -24,6 +24,7 @@
 $messages['imaperror'] = 'Connection to IMAP server failed';
 $messages['servererror'] = 'Server Error!';
 $messages['servererrormsg'] = 'Server Error: $msg';
+$messages['databaserror'] = 'Database Error!';
 $messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only';
 $messages['errornoperm'] = 'Unable to perform operation. Permission denied';
 $messages['invalidrequest'] = 'Invalid request! No data was saved.';
diff --git a/program/steps/settings/delete_identity.inc b/program/steps/settings/delete_identity.inc
index 9f76046..275bcb6 100644
--- a/program/steps/settings/delete_identity.inc
+++ b/program/steps/settings/delete_identity.inc
@@ -34,10 +34,10 @@
   
   $deleted = !$plugin['abort'] ? $USER->delete_identity($iid) : $plugin['result'];
 
-  if ($deleted)
+  if ($deleted > 0 && $deleted !== false)
     $OUTPUT->show_message('deletedsuccessfully', 'confirmation', null, false);
   else
-    $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'nodeletelastidentity', 'error', null, false);
+    $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : ($deleted < 0 ? 'nodeletelastidentity' : 'errorsaving'), 'error', null, false);
 
   // send response
   if ($OUTPUT->ajax_call)
diff --git a/program/steps/settings/edit_identity.inc b/program/steps/settings/edit_identity.inc
index 71bd349..426c18e 100644
--- a/program/steps/settings/edit_identity.inc
+++ b/program/steps/settings/edit_identity.inc
@@ -28,7 +28,7 @@
   if (is_array($IDENTITY_RECORD))
     $OUTPUT->set_env('iid', $IDENTITY_RECORD['identity_id']);
   else {
-    $OUTPUT->show_message('opnotpermitted', 'error');
+    $OUTPUT->show_message('databaserror', 'error');
     // go to identities page
     rcmail_overwrite_action('identities');
     return;
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index dcc3ce6..a215d00 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -354,11 +354,11 @@
         foreach ($a_threaded as $key => $val) {
             if ($key == $oldname) {
                 unset($a_threaded[$key]);
-    	        $a_threaded[$newname] = true;
+                $a_threaded[$newname] = true;
             }
             else if (preg_match($oldprefix, $key)) {
                 unset($a_threaded[$key]);
-	            $a_threaded[preg_replace($oldprefix, $newname.$delimiter, $key)] = true;
+                $a_threaded[preg_replace($oldprefix, $newname.$delimiter, $key)] = true;
             }
         }
         $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));

--
Gitblit v1.9.1