PHP 8.2.31
Preview: wfDB.php Size: 11.49 KB
//proc/self/root/home/nshryvcy/blissfulnepal.com/wp-content/plugins/wordfence/lib/wfDB.php

<?php
class wfDB {
	public $errorMsg = false;
	
	public static function shared() {
		static $_shared = null;
		if ($_shared === null) {
			$_shared = new wfDB();
		}
		return $_shared;
	}
  
  /**
   * Returns the table prefix for the main site on multisites and the site itself on single site installations.
   *
   * @return string
   */
	public static function networkPrefix() {
		global $wpdb;
		return $wpdb->base_prefix;
	}
  
  /**
   * Returns the table with the site (single site installations) or network (multisite) prefix added.
   *
   * @param string $table
   * @param bool $applyCaseConversion Whether or not to convert the table case to what is actually in use.
   * @return string
   */
	public static function networkTable($table, $applyCaseConversion = true) {
		if (wfSchema::usingLowercase() && $applyCaseConversion) {
			$table = strtolower($table);
		}
		return self::networkPrefix() . $table;
	}
  
  /**
   * Returns the table prefix for the given blog ID. On single site installations, this will be equivalent to wfDB::networkPrefix().
   *
   * @param int $blogID
   * @return string
   */
	public static function blogPrefix($blogID) {
	  global $wpdb;
	  return $wpdb->get_blog_prefix($blogID);
	}
  
  /**
   * Returns the table with the site (single site installations) or blog-specific (multisite) prefix added.
   *
   * @param string $table
   * @param bool $applyCaseConversion Whether or not to convert the table case to what is actually in use.
   * @return string
   */
	public static function blogTable($table, $blogID, $applyCaseConversion = true) {
		if (wfSchema::usingLowercase() && $applyCaseConversion) {
			$table = strtolower($table);
		}
	  	return self::blogPrefix($blogID) . $table;
	}
	
	/**
	 * Converts the given value into a MySQL hex string. This is needed because WordPress will run an unnecessary `SHOW
	 * FULL COLUMNS` on every hit where we use non-ASCII data (e.g., packed binary-encoded IP addresses) in queries.
	 * 
	 * @param string $binary
	 * @return string
	 */
	public static function binaryValueToSQLHex($binary) {
		return sprintf("X'%s'", bin2hex($binary));
	}
	
