Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/wordfenc.../modules/login-se.../classes/controll...
File: db.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace WordfenceLS;
[2] Fix | Delete
[3] Fix | Delete
use RuntimeException;
[4] Fix | Delete
[5] Fix | Delete
class Controller_DB {
[6] Fix | Delete
const TABLE_2FA_SECRETS = 'wfls_2fa_secrets';
[7] Fix | Delete
const TABLE_SETTINGS = 'wfls_settings';
[8] Fix | Delete
const TABLE_ROLE_COUNTS = 'wfls_role_counts';
[9] Fix | Delete
const TABLE_ROLE_COUNTS_TEMPORARY = 'wfls_role_counts_temporary';
[10] Fix | Delete
[11] Fix | Delete
const SCHEMA_VERSION = 2;
[12] Fix | Delete
[13] Fix | Delete
/**
[14] Fix | Delete
* Returns the singleton Controller_DB.
[15] Fix | Delete
*
[16] Fix | Delete
* @return Controller_DB
[17] Fix | Delete
*/
[18] Fix | Delete
public static function shared() {
[19] Fix | Delete
static $_shared = null;
[20] Fix | Delete
if ($_shared === null) {
[21] Fix | Delete
$_shared = new Controller_DB();
[22] Fix | Delete
}
[23] Fix | Delete
return $_shared;
[24] Fix | Delete
}
[25] Fix | Delete
[26] Fix | Delete
/**
[27] Fix | Delete
* Returns the table prefix for the main site on multisites and the site itself on single site installations.
[28] Fix | Delete
*
[29] Fix | Delete
* @return string
[30] Fix | Delete
*/
[31] Fix | Delete
public static function network_prefix() {
[32] Fix | Delete
global $wpdb;
[33] Fix | Delete
return $wpdb->base_prefix;
[34] Fix | Delete
}
[35] Fix | Delete
[36] Fix | Delete
/**
[37] Fix | Delete
* Returns the table with the site (single site installations) or network (multisite) prefix added.
[38] Fix | Delete
*
[39] Fix | Delete
* @param string $table
[40] Fix | Delete
* @return string
[41] Fix | Delete
*/
[42] Fix | Delete
public static function network_table($table) {
[43] Fix | Delete
return self::network_prefix() . $table;
[44] Fix | Delete
}
[45] Fix | Delete
[46] Fix | Delete
public function __get($key) {
[47] Fix | Delete
switch ($key) {
[48] Fix | Delete
case 'secrets':
[49] Fix | Delete
return self::network_table(self::TABLE_2FA_SECRETS);
[50] Fix | Delete
case 'settings':
[51] Fix | Delete
return self::network_table(self::TABLE_SETTINGS);
[52] Fix | Delete
case 'role_counts':
[53] Fix | Delete
return self::network_table(self::TABLE_ROLE_COUNTS);
[54] Fix | Delete
case 'role_counts_temporary':
[55] Fix | Delete
return self::network_table(self::TABLE_ROLE_COUNTS_TEMPORARY);
[56] Fix | Delete
}
[57] Fix | Delete
[58] Fix | Delete
throw new \OutOfBoundsException('Unknown key: ' . $key);
[59] Fix | Delete
}
[60] Fix | Delete
[61] Fix | Delete
public function install() {
[62] Fix | Delete
$this->_create_schema();
[63] Fix | Delete
[64] Fix | Delete
global $wpdb;
[65] Fix | Delete
$table = $this->secrets;
[66] Fix | Delete
$wpdb->query($wpdb->prepare("UPDATE `{$table}` SET `vtime` = LEAST(`vtime`, %d)", Controller_Time::time()));
[67] Fix | Delete
}
[68] Fix | Delete
[69] Fix | Delete
public function uninstall() {
[70] Fix | Delete
$tables = array(self::TABLE_2FA_SECRETS, self::TABLE_SETTINGS, self::TABLE_ROLE_COUNTS);
[71] Fix | Delete
foreach ($tables as $table) {
[72] Fix | Delete
global $wpdb;
[73] Fix | Delete
$wpdb->query('DROP TABLE IF EXISTS `' . self::network_table($table) . '`');
[74] Fix | Delete
}
[75] Fix | Delete
}
[76] Fix | Delete
[77] Fix | Delete
private function create_table($name, $definition, $temporary = false) {
[78] Fix | Delete
global $wpdb;
[79] Fix | Delete
if (is_array($definition)) {
[80] Fix | Delete
foreach ($definition as $attempt) {
[81] Fix | Delete
if ($this->create_table($name, $attempt, $temporary))
[82] Fix | Delete
return true;
[83] Fix | Delete
}
[84] Fix | Delete
return false;
[85] Fix | Delete
}
[86] Fix | Delete
else {
[87] Fix | Delete
return $wpdb->query('CREATE ' . ($temporary ? 'TEMPORARY ' : '') . 'TABLE IF NOT EXISTS `' . self::network_table($name) . '` ' . $definition);
[88] Fix | Delete
}
[89] Fix | Delete
}
[90] Fix | Delete
[91] Fix | Delete
private function create_temporary_table($name, $definition) {
[92] Fix | Delete
if (Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_DISABLE_TEMPORARY_TABLES))
[93] Fix | Delete
return false;
[94] Fix | Delete
if ($this->create_table($name, $definition, true))
[95] Fix | Delete
return true;
[96] Fix | Delete
Controller_Settings::shared()->set(Controller_Settings::OPTION_DISABLE_TEMPORARY_TABLES, true);
[97] Fix | Delete
return false;
[98] Fix | Delete
}
[99] Fix | Delete
[100] Fix | Delete
private function get_role_counts_table_definition($engine = null) {
[101] Fix | Delete
$engineClause = $engine === null ? '' : "ENGINE={$engine}";
[102] Fix | Delete
return <<<SQL
[103] Fix | Delete
(
[104] Fix | Delete
serialized_roles VARBINARY(255) NOT NULL,
[105] Fix | Delete
two_factor_inactive TINYINT(1) NOT NULL,
[106] Fix | Delete
user_count BIGINT(20) UNSIGNED NOT NULL DEFAULT 0,
[107] Fix | Delete
PRIMARY KEY (serialized_roles, two_factor_inactive)
[108] Fix | Delete
) {$engineClause};
[109] Fix | Delete
SQL;
[110] Fix | Delete
}
[111] Fix | Delete
[112] Fix | Delete
private function get_role_counts_table_definition_options() {
[113] Fix | Delete
return array(
[114] Fix | Delete
$this->get_role_counts_table_definition('MEMORY'),
[115] Fix | Delete
$this->get_role_counts_table_definition('MyISAM'),
[116] Fix | Delete
$this->get_role_counts_table_definition()
[117] Fix | Delete
);
[118] Fix | Delete
}
[119] Fix | Delete
[120] Fix | Delete
protected function _create_schema() {
[121] Fix | Delete
$tables = array(
[122] Fix | Delete
self::TABLE_2FA_SECRETS => '(
[123] Fix | Delete
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
[124] Fix | Delete
`user_id` bigint(20) unsigned NOT NULL,
[125] Fix | Delete
`secret` tinyblob NOT NULL,
[126] Fix | Delete
`recovery` blob NOT NULL,
[127] Fix | Delete
`ctime` int(10) unsigned NOT NULL,
[128] Fix | Delete
`vtime` int(10) unsigned NOT NULL,
[129] Fix | Delete
`mode` enum(\'authenticator\') NOT NULL DEFAULT \'authenticator\',
[130] Fix | Delete
PRIMARY KEY (`id`),
[131] Fix | Delete
KEY `user_id` (`user_id`)
[132] Fix | Delete
) ENGINE=InnoDB DEFAULT CHARSET=utf8;',
[133] Fix | Delete
self::TABLE_SETTINGS => '(
[134] Fix | Delete
`name` varchar(191) NOT NULL DEFAULT \'\',
[135] Fix | Delete
`value` longblob,
[136] Fix | Delete
`autoload` enum(\'no\',\'yes\') NOT NULL DEFAULT \'yes\',
[137] Fix | Delete
PRIMARY KEY (`name`)
[138] Fix | Delete
) ENGINE=InnoDB DEFAULT CHARSET=utf8;',
[139] Fix | Delete
self::TABLE_ROLE_COUNTS => $this->get_role_counts_table_definition_options()
[140] Fix | Delete
);
[141] Fix | Delete
[142] Fix | Delete
foreach ($tables as $table => $def) {
[143] Fix | Delete
$this->create_table($table, $def);
[144] Fix | Delete
}
[145] Fix | Delete
[146] Fix | Delete
Controller_Settings::shared()->set(Controller_Settings::OPTION_SCHEMA_VERSION, self::SCHEMA_VERSION);
[147] Fix | Delete
}
[148] Fix | Delete
[149] Fix | Delete
public function require_schema_version($version) {
[150] Fix | Delete
$current = Controller_Settings::shared()->get_int(Controller_Settings::OPTION_SCHEMA_VERSION);
[151] Fix | Delete
if ($current < $version) {
[152] Fix | Delete
$this->install();
[153] Fix | Delete
}
[154] Fix | Delete
}
[155] Fix | Delete
[156] Fix | Delete
public function query($query) {
[157] Fix | Delete
global $wpdb;
[158] Fix | Delete
if ($wpdb->query($query) === false)
[159] Fix | Delete
throw new RuntimeException("Failed to execute query: {$query}");
[160] Fix | Delete
}
[161] Fix | Delete
[162] Fix | Delete
public function get_wpdb() {
[163] Fix | Delete
global $wpdb;
[164] Fix | Delete
return $wpdb;
[165] Fix | Delete
}
[166] Fix | Delete
[167] Fix | Delete
public function create_temporary_role_counts_table() {
[168] Fix | Delete
return $this->create_temporary_table(self::TABLE_ROLE_COUNTS_TEMPORARY, $this->get_role_counts_table_definition_options());
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
}
[172] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function