PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.8
GiveWP – Donation Plugin and Fundraising Platform v4.16.8
4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / includes / database / class-give-db-sessions.php
give / includes / database Last commit date
class-give-db-comments-meta.php 7 years ago class-give-db-comments.php 6 years ago class-give-db-donor-meta.php 6 years ago class-give-db-donors.php 4 weeks ago class-give-db-form-meta.php 7 years ago class-give-db-meta.php 2 days ago class-give-db-payment-meta.php 7 months ago class-give-db-sequential-ordering.php 6 years ago class-give-db-sessions.php 1 week ago class-give-db.php 6 years ago
class-give-db-sessions.php
249 lines
1 <?php
2 /**
3 * Session Database Handler
4 *
5 * @package Give
6 * @subpackage Classes/Give_Session
7 * @copyright Copyright (c) 2018, GiveWP
8 * @license https://opensource.org/licenses/gpl-license GNU Public License
9 * @since 2.2.0
10 */
11
12 // Exit if accessed directly.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Class Give_DB_Sessions
19 */
20 class Give_DB_Sessions extends Give_DB {
21 /**
22 * Cache group name
23 *
24 * @since 2.2.0
25 * @access private
26 *
27 * @var string
28 */
29 private $cache_group = 'give_sessions';
30
31 /**
32 * Cache incrementer name
33 *
34 * @since 2.2.0
35 * @access private
36 *
37 * @var string
38 */
39 private $incrementer_name = 'give_sessions';
40
41
42 /**
43 * Class Constructor
44 *
45 * @since 2.2.0
46 * @access public
47 */
48 public function __construct() {
49 global $wpdb;
50 $this->table_name = "{$wpdb->prefix}give_sessions";
51 $this->primary_key = 'session_key';
52 $this->version = '1.0';
53
54 // Set cache group id.
55 $current_blog_id = get_current_blog_id();
56 $this->incrementer_name = "give-cache-incrementer-sessions-{$current_blog_id}";
57 $incrementer_value = wp_cache_get( $this->incrementer_name );
58 $incrementer_value = ! empty( $incrementer_value ) ? $incrementer_value : microtime( true );
59 $this->cache_group = "{$this->cache_group}_{$current_blog_id}_{$incrementer_value}";
60
61 parent::__construct();
62 }
63
64
65 /**
66 * Whitelist of columns
67 *
68 * @since 2.2.0
69 * @access public
70 *
71 * @return array Columns and formats.
72 */
73 public function get_columns() {
74 return array(
75 'session_id' => '%d',
76 'session_key' => '%s',
77 'session_value' => '%s',
78 'session_expiry' => '%d',
79 );
80 }
81
82 /**
83 * Create Meta Tables.
84 *
85 * @since 2.2.0
86 * @access public
87 */
88 public function create_table() {
89 global $wpdb;
90
91 $charset_collate = $wpdb->get_charset_collate();
92
93 $sql = "CREATE TABLE {$this->table_name} (
94 session_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
95 session_key char(32) NOT NULL,
96 session_value longtext NOT NULL,
97 session_expiry BIGINT UNSIGNED NOT NULL,
98 PRIMARY KEY (session_key),
99 UNIQUE KEY session_id (session_id)
100 ) {$charset_collate};";
101
102 require_once ABSPATH . 'wp-admin/includes/upgrade.php';
103 dbDelta( $sql );
104
105 update_option( $this->table_name . '_db_version', $this->version, false );
106 }
107
108
109 /**
110 * Returns the session.
111 *
112 * @todo: add cache logic
113 *
114 * @since 4.16.7.2 Restrict unserialize to prevent object instantiation.
115 * @param string $donor_id Donor ID.
116 * @param mixed $default Default session value.
117 *
118 * @return mixed
119 */
120 public function get_session( $donor_id, $default = false ) {
121 global $wpdb;
122
123 if ( defined( 'WP_SETUP_CONFIG' ) ) {
124 return false;
125 }
126
127 if ( ! ( $value = wp_cache_get( $donor_id, $this->cache_group ) ) ) { // @codingStandardsIgnoreLine
128
129 // @codingStandardsIgnoreStart
130 $value = $wpdb->get_var(
131 $wpdb->prepare(
132 "
133 SELECT session_value
134 FROM $this->table_name
135 WHERE session_key = %s
136 ",
137 $donor_id
138 )
139 );
140 // @codingStandardsIgnoreEnd
141
142 if ( is_null( $value ) ) {
143 $value = $default;
144 }
145
146 wp_cache_add( $donor_id, $value, $this->cache_group );
147 }
148
149 return is_serialized( $value ) ? unserialize( $value, [ 'allowed_classes' => false ] ) : $value;
150 }
151
152 /**
153 * Update the session expiry timestamp.
154 *
155 * @param string $donor_id Donor ID.
156 * @param int $timestamp Timestamp to expire the cookie.
157 */
158 public function update_session_timestamp( $donor_id, $timestamp ) {
159 global $wpdb;
160
161 // @codingStandardsIgnoreStart.
162 $wpdb->update(
163 $this->table_name,
164 array(
165 'session_expiry' => $timestamp,
166 ),
167 array(
168 'session_key' => $donor_id,
169 ),
170 array(
171 '%d'
172 )
173 );
174 // @codingStandardsIgnoreEnd.
175 }
176
177 /**
178 * Delete the session from the cache and database.
179 *
180 * @since 2.2.0
181 * @access public
182 *
183 * @param int $donor_id Customer ID.
184 */
185 public function delete_session( $donor_id ) {
186 global $wpdb;
187
188 wp_cache_delete( $donor_id, $this->cache_group );
189
190 // @codingStandardsIgnoreStart
191 $wpdb->delete(
192 $this->table_name,
193 array(
194 'session_key' => $donor_id,
195 )
196 );
197 // @codingStandardsIgnoreEnd
198 }
199
200
201 /**
202 * Cleanup session data from the database and clear caches.
203 * Note: for internal logic only.
204 *
205 * @since 2.2.0
206 * @access public
207 */
208 public function delete_expired_sessions() {
209 global $wpdb;
210
211 wp_cache_set( $this->incrementer_name, microtime( true ) );
212
213 // @codingStandardsIgnoreStart
214 $wpdb->query(
215 $wpdb->prepare(
216 "DELETE FROM $this->table_name WHERE session_expiry < %d",
217 time()
218 )
219 );
220 // @codingStandardsIgnoreEnd
221 }
222
223 /**
224 * Replace table data
225 * Note: only for internal use
226 *
227 * @since 4.9.0 rename function - PHP 8 compatibility
228 * @since 2.2.0
229 * @access public
230 *
231 * @param string $table_name Table name.
232 * @param array $data Data.
233 * @param array $format Array for data format of each key:value in data.
234 */
235 public function replace( $table_name, $data, $format = null ) {
236 global $wpdb;
237
238 wp_cache_set( $data['session_key'], $data['session_value'], $this->cache_group, $data['session_expiry'] - time() );
239
240 // @codingStandardsIgnoreStart
241 $wpdb->replace(
242 $table_name,
243 $data,
244 $format
245 );
246 // @codingStandardsIgnoreEnd
247 }
248 }
249