- Make Undo action optional by setting undo_timeout=0
| | |
| | | // 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 |
| | | // ---------------------------------- |
| | |
| | | * 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 */ |
| | | } |
| | |
| | | |
| | | 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']); |
| | |
| | | $record += $sql_arr; |
| | | $record['email'] = preg_split('/,\s*/', $record['email']); |
| | | } |
| | | |
| | | |
| | | return $record; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 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(). |
| | |
| | | |
| | | $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(). |
| | |
| | | /** |
| | | * 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. |
| | |
| | | $delcnt = 0; |
| | | |
| | | // remove previous deletes |
| | | $undo_time = $RCMAIL->config->get('undo_timeout', 0); |
| | | $RCMAIL->session->remove('contact_undo'); |
| | | |
| | | 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'); |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | $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'); |
| | |
| | | |
| | | // 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'); |
| | | } |
| | | |