'crontrol-schedule', 'plural' => 'crontrol-schedules', 'ajax' => false, 'screen' => 'crontrol-schedules', ) ); } /** * Gets the name of the primary column. * * @return string The name of the primary column. */ protected function get_primary_column_name() { return 'crontrol_name'; } /** * Prepares the list table items and arguments. */ public function prepare_items() { $schedules = Schedule\get(); $count = count( $schedules ); self::$core_schedules = get_core_schedules(); self::$used_schedules = array_unique( wp_list_pluck( Event\get(), 'schedule' ) ); $this->items = $schedules; $this->set_pagination_args( array( 'total_items' => $count, 'per_page' => -1, 'total_pages' => 1, ) ); } /** * Returns an array of column names for the table. * * @return string[] Array of column names keyed by their ID. */ public function get_columns() { return array( 'crontrol_icon' => '', 'crontrol_name' => __( 'Internal Name', 'wp-crontrol' ), 'crontrol_interval' => __( 'Interval', 'wp-crontrol' ), 'crontrol_display' => __( 'Display Name', 'wp-crontrol' ), ); } /** * Returns an array of CSS class names for the table. * * @return string[] Array of class names. */ protected function get_table_classes() { return array( 'widefat', 'fixed', 'striped', 'table-view-list', $this->_args['plural'] ); } /** * Generates and displays row action links for the table. * * @param array $schedule The schedule for the current row. * @param string $column_name Current column name. * @param string $primary Primary column name. * @return string The row actions HTML. */ protected function handle_row_actions( $schedule, $column_name, $primary ) { if ( $primary !== $column_name ) { return ''; } $links = array(); $new_scheds = get_option( 'crontrol_schedules', array() ); if ( in_array( $schedule['name'], self::$core_schedules, true ) ) { $links[] = "" . esc_html__( 'This is a WordPress core schedule and cannot be deleted', 'wp-crontrol' ) . ''; } elseif ( ! isset( $new_scheds[ $schedule['name'] ] ) ) { $links[] = "" . esc_html__( 'This schedule is added by another plugin and cannot be deleted', 'wp-crontrol' ) . ''; } elseif ( in_array( $schedule['name'], self::$used_schedules, true ) ) { $links[] = "" . esc_html__( 'This custom schedule is in use and cannot be deleted', 'wp-crontrol' ) . ''; } else { $link = add_query_arg( array( 'page' => 'crontrol_admin_options_page', 'action' => 'delete-sched', 'id' => rawurlencode( $schedule['name'] ), ), admin_url( 'options-general.php' ) ); $link = wp_nonce_url( $link, 'delete-sched_' . $schedule['name'] ); $links[] = "" . esc_html__( 'Delete', 'wp-crontrol' ) . ''; } return $this->row_actions( $links ); } /** * Returns the output for the icon cell of a table row. * * @param array $schedule The schedule for the current row. * @return string The cell output. */ protected function column_crontrol_icon( array $schedule ) { if ( in_array( $schedule['name'], self::$core_schedules, true ) ) { return sprintf( ' %s', esc_html__( 'This is a WordPress core schedule and cannot be deleted', 'wp-crontrol' ) ); } return ''; } /** * Returns the output for the schdule name cell of a table row. * * @param array $schedule The schedule for the current row. * @return string The cell output. */ protected function column_crontrol_name( array $schedule ) { return esc_html( $schedule['name'] ); } /** * Returns the output for the interval cell of a table row. * * @param array $schedule The schedule for the current row. * @return string The cell output. */ protected function column_crontrol_interval( array $schedule ) { $interval = sprintf( '%s (%s)', esc_html( $schedule['interval'] ), esc_html( interval( $schedule['interval'] ) ) ); if ( $schedule['is_too_frequent'] ) { $interval .= sprintf( '
%s
', sprintf( /* translators: 1: The name of the configuration constant, 2: The value of the configuration constant */ esc_html__( 'This interval is less than the %1$s constant which is set to %2$s seconds. Events that use it may not run on time.', 'wp-crontrol' ), 'WP_CRON_LOCK_TIMEOUT', intval( WP_CRON_LOCK_TIMEOUT ) ) ); } return $interval; } /** * Returns the output for the display name cell of a table row. * * @param array $schedule The schedule for the current row. * @return string The cell output. */ protected function column_crontrol_display( array $schedule ) { return esc_html( $schedule['display'] ); } /** * Outputs a message when there are no items to show in the table. */ public function no_items() { esc_html_e( 'There are no schedules.', 'wp-crontrol' ); } }