	public function querySingle(){
		global $wpdb;
		if(func_num_args() > 1){
			$args = func_get_args();
			return $wpdb->get_var(call_user_func_array(array($wpdb, 'prepare'), $args));
		} else {
			return $wpdb->get_var(func_get_arg(0));
		}
	}
	public function querySingleRec(){ //queryInSprintfFormat, arg1, arg2, ... :: Returns a single assoc-array or null if nothing found.
		global $wpdb;
		if(func_num_args() > 1){
			$args = func_get_args();
			return $wpdb->get_row(call_user_func_array(array($wpdb, 'prepare'), $args), ARRAY_A);
		} else {
			return $wpdb->get_row(func_get_arg(0), ARRAY_A);
		}
	}
	public function queryWrite(){
		global $wpdb;
		if(func_num_args() > 1){
			$args = func_get_args();
			return $wpdb->query(call_user_func_array(array($wpdb, 'prepare'), $args));
		} else {
			return $wpdb->query(func_get_arg(0));
		}
	}
	public function queryWriteArray($query, $array) {
		global $wpdb;
		return $wpdb->query($wpdb->prepare($query, $array));
	}
	public function flush(){ //Clear cache
		global $wpdb;
		$wpdb->flush();
	}
	public function querySelect(){ //sprintfString, arguments :: always returns array() and will be empty if no results.
		global $wpdb;
		if(func_num_args() > 1){
			$args = func_get_args();
			return $wpdb->get_results(call_user_func_array(array($wpdb, 'prepare'), $args), ARRAY_A);
		} else {
			return $wpdb->get_results(func_get_arg(0), ARRAY_A);
		}
	}
	public function queryWriteIgnoreError(){ //sprintfString, arguments
		global $wpdb;
		$oldSuppress = $wpdb->suppress_errors(true);
		$args = func_get_args();
		call_user_func_array(array($this, 'queryWrite'), $args);
		$wpdb->suppress_errors($oldSuppress);
	}
	public function columnExists($table, $col){
		$table = wfDB::networkTable($table);
		$q = $this->querySelect("desc $table");
		foreach($q as $row){
			if($row['Field'] == $col){
				return true;
			}
		}
		return false;
	}
	public function dropColumn($table, $col){
		$table = wfDB::networkTable($table);
		$this->queryWrite("alter table $table drop column $col");
	}
	public function createKeyIfNotExists($table, $col, $keyName){
		$table = wfDB::networkTable($table);
		
		$exists = $this->querySingle(<<<SQL
SELECT TABLE_NAME FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='%s'
SQL
			, $table);
		$keyFound = false;
		if($exists){
			$q = $this->querySelect("show keys from $table");
			foreach($q as $row){
				if($row['Key_name'] == $keyName){
					$keyFound = true;
				}
			}
		}
		if(! $keyFound){
			$this->queryWrite("alter table $table add KEY $keyName($col)");
		}
	}
	public function getMaxAllowedPacketBytes(){
		$rec = $this->querySingleRec("show variables like 'max_allowed_packet'");
		return intval($rec['Value']);
	}
	public function getMaxLongDataSizeBytes() {
		$rec = $this->querySingleRec("show variables like 'max_long_data_size'");
		return $rec['Value'];
	}
	public function truncate($table){ //Ensures everything is deleted if user is using MySQL >= 5.1.16 and does not have "drop" privileges
		$this->queryWrite("truncate table $table");
		$this->queryWrite("delete from $table");
	}
	public function getLastError(){
		global $wpdb;
		return $wpdb->last_error;
	}
	public function realEscape($str){
		global $wpdb;
		return $wpdb->_real_escape($str);
	}
	public function insert($table, $columns, $rows, $updateOnDuplicate) {
		global $wpdb;
		$rowCount = count($rows);
		if ($rowCount === 0)
			return;
		$columnClause = implode(',', array_keys($columns));
		$valuesClause = ltrim(str_repeat(',(' . implode(',', $columns) . ')', $rowCount), ',');
		if ($updateOnDuplicate) {
			$duplicateClause = ' ON DUPLICATE KEY UPDATE ' . implode(',', array_map(function($column) {
				return "{$column} = VALUES({$column})";
			}, $updateOnDuplicate));
		}
		else {
			$duplicateClause = null;
		}
		$parameters = [];
		foreach ($rows as $row) {
			foreach ($row as $value) {
				$parameters[] = $value;
			}
		}
		$query = $wpdb->prepare("INSERT INTO {$table} ({$columnClause}) VALUES {$valuesClause}{$duplicateClause}", $parameters);
		$result = $wpdb->query($query);
		if ($result === false)
			throw new RuntimeException("Insert query failed: {$query}");
	}
	private static function getBindingType($value, $override = null) {
		if ($override !== null)
			return $override;
		if (is_int($value)) {
			return '%d';
		}
		else {
			return '%s';
		}
	}
	private static function buildWhereClause($conditions, $bindingOverrides, &$parameters) {
		$whereExpressions = [];
		foreach ($conditions as $column => $value) {
			$override = array_key_exists($column, $bindingOverrides) ? $bindingOverrides[$column] : null;
			if ($override === null) {
				$getBinding = [self::class, 'getBindingType'];
			}
			else {
				$getBinding = function($value) use ($override) { return $override; };
			}
			if (is_array($value)) {
				$whereExpressions[] = "{$column} IN (" . implode(',', array_map($getBinding, $value)) . ')';
				$parameters = array_merge($parameters, $value);
			}
			else {
				$whereExpressions[] = "{$column} = " . $getBinding($value);
				$parameters[] = $value;
			}
		}
		return implode(' AND ', $whereExpressions);
	}
	public function update($table, $set, $conditions, $bindingOverrides = []) {
		global $wpdb;
		$setExpressions = [];
		$parameters = [];
		foreach ($set as $column => $value) {
			if (is_array($value)) {
				$parameters[] = $value[1];
				$value = $value[0];
			}
			$setExpressions[] = "{$column} = {$value}";
		}
		$whereClause = self::buildWhereClause($conditions, $bindingOverrides, $parameters);
		$setClause = implode(',', $setExpressions);
		$query = $wpdb->prepare("UPDATE {$table} SET {$setClause} WHERE {$whereClause}", $parameters);
		$result = $wpdb->query($query);
		if ($result === false)
			throw new RuntimeException("UPDATE query failed: {$query}");
	}
	public function select($table, $columns, $conditions, $bindingOverrides = [], $limit = 500) {
		global $wpdb;
		$parameters = [];
		$selectClause = implode(',', $columns);
		$whereClause = Self::buildWhereClause($conditions, $bindingOverrides, $parameters);
		$limitClause = $limit === null ? '' : " LIMIT {$limit}";
		$query = $wpdb->prepare("SELECT {$selectClause} FROM {$table} WHERE {$whereClause}{$limitClause}", $parameters);
		if (count($columns) == 1) {
			$result = $wpdb->get_col($query);
		}
		else {
			$result = $wpdb->get_results($query, ARRAY_N);
		}
		if (!is_array($result))
			throw new RuntimeException("SELECT query failed: {$query}");
		return $result;
	}
	public function selectAll($table, $columns, $conditions, $bindingOverrides = []) {
		return $this->select($table, $columns, $conditions, $bindingOverrides, null);
	}
}

abstract class wfModel {

	private $data;
	private $db;
	private $dirty = false;

	/**
	 * Column name of the primary key field.
	 *
	 * @return string
	 */
	abstract public function getIDColumn();

	/**
	 * Table name.
	 *
	 * @return mixed
	 */
	abstract public function getTable();

