query = new Query( $this ); global $wpdb; $prefix = apply_filters( 'wp_stream_db_tables_prefix', $wpdb->base_prefix ); $this->table = $prefix . 'stream'; $this->table_meta = $prefix . 'stream_meta'; $wpdb->stream = $this->table; $wpdb->streammeta = $this->table_meta; // Hack for get_metadata. $wpdb->recordmeta = $this->table_meta; } /** * Insert a record. * * @param array $data Data to insert. * * @return int */ public function insert_record( $data ) { global $wpdb; if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) { return false; } $meta = array(); if ( array_key_exists( 'meta', $data ) ) { $meta = $data['meta']; unset( $data['meta'] ); } $result = $wpdb->insert( $this->table, $data ); if ( ! $result ) { return false; } $record_id = $wpdb->insert_id; // Insert record meta. foreach ( (array) $meta as $key => $vals ) { foreach ( (array) $vals as $val ) { if ( is_scalar( $val ) && '' !== $val ) { $this->insert_meta( $record_id, $key, $val ); } } } return $record_id; } /** * Insert record meta * * @param int $record_id Record ID. * @param string $key Meta Key. * @param string $val Meta Data. * * @return array */ public function insert_meta( $record_id, $key, $val ) { global $wpdb; $result = $wpdb->insert( $this->table_meta, array( 'record_id' => $record_id, 'meta_key' => $key, 'meta_value' => $val, ) ); return $result; } /** * Retrieve records * * @param array $args Query arguments. * * @return array */ public function get_records( $args ) { return $this->query->query( $args ); } /** * Returns array of existing values for requested column. * Used to fill search filters with only used items, instead of all items. * * GROUP BY allows query to find just the first occurrence of each value in the column, * increasing the efficiency of the query. * * @param string $column Column being filtered. * * @return array */ public function get_column_values( $column ) { global $wpdb; return (array) $wpdb->get_results( "SELECT DISTINCT $column FROM $wpdb->stream", // @codingStandardsIgnoreLine can't prepare column name 'ARRAY_A' ); } /** * Public getter to return table names * * @return array */ public function get_table_names() { return array( $this->table, $this->table_meta, ); } /** * Init storage. * * @param \WP_Stream\Plugin $plugin Instance of the plugin. * @return \WP_Stream\Install */ public function setup_storage( $plugin ) { return new Install( $plugin ); } /** * Purge storage. * * @param \WP_Stream\Plugin $plugin Instance of the plugin. * @return \WP_Stream\Uninstall */ public function purge_storage( $plugin ) { $uninstall = new Uninstall( $plugin ); add_action( 'wp_ajax_wp_stream_uninstall', array( $uninstall, 'uninstall' ) ); return $uninstall; } }