namespace WPForms\Migrations;
* @noinspection PhpUnused
class Upgrade175 extends UpgradeBase {
* Delete all task meta of not active tasks.
* @noinspection ElvisOperatorCanBeUsedInspection
* @return bool|null Upgrade result:
* true - the upgrade completed successfully,
* false - in the case of failure,
* null - upgrade started but not yet finished (background task).
if ( ! $this->as_tables_exist() ) {
$sql = "SELECT DISTINCT a.args FROM {$wpdb->prefix}actionscheduler_actions a
JOIN {$wpdb->prefix}actionscheduler_groups g ON g.group_id = a.group_id
WHERE g.slug = '$group' AND a.status IN ( 'pending', 'in-progress' )";
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared
$results = $wpdb->get_results( $sql, 'ARRAY_A' );
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared
$results = $results ? $results : [];
foreach ( $results as $result ) {
$args = isset( $result['args'] ) ? json_decode( $result['args'], true ) : null;
if ( $args && ! empty( $args['tasks_meta_id'] ) ) {
$meta_ids[] = $args['tasks_meta_id'];
$table_name = Meta::get_table_name();
$not_in = $meta_ids ? wpforms_wpdb_prepare_in( $meta_ids ) : '0';
// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query( "DELETE FROM $table_name WHERE id NOT IN ( $not_in )" );
// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.NoCaching
* Check whether AS tables exist.
private function as_tables_exist() {
$wpdb->prefix . 'actionscheduler_actions',
$wpdb->prefix . 'actionscheduler_groups',
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$tables = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}actionscheduler%'" );
$intersect = array_values( array_intersect( $tables, $required_tables ) );
sort( $required_tables );
return $intersect === $required_tables;