PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / woocommerce / action-scheduler / classes / data-stores / ActionScheduler_HybridStore.php
mailpoet / vendor / woocommerce / action-scheduler / classes / data-stores Last commit date
ActionScheduler_DBLogger.php 1 year ago ActionScheduler_DBStore.php 1 year ago ActionScheduler_HybridStore.php 1 year ago ActionScheduler_wpCommentLogger.php 1 year ago ActionScheduler_wpPostStore.php 1 year ago ActionScheduler_wpPostStore_PostStatusRegistrar.php 4 years ago ActionScheduler_wpPostStore_PostTypeRegistrar.php 1 year ago ActionScheduler_wpPostStore_TaxonomyRegistrar.php 1 year ago index.php 3 years ago
ActionScheduler_HybridStore.php
206 lines
1 <?php
2 if (!defined('ABSPATH')) exit;
3 use ActionScheduler_Store as Store;
4 use Action_Scheduler\Migration\Runner;
5 use Action_Scheduler\Migration\Config;
6 use Action_Scheduler\Migration\Controller;
7 class ActionScheduler_HybridStore extends Store {
8 const DEMARKATION_OPTION = 'action_scheduler_hybrid_store_demarkation';
9 private $primary_store;
10 private $secondary_store;
11 private $migration_runner;
12 private $demarkation_id = 0;
13 public function __construct( ?Config $config = null ) {
14 $this->demarkation_id = (int) get_option( self::DEMARKATION_OPTION, 0 );
15 if ( empty( $config ) ) {
16 $config = Controller::instance()->get_migration_config_object();
17 }
18 $this->primary_store = $config->get_destination_store();
19 $this->secondary_store = $config->get_source_store();
20 $this->migration_runner = new Runner( $config );
21 }
22 public function init() {
23 add_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10, 2 );
24 $this->primary_store->init();
25 $this->secondary_store->init();
26 remove_action( 'action_scheduler/created_table', array( $this, 'set_autoincrement' ), 10 );
27 }
28 public function set_autoincrement( $table_name, $table_suffix ) {
29 if ( ActionScheduler_StoreSchema::ACTIONS_TABLE === $table_suffix ) {
30 if ( empty( $this->demarkation_id ) ) {
31 $this->demarkation_id = $this->set_demarkation_id();
32 }
33 global $wpdb;
34 $default_date = new DateTime( 'tomorrow' );
35 $null_action = new ActionScheduler_NullAction();
36 $date_gmt = $this->get_scheduled_date_string( $null_action, $default_date );
37 $date_local = $this->get_scheduled_date_string_local( $null_action, $default_date );
38 $row_count = $wpdb->insert(
39 $wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
40 array(
41 'action_id' => $this->demarkation_id,
42 'hook' => '',
43 'status' => '',
44 'scheduled_date_gmt' => $date_gmt,
45 'scheduled_date_local' => $date_local,
46 'last_attempt_gmt' => $date_gmt,
47 'last_attempt_local' => $date_local,
48 )
49 );
50 if ( $row_count > 0 ) {
51 $wpdb->delete(
52 $wpdb->{ActionScheduler_StoreSchema::ACTIONS_TABLE},
53 array( 'action_id' => $this->demarkation_id )
54 );
55 }
56 }
57 }
58 private function set_demarkation_id( $id = null ) {
59 if ( empty( $id ) ) {
60 global $wpdb;
61 $id = (int) $wpdb->get_var( "SELECT MAX(ID) FROM $wpdb->posts" );
62 $id++;
63 }
64 update_option( self::DEMARKATION_OPTION, $id );
65 return $id;
66 }
67 public function find_action( $hook, $params = array() ) {
68 $found_unmigrated_action = $this->secondary_store->find_action( $hook, $params );
69 if ( ! empty( $found_unmigrated_action ) ) {
70 $this->migrate( array( $found_unmigrated_action ) );
71 }
72 return $this->primary_store->find_action( $hook, $params );
73 }
74 public function query_actions( $query = array(), $query_type = 'select' ) {
75 $found_unmigrated_actions = $this->secondary_store->query_actions( $query, 'select' );
76 if ( ! empty( $found_unmigrated_actions ) ) {
77 $this->migrate( $found_unmigrated_actions );
78 }
79 return $this->primary_store->query_actions( $query, $query_type );
80 }
81 public function action_counts() {
82 $unmigrated_actions_count = $this->secondary_store->action_counts();
83 $migrated_actions_count = $this->primary_store->action_counts();
84 $actions_count_by_status = array();
85 foreach ( $this->get_status_labels() as $status_key => $status_label ) {
86 $count = 0;
87 if ( isset( $unmigrated_actions_count[ $status_key ] ) ) {
88 $count += $unmigrated_actions_count[ $status_key ];
89 }
90 if ( isset( $migrated_actions_count[ $status_key ] ) ) {
91 $count += $migrated_actions_count[ $status_key ];
92 }
93 $actions_count_by_status[ $status_key ] = $count;
94 }
95 $actions_count_by_status = array_filter( $actions_count_by_status );
96 return $actions_count_by_status;
97 }
98 public function stake_claim( $max_actions = 10, ?DateTime $before_date = null, $hooks = array(), $group = '' ) {
99 $claim = $this->secondary_store->stake_claim( $max_actions, $before_date, $hooks, $group );
100 $claimed_actions = $claim->get_actions();
101 if ( ! empty( $claimed_actions ) ) {
102 $this->migrate( $claimed_actions );
103 }
104 $this->secondary_store->release_claim( $claim );
105 return $this->primary_store->stake_claim( $max_actions, $before_date, $hooks, $group );
106 }
107 private function migrate( $action_ids ) {
108 $this->migration_runner->migrate_actions( $action_ids );
109 }
110 public function save_action( ActionScheduler_Action $action, ?DateTime $date = null ) {
111 return $this->primary_store->save_action( $action, $date );
112 }
113 public function fetch_action( $action_id ) {
114 $store = $this->get_store_from_action_id( $action_id, true );
115 if ( $store ) {
116 return $store->fetch_action( $action_id );
117 } else {
118 return new ActionScheduler_NullAction();
119 }
120 }
121 public function cancel_action( $action_id ) {
122 $store = $this->get_store_from_action_id( $action_id );
123 if ( $store ) {
124 $store->cancel_action( $action_id );
125 }
126 }
127 public function delete_action( $action_id ) {
128 $store = $this->get_store_from_action_id( $action_id );
129 if ( $store ) {
130 $store->delete_action( $action_id );
131 }
132 }
133 public function get_date( $action_id ) {
134 $store = $this->get_store_from_action_id( $action_id );
135 if ( $store ) {
136 return $store->get_date( $action_id );
137 } else {
138 return null;
139 }
140 }
141 public function mark_failure( $action_id ) {
142 $store = $this->get_store_from_action_id( $action_id );
143 if ( $store ) {
144 $store->mark_failure( $action_id );
145 }
146 }
147 public function log_execution( $action_id ) {
148 $store = $this->get_store_from_action_id( $action_id );
149 if ( $store ) {
150 $store->log_execution( $action_id );
151 }
152 }
153 public function mark_complete( $action_id ) {
154 $store = $this->get_store_from_action_id( $action_id );
155 if ( $store ) {
156 $store->mark_complete( $action_id );
157 }
158 }
159 public function get_status( $action_id ) {
160 $store = $this->get_store_from_action_id( $action_id );
161 if ( $store ) {
162 return $store->get_status( $action_id );
163 }
164 return null;
165 }
166 protected function get_store_from_action_id( $action_id, $primary_first = false ) {
167 if ( $primary_first ) {
168 $stores = array(
169 $this->primary_store,
170 $this->secondary_store,
171 );
172 } elseif ( $action_id < $this->demarkation_id ) {
173 $stores = array(
174 $this->secondary_store,
175 $this->primary_store,
176 );
177 } else {
178 $stores = array(
179 $this->primary_store,
180 );
181 }
182 foreach ( $stores as $store ) {
183 $action = $store->fetch_action( $action_id );
184 if ( ! is_a( $action, 'ActionScheduler_NullAction' ) ) {
185 return $store;
186 }
187 }
188 return null;
189 }
190 public function get_claim_count() {
191 return $this->primary_store->get_claim_count();
192 }
193 public function get_claim_id( $action_id ) {
194 return $this->primary_store->get_claim_id( $action_id );
195 }
196 public function release_claim( ActionScheduler_ActionClaim $claim ) {
197 $this->primary_store->release_claim( $claim );
198 }
199 public function unclaim_action( $action_id ) {
200 $this->primary_store->unclaim_action( $action_id );
201 }
202 public function find_actions_by_claim_id( $claim_id ) {
203 return $this->primary_store->find_actions_by_claim_id( $claim_id );
204 }
205 }
206