fix(2meet-data-optimizer): forget post status columns of groups whose flat table is gone
- on_transition() skips a recorded group whose table no longer exists and removes it from tmdo_post_status_columns; every post status change used to UPDATE the missing table and print a database error (seen on dev36 after a throwaway group's table was dropped) - Verify: PostStatusSyncTest (dropped table), integration 578, unit 701, phpcs, stan - PR: PR-106
This commit is contained in:
@@ -65,6 +65,10 @@ final class TMDO_Post_Status_Sync {
|
||||
unset( $new_status, $old_status );
|
||||
foreach ( self::groups_with_columns() as $group ) {
|
||||
$table = TMDO_Schema_Manager::get_table_name( 'post', $group );
|
||||
if ( ! TMDO_Schema_Manager::table_exists( $table ) ) {
|
||||
self::forget( $group ); // The table was dropped (retired or uninstalled group).
|
||||
continue;
|
||||
}
|
||||
$wpdb->query(
|
||||
$wpdb->prepare(
|
||||
"UPDATE `{$table}` SET `post_status` = %s, `post_date` = %s WHERE `post_id` = %d", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Registry table name.
|
||||
@@ -220,6 +224,20 @@ final class TMDO_Post_Status_Sync {
|
||||
return is_array( $states ) ? array_keys( $states ) : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Drop a group from the recorded states.
|
||||
*
|
||||
* @param string $group Group name.
|
||||
* @return void
|
||||
*/
|
||||
private static function forget( string $group ): void {
|
||||
$states = get_option( self::OPTION, array() );
|
||||
if ( is_array( $states ) && isset( $states[ $group ] ) ) {
|
||||
unset( $states[ $group ] );
|
||||
update_option( self::OPTION, $states, true );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Record a group's state.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user