PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 / ActionScheduler_AdminView.php
mailpoet / vendor / woocommerce / action-scheduler / classes Last commit date
WP_CLI 1 year ago abstracts 1 year ago actions 1 year ago data-stores 1 year ago migration 1 year ago schedules 1 year ago schema 1 year ago ActionScheduler_ActionClaim.php 1 year ago ActionScheduler_ActionFactory.php 1 year ago ActionScheduler_AdminView.php 1 year ago ActionScheduler_AsyncRequest_QueueRunner.php 1 year ago ActionScheduler_Compatibility.php 1 year ago ActionScheduler_DataController.php 1 year ago ActionScheduler_DateTime.php 1 year ago ActionScheduler_Exception.php 4 years ago ActionScheduler_FatalErrorMonitor.php 1 year ago ActionScheduler_InvalidActionException.php 1 year ago ActionScheduler_ListTable.php 1 year ago ActionScheduler_LogEntry.php 1 year ago ActionScheduler_NullLogEntry.php 1 year ago ActionScheduler_OptionLock.php 2 years ago ActionScheduler_QueueCleaner.php 1 year ago ActionScheduler_QueueRunner.php 1 year ago ActionScheduler_SystemInformation.php 1 year ago ActionScheduler_Versions.php 1 year ago ActionScheduler_WPCommentCleaner.php 1 year ago ActionScheduler_wcSystemStatus.php 4 years ago index.php 3 years ago
ActionScheduler_AdminView.php
199 lines
1 <?php
2 if (!defined('ABSPATH')) exit;
3 class ActionScheduler_AdminView extends ActionScheduler_AdminView_Deprecated {
4 private static $admin_view = null;
5 private static $screen_id = 'tools_page_action-scheduler';
6 protected $list_table;
7 public static function instance() {
8 if ( empty( self::$admin_view ) ) {
9 $class = apply_filters( 'action_scheduler_admin_view_class', 'ActionScheduler_AdminView' );
10 self::$admin_view = new $class();
11 }
12 return self::$admin_view;
13 }
14 public function init() {
15 if ( is_admin() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) {
16 if ( class_exists( 'WooCommerce' ) ) {
17 add_action( 'woocommerce_admin_status_content_action-scheduler', array( $this, 'render_admin_ui' ) );
18 add_action( 'woocommerce_system_status_report', array( $this, 'system_status_report' ) );
19 add_filter( 'woocommerce_admin_status_tabs', array( $this, 'register_system_status_tab' ) );
20 }
21 add_action( 'admin_menu', array( $this, 'register_menu' ) );
22 add_action( 'admin_notices', array( $this, 'maybe_check_pastdue_actions' ) );
23 add_action( 'current_screen', array( $this, 'add_help_tabs' ) );
24 }
25 }
26 public function system_status_report() {
27 $table = new ActionScheduler_wcSystemStatus( ActionScheduler::store() );
28 $table->render();
29 }
30 public function register_system_status_tab( array $tabs ) {
31 $tabs['action-scheduler'] = __( 'Scheduled Actions', 'action-scheduler' );
32 return $tabs;
33 }
34 public function register_menu() {
35 $hook_suffix = add_submenu_page(
36 'tools.php',
37 __( 'Scheduled Actions', 'action-scheduler' ),
38 __( 'Scheduled Actions', 'action-scheduler' ),
39 'manage_options',
40 'action-scheduler',
41 array( $this, 'render_admin_ui' )
42 );
43 add_action( 'load-' . $hook_suffix, array( $this, 'process_admin_ui' ) );
44 }
45 public function process_admin_ui() {
46 $this->get_list_table();
47 }
48 public function render_admin_ui() {
49 $table = $this->get_list_table();
50 $table->display_page();
51 }
52 protected function get_list_table() {
53 if ( null === $this->list_table ) {
54 $this->list_table = new ActionScheduler_ListTable( ActionScheduler::store(), ActionScheduler::logger(), ActionScheduler::runner() );
55 $this->list_table->process_actions();
56 }
57 return $this->list_table;
58 }
59 public function maybe_check_pastdue_actions() {
60 // Filter to prevent checking actions (ex: inappropriate user).
61 if ( ! apply_filters( 'action_scheduler_check_pastdue_actions', current_user_can( 'manage_options' ) ) ) {
62 return;
63 }
64 // Get last check transient.
65 $last_check = get_transient( 'action_scheduler_last_pastdue_actions_check' );
66 // If transient exists, we're within interval, so bail.
67 if ( ! empty( $last_check ) ) {
68 return;
69 }
70 // Perform the check.
71 $this->check_pastdue_actions();
72 }
73 protected function check_pastdue_actions() {
74 // Set thresholds.
75 $threshold_seconds = (int) apply_filters( 'action_scheduler_pastdue_actions_seconds', DAY_IN_SECONDS );
76 $threshold_min = (int) apply_filters( 'action_scheduler_pastdue_actions_min', 1 );
77 // Set fallback value for past-due actions count.
78 $num_pastdue_actions = 0;
79 // Allow third-parties to preempt the default check logic.
80 $check = apply_filters( 'action_scheduler_pastdue_actions_check_pre', null );
81 // If no third-party preempted and there are no past-due actions, return early.
82 if ( ! is_null( $check ) ) {
83 return;
84 }
85 // Scheduled actions query arguments.
86 $query_args = array(
87 'date' => as_get_datetime_object( time() - $threshold_seconds ),
88 'status' => ActionScheduler_Store::STATUS_PENDING,
89 'per_page' => $threshold_min,
90 );
91 // If no third-party preempted, run default check.
92 if ( is_null( $check ) ) {
93 $store = ActionScheduler_Store::instance();
94 $num_pastdue_actions = (int) $store->query_actions( $query_args, 'count' );
95 // Check if past-due actions count is greater than or equal to threshold.
96 $check = ( $num_pastdue_actions >= $threshold_min );
97 $check = (bool) apply_filters( 'action_scheduler_pastdue_actions_check', $check, $num_pastdue_actions, $threshold_seconds, $threshold_min );
98 }
99 // If check failed, set transient and abort.
100 if ( ! boolval( $check ) ) {
101 $interval = apply_filters( 'action_scheduler_pastdue_actions_check_interval', round( $threshold_seconds / 4 ), $threshold_seconds );
102 set_transient( 'action_scheduler_last_pastdue_actions_check', time(), $interval );
103 return;
104 }
105 $actions_url = add_query_arg(
106 array(
107 'page' => 'action-scheduler',
108 'status' => 'past-due',
109 'order' => 'asc',
110 ),
111 admin_url( 'tools.php' )
112 );
113 // Print notice.
114 echo '<div class="notice notice-warning"><p>';
115 printf(
116 wp_kses(
117 // translators: 1) is the number of affected actions, 2) is a link to an admin screen.
118 _n(
119 '<strong>Action Scheduler:</strong> %1$d <a href="%2$s">past-due action</a> found; something may be wrong. <a href="https://actionscheduler.org/faq/#my-site-has-past-due-actions-what-can-i-do" target="_blank">Read documentation &raquo;</a>',
120 '<strong>Action Scheduler:</strong> %1$d <a href="%2$s">past-due actions</a> found; something may be wrong. <a href="https://actionscheduler.org/faq/#my-site-has-past-due-actions-what-can-i-do" target="_blank">Read documentation &raquo;</a>',
121 $num_pastdue_actions,
122 'action-scheduler'
123 ),
124 array(
125 'strong' => array(),
126 'a' => array(
127 'href' => true,
128 'target' => true,
129 ),
130 )
131 ),
132 absint( $num_pastdue_actions ),
133 esc_attr( esc_url( $actions_url ) )
134 );
135 echo '</p></div>';
136 // Facilitate third-parties to evaluate and print notices.
137 do_action( 'action_scheduler_pastdue_actions_extra_notices', $query_args );
138 }
139 public function add_help_tabs() {
140 $screen = get_current_screen();
141 if ( ! $screen || self::$screen_id !== $screen->id ) {
142 return;
143 }
144 $as_version = ActionScheduler_Versions::instance()->latest_version();
145 $as_source = ActionScheduler_SystemInformation::active_source();
146 $as_source_path = ActionScheduler_SystemInformation::active_source_path();
147 $as_source_markup = sprintf( '<code>%s</code>', esc_html( $as_source_path ) );
148 if ( ! empty( $as_source ) ) {
149 $as_source_markup = sprintf(
150 '%s: <abbr title="%s">%s</abbr>',
151 ucfirst( $as_source['type'] ),
152 esc_attr( $as_source_path ),
153 esc_html( $as_source['name'] )
154 );
155 }
156 $screen->add_help_tab(
157 array(
158 'id' => 'action_scheduler_about',
159 'title' => __( 'About', 'action-scheduler' ),
160 'content' =>
161 // translators: %s is the Action Scheduler version.
162 '<h2>' . sprintf( __( 'About Action Scheduler %s', 'action-scheduler' ), $as_version ) . '</h2>' .
163 '<p>' .
164 __( 'Action Scheduler is a scalable, traceable job queue for background processing large sets of actions. Action Scheduler works by triggering an action hook to run at some time in the future. Scheduled actions can also be scheduled to run on a recurring schedule.', 'action-scheduler' ) .
165 '</p>' .
166 '<h3>' . esc_html__( 'Source', 'action-scheduler' ) . '</h3>' .
167 '<p>' .
168 esc_html__( 'Action Scheduler is currently being loaded from the following location. This can be useful when debugging, or if requested by the support team.', 'action-scheduler' ) .
169 '</p>' .
170 '<p>' . $as_source_markup . '</p>' .
171 '<h3>' . esc_html__( 'WP CLI', 'action-scheduler' ) . '</h3>' .
172 '<p>' .
173 sprintf(
174 esc_html__( 'WP CLI commands are available: execute %1$s for a list of available commands.', 'action-scheduler' ),
175 '<code>wp help action-scheduler</code>'
176 ) .
177 '</p>',
178 )
179 );
180 $screen->add_help_tab(
181 array(
182 'id' => 'action_scheduler_columns',
183 'title' => __( 'Columns', 'action-scheduler' ),
184 'content' =>
185 '<h2>' . __( 'Scheduled Action Columns', 'action-scheduler' ) . '</h2>' .
186 '<ul>' .
187 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Hook', 'action-scheduler' ), __( 'Name of the action hook that will be triggered.', 'action-scheduler' ) ) .
188 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Status', 'action-scheduler' ), __( 'Action statuses are Pending, Complete, Canceled, Failed', 'action-scheduler' ) ) .
189 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Arguments', 'action-scheduler' ), __( 'Optional data array passed to the action hook.', 'action-scheduler' ) ) .
190 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Group', 'action-scheduler' ), __( 'Optional action group.', 'action-scheduler' ) ) .
191 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Recurrence', 'action-scheduler' ), __( 'The action\'s schedule frequency.', 'action-scheduler' ) ) .
192 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Scheduled', 'action-scheduler' ), __( 'The date/time the action is/was scheduled to run.', 'action-scheduler' ) ) .
193 sprintf( '<li><strong>%1$s</strong>: %2$s</li>', __( 'Log', 'action-scheduler' ), __( 'Activity log for the action.', 'action-scheduler' ) ) .
194 '</ul>',
195 )
196 );
197 }
198 }
199