From e58f3d8c2bc8ee41174b3cabb4ccddd7b9c918c9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Thu, 9 May 2013 10:05:25 +0200 Subject: Validate e-mail address in new_user_dialog (#1486498), use AJAX for form submission, don't reload the page after successful form submission --- plugins/new_user_dialog/new_user_dialog.php | 55 ++++++++++----- plugins/new_user_dialog/package.xml | 106 +--------------------------- 2 files changed, 41 insertions(+), 120 deletions(-) diff --git a/plugins/new_user_dialog/new_user_dialog.php b/plugins/new_user_dialog/new_user_dialog.php index 8d641c946..39a707638 100644 --- a/plugins/new_user_dialog/new_user_dialog.php +++ b/plugins/new_user_dialog/new_user_dialog.php @@ -10,10 +10,12 @@ * @version @package_version@ * @license GNU GPLv3+ * @author Thomas Bruederli + * @author Aleksander Machniak */ class new_user_dialog extends rcube_plugin { public $task = 'login|mail'; + public $noframe = true; function init() { @@ -32,8 +34,9 @@ class new_user_dialog extends rcube_plugin function create_identity($p) { // set session flag when a new user was created and the default identity seems to be incomplete - if ($p['login'] && !$p['complete']) + if ($p['login'] && !$p['complete']) { $_SESSION['plugin.newuserdialog'] = true; + } } /** @@ -86,7 +89,6 @@ class new_user_dialog extends rcube_plugin 'id' => 'newuserdialog', 'action' => $rcmail->url('plugin.newusersave'), 'method' => 'post'), - html::tag('h3', null, rcube::Q($this->gettext('identitydialogtitle'))) . html::p('hint', rcube::Q($this->gettext('identitydialoghint'))) . $table->show() . html::p(array('class' => 'formbuttons'), @@ -94,12 +96,23 @@ class new_user_dialog extends rcube_plugin 'class' => 'button mainaction', 'value' => $this->gettext('save')))) )); + $title = rcube::JQ($this->gettext('identitydialogtitle')); + // disable keyboard events for messages list (#1486726) - $rcmail->output->add_script( - "rcmail.message_list.key_press = function(){}; - rcmail.message_list.key_down = function(){}; - $('#newuserdialog').show().dialog({ modal:true, resizable:false, closeOnEscape:false, width:420 }); - $('input[name=_name]').focus(); + $rcmail->output->add_script(" + $('#newuserdialog').show() + .dialog({modal:true, resizable:false, closeOnEscape:false, width:450, title:'$title'}) + .submit(function() { + var i, request = {}, form = $(this).serializeArray(); + + for (i in form) + request[form[i].name] = form[i].value; + + rcmail.http_post('plugin.newusersave', request, true); + return false; + }); + $('input[name=_name]').focus(); + rcube_webmail.prototype.new_user_dialog_close = function() { $('#newuserdialog').dialog('close'); } ", 'docready'); $this->include_stylesheet('newuserdialog.css'); @@ -107,16 +120,16 @@ class new_user_dialog extends rcube_plugin } /** - * Handler for submitted form + * Handler for submitted form (ajax request) * * Check fields and save to default identity if valid. * Afterwards the session flag is removed and we're done. */ function save_data() { - $rcmail = rcmail::get_instance(); - $identity = $rcmail->user->get_identity(); - $identities_level = intval($rcmail->config->get('identities_level', 0)); + $rcmail = rcmail::get_instance(); + $identity = $rcmail->user->get_identity(); + $ident_level = intval($rcmail->config->get('identities_level', 0)); $save_data = array( 'name' => rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST), @@ -126,18 +139,26 @@ class new_user_dialog extends rcube_plugin ); // don't let the user alter the e-mail address if disabled by config - if (in_array($identities_level, array(1,3,4))) + if (in_array($ident_level, array(1,3,4))) { $save_data['email'] = $identity['email']; - else - $save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']); + } - // save data if not empty - if (!empty($save_data['name']) && !empty($save_data['email'])) { + if (empty($save_data['name']) || empty($save_data['email'])) { + $rcmail->output->show_message('formincomplete', 'error'); + } + else if (!rcube_utils::check_email($save_data['email'] = rcube_utils::idn_to_ascii($save_data['email']))) { + $rcmail->output->show_message('emailformaterror', 'error', array('email' => $save_data['email'])); + } + else { + // save data $rcmail->user->update_identity($identity['identity_id'], $save_data); $rcmail->session->remove('plugin.newuserdialog'); + // hide dialog + $rcmail->output->command('new_user_dialog_close'); + $rcmail->output->show_message('successfullysaved', 'confirmation'); } - $rcmail->output->redirect(''); + $rcmail->output->send(); } } diff --git a/plugins/new_user_dialog/package.xml b/plugins/new_user_dialog/package.xml index c9f1965de..68a929931 100644 --- a/plugins/new_user_dialog/package.xml +++ b/plugins/new_user_dialog/package.xml @@ -13,19 +13,16 @@ roundcube@gmail.com yes - 2013-04-16 + 2013-05-09 - 1.6 - 1.0 + 2.0 + 2.0 stable stable GNU GPLv3+ - -- Fix handling of identities_level=4 - @@ -69,101 +66,4 @@ - - - 2010-03-29 - - - 1.0 - 1.0 - - - stable - stable - - GNU GPLv2 - - - - 2010-05-13 - - - 1.1 - 1.0 - - - stable - stable - - GNU GPLv2 - -- Fix space bar and backspace buttons not working (#1486726) - - - - 2010-05-27 - - - 1.2 - 1.0 - - - stable - stable - - GNU GPLv2 - -- Add overlay box only to mail task main template -- Fix possible error on form submission (#1486103) - - - - 2010-12-02 - - - 1.3 - 1.0 - - - stable - stable - - GNU GPLv2 - -- Added setting of focus on name input -- Added gl_ES translation - - - - 2012-01-16 - - - 1.5 - 1.0 - - - stable - stable - - GNU GPLv2 - - Use jquery UI to render the dialog - - - 2012-01-16 - - - 1.5 - 1.0 - - - stable - stable - - GNU GPLv3+ - -- Use jquery UI to render the dialog -- Fixed IDNA encoding/decoding of e-mail addresses (#1487909) - - - -- cgit v1.2.3