| program/steps/addressbook/save.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
| Author: Thomas Bruederli <roundcube@gmail.com> |
+-----------------------------------------------------------------------+
- $Id: save.inc 1407 2008-05-19 17:47:45Z thomasb $
+ $Id: save.inc 2889 2009-08-29 18:41:17Z alec $
*/
+$cid = get_input_value('_cid', RCUBE_INPUT_POST);
+$return_action = empty($cid) ? 'add' : 'show';
+
// cannot edit record
if ($CONTACTS->readonly)
{
$OUTPUT->show_message('contactreadonly', 'error');
- rcmail_overwrite_action(empty($_POST['_cid']) ? 'add' : 'show');
+ rcmail_overwrite_action($return_action);
return;
}
if ((!get_input_value('_name', RCUBE_INPUT_POST) || !get_input_value('_email', RCUBE_INPUT_POST)))
{
$OUTPUT->show_message('formincomplete', 'warning');
- rcmail_overwrite_action(empty($_POST['_cid']) ? 'add' : 'show');
+ rcmail_overwrite_action($return_action);
return;
}
// setup some vars we need
$a_save_cols = array('name', 'firstname', 'surname', 'email');
$a_record = array();
-$cid = get_input_value('_cid', RCUBE_INPUT_POST);
// read POST values into hash array
foreach ($a_save_cols as $col)
// update an existing contact
if (!empty($cid))
{
- if ($CONTACTS->update($cid, $a_record))
+ $plugin = $RCMAIL->plugins->exec_hook('save_contact', 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)))
{
+ // 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($cid, true);
+ $record = $CONTACTS->get_record($newcid ? $newcid : $cid, true);
foreach (array('name', 'email') as $col)
$a_js_cols[] = (string)$record[$col];
// update the changed col in list
- $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols);
+ $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols, $newcid);
// show confirmation
- $OUTPUT->show_message('successfullysaved', 'confirmation');
+ $OUTPUT->show_message('successfullysaved', 'confirmation', null, false);
rcmail_overwrite_action('show');
}
else
{
// show error message
- $OUTPUT->show_message('errorsaving', 'error');
+ $OUTPUT->show_message('errorsaving', 'error', null, false);
rcmail_overwrite_action('show');
}
}
// show warning message
if ($existing->count)
{
- $OUTPUT->show_message('contactexists', 'warning');
+ $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)));
+ $a_record = $plugin['record'];
+
// insert record and send response
- if ($insert_id = $CONTACTS->insert($a_record))
+ if (!$plugin['abort'] && ($insert_id = $CONTACTS->insert($a_record)))
{
// add contact row or jump to the page where it should appear
$CONTACTS->reset();
$OUTPUT->command('parent.set_rowcount', rcmail_get_rowcount_text());
// show confirmation
- $OUTPUT->show_message('successfullysaved', 'confirmation');
+ $OUTPUT->show_message('successfullysaved', 'confirmation', null, false);
rcmail_overwrite_action('show');
$_GET['_cid'] = $insert_id;
}
else
{
// show error message
- $OUTPUT->show_message('errorsaving', 'error');
+ $OUTPUT->show_message('errorsaving', 'error', null, false);
rcmail_overwrite_action('add');
}
}