/** * Delete a record and its associated change-tracker records. * @param string $pk_value * @return int|false Number of rows affected/selected or false on error */ public function delete_record($pk_value) { // Check permission. if (!Grants::current_user_can(Grants::DELETE, $this->get_name())) { throw new Exception('You do not have permission to delete data from this table.'); } $rec = $this->get_record($pk_value); $wpdb = $this->database->get_wpdb(); $wpdb->hide_errors(); $del = $wpdb->delete($this->get_name(), array($this->get_pk_column()->get_name() => $pk_value)); if (!$del) { throw new \Exception($wpdb->last_error); } foreach ($rec->get_changes() as $change) { $where_1 = array('table_name' => $this->get_name(), 'record_ident' => $pk_value); $wpdb->delete(ChangeTracker::changes_name(), $where_1); $where_2 = array('id' => $change->changeset_id); $wpdb->delete(ChangeTracker::changesets_name(), $where_2); } $this->record_count = false; }
/** * Rename this table and all of its change-tracker entries. * @param string $new_name */ public function rename($new_name) { if ($this->get_database()->get_table($new_name)) { throw new Exception("Table '{$new_name}' already exists"); } $wpdb = $this->get_database()->get_wpdb(); $old_name = $this->get_name(); $wpdb->query("RENAME TABLE `{$old_name}` TO `{$new_name}`;"); $this->get_database()->reset(); $new = $this->get_database()->get_table($new_name, false); if (!$new) { throw new Exception("Table '{$old_name}' was not renamed to '{$new_name}'"); } $this->name = $new->get_name(); $wpdb->query("UPDATE `" . ChangeTracker::changes_name() . "`" . " SET `table_name` = '{$new_name}' " . " WHERE `table_name` = '{$old_name}';"); }
/** * Get most recent changes. * @return array|string */ public function get_changes() { $wpdb = $this->table->get_database()->get_wpdb(); $sql = "SELECT cs.id AS changeset_id, c.id AS change_id, date_and_time, " . "user_nicename, table_name, record_ident, column_name, old_value, " . "new_value, comment " . "FROM " . ChangeTracker::changes_name() . " c " . " JOIN " . ChangeTracker::changesets_name() . " cs ON (c.changeset_id=cs.id) " . " JOIN {$wpdb->prefix}users u ON (u.ID=cs.user_id) " . "WHERE table_name = %s AND record_ident = %s" . "ORDER BY date_and_time DESC, cs.id DESC " . "LIMIT 15 "; $params = array($this->table->get_name(), $this->get_primary_key()); return $wpdb->get_results($wpdb->prepare($sql, $params)); }