示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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}';");
 }
示例#3
0
 /**
  * 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));
 }