register( blc_create_frontend_configuration() ); $blc_configuration_registry->register( blc_create_admin_configuration() ); $blc_configuration_registry->register( blc_create_general_configuration() ); $blc_configuration_registry->register( blc_create_modules_configuration() ); $blc_configuration_registry->set_default_manager( 'general' ); } /** * Create configuration manager for frontend settings * * @return blcConfigurationManager */ function blc_create_frontend_configuration() { return new blcConfigurationManager( 'frontend', // Save the plugin frontend configuration into this DB option. 'wsblc_frontend_options', // Initialize default frontend settings. array( 'mark_broken_links' => true, // Whether to add the broken_link class to broken links in posts. 'broken_link_css' => ".broken_link, a.broken_link {\n\ttext-decoration: line-through;\n}", 'nofollow_broken_links' => false, // Whether to add rel="nofollow" to broken links in posts. 'mark_removed_links' => false, // Whether to add the removed_link class when un-linking a link. 'removed_link_css' => ".removed_link, a.removed_link {\n\ttext-decoration: line-through;\n}", 'logging_enabled' => false, 'log_file' => '', 'installation_complete' => false, 'current_db_version' => 0, // The currently set-up version of the plugin's tables. 'enabled_post_statuses' => array( 'publish' ), // Only check posts that match one of these statuses. 'active_modules' => array(), // List of active modules (used during installation to override defaults). ) ); } /** * Create configuration manager for admin settings * * @return blcConfigurationManager */ function blc_create_admin_configuration() { return new blcConfigurationManager( 'admin', // Save the plugin's scheduling configuration into this DB option. 'wsblc_admin_options', // Initialize default scheduling settings. array( 'autoexpand_widget' => true, // Autoexpand the Dashboard widget if broken links are detected. 'dashboard_widget_capability' => 'edit_others_posts', // Only display the widget to users who have this capability. 'show_link_count_bubble' => true, // Display a notification bubble in the menu when broken links are found. 'table_layout' => 'flexible', // The layout of the link table. Possible values : 'classic', 'flexible'. 'table_compact' => true, // Compact table mode on/off. 'table_visible_columns' => array( 'new-url', 'status', 'used-in', 'new-link-text' ), 'table_links_per_page' => 30, 'table_color_code_status' => true, // Color-code link status text. 'installation_flag_cleared_on' => 0, 'installation_flag_set_on' => 0, 'show_link_actions' => array( 'blc-deredirect-action' => false ), // Visible link actions. ) ); } /** * Create configuration manager for general settings * * @return blcConfigurationManager */ function blc_create_general_configuration() { return new blcConfigurationManager( 'general', // Save the plugin's general configuration into this DB option. 'wsblc_general_options', // Initialize default general settings. array( 'send_email_notifications' => true, // Whether to send the admin email notifications about broken links. 'send_authors_email_notifications' => false, // Whether to send post authors notifications about broken links in their posts. 'suggestions_enabled' => true, // Whether to suggest alternative URLs for broken links. 'warnings_enabled' => true, // Try to automatically detect temporary problems and false positives, and report them as "Warnings" instead of broken links. 'enable_load_limit' => true, // Enable/disable load monitoring. 'exclusion_list' => array(), // Links that contain a substring listed in this array won't be checked. 'need_resynch' => false, // [Internal flag] True if there are unparsed items. 'max_execution_time' => 7 * 60, // (in seconds) How long the worker instance may run, at most. 'check_threshold' => 72, // (in hours) Check each link every 72 hours. 'recheck_count' => 3, // How many times a broken link should be re-checked. 'run_in_dashboard' => true, // Run the link checker algo. continuously while the Dashboard is open. 'run_via_cron' => true, // Run it hourly via WordPress pseudo-cron. 'timeout' => 30, // (in seconds) Links that take longer than this to respond will be treated as broken. 'server_load_limit' => null, // Stop parsing stuff & checking links if the 1-minute load average goes over this value. Only works on Linux servers. 0 = no limit. 'failure_duration_threshold' => 3, // (days) Assume a link is permanently broken if it still hasn't recovered after this many days. 'incorrect_path' => false, 'blc_post_modified' => '', 'youtube_api_key' => '', 'last_notification_sent' => 0, // When the last email notification was sent (Unix timestamp). 'notification_email_address' => '', // If set, send email notifications to this address instead of the admin. 'notification_schedule' => apply_filters( 'blc_notification_schedule_filter', 'daily' ), // How often (at most) notifications will be sent. Possible values : 'daily', 'weekly'. There is no option for this so we've added a fitler for it. 'custom_fields' => array(), // List of custom fields that can contain URLs and should be checked. 'acf_fields' => array(), // List of custom fields that can contain URLs and should be checked. 'highlight_permanent_failures' => false, // Highlight links that have appear to be permanently broken (in Tools -> Broken Links). 'clear_log_on' => '', 'custom_log_file_enabled' => false, ) ); } /** * Create configuration manager for modules settings * * @return blcConfigurationManager */ function blc_create_modules_configuration() { return new blcConfigurationManager( 'modules', // Save the plugin's modules configuration into this DB option. 'wsblc_modules_options', // Initialize default modules settings. array( 'all_modules' => array(), ) ); } /** * Get the global configuration registry instance * * @return blcConfigurationRegistry */ function blc_get_configuration() { $blc_configuration_registry = blcConfigurationRegistry::get_instance(); return $blc_configuration_registry; } /** * Check if the configuration registry has been initialized * * @return bool */ function blc_config_initialized() { return blcConfigurationRegistry::initialized(); } /** * Migrate configuration data from old option to new configuration managers * * @return void */ function blc_maybe_migrate_configuration() { $migrated = get_option( 'blc_configuration_migrated', false ); if ( $migrated ) { return false; } if ( ! blc_config_initialized() ) { blc_init_configuration(); } $old_option = get_option( 'wsblc_options', false ); if ( false === $old_option ) { return false; } if ( ! is_string( $old_option ) ) { return false; } $old_data = json_decode( $old_option, true ); if ( null === $old_data ) { return; } $config = blc_get_configuration(); $managers = $config->options->get_managers(); foreach ( $managers as $manager ) { $manager->load_options(); if ( $manager->db_option_loaded ) { // Don't overwrite existing options. continue; } $available_settings = $manager->get_available_settings(); foreach ( $available_settings as $setting ) { if ( 'active_modules' === $setting ) { continue; } if ( ! array_key_exists( $setting, $old_data ) ) { continue; } $manager->set( $setting, $old_data[ $setting ] ); unset( $old_data[ $setting ] ); } if ( $manager->is_modified() ) { $manager->save_options(); } } if ( isset( $old_data['active_modules'] ) ) { $frontend_manager = $config->options->get_manager( 'frontend' ); if ( $frontend_manager instanceof blcConfigurationManager ) { $frontend_manager->set( 'active_modules', array_keys( $old_data['active_modules'] ) ); $frontend_manager->save_options(); } $modules_manager = $config->options->get_manager( 'modules' ); if ( $modules_manager instanceof blcConfigurationManager ) { $modules_manager->set( 'all_modules', $old_data['active_modules'] ); $modules_manager->save_options(); } unset( $old_data['active_modules'] ); } if ( ! empty( $old_data ) ) { $default_manager = $config->options->get_default_manager(); $default_manager->add_options( $old_data ); $default_manager->save_options(); } update_option( 'blc_configuration_migrated', 1 ); return true; }