| | |
| | | | program/steps/addressbook/save.inc | |
| | | | | |
| | | | This file is part of the RoundCube Webmail client | |
| | | | Copyright (C) 2005, RoundCube Dev. - Switzerland | |
| | | | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | PURPOSE: | |
| | |
| | | |
| | | */ |
| | | |
| | | // cannot edit record |
| | | if ($CONTACTS->readonly) |
| | | { |
| | | $OUTPUT->show_message('contactreadonly', 'error'); |
| | | rcmail_overwrite_action(empty($_POST['_cid']) ? 'add' : 'show'); |
| | | return; |
| | | } |
| | | |
| | | // check input |
| | | 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'); |
| | | 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) |
| | | { |
| | | $fname = '_'.$col; |
| | | if (isset($_POST[$fname])) |
| | | $a_record[$col] = get_input_value($fname, RCUBE_INPUT_POST); |
| | | } |
| | | |
| | | // update an existing contact |
| | | if ($_POST['_cid']) |
| | | if (!empty($cid)) |
| | | { |
| | | if ($CONTACTS->update($cid, $a_record)) |
| | | { |
| | | $a_write_sql = array(); |
| | | // define list of cols to be displayed |
| | | $a_js_cols = array(); |
| | | $record = $CONTACTS->get_record($cid, true); |
| | | |
| | | foreach ($a_save_cols as $col) |
| | | { |
| | | $fname = '_'.$col; |
| | | if (!isset($_POST[$fname])) |
| | | continue; |
| | | |
| | | $a_write_sql[] = sprintf("%s='%s'", $col, addslashes(strip_tags($_POST[$fname]))); |
| | | } |
| | | foreach (array('name', 'email') as $col) |
| | | $a_js_cols[] = (string)$record[$col]; |
| | | |
| | | if (sizeof($a_write_sql)) |
| | | { |
| | | $DB->query("UPDATE ".get_table_name('contacts')." |
| | | SET changed=now(), ".join(', ', $a_write_sql)." |
| | | WHERE contact_id=? |
| | | AND user_id=? |
| | | AND del<>'1'", |
| | | $_POST['_cid'], |
| | | $_SESSION['user_id']); |
| | | |
| | | $updated = $DB->affected_rows(); |
| | | } |
| | | |
| | | if ($updated) |
| | | { |
| | | $_action = 'show'; |
| | | show_message('successfullysaved', 'confirmation'); |
| | | |
| | | if ($_POST['_framed']) |
| | | { |
| | | // define list of cols to be displayed |
| | | $a_show_cols = array('name', 'email'); |
| | | $a_js_cols = array(); |
| | | |
| | | $sql_result = $DB->query("SELECT * FROM ".get_table_name('contacts')." |
| | | WHERE contact_id=? |
| | | AND user_id=? |
| | | AND del<>'1'", |
| | | $_POST['_cid'], |
| | | $_SESSION['user_id']); |
| | | |
| | | $sql_arr = $DB->fetch_assoc($sql_result); |
| | | foreach ($a_show_cols as $col) |
| | | $a_js_cols[] = (string)$sql_arr[$col]; |
| | | |
| | | // update the changed col in list |
| | | $OUTPUT->add_script(sprintf("if(parent.%s)parent.%s.update_contact_row('%d', %s);", |
| | | $JS_OBJECT_NAME, |
| | | $JS_OBJECT_NAME, |
| | | $_POST['_cid'], |
| | | array2js($a_js_cols))); |
| | | |
| | | // show confirmation |
| | | show_message('successfullysaved', 'confirmation'); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // show error message |
| | | show_message('errorsaving', 'error'); |
| | | $_action = 'show'; |
| | | } |
| | | // update the changed col in list |
| | | $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols); |
| | | |
| | | // show confirmation |
| | | $OUTPUT->show_message('successfullysaved', 'confirmation'); |
| | | rcmail_overwrite_action('show'); |
| | | } |
| | | else |
| | | { |
| | | // show error message |
| | | $OUTPUT->show_message('errorsaving', 'error'); |
| | | rcmail_overwrite_action('show'); |
| | | } |
| | | } |
| | | |
| | | // insert a new contact |
| | | else |
| | | { |
| | | // check for existing contacts |
| | | $existing = $CONTACTS->search('email', $a_record['email'], true, false); |
| | | |
| | | // show warning message |
| | | if ($existing->count) |
| | | { |
| | | $a_insert_cols = $a_insert_values = array(); |
| | | |
| | | foreach ($a_save_cols as $col) |
| | | { |
| | | $fname = '_'.$col; |
| | | if (!isset($_POST[$fname])) |
| | | continue; |
| | | |
| | | $a_insert_cols[] = $col; |
| | | $a_insert_values[] = sprintf("'%s'", addslashes(strip_tags($_POST[$fname]))); |
| | | } |
| | | |
| | | if (sizeof($a_insert_cols)) |
| | | { |
| | | $DB->query("INSERT INTO ".get_table_name('contacts')." |
| | | (user_id, changedm ".join(', ', $a_insert_cols).") |
| | | VALUES (?, now(), ".join(', ', $a_insert_values).")", |
| | | $_SESSION['user_id']); |
| | | |
| | | $insert_id = $DB->insert_id(); |
| | | } |
| | | |
| | | if ($insert_id) |
| | | { |
| | | $_action = 'show'; |
| | | $_GET['_cid'] = $insert_id; |
| | | |
| | | if ($_POST['_framed']) |
| | | { |
| | | // add contact row or jump to the page where it should appear |
| | | $commands = sprintf("if(parent.%s)parent.", $JS_OBJECT_NAME); |
| | | $sql_result = $DB->query("SELECT * FROM ".get_table_name('contacts')." |
| | | WHERE contact_id=? |
| | | AND user_id=?", |
| | | $insert_id, |
| | | $_SESSION['user_id']); |
| | | $commands .= rcmail_js_contacts_list($sql_result, $JS_OBJECT_NAME); |
| | | |
| | | $commands .= sprintf("if(parent.%s)parent.%s.select('%d');\n", |
| | | $JS_OBJECT_NAME, |
| | | $JS_OBJECT_NAME, |
| | | $insert_id); |
| | | |
| | | // update record count display |
| | | $commands .= sprintf("if(parent.%s)parent.%s.set_rowcount('%s');\n", |
| | | $JS_OBJECT_NAME, |
| | | $JS_OBJECT_NAME, |
| | | rcmail_get_rowcount_text()); |
| | | |
| | | $OUTPUT->add_script($commands); |
| | | |
| | | // show confirmation |
| | | show_message('successfullysaved', 'confirmation'); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // show error message |
| | | show_message('errorsaving', 'error'); |
| | | $_action = 'add'; |
| | | } |
| | | $OUTPUT->show_message('contactexists', 'warning'); |
| | | rcmail_overwrite_action('add'); |
| | | return; |
| | | } |
| | | |
| | | // insert record and send response |
| | | if ($insert_id = $CONTACTS->insert($a_record)) |
| | | { |
| | | // add contact row or jump to the page where it should appear |
| | | $CONTACTS->reset(); |
| | | $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id); |
| | | |
| | | ?> |
| | | rcmail_js_contacts_list($result, 'parent.'); |
| | | $OUTPUT->command('parent.contact_list.select', $insert_id); |
| | | |
| | | // update record count display |
| | | $CONTACTS->reset(); |
| | | $OUTPUT->command('parent.set_rowcount', rcmail_get_rowcount_text()); |
| | | |
| | | // show confirmation |
| | | $OUTPUT->show_message('successfullysaved', 'confirmation'); |
| | | rcmail_overwrite_action('show'); |
| | | $_GET['_cid'] = $insert_id; |
| | | } |
| | | else |
| | | { |
| | | // show error message |
| | | $OUTPUT->show_message('errorsaving', 'error'); |
| | | rcmail_overwrite_action('add'); |
| | | } |
| | | } |
| | | |
| | | ?> |