$old_settings['default_to_user_full_name'] ?? '', 'excludeMeta' => $old_settings['excluded_meta'] ?? [], ]; $wcAdminCustomOrderFields = []; $zaps = []; foreach ( $old_settings as $old_setting_key => $old_setting_value ) { if ( strpos( $old_setting_key, '_wc_acof_' ) === 0 ) { $wcAdminCustomOrderFields[ $old_setting_key ] = $old_setting_value; } elseif ( strpos( $old_setting_key, 'zap_button_' ) === 0 ) { $zap_sub_key = substr( $old_setting_key, strlen( 'zap_button_' ) ); $key_parts = explode( '_', $zap_sub_key ); $field_type = $key_parts[0]; $number = intval( $key_parts[1] ); $index = $number - 1; if ( ! isset( $zaps[ $index ] ) ) { $zaps[ $index ] = [ 'id' => 'zap-fromV0toV1-' . str_pad( $number, 6, '0', STR_PAD_LEFT ), 'enabled' => false, 'title' => '', 'catchHook' => '', 'message' => '', 'selectOption' => 'Just Send', 'allowUserNotes' => false, ]; } if ( is_string( $old_setting_value ) ) { $old_setting_value = trim( $old_setting_value ); } switch ( $field_type ) { case 'name': $zaps[ $index ]['title'] = $old_setting_value; break; case 'url': $zaps[ $index ]['catchHook'] = $old_setting_value; break; case 'description': $zaps[ $index ]['message'] = $old_setting_value; if ( ! empty( $old_setting_value ) ) { $zaps[ $index ]['selectOption'] = 'Confirmation'; } break; case 'notes': $zaps[ $index ]['allowUserNotes'] = $old_setting_value === 'on'; break; case 'active': $zaps[ $index ]['enabled'] = $old_setting_value === 'on'; break; } } } $new_settings = [ 'advanced' => [ 'general' => $general, 'wcAdminCustomOrderFields' => $wcAdminCustomOrderFields, ], 'metaBoxes' => [ 0 => [ 'id' => 'metabox-' . time() . wp_rand( 1, 1000 ), 'title' => 'Webhook Buttons', 'zaps' => $zaps, 'visibleToUsers' => [], ], ], ]; update_option( $settings_key, $new_settings ); } /** * Copy settings from the legacy option key to the new one. * Stored data shape (metaBoxes, zaps, catchHook, ...) is unchanged. */ private static function to_v2() { $legacy = get_option( self::LEGACY_SETTINGS_KEY, [] ); if ( empty( $legacy ) || false !== get_option( Settings::OPTION_KEY ) ) { return; } update_option( Settings::OPTION_KEY, $legacy ); } /** * v3: generic names. zaps -> buttons, catchHook -> url. Also drops settings no longer used * (fallbackToUserName, wcAdminCustomOrderFields): custom fields are sent automatically now. */ private static function to_v3() { $settings = get_option( Settings::OPTION_KEY ); if ( ! is_array( $settings ) ) { return; } $boxes = is_array( $settings['metaBoxes'] ?? null ) ? $settings['metaBoxes'] : []; foreach ( $boxes as $i => $box ) { if ( ! is_array( $box ) ) { continue; } $buttons = $box['buttons'] ?? $box['zaps'] ?? []; unset( $box['zaps'] ); foreach ( (array) $buttons as $j => $button ) { if ( ! is_array( $button ) ) { continue; } if ( ! isset( $button['url'] ) && isset( $button['catchHook'] ) ) { $button['url'] = $button['catchHook']; } unset( $button['catchHook'] ); $buttons[ $j ] = $button; } $box['buttons'] = array_values( (array) $buttons ); $boxes[ $i ] = $box; } $settings['metaBoxes'] = array_values( $boxes ); unset( $settings['advanced']['general']['fallbackToUserName'], $settings['advanced']['wcAdminCustomOrderFields'] ); update_option( Settings::OPTION_KEY, Settings::sanitize( $settings ) ); } }