HEX
Server: Apache/2.4.54 (Unix) OpenSSL/1.0.2k-fips
System: Linux f17.eelserver.com 3.10.0-1160.80.1.el7.x86_64 #1 SMP Tue Nov 8 15:48:59 UTC 2022 x86_64
User: zulfiqar (1155)
PHP: 8.2.0
Disabled: mail, exec, system, popen, proc_open, shell_exec, passthru, show_source
Upload Files
File: /home/zulfiqar/public_html/wp-content/plugins/stream/classes/class-db.php
<?php
/**
 * Manage DB connections using a provided DB driver.
 *
 * @package WP_Stream
 */

namespace WP_Stream;

/**
 * Class - DB
 */
class DB {
	/**
	 * Holds the driver instance
	 *
	 * @var DB_Driver
	 */
	public $driver;

	/**
	 * Number of records in last request
	 *
	 * @var int
	 */
	protected $found_records_count = 0;

	/**
	 * Class constructor.
	 *
	 * @param DB_Driver $driver Driver we want to use.
	 */
	public function __construct( $driver ) {
		$this->driver = $driver;
	}

	/**
	 * Insert a record
	 *
	 * @param array $record  New record.
	 *
	 * @return int
	 */
	public function insert( $record ) {
		if ( defined( 'WP_IMPORTING' ) && WP_IMPORTING ) {
			return false;
		}

		/**
		 * Filter allows modification of record information
		 *
		 * @param array $record
		 *
		 * @return array
		 */
		$record = apply_filters( 'wp_stream_record_array', $record );

		$data = $this->sanitize_record( $record );
		if ( empty( $data ) ) {
			return false;
		}

		$record_id = $this->driver->insert_record( $data );

		if ( ! $record_id ) {
			/**
			 * Fires on a record insertion error
			 *
			 * @param array $record
			 * @param mixed $result
			 */
			do_action( 'wp_stream_record_insert_error', $record, false );

			return false;
		}

		/**
		 * Fires after a record has been inserted
		 *
		 * @param int   $record_id
		 * @param array $record
		 */
		do_action( 'wp_stream_record_inserted', $record_id, $record );

		return absint( $record_id );
	}

	/**
	 * Ensure the record matches our schema.
	 *
	 * @param array $record Record to store.
	 *
	 * @return array
	 */
	protected function sanitize_record( $record ) {
		if ( ! is_array( $record ) ) {
			return array();
		}

		$record_defaults = array(
			'object_id' => null,
			'site_id'   => null,
			'blog_id'   => null,
			'user_id'   => null,
			'user_role' => null,
			'created'   => null,
			'summary'   => null,
			'ip'        => null,
			'connector' => null,
			'context'   => null,
			'action'    => null,
			'meta'      => array(),
		);

		// Records can have only these fields.
		$record = array_intersect_key( $record, $record_defaults );

		// Sanitize all record values.
		return array_map(
			function ( $value ) {
				if ( ! is_array( $value ) ) {
					return wp_strip_all_tags( $value );
				}

				return $value;
			},
			$record
		);
	}

	/**
	 * 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.
	 *
	 * @see assemble_records
	 * @since 1.0.4
	 *
	 * @param string $column  Table column to pull data from.
	 *
	 * @return array
	 */
	public function existing_records( $column ) {
		// Sanitize column.
		$allowed_columns = array( 'ID', 'site_id', 'blog_id', 'object_id', 'user_id', 'user_role', 'created', 'summary', 'connector', 'context', 'action', 'ip' );
		if ( ! in_array( $column, $allowed_columns, true ) ) {
			return array();
		}

		$rows = $this->driver->get_column_values( $column );

		if ( is_array( $rows ) && ! empty( $rows ) ) {
			$output_array = array();

			foreach ( $rows as $row ) {
				foreach ( $row as $cell => $value ) {
					$output_array[ $value ] = $value;
				}
			}

			return (array) $output_array;
		}

		$column = sprintf( 'stream_%s', $column );

		$term_labels = wp_stream_get_instance()->connectors->term_labels;
		return isset( $term_labels[ $column ] ) ? $term_labels[ $column ] : array();
	}

	/**
	 * Get stream records
	 *
	 * @param array $args  Arguments to filter result by.
	 *
	 * @return array Stream Records
	 */
	public function get_records( $args ) {
		$defaults = array(
			// Search param.
			'search'           => null,
			'search_field'     => 'summary',
			'record_after'     => null, // Deprecated, use date_after instead
			// Date-based filters.
			'date'             => null, // Ex: 2015-07-01.
			'date_from'        => null, // Ex: 2015-07-01.
			'date_to'          => null, // Ex: 2015-07-01.
			'date_after'       => null, // Ex: 2015-07-01T15:19:21+00:00.
			'date_before'      => null, // Ex: 2015-07-01T15:19:21+00:00.
			// Record ID filters.
			'record'           => null,
			'record__in'       => array(),
			'record__not_in'   => array(),
			// Pagination params.
			'records_per_page' => get_option( 'posts_per_page', 20 ),
			'paged'            => 1,
			// Order.
			'order'            => 'desc',
			'orderby'          => 'date',
			// Fields selection.
			'fields'           => array(),
		);

		// Additional property fields.
		$properties = array(
			'user_id'   => null,
			'user_role' => null,
			'ip'        => null,
			'object_id' => null,
			'site_id'   => null,
			'blog_id'   => null,
			'connector' => null,
			'context'   => null,
			'action'    => null,
		);

		/**
		 * Filter allows additional query properties to be added
		 *
		 * @return array Array of query properties
		 */
		$properties = apply_filters( 'wp_stream_query_properties', $properties );

		// Add property fields to defaults, including their __in/__not_in variations.
		foreach ( $properties as $property => $default ) {
			if ( ! isset( $defaults[ $property ] ) ) {
				$defaults[ $property ] = $default;
			}

			$defaults[ "{$property}__in" ]     = array();
			$defaults[ "{$property}__not_in" ] = array();
		}

		$args = wp_parse_args( $args, $defaults );

		/**
		 * Filter allows additional arguments to query $args
		 *
		 * @return array  Array of query arguments
		 */
		$args = apply_filters( 'wp_stream_query_args', $args );

		$result                    = (array) $this->driver->get_records( $args );
		$this->found_records_count = isset( $result['count'] ) ? $result['count'] : 0;

		return empty( $result['items'] ) ? array() : $result['items'];
	}

	/**
	 * Helper function, backwards compatibility
	 *
	 * @param array $args  Argument to filter result by.
	 *
	 * @return array Stream Records
	 */
	public function query( $args ) {
		return $this->get_records( $args );
	}

	/**
	 * Return the number of records found in last request
	 *
	 * @return int
	 */
	public function get_found_records_count() {
		return $this->found_records_count;
	}

	/**
	 * Public getter to return table names
	 *
	 * @return array
	 */
	public function get_table_names() {
		return $this->driver->get_table_names();
	}
}