	/**
	 * Checks if this is a valid column in the table before setting data on the model.
	 *
	 * @param string $column
	 * @return boolean
	 */
	abstract public function hasColumn($column);

	/**
	 * wfModel constructor.
	 * @param array|int|string $data
	 */
	public function __construct($data = array()) {
		if (is_array($data) || is_object($data)) {
			$this->setData($data);
		} else if (is_numeric($data)) {
			$this->fetchByID($data);
		}
	}

	public function fetchByID($id) {
		$id = absint($id);
		$data = $this->getDB()->get_row($this->getDB()->prepare('SELECT * FROM ' . $this->getTable() .
				' WHERE ' . $this->getIDColumn() . ' = %d', $id));
		if ($data) {
			$this->setData($data);
			return true;
		}
		return false;
	}

	/**
	 * @return bool
	 */
	public function save() {
		if (!$this->dirty) {
			return false;
		}
		$this->dirty = ($this->getPrimaryKey() ? $this->update() : $this->insert()) === false;
		return !$this->dirty;
	}

	/**
	 * @return false|int
	 */
	public function insert() {
		$data = $this->getData();
		unset($data[$this->getPrimaryKey()]);
		$rowsAffected = $this->getDB()->insert($this->getTable(), $data);
		$this->setPrimaryKey($this->getDB()->insert_id);
		return $rowsAffected;
	}

	/**
	 * @return false|int
	 */
	public function update() {
		return $this->getDB()->update($this->getTable(), $this->getData(), array(
			$this->getIDColumn() => $this->getPrimaryKey(),
		));
	}

	/**
	 * @param $name string
	 * @return mixed
	 */
	public function __get($name) {
		if (!$this->hasColumn($name)) {
			return null;
		}
		return array_key_exists($name, $this->data) ? $this->data[$name] : null;
	}

	/**
	 * @param $name string
	 * @param $value mixed
	 */
	public function __set($name, $value) {
		if (!$this->hasColumn($name)) {
			return;
		}
		$this->data[$name] = $value;
		$this->dirty = true;
	}

	/**
	 * @return array
	 */
	public function getData() {
		return $this->data;
	}

	/**
	 * @param array $data
	 * @param bool $flagDirty
	 */
	public function setData($data, $flagDirty = true) {
		$this->data = array();
		foreach ($data as $column => $value) {
			if ($this->hasColumn($column)) {
				$this->data[$column] = $value;
				$this->dirty = (bool) $flagDirty;
			}
		}
	}

	/**
	 * @return wpdb
	 */
	public function getDB() {
		if ($this->db === null) {
			global $wpdb;
			$this->db = $wpdb;
		}
		return $this->db;
	}

	/**
	 * @param wpdb $db
	 */
	public function setDB($db) {
		$this->db = $db;
	}

	/**
	 * @return int
	 */
	public function getPrimaryKey() {
		return $this->{$this->getIDColumn()};
	}

	/**
	 * @param int $value
	 */
	public function setPrimaryKey($value) {
		$this->{$this->getIDColumn()} = $value;
	}
}

Directory Contents

Dirs: 4 × Files: 109

Name Size Perms Modified Actions
audit-log DIR
- drwxr-xr-x 2026-06-03 14:57:34
Edit Download
dashboard DIR
- drwxr-xr-x 2026-06-03 14:57:34
Edit Download
Diff DIR
- drwxr-xr-x 2026-06-03 14:57:34
Edit Download
rest-api DIR
- drwxr-xr-x 2026-06-03 14:57:34
Edit Download
354 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
425 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
5.63 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.85 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.39 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
8.82 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.34 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.02 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
6.62 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
8.86 MB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.17 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
580 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
4.46 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.69 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.94 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
317 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.07 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
4.01 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.02 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.05 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.15 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.60 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.86 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.33 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
10.87 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.68 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
12.49 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
38.69 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.33 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
408 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
991 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.30 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.80 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.64 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
185 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.51 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.47 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.72 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
20.55 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
8.38 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
8.19 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
10.10 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
47.13 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.02 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.90 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
256.83 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.77 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
6.02 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
25.94 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.25 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
127.17 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
6.92 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
10.29 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
4.05 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.02 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.25 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
352.13 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
11.49 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.13 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
66.92 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.89 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.72 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.97 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.13 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
878 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.23 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
303 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
266 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.80 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.70 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.56 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
29.07 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
199.14 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
5.33 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
10.95 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
9.81 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
58.47 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.27 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
5.20 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
754 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
6.70 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
8.93 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.40 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
377 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
15.98 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
127.73 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.04 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.01 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
403 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
408 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.07 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
4.09 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.77 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
11.93 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.21 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
24.95 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.14 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
27.23 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
131.69 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
15.59 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
535 B lrw-r--r-- 2026-06-03 14:57:34
Edit Download
2.22 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.47 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
1.75 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
392.60 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
3.35 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
42.60 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
28.19 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download
18.35 KB lrw-r--r-- 2026-06-03 14:57:34
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).