X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=program%2Fsteps%2Faddressbook%2Fsave.inc;fp=program%2Fsteps%2Faddressbook%2Fsave.inc;h=e0f9a3f613553b1e67f1098f0f6ea0e3ac7856ac;hb=4212156c5c79d2f58342feb0d3ed1893f177bcab;hp=4b9a018d234570eeb08504f4f871790d6b75958c;hpb=e8a0682b96f5b7f297e58d101735ba20a0cc3a89;p=roundcube.git diff --git a/program/steps/addressbook/save.inc b/program/steps/addressbook/save.inc index 4b9a018..e0f9a3f 100644 --- a/program/steps/addressbook/save.inc +++ b/program/steps/addressbook/save.inc @@ -4,8 +4,8 @@ +-----------------------------------------------------------------------+ | program/steps/addressbook/save.inc | | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -15,24 +15,22 @@ | Author: Thomas Bruederli | +-----------------------------------------------------------------------+ - $Id: save.inc 2889 2009-08-29 18:41:17Z alec $ + $Id: save.inc 4166 2010-11-02 09:27:03Z alec $ */ $cid = get_input_value('_cid', RCUBE_INPUT_POST); -$return_action = empty($cid) ? 'add' : 'show'; +$return_action = empty($cid) ? 'add' : 'edit'; // cannot edit record -if ($CONTACTS->readonly) -{ +if ($CONTACTS->readonly) { $OUTPUT->show_message('contactreadonly', 'error'); rcmail_overwrite_action($return_action); return; } -// check input -if ((!get_input_value('_name', RCUBE_INPUT_POST) || !get_input_value('_email', RCUBE_INPUT_POST))) -{ +// Basic input checks +if ((!get_input_value('_name', RCUBE_INPUT_POST) || !get_input_value('_email', RCUBE_INPUT_POST))) { $OUTPUT->show_message('formincomplete', 'warning'); rcmail_overwrite_action($return_action); return; @@ -44,28 +42,40 @@ $a_save_cols = array('name', 'firstname', 'surname', 'email'); $a_record = array(); // read POST values into hash array -foreach ($a_save_cols as $col) -{ +foreach ($a_save_cols as $col) { $fname = '_'.$col; if (isset($_POST[$fname])) $a_record[$col] = get_input_value($fname, RCUBE_INPUT_POST); } +// Validity checks +$_email = idn_to_ascii($a_record['email']); +if (!check_email($_email, false)) { + $OUTPUT->show_message('emailformaterror', 'warning', array('email' => $_email)); + rcmail_overwrite_action($return_action); + return; +} + // update an existing contact if (!empty($cid)) { - $plugin = $RCMAIL->plugins->exec_hook('save_contact', array('id' => $cid, 'record' => $a_record, 'source' => get_input_value('_source', RCUBE_INPUT_GPC))); + $plugin = $RCMAIL->plugins->exec_hook('contact_update', + array('id' => $cid, 'record' => $a_record, 'source' => get_input_value('_source', RCUBE_INPUT_GPC))); $a_record = $plugin['record']; - - if (!$plugin['abort'] && ($result = $CONTACTS->update($cid, $a_record))) - { + + if (!$plugin['abort']) + $result = $CONTACTS->update($cid, $a_record); + else + $result = $plugin['result']; + + if ($result) { // LDAP DN change if (is_string($result) && strlen($result)>1) { $newcid = $result; // change cid in POST for 'show' action $_POST['_cid'] = $newcid; } - + // define list of cols to be displayed $a_js_cols = array(); $record = $CONTACTS->get_record($newcid ? $newcid : $cid, true); @@ -75,39 +85,42 @@ if (!empty($cid)) // update the changed col in list $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols, $newcid); - + // show confirmation $OUTPUT->show_message('successfullysaved', 'confirmation', null, false); rcmail_overwrite_action('show'); } - else - { + else { // show error message - $OUTPUT->show_message('errorsaving', 'error', null, false); + $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error', null, false); rcmail_overwrite_action('show'); } } // insert a new contact -else -{ +else { // check for existing contacts $existing = $CONTACTS->search('email', $a_record['email'], true, false); - + // show warning message - if ($existing->count) - { + if ($existing->count) { $OUTPUT->show_message('contactexists', 'warning', null, false); rcmail_overwrite_action('add'); return; } - $plugin = $RCMAIL->plugins->exec_hook('create_contact', array('record' => $a_record, 'source' => get_input_value('_source', RCUBE_INPUT_GPC))); + $plugin = $RCMAIL->plugins->exec_hook('contact_create', array( + 'record' => $a_record, 'source' => get_input_value('_source', RCUBE_INPUT_GPC))); $a_record = $plugin['record']; // insert record and send response - if (!$plugin['abort'] && ($insert_id = $CONTACTS->insert($a_record))) - { + if (!$plugin['abort']) + $insert_id = $CONTACTS->insert($a_record); + else + $insert_id = $plugin['result']; + + + if ($insert_id) { // add contact row or jump to the page where it should appear $CONTACTS->reset(); $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id); @@ -121,15 +134,11 @@ else // show confirmation $OUTPUT->show_message('successfullysaved', 'confirmation', null, false); - rcmail_overwrite_action('show'); - $_GET['_cid'] = $insert_id; + $OUTPUT->send('iframe'); } - else - { + else { // show error message - $OUTPUT->show_message('errorsaving', 'error', null, false); + $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error', null, false); rcmail_overwrite_action('add'); } } - -?>