*/ private const STATIC_OPTIONS = array( 'api_key' => 'wp_desk_net_api_key', 'api_secret' => 'wp_desk_net_api_secret', 'platform_id' => 'wp_desk_net_platform_id', 'story_id_in_permalink' => 'wp_desk_net_id_in_permalink', 'db_version' => 'wp_desk_net_db_version', 'active_statuses' => 'wp_desk_net_desk-net-list-active-status', 'deactivated_statuses' => 'wp_desk_net_desk-net-list-deactivated-status', 'formats_list' => 'wp_desk_net_formats_list', 'slug_syncing' => 'wp_desk_net_slug_slug_syncing', 'initial_status_syncing' => 'wp_desk_net_initial_status_syncing_checkbox', 'initial_slug_syncing' => 'wp_desk_net_initial_slug_syncing_checkbox', 'category_target_field' => 'wp_desk_net_category_custom_field_in_wp_custom_field', 'custom_fields_list' => 'wp_desk_net_desk_net_custom_fields_list', 'publication_custom_fields_list' => 'wp_desk_net_desk_net_publication_custom_fields_list', 'category_list' => 'wp_desk_net_desk_net_category_list', // Credentials this site uses to call Kordiam (api_key/api_secret are the reverse). 'outbound_login' => 'wp_desk_net_user_login', 'outbound_password' => 'wp_desk_net_user_password', ); /* * Do not map wp_desk_net_token: deleting the Kordiam token must force re-authentication, * and a legacy fallback would resurrect the stale Desk-Net one. */ /** * Rules for option names parameterised by a Kordiam status or category. * * The new_pattern/legacy_format pair maps Kordiam to Desk-Net; legacy_pattern/new_format maps back. * * @var array> */ private const DYNAMIC_OPTIONS = array( array( 'new_pattern' => '/^status_import_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_status_desk_net_to_wp_%s', 'legacy_pattern' => '/^wp_desk_net_status_desk_net_to_wp_([A-Za-z0-9_-]+)$/', 'new_format' => 'status_import_%s', ), array( 'new_pattern' => '/^status_export_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_status_wp_to_desk_net_%s', 'legacy_pattern' => '/^wp_desk_net_status_wp_to_desk_net_([A-Za-z0-9_-]+)$/', 'new_format' => 'status_export_%s', ), array( 'new_pattern' => '/^category_import_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_category_desk_net_to_wp_%s', 'legacy_pattern' => '/^wp_desk_net_category_desk_net_to_wp_([A-Za-z0-9_-]+)$/', 'new_format' => 'category_import_%s', ), array( 'new_pattern' => '/^category_export_(.+)$/', 'legacy_format' => 'wp_desk_net_category_wp_to_desk_net_%s', 'legacy_pattern' => '/^wp_desk_net_category_wp_to_desk_net_(.+)$/', 'new_format' => 'category_export_%s', ), array( 'new_pattern' => '/^content_([A-Za-z0-9_-]+)_files$/', 'legacy_format' => 'wp_desk_net_content_%s-files', 'legacy_pattern' => '/^wp_desk_net_content_([A-Za-z0-9_-]+)-files$/', 'new_format' => 'content_%s_files', ), // (.+) captures a WordPress meta key, which may contain characters an ID never would. array( 'new_pattern' => '/^task_import_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_task_desk_net_to_wp_%s', 'legacy_pattern' => '/^wp_desk_net_task_desk_net_to_wp_([A-Za-z0-9_-]+)$/', 'new_format' => 'task_import_%s', ), array( 'new_pattern' => '/^task_export_(.+)$/', 'legacy_format' => 'wp_desk_net_task_wp_to_desk_net_%s', 'legacy_pattern' => '/^wp_desk_net_task_wp_to_desk_net_(.+)$/', 'new_format' => 'task_export_%s', ), array( 'new_pattern' => '/^publication_custom_field_import_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_publication_custom_fields_desk_net_to_wp_%s', 'legacy_pattern' => '/^wp_desk_net_publication_custom_fields_desk_net_to_wp_([A-Za-z0-9_-]+)$/', 'new_format' => 'publication_custom_field_import_%s', ), array( 'new_pattern' => '/^publication_custom_field_export_(.+)$/', 'legacy_format' => 'wp_desk_net_publication_custom_fields_wp_to_desk_net_%s', 'legacy_pattern' => '/^wp_desk_net_publication_custom_fields_wp_to_desk_net_(.+)$/', 'new_format' => 'publication_custom_field_export_%s', ), array( 'new_pattern' => '/^custom_field_import_([A-Za-z0-9_-]+)$/', 'legacy_format' => 'wp_desk_net_custom_fields_desk_net_to_wp_%s', 'legacy_pattern' => '/^wp_desk_net_custom_fields_desk_net_to_wp_([A-Za-z0-9_-]+)$/', 'new_format' => 'custom_field_import_%s', ), array( 'new_pattern' => '/^custom_field_export_(.+)$/', 'legacy_format' => 'wp_desk_net_custom_fields_wp_to_desk_net_%s', 'legacy_pattern' => '/^wp_desk_net_custom_fields_wp_to_desk_net_(.+)$/', 'new_format' => 'custom_field_export_%s', ), ); /** * Blocking instantiation: this class is a lookup table. */ private function __construct() { } /** * Getting the Desk-Net option name a Kordiam key came from. * * @param string $key Unprefixed Kordiam option key. * * @return string|null Legacy option name, or null when the key has no ancestor. */ public static function to_legacy_option( string $key ): ?string { if ( isset( self::STATIC_OPTIONS[ $key ] ) ) { return self::STATIC_OPTIONS[ $key ]; } foreach ( self::DYNAMIC_OPTIONS as $rule ) { if ( 1 === preg_match( $rule['new_pattern'], $key, $matches ) ) { return sprintf( $rule['legacy_format'], $matches[1] ); } } return null; } /** * Getting the Kordiam key a Desk-Net option name maps onto. * * @param string $legacy_name Full Desk-Net option name, prefix included. * * @return string|null Unprefixed Kordiam key, or null when the name is unknown. */ public static function to_new_option( string $legacy_name ): ?string { $static = array_search( $legacy_name, self::STATIC_OPTIONS, true ); if ( false !== $static ) { return (string) $static; } foreach ( self::DYNAMIC_OPTIONS as $rule ) { if ( 1 === preg_match( $rule['legacy_pattern'], $legacy_name, $matches ) ) { return sprintf( $rule['new_format'], $matches[1] ); } } return null; } /** * Listing the fixed option pairs. * * @return array Kordiam key => Desk-Net option name. */ public static function static_options(): array { return self::STATIC_OPTIONS; } }