PluginProbe ʕ •ᴥ•ʔ
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin / 2.1.1
WP Mail SMTP by WPForms – The Most Popular SMTP and Email Log Plugin v2.1.1
4.9.0 0.9.6 1.0.0 1.0.1 1.0.2 1.1.0 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.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.6.0 1.6.2 1.7.0 1.7.1 1.8.0 1.8.1 1.9.0 2.0.0 2.0.1 2.1.1 2.2.1 2.3.1 2.4.0 2.5.0 2.5.1 2.6.0 2.7.0 2.8.0 2.9.0 3.0.1 3.0.2 3.0.3 3.1.0 3.10.0 3.11.0 3.11.1 3.2.0 3.2.1 3.3.0 3.4.0 3.5.0 3.5.1 3.5.2 3.6.1 3.7.0 3.8.0 3.8.2 3.9.0 4.0.1 4.1.0 4.1.1 4.2.0 4.3.0 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.8.0 trunk 0.10.0 0.10.1 0.11.1 0.11.2 0.3.1 0.3.2 0.4 0.4.1 0.4.2 0.5.0 0.5.1 0.5.2 0.6 0.7 0.8 0.8.2 0.8.3 0.8.4 0.8.5 0.8.6 0.8.7 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5
wp-mail-smtp / vendor / woocommerce / action-scheduler / classes / migration / Controller.php
wp-mail-smtp / vendor / woocommerce / action-scheduler / classes / migration Last commit date
ActionMigrator.php 6 years ago ActionScheduler_DBStoreMigrator.php 6 years ago BatchFetcher.php 6 years ago Config.php 6 years ago Controller.php 6 years ago DryRun_ActionMigrator.php 6 years ago DryRun_LogMigrator.php 6 years ago LogMigrator.php 6 years ago Runner.php 6 years ago Scheduler.php 6 years ago
Controller.php
207 lines
1 <?php
2
3 namespace Action_Scheduler\Migration;
4
5 use Action_Scheduler\WP_CLI\Migration_Command;
6 use Action_Scheduler\WP_CLI\ProgressBar;
7
8 /**
9 * Class Controller
10 *
11 * The main plugin/initialization class for migration to custom tables.
12 *
13 * @package Action_Scheduler\Migration
14 *
15 * @since 3.0.0
16 *
17 * @codeCoverageIgnore
18 */
19 class Controller {
20 private static $instance;
21
22 /** @var Action_Scheduler\Migration\Scheduler */
23 private $migration_scheduler;
24
25 /** @var string */
26 private $store_classname;
27
28 /** @var string */
29 private $logger_classname;
30
31 /** @var bool */
32 private $migrate_custom_store;
33
34 /**
35 * Controller constructor.
36 *
37 * @param Scheduler $migration_scheduler Migration scheduler object.
38 */
39 protected function __construct( Scheduler $migration_scheduler ) {
40 $this->migration_scheduler = $migration_scheduler;
41 $this->store_classname = '';
42 }
43
44 /**
45 * Set the action store class name.
46 *
47 * @param string $class Classname of the store class.
48 *
49 * @return string
50 */
51 public function get_store_class( $class ) {
52 if ( \ActionScheduler_DataController::is_migration_complete() ) {
53 return \ActionScheduler_DataController::DATASTORE_CLASS;
54 } elseif ( \ActionScheduler_Store::DEFAULT_CLASS !== $class ) {
55 $this->store_classname = $class;
56 return $class;
57 } else {
58 return 'ActionScheduler_HybridStore';
59 }
60 }
61
62 /**
63 * Set the action logger class name.
64 *
65 * @param string $class Classname of the logger class.
66 *
67 * @return string
68 */
69 public function get_logger_class( $class ) {
70 \ActionScheduler_Store::instance();
71
72 if ( $this->has_custom_datastore() ) {
73 $this->logger_classname = $class;
74 return $class;
75 } else {
76 return \ActionScheduler_DataController::LOGGER_CLASS;
77 }
78 }
79
80 /**
81 * Get flag indicating whether a custom datastore is in use.
82 *
83 * @return bool
84 */
85 public function has_custom_datastore() {
86 return (bool) $this->store_classname;
87 }
88
89 /**
90 * Set up the background migration process
91 *
92 * @return void
93 */
94 public function schedule_migration() {
95 if ( \ActionScheduler_DataController::is_migration_complete() || $this->migration_scheduler->is_migration_scheduled() ) {
96 return;
97 }
98
99 $this->migration_scheduler->schedule_migration();
100 }
101
102 /**
103 * Get the default migration config object
104 *
105 * @return ActionScheduler\Migration\Config
106 */
107 public function get_migration_config_object() {
108 static $config = null;
109
110 if ( ! $config ) {
111 $source_store = $this->store_classname ? new $this->store_classname() : new \ActionScheduler_wpPostStore();
112 $source_logger = $this->logger_classname ? new $this->logger_classname() : new \ActionScheduler_wpCommentLogger();
113
114 $config = new Config();
115 $config->set_source_store( $source_store );
116 $config->set_source_logger( $source_logger );
117 $config->set_destination_store( new \ActionScheduler_DBStoreMigrator() );
118 $config->set_destination_logger( new \ActionScheduler_DBLogger() );
119
120 if ( defined( 'WP_CLI' ) && WP_CLI ) {
121 $config->set_progress_bar( new ProgressBar( '', 0 ) );
122 }
123 }
124
125 return apply_filters( 'action_scheduler/migration_config', $config );
126 }
127
128 /**
129 * Hook dashboard migration notice.
130 */
131 public function hook_admin_notices() {
132 if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) {
133 return;
134 }
135 add_action( 'admin_notices', array( $this, 'display_migration_notice' ), 10, 0 );
136 }
137
138 /**
139 * Show a dashboard notice that migration is in progress.
140 */
141 public function display_migration_notice() {
142 printf( '<div class="notice notice-warning"><p>%s</p></div>', __( 'Action Scheduler migration in progress. The list of scheduled actions may be incomplete.', 'action-scheduler' ) );
143 }
144
145 /**
146 * Add store classes. Hook migration.
147 */
148 private function hook() {
149 add_filter( 'action_scheduler_store_class', array( $this, 'get_store_class' ), 100, 1 );
150 add_filter( 'action_scheduler_logger_class', array( $this, 'get_logger_class' ), 100, 1 );
151 add_action( 'init', array( $this, 'maybe_hook_migration' ) );
152 add_action( 'wp_loaded', array( $this, 'schedule_migration' ) );
153
154 // Action Scheduler may be displayed as a Tools screen or WooCommerce > Status administration screen
155 add_action( 'load-tools_page_action-scheduler', array( $this, 'hook_admin_notices' ), 10, 0 );
156 add_action( 'load-woocommerce_page_wc-status', array( $this, 'hook_admin_notices' ), 10, 0 );
157 }
158
159 /**
160 * Possibly hook the migration scheduler action.
161 *
162 * @author Jeremy Pry
163 */
164 public function maybe_hook_migration() {
165 if ( ! $this->allow_migration() || \ActionScheduler_DataController::is_migration_complete() ) {
166 return;
167 }
168
169 $this->migration_scheduler->hook();
170 }
171
172 /**
173 * Allow datastores to enable migration to AS tables.
174 */
175 public function allow_migration() {
176 if ( ! \ActionScheduler_DataController::dependencies_met() ) {
177 return false;
178 }
179
180 if ( null === $this->migrate_custom_store ) {
181 $this->migrate_custom_store = apply_filters( 'action_scheduler_migrate_data_store', false );
182 }
183
184 return ( ! $this->has_custom_datastore() ) || $this->migrate_custom_store;
185 }
186
187 /**
188 * Proceed with the migration if the dependencies have been met.
189 */
190 public static function init() {
191 if ( \ActionScheduler_DataController::dependencies_met() ) {
192 self::instance()->hook();
193 }
194 }
195
196 /**
197 * Singleton factory.
198 */
199 public static function instance() {
200 if ( ! isset( self::$instance ) ) {
201 self::$instance = new static( new Scheduler() );
202 }
203
204 return self::$instance;
205 }
206 }
207