File: /var/www/html/wpmuhibbah_err/wp-content/plugins/give/includes/database/class-give-db-sessions.php
<?php
/**
* Session Database Handler
*
* @package Give
* @subpackage Classes/Give_Session
* @copyright Copyright (c) 2018, GiveWP
* @license https://opensource.org/licenses/gpl-license GNU Public License
* @since 2.2.0
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class Give_DB_Sessions
*/
class Give_DB_Sessions extends Give_DB {
/**
* Cache group name
*
* @since 2.2.0
* @access private
*
* @var string
*/
private $cache_group = 'give_sessions';
/**
* Cache incrementer name
*
* @since 2.2.0
* @access private
*
* @var string
*/
private $incrementer_name = 'give_sessions';
/**
* Class Constructor
*
* @since 2.2.0
* @access public
*/
public function __construct() {
global $wpdb;
$this->table_name = "{$wpdb->prefix}give_sessions";
$this->primary_key = 'session_key';
$this->version = '1.0';
// Set cache group id.
$current_blog_id = get_current_blog_id();
$this->incrementer_name = "give-cache-incrementer-sessions-{$current_blog_id}";
$incrementer_value = wp_cache_get( $this->incrementer_name );
$incrementer_value = ! empty( $incrementer_value ) ? $incrementer_value : microtime( true );
$this->cache_group = "{$this->cache_group}_{$current_blog_id}_{$incrementer_value}";
parent::__construct();
}
/**
* Whitelist of columns
*
* @since 2.2.0
* @access public
*
* @return array Columns and formats.
*/
public function get_columns() {
return array(
'session_id' => '%d',
'session_key' => '%s',
'session_value' => '%s',
'session_expiry' => '%d',
);
}
/**
* Create Meta Tables.
*
* @since 2.2.0
* @access public
*/
public function create_table() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$this->table_name} (
session_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
session_key char(32) NOT NULL,
session_value longtext NOT NULL,
session_expiry BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (session_key),
UNIQUE KEY session_id (session_id)
) {$charset_collate};";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
update_option( $this->table_name . '_db_version', $this->version, false );
}
/**
* Returns the session.
*
* @todo: add cache logic
*
* @param string $donor_id Donor ID.
* @param mixed $default Default session value.
*
* @return mixed
*/
public function get_session( $donor_id, $default = false ) {
global $wpdb;
if ( defined( 'WP_SETUP_CONFIG' ) ) {
return false;
}
if ( ! ( $value = wp_cache_get( $donor_id, $this->cache_group ) ) ) { // @codingStandardsIgnoreLine
// @codingStandardsIgnoreStart
$value = $wpdb->get_var(
$wpdb->prepare(
"
SELECT session_value
FROM $this->table_name
WHERE session_key = %s
",
$donor_id
)
);
// @codingStandardsIgnoreEnd
if ( is_null( $value ) ) {
$value = $default;
}
wp_cache_add( $donor_id, $value, $this->cache_group );
}
return maybe_unserialize( $value );
}
/**
* Update the session expiry timestamp.
*
* @param string $donor_id Donor ID.
* @param int $timestamp Timestamp to expire the cookie.
*/
public function update_session_timestamp( $donor_id, $timestamp ) {
global $wpdb;
// @codingStandardsIgnoreStart.
$wpdb->update(
$this->table_name,
array(
'session_expiry' => $timestamp,
),
array(
'session_key' => $donor_id,
),
array(
'%d'
)
);
// @codingStandardsIgnoreEnd.
}
/**
* Delete the session from the cache and database.
*
* @since 2.2.0
* @access public
*
* @param int $donor_id Customer ID.
*/
public function delete_session( $donor_id ) {
global $wpdb;
wp_cache_delete( $donor_id, $this->cache_group );
// @codingStandardsIgnoreStart
$wpdb->delete(
$this->table_name,
array(
'session_key' => $donor_id,
)
);
// @codingStandardsIgnoreEnd
}
/**
* Cleanup session data from the database and clear caches.
* Note: for internal logic only.
*
* @since 2.2.0
* @access public
*/
public function delete_expired_sessions() {
global $wpdb;
wp_cache_set( $this->incrementer_name, microtime( true ) );
// @codingStandardsIgnoreStart
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $this->table_name WHERE session_expiry < %d",
time()
)
);
// @codingStandardsIgnoreEnd
}
/**
* Replace table data
* Note: only for internal use
*
* @since 2.2.0
* @access public
*
* @param string $table_name Table name.
* @param array $data Data.
* @param array $format Array for data format of each key:value in data.
*/
public function __replace( $table_name, $data, $format = null ) {
global $wpdb;
wp_cache_set( $data['session_key'], $data['session_value'], $this->cache_group, $data['session_expiry'] - time() );
// @codingStandardsIgnoreStart
$wpdb->replace(
$table_name,
$data,
$format
);
// @codingStandardsIgnoreEnd
}
}