From bbb1427caabba60e4329d4b3653fbf29d5ddddcc Mon Sep 17 00:00:00 2001 From: thomascube Date: Tue, 19 Apr 2011 20:41:24 +0000 Subject: [PATCH] Gracefully shrug on database errors --- program/include/rcube_mdb2.php | 4 +++- program/include/rcube_user.php | 2 +- program/localization/en_US/messages.inc | 1 + program/steps/settings/delete_identity.inc | 4 ++-- program/steps/settings/edit_identity.inc | 2 +- program/steps/settings/folders.inc | 4 ++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/program/include/rcube_mdb2.php b/program/include/rcube_mdb2.php index 36a595098..7675e847f 100644 --- a/program/include/rcube_mdb2.php +++ b/program/include/rcube_mdb2.php @@ -266,7 +266,9 @@ class rcube_mdb2 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 75faf4728..c9936d619 100644 --- a/program/include/rcube_user.php +++ b/program/include/rcube_user.php @@ -288,7 +288,7 @@ class rcube_user // 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 d787f831d..aa3d308fc 100644 --- a/program/localization/en_US/messages.inc +++ b/program/localization/en_US/messages.inc @@ -24,6 +24,7 @@ $messages['sessionerror'] = 'Your session is invalid or expired'; $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 9f76046b7..275bcb684 100644 --- a/program/steps/settings/delete_identity.inc +++ b/program/steps/settings/delete_identity.inc @@ -34,10 +34,10 @@ if ($iid && preg_match('/^[0-9]+(,[0-9]+)*$/', $iid)) $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 71bd349a3..426c18ed0 100644 --- a/program/steps/settings/edit_identity.inc +++ b/program/steps/settings/edit_identity.inc @@ -28,7 +28,7 @@ if (($_GET['_iid'] || $_POST['_iid']) && $RCMAIL->action=='edit-identity') { 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 dcc3ce64b..a215d008b 100644 --- a/program/steps/settings/folders.inc +++ b/program/steps/settings/folders.inc @@ -354,11 +354,11 @@ function rcmail_rename_folder($oldname, $newname) 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));