- Make Undo action optional by setting undo_timeout=0

release-0.6
alecpl 13 years ago
parent 78086d349d
commit 63fda8af57

@ -442,6 +442,11 @@ $rcmail_config['min_keep_alive'] = 60;
// or any integer value indicating number of seconds.
$rcmail_config['upload_progress'] = false;
// Specifies for how many seconds the Undo button will be available
// after object delete action. Currently used with supporting address book sources.
// Setting it to 0, disables the feature.
$rcmail_config['undo_timeout'] = 0;
// ----------------------------------
// ADDRESSBOOK SETTINGS
// ----------------------------------

@ -250,8 +250,9 @@ abstract class rcube_addressbook
* Mark one or more contact records as deleted
*
* @param array Record identifiers
* @param bool Remove records irreversible (see self::undelete)
*/
function delete($ids)
function delete($ids, $force=true)
{
/* empty for read-only address books */
}

@ -604,13 +604,13 @@ class rcube_contacts extends rcube_addressbook
return $updated;
}
private function convert_db_data($sql_arr)
{
$record = array();
$record['ID'] = $sql_arr[$this->primary_key];
if ($sql_arr['vcard']) {
unset($sql_arr['email']);
$vcard = new rcube_vcard($sql_arr['vcard']);
@ -620,7 +620,7 @@ class rcube_contacts extends rcube_addressbook
$record += $sql_arr;
$record['email'] = preg_split('/,\s*/', $record['email']);
}
return $record;
}
@ -668,16 +668,17 @@ class rcube_contacts extends rcube_addressbook
/**
* Mark one or more contact records as deleted
*
* @param array Record identifiers
* @param array Record identifiers
* @param boolean Remove record(s) irreversible (unsupported)
*/
function delete($ids)
function delete($ids, $force=true)
{
if (!is_array($ids))
$ids = explode(',', $ids);
$ids = $this->db->array2list($ids, 'integer');
// flag record as deleted
// flag record as deleted (always)
$this->db->query(
"UPDATE ".get_table_name($this->db_name).
" SET del=1, changed=".$this->db->now().
@ -704,7 +705,7 @@ class rcube_contacts extends rcube_addressbook
$ids = $this->db->array2list($ids, 'integer');
// flag record as deleted
// clear deleted flag
$this->db->query(
"UPDATE ".get_table_name($this->db_name).
" SET del=0, changed=".$this->db->now().

@ -834,11 +834,12 @@ class rcube_ldap extends rcube_addressbook
/**
* Mark one or more contact records as deleted
*
* @param array Record identifiers
* @param array Record identifiers
* @param boolean Remove record(s) irreversible (unsupported)
*
* @return boolean True on success, False on error
*/
function delete($ids)
function delete($ids, $force=true)
{
if (!is_array($ids)) {
// Not an array, break apart the encoded DNs.

@ -27,6 +27,7 @@ $cids = rcmail_get_cids();
$delcnt = 0;
// remove previous deletes
$undo_time = $RCMAIL->config->get('undo_timeout', 0);
$RCMAIL->session->remove('contact_undo');
foreach ($cids as $source => $cid)
@ -47,7 +48,7 @@ foreach ($cids as $source => $cid)
$plugin = $RCMAIL->plugins->exec_hook('contact_delete', array(
'id' => $cid, 'source' => $source));
$deleted = !$plugin['abort'] ? $CONTACTS->delete($cid) : $plugin['result'];
$deleted = !$plugin['abort'] ? $CONTACTS->delete($cid, $undo_time < 1) : $plugin['result'];
if (!$deleted) {
$OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'contactdelerror', 'error');
@ -57,8 +58,8 @@ foreach ($cids as $source => $cid)
else {
$delcnt += $deleted;
// store deleted contacts IDs in session for undelete
if ($CONTACTS->undelete) {
// store deleted contacts IDs in session for undo action
if ($undo_time > 0 && $CONTACTS->undelete) {
$_SESSION['contact_undo']['data'][$source] = $cid;
}
}
@ -147,7 +148,7 @@ if (!empty($_SESSION['contact_undo'])) {
$msg = html::span(null, rcube_label(array('name' => 'itemsdeleted', 'vars' => array('num' => $deleted))))
. ' ' . html::a(array('onclick' => JS_OBJECT_NAME.".command('undo', '', this)"), rcube_label('undo'));
$OUTPUT->show_message($msg, 'confirmation', null, true, $RCMAIL->config->get('undo_timeout', 15));
$OUTPUT->show_message($msg, 'confirmation', null, true, $undo_time);
}
else {
$OUTPUT->show_message('contactdeleted', 'confirmation');

@ -90,8 +90,9 @@ if (!$RCMAIL->action && !$OUTPUT->ajax_call) {
// remove undo information...
if ($undo = $_SESSION['contact_undo']) {
// ...after 30 seconds
if ($undo['ts'] < time() - 30)
// ...after timeout
$undo_time = $RCMAIL->config->get('undo_timeout', 0);
if ($undo['ts'] < time() - $undo_time)
$RCMAIL->session->remove('contact_undo');
}

Loading…
Cancel
Save