PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.6.4
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.6.4
4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 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.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / vendor / woocommerce / action-scheduler / classes / ActionScheduler_OptionLock.php
surecart / vendor / woocommerce / action-scheduler / classes Last commit date
WP_CLI 3 years ago abstracts 1 year ago actions 3 years ago data-stores 1 year ago migration 1 year ago schedules 3 years ago schema 2 years ago ActionScheduler_ActionClaim.php 3 years ago ActionScheduler_ActionFactory.php 1 year ago ActionScheduler_AdminView.php 1 year ago ActionScheduler_AsyncRequest_QueueRunner.php 3 years ago ActionScheduler_Compatibility.php 3 years ago ActionScheduler_DataController.php 3 years ago ActionScheduler_DateTime.php 3 years ago ActionScheduler_Exception.php 3 years ago ActionScheduler_FatalErrorMonitor.php 3 years ago ActionScheduler_InvalidActionException.php 3 years ago ActionScheduler_ListTable.php 1 year ago ActionScheduler_LogEntry.php 3 years ago ActionScheduler_NullLogEntry.php 3 years ago ActionScheduler_OptionLock.php 2 years ago ActionScheduler_QueueCleaner.php 3 years ago ActionScheduler_QueueRunner.php 2 years ago ActionScheduler_Versions.php 3 years ago ActionScheduler_WPCommentCleaner.php 3 years ago ActionScheduler_wcSystemStatus.php 3 years ago
ActionScheduler_OptionLock.php
136 lines
1 <?php
2
3 /**
4 * Provide a way to set simple transient locks to block behaviour
5 * for up-to a given duration.
6 *
7 * Class ActionScheduler_OptionLock
8 * @since 3.0.0
9 */
10 class ActionScheduler_OptionLock extends ActionScheduler_Lock {
11
12 /**
13 * Set a lock using options for a given amount of time (60 seconds by default).
14 *
15 * Using an autoloaded option avoids running database queries or other resource intensive tasks
16 * on frequently triggered hooks, like 'init' or 'shutdown'.
17 *
18 * For example, ActionScheduler_QueueRunner->maybe_dispatch_async_request() uses a lock to avoid
19 * calling ActionScheduler_QueueRunner->has_maximum_concurrent_batches() every time the 'shutdown',
20 * hook is triggered, because that method calls ActionScheduler_QueueRunner->store->get_claim_count()
21 * to find the current number of claims in the database.
22 *
23 * @param string $lock_type A string to identify different lock types.
24 * @bool True if lock value has changed, false if not or if set failed.
25 */
26 public function set( $lock_type ) {
27 global $wpdb;
28
29 $lock_key = $this->get_key( $lock_type );
30 $existing_lock_value = $this->get_existing_lock( $lock_type );
31 $new_lock_value = $this->new_lock_value( $lock_type );
32
33 // The lock may not exist yet, or may have been deleted.
34 if ( empty( $existing_lock_value ) ) {
35 return (bool) $wpdb->insert(
36 $wpdb->options,
37 array(
38 'option_name' => $lock_key,
39 'option_value' => $new_lock_value,
40 'autoload' => 'no',
41 )
42 );
43 }
44
45 if ( $this->get_expiration_from( $existing_lock_value ) >= time() ) {
46 return false;
47 }
48
49 // Otherwise, try to obtain the lock.
50 return (bool) $wpdb->update(
51 $wpdb->options,
52 array( 'option_value' => $new_lock_value ),
53 array(
54 'option_name' => $lock_key,
55 'option_value' => $existing_lock_value,
56 )
57 );
58 }
59
60 /**
61 * If a lock is set, return the timestamp it was set to expiry.
62 *
63 * @param string $lock_type A string to identify different lock types.
64 * @return bool|int False if no lock is set, otherwise the timestamp for when the lock is set to expire.
65 */
66 public function get_expiration( $lock_type ) {
67 return $this->get_expiration_from( $this->get_existing_lock( $lock_type ) );
68 }
69
70 /**
71 * Given the lock string, derives the lock expiration timestamp (or false if it cannot be determined).
72 *
73 * @param string $lock_value String containing a timestamp, or pipe-separated combination of unique value and timestamp.
74 *
75 * @return false|int
76 */
77 private function get_expiration_from( $lock_value ) {
78 $lock_string = explode( '|', $lock_value );
79
80 // Old style lock?
81 if ( count( $lock_string ) === 1 && is_numeric( $lock_string[0] ) ) {
82 return (int) $lock_string[0];
83 }
84
85 // New style lock?
86 if ( count( $lock_string ) === 2 && is_numeric( $lock_string[1] ) ) {
87 return (int) $lock_string[1];
88 }
89
90 return false;
91 }
92
93 /**
94 * Get the key to use for storing the lock in the transient
95 *
96 * @param string $lock_type A string to identify different lock types.
97 * @return string
98 */
99 protected function get_key( $lock_type ) {
100 return sprintf( 'action_scheduler_lock_%s', $lock_type );
101 }
102
103 /**
104 * Supplies the existing lock value, or an empty string if not set.
105 *
106 * @param string $lock_type A string to identify different lock types.
107 *
108 * @return string
109 */
110 private function get_existing_lock( $lock_type ) {
111 global $wpdb;
112
113 // Now grab the existing lock value, if there is one.
114 return (string) $wpdb->get_var(
115 $wpdb->prepare(
116 "SELECT option_value FROM $wpdb->options WHERE option_name = %s",
117 $this->get_key( $lock_type )
118 )
119 );
120 }
121
122 /**
123 * Supplies a lock value consisting of a unique value and the current timestamp, which are separated by a pipe
124 * character.
125 *
126 * Example: (string) "649de012e6b262.09774912|1688068114"
127 *
128 * @param string $lock_type A string to identify different lock types.
129 *
130 * @return string
131 */
132 private function new_lock_value( $lock_type ) {
133 return uniqid( '', true ) . '|' . ( time() + $this->get_duration( $lock_type ) );
134 }
135 }
136