summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG2
-rw-r--r--program/steps/addressbook/edit.inc38
-rw-r--r--program/steps/addressbook/save.inc1
3 files changed, 24 insertions, 17 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 626b3fc7f..33e4be8a2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,8 @@
CHANGELOG Roundcube Webmail
===========================
+- Keep all submitted data if contact form validation fails (#1487865)
+- Handle uncode strings in rcube_addressbook::normalize_string() (#1487866)
- Fix bug where template name without plugin prefix was used in render_page hook
- Fix handling of debug_level=4 in ajax requests (#1487831)
- Support 'abort' and 'result' response in 'preferences_save' hook, add error handling
diff --git a/program/steps/addressbook/edit.inc b/program/steps/addressbook/edit.inc
index 932dc4918..cf6beba68 100644
--- a/program/steps/addressbook/edit.inc
+++ b/program/steps/addressbook/edit.inc
@@ -31,18 +31,28 @@ if ($CONTACTS->readonly) {
}
-function rcmail_contact_edithead($attrib)
+function rcmail_get_edit_record()
{
- global $RCMAIL, $CONTACTS;
+ global $RCMAIL, $CONTACTS;
+
+ // check if we have a valid result
+ if ($GLOBALS['EDIT_RECORD']) {
+ $record = $GLOBALS['EDIT_RECORD'];
+ }
+ else if ($RCMAIL->action != 'add'
+ && !(($result = $CONTACTS->get_result()) && ($record = $result->first()))
+ ) {
+ $RCMAIL->output->show_message('contactnotfound');
+ return false;
+ }
+
+ return $record;
+}
+function rcmail_contact_edithead($attrib)
+{
// check if we have a valid result
- if ($RCMAIL->action != 'add'
- && !(($result = $CONTACTS->get_result()) && ($record = $result->first()))
- ) {
- $RCMAIL->output->show_message('contactnotfound');
- return false;
- }
-
+ $record = rcmail_get_edit_record();
$i_size = !empty($attrib['size']) ? $attrib['size'] : 20;
$form = array(
@@ -74,15 +84,9 @@ function rcmail_contact_edithead($attrib)
function rcmail_contact_editform($attrib)
{
- global $RCMAIL, $CONTACTS, $CONTACT_COLTYPES;
+ global $RCMAIL, $CONTACT_COLTYPES;
- // check if we have a valid result
- if ($RCMAIL->action != 'add'
- && !(($result = $CONTACTS->get_result()) && ($record = $result->first()))
- ) {
- $RCMAIL->output->show_message('contactnotfound');
- return false;
- }
+ $record = rcmail_get_edit_record();
// add some labels to client
$RCMAIL->output->add_label('noemailwarning', 'nonamewarning');
diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc
index 8949a239b..88fe98cd1 100644
--- a/program/steps/addressbook/save.inc
+++ b/program/steps/addressbook/save.inc
@@ -139,6 +139,7 @@ if (empty($a_record['name'])) {
if (!$CONTACTS->validate($a_record)) {
$err = (array)$CONTACTS->get_error() + array('message' => 'formincomplete', 'type' => 'warning');
$OUTPUT->show_message($err['message'], $err['type']);
+ $GLOBALS['EDIT_RECORD'] = $a_record; // store submitted data to be used in edit form
rcmail_overwrite_action($return_action);
return;
}