diff options
author | Aleksander Machniak <alec@alec.pl> | 2013-05-09 10:05:25 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2013-05-09 10:05:25 +0200 |
commit | e58f3d8c2bc8ee41174b3cabb4ccddd7b9c918c9 (patch) | |
tree | 15c96281b5affd9bcce4f97afd5abacd5c45ec83 | |
parent | 2a3e774c60b10e9593b5a3f9596fa68f1f389d86 (diff) |
Validate e-mail address in new_user_dialog (#1486498), use AJAX for form submission,
don't reload the page after successful form submission
-rw-r--r-- | plugins/new_user_dialog/new_user_dialog.php | 55 | ||||
-rw-r--r-- | 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 @@ <email>roundcube@gmail.com</email> <active>yes</active> </lead> - <date>2013-04-16</date> + <date>2013-05-09</date> <version> - <release>1.6</release> - <api>1.0</api> + <release>2.0</release> + <api>2.0</api> </version> <stability> <release>stable</release> <api>stable</api> </stability> <license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license> - <notes> -- Fix handling of identities_level=4 - </notes> <contents> <dir baseinstalldir="/" name="/"> <file name="new_user_dialog.php" role="php"> @@ -69,101 +66,4 @@ </required> </dependencies> <phprelease/> - <changelog> - <release> - <date>2010-03-29</date> - <time>13:20:00</time> - <version> - <release>1.0</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes></notes> - </release> - <release> - <date>2010-05-13</date> - <time>19:35:00</time> - <version> - <release>1.1</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes> -- Fix space bar and backspace buttons not working (#1486726) - </notes> - </release> - <release> - <date>2010-05-27</date> - <time>12:00:00</time> - <version> - <release>1.2</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes> -- Add overlay box only to mail task main template -- Fix possible error on form submission (#1486103) - </notes> - </release> - <release> - <date>2010-12-02</date> - <time>12:00:00</time> - <version> - <release>1.3</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes> -- Added setting of focus on name input -- Added gl_ES translation - </notes> - </release> - <release> - <date>2012-01-16</date> - <time>17:00:00</time> - <version> - <release>1.5</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license> - <notes>- Use jquery UI to render the dialog</notes> - </release> - <release> - <date>2012-01-16</date> - <time>17:00</time> - <version> - <release>1.5</release> - <api>1.0</api> - </version> - <stability> - <release>stable</release> - <api>stable</api> - </stability> - <license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license> - <notes> -- Use jquery UI to render the dialog -- Fixed IDNA encoding/decoding of e-mail addresses (#1487909) - </notes> - </release> - </changelog> </package> |