get_col( "SELECT blog_id FROM $wpdb->blogs" ); foreach ( $blog_ids as $blog_id ) { switch_to_blog( $blog_id ); cau_database_creation(); restore_current_blog(); } } else { cau_database_creation(); } if (! wp_next_scheduled ( 'cau_set_schedule_mail' )) wp_schedule_event( time(), 'daily', 'cau_set_schedule_mail'); // Set schedule for basic notifcations if (! wp_next_scheduled ( 'cau_custom_hooks_plugins' )) wp_schedule_event( time(), 'daily', 'cau_custom_hooks_plugins'); // Run custom hooks on plugin updates if (! wp_next_scheduled ( 'cau_custom_hooks_themes' )) wp_schedule_event( time(), 'daily', 'cau_custom_hooks_themes'); // Run custom hooks on theme updates if (! wp_next_scheduled ( 'cau_log_updater' )) wp_schedule_event( ( time() - 1800 ), 'daily', 'cau_log_updater'); // Keep the log up to date if (! wp_next_scheduled ( 'cau_outdated_notifier' )) wp_schedule_event( time(), 'daily', 'cau_outdated_notifier'); // Set schedule for basic notifcations } add_action( 'cau_set_schedule_mail', 'cau_check_updates_mail' ); add_action( 'cau_outdated_notifier', 'cau_outdated_notifier_mail' ); add_action( 'wp_update_plugins', 'cau_run_custom_hooks_p' ); add_action( 'wp_update_themes', 'cau_run_custom_hooks_t' ); add_action( 'wp_version_check', 'cau_run_custom_hooks_c' ); // Hourly event to keep the log up to date function cau_keep_log_uptodate() { cau_savePluginInformation(); // Check for new plugins and themes cau_check_delayed(); // Check for plugin delays } add_action( 'cau_log_updater', 'cau_keep_log_uptodate' ); // Redirect to welcome screen on activation of plugin function cau_pluginActivateWelcome() { add_option( 'cau_redirectToWelcomeScreen', true ); } register_activation_hook(__FILE__, 'cau_pluginActivateWelcome'); // Redirect to welcome screen on activation of plugin function cau_pluginRedirectWelcomeScreen() { if ( get_option( 'cau_redirectToWelcomeScreen', false ) ) { delete_option( 'cau_redirectToWelcomeScreen' ); if( !isset( $_GET['activate-multi'] ) ) { wp_redirect( admin_url( cau_menloc().'?page=cau-settings&welcome=1' ) ); } } } add_action( 'admin_init', 'cau_pluginRedirectWelcomeScreen' ); // Donate url function cau_donateUrl() { return 'https://www.paypal.me/dakel/10/'; } // Database version function cau_db_version() { return '3.8.3'; } function cau_database_creation() { global $wpdb; // Plugin db info $cau_db_version = cau_db_version(); $autoupdates = $wpdb->prefix."auto_updates"; $updateLog = $wpdb->prefix."update_log"; // WordPress db info $charset_collate = $wpdb->get_charset_collate(); // DB table creation queries $sql = "CREATE TABLE $autoupdates ( id INT(9) NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, onoroff TEXT NOT NULL, UNIQUE KEY id (id) ) $charset_collate;"; $sql2 = "CREATE TABLE $updateLog ( id INT(9) NOT NULL AUTO_INCREMENT, slug VARCHAR(255) NOT NULL, oldVersion VARCHAR(10) NOT NULL, newVersion VARCHAR(10) NOT NULL, method VARCHAR(10) NOT NULL, put_on_hold VARCHAR(100) DEFAULT '0', UNIQUE KEY id (id) ) $charset_collate;"; // Create DB tables require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); dbDelta( $sql2 ); // Database version add_option( "cau_db_version", "$cau_db_version" ); // Insert data cau_install_data(); } // Check if database table exists before creating function cau_check_if_exists( $whattocheck, $id = 'name', $db_table = 'auto_updates' ) { global $wpdb; $table_name = $wpdb->prefix.$db_table; $rows = $wpdb->get_col( "SELECT COUNT(*) as num_rows FROM {$table_name} WHERE {$id} = '{$whattocheck}'" ); $check = $rows[0]; return ( $check > 0 ) ? true : false; } // Insert date into database function cau_install_data() { global $wpdb; $table_name = $wpdb->prefix . "auto_updates"; $toemail = get_option('admin_email'); // Update configs if( !cau_check_if_exists( 'plugins' ) ) $wpdb->insert( $table_name, array( 'name' => 'plugins', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'themes' ) ) $wpdb->insert( $table_name, array( 'name' => 'themes', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'minor' ) ) $wpdb->insert( $table_name, array( 'name' => 'minor', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'major' ) ) $wpdb->insert( $table_name, array( 'name' => 'major', 'onoroff' => '' ) ); // Email configs if( !cau_check_if_exists( 'email' ) ) $wpdb->insert( $table_name, array( 'name' => 'email', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'send' ) ) $wpdb->insert( $table_name, array( 'name' => 'send', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'sendupdate' ) ) $wpdb->insert( $table_name, array( 'name' => 'sendupdate', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'sendoutdated' ) ) $wpdb->insert( $table_name, array( 'name' => 'sendoutdated', 'onoroff' => '' ) ); // Advanced if( !cau_check_if_exists( 'notUpdateList' ) ) $wpdb->insert( $table_name, array( 'name' => 'notUpdateList', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'translations' ) ) $wpdb->insert( $table_name, array( 'name' => 'translations', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'wpemails' ) ) $wpdb->insert( $table_name, array( 'name' => 'wpemails', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'notUpdateListTh' ) ) $wpdb->insert( $table_name, array( 'name' => 'notUpdateListTh', 'onoroff' => '' ) ); // Stuff if( !cau_check_if_exists( 'html_or_text' ) ) $wpdb->insert( $table_name, array( 'name' => 'html_or_text', 'onoroff' => 'html' ) ); if( !cau_check_if_exists( 'dbupdateemails' ) ) $wpdb->insert( $table_name, array( 'name' => 'dbupdateemails', 'onoroff' => '' ) ); // Advanced if( !cau_check_if_exists( 'allow_administrator' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_administrator', 'onoroff' => 'on' ) ); if( !cau_check_if_exists( 'allow_editor' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_editor', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'allow_author' ) ) $wpdb->insert( $table_name, array( 'name' => 'allow_author', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'ignore_seo' ) ) $wpdb->insert( $table_name, array( 'name' => 'ignore_seo', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'ignore_cron' ) ) $wpdb->insert( $table_name, array( 'name' => 'ignore_cron', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'advanced_info_emails' ) ) $wpdb->insert( $table_name, array( 'name' => 'advanced_info_emails', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'update_delay' ) ) $wpdb->insert( $table_name, array( 'name' => 'update_delay', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'update_delay_days' ) ) $wpdb->insert( $table_name, array( 'name' => 'update_delay_days', 'onoroff' => '' ) ); if( !cau_check_if_exists( 'plugin_links_emails' ) ) $wpdb->insert( $table_name, array( 'name' => 'plugin_links_emails', 'onoroff' => '' ) ); } register_activation_hook( __FILE__, 'cau_install' ); // Clear everything on deactivation function cau_remove() { // Delete tables global $wpdb; $autoupdates = $wpdb->prefix."auto_updates"; $updateLog = $wpdb->prefix."update_log"; $wpdb->query( "DROP TABLE IF EXISTS $autoupdates" ); $wpdb->query( "DROP TABLE IF EXISTS $updateLog" ); // Clear schedules wp_clear_scheduled_hook( 'cau_set_schedule_mail' ); wp_clear_scheduled_hook( 'cau_custom_hooks_plugins' ); wp_clear_scheduled_hook( 'cau_custom_hooks_themes' ); wp_clear_scheduled_hook( 'cau_log_updater' ); // Restore WordPress 5.5 default update functionality add_filter( 'plugins_auto_update_enabled', '__return_true' ); add_filter( 'themes_auto_update_enabled', '__return_true' ); add_filter( 'auto_plugin_update_send_email', '__return_true' ); add_filter( 'auto_theme_update_send_email', '__return_true' ); } register_deactivation_hook( __FILE__, 'cau_remove' ); // Update function cau_update_db_check() { $cau_db_version = cau_db_version(); if ( get_site_option( 'cau_db_version' ) != $cau_db_version ) { cau_database_creation(); // In 3.7.2 we've added $wpdb->get_charset_collate if( get_site_option( 'cau_db_version' ) < '3.7.2' ) { global $wpdb; $autoupdates = $wpdb->prefix."auto_updates"; $updateLog = $wpdb->prefix."update_log"; $db_charset = constant( 'DB_CHARSET' ); $wpdb->query( "ALTER TABLE $autoupdates CONVERT TO CHARACTER SET $db_charset" ); $wpdb->query( "ALTER TABLE $updateLog CONVERT TO CHARACTER SET $db_charset" ); } update_option( "cau_db_version", $cau_db_version ); } } add_action( 'upgrader_process_complete', 'cau_update_db_check' ); // Manual update function cau_manual_update() { cau_update_db_check(); } // Load custom functions require_once( plugin_dir_path( __FILE__ ) . 'cau_functions.php' ); // Add plugin to menu function register_cau_menu_page() { if( cau_allowed_user_rights() ) add_submenu_page( cau_menloc() , __( 'Auto Updater', 'companion-auto-update' ), __( 'Auto Updater', 'companion-auto-update' ), 'manage_options', 'cau-settings', 'cau_frontend' ); } add_action( 'admin_menu', 'register_cau_menu_page' ); // Settings page function cau_frontend() { echo "

".__( 'Companion Auto Update', 'companion-auto-update' )."


"; // Make sure the correct timezone is used date_default_timezone_set( cau_get_proper_timezone() ); // Allow only access to these pages $allowedPages = array( 'dashboard' => __( 'Dashboard' ), 'pluginlist' => __( 'Update filter', 'companion-auto-update' ), 'log' => __( 'Update log', 'companion-auto-update' ), 'status' => __( 'Status', 'companion-auto-update' ), ); // Show subtabs echo ""; // Show page content if( !isset( $_GET['tab'] ) ) { $requestedPage = 'dashboard'; echo ""; // Set active tab class } else { $requestedPage = sanitize_key( $_GET['tab'] ); } if( array_key_exists( $requestedPage, $allowedPages ) ) { require_once( plugin_dir_path( __FILE__ ) . 'admin/'.$requestedPage.'.php' ); } else { wp_die( 'You\'re not allowed to view '.$requestedPage.'.' ); } echo '
'; } // Add a widget to the dashboard. function cau_add_widget() { if ( cau_allowed_user_rights() ) wp_add_dashboard_widget( 'cau-update-log', __('Update log', 'companion-auto-update'), 'cau_widget' ); } add_action( 'wp_dashboard_setup', 'cau_add_widget' ); // Widget content function cau_widget() { echo ''; echo '

'.__('Below are the last 7 updates ran on this site. Includes plugins and themes, both automatically updated and manually updated.', 'companion-auto-update').'

'; cau_fetch_log( '7' ); echo '

'.__( 'View full changelog', 'companion-auto-update' ).' | '.__( 'Settings' ).'

'; } // Load admin styles function load_cau_global_styles( $hook ) { wp_enqueue_style( 'cau_admin_styles', plugins_url( 'backend/style.css' , __FILE__ ) ); // Plugin scripts wp_enqueue_style( 'cau_warning_styles', plugins_url( 'backend/warningbar.css' , __FILE__ ) ); // Check for issues } add_action( 'admin_enqueue_scripts', 'load_cau_global_styles', 99 ); // Load admin styles function load_cau_page_styles( $hook ) { // Only load on plugins' pages if( $hook != 'tools_page_cau-settings' && $hook != 'index_page_cau-settings' ) return; // WordPress scripts we need wp_enqueue_style( 'thickbox' ); wp_enqueue_script( 'thickbox' ); wp_enqueue_script( 'plugin-install' ); } add_action( 'admin_enqueue_scripts', 'load_cau_page_styles', 100 ); // Send e-mails require_once( plugin_dir_path( __FILE__ ) . 'cau_emails.php' ); // Add settings link on plugin page function cau_settings_link( $links ) { $settings_link = ''.__( 'Settings' ).''; $settings_link2 = ''.__( 'Help us translate', 'companion-auto-update' ).''; $settings_link3 = ''.__( 'Donate to help development', 'companion-auto-update' ).''; array_unshift( $links, $settings_link2 ); array_unshift( $links, $settings_link3 ); if( cau_allowed_user_rights() ) array_unshift( $links, $settings_link ); return $links; } $plugin = plugin_basename(__FILE__); add_filter( "plugin_action_links_$plugin", "cau_settings_link" ); // Auto Update Class class CAU_auto_update { // Enable Update filters public function __construct() { add_action( 'plugins_loaded', array( &$this, 'CAU_auto_update_filters' ), 1 ); } public function CAU_auto_update_filters() { global $wpdb; $table_name = $wpdb->prefix . "auto_updates"; // Disable WP emails add_filter( 'auto_plugin_update_send_email', '__return_false' ); // Plugin updates add_filter( 'auto_theme_update_send_email', '__return_false' ); // Theme updates // Enable for major updates $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'major'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'allow_major_auto_core_updates', '__return_true', 1 ); // Turn on else add_filter( 'allow_major_auto_core_updates', '__return_false', 1 ); // Turn off } // Enable for minor updates $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'minor'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'allow_minor_auto_core_updates', '__return_true', 1 ); // Turn on else add_filter( 'allow_minor_auto_core_updates', '__return_false', 1 ); // Turn off } // Enable for plugins $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'plugins'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'auto_update_plugin', 'cau_dontUpdatePlugins', 10, 2 ); // Turn on else add_filter( 'auto_update_plugin', '__return_false', 1 ); // Turn off } // Enable for themes $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'themes'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'auto_update_theme', '__return_true' ); // Turn on else add_filter( 'auto_update_theme', '__return_false', 1 ); // Turn off } // Enable for translation files $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'translations'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'auto_update_translation', '__return_true', 1 ); // Turn on else add_filter( 'auto_update_translation', '__return_false', 1 ); // Turn off } // WP Email Config $configs = $wpdb->get_results( "SELECT * FROM {$table_name} WHERE name = 'wpemails'"); foreach ( $configs as $config ) { if( $config->onoroff == 'on' ) add_filter( 'auto_core_update_send_email', '__return_true', 1 ); // Turn on else add_filter( 'auto_core_update_send_email', '__return_false', 1 ); // Turn off } } } new CAU_auto_update(); // Check for issues function cau_checkForIssues( $admin_bar ) { if( cau_pluginHasIssues() && is_admin() && cau_pluginIssueLevels() == 'high' ) { $admin_bar->add_menu( array( 'id' => 'cau-has-issues', 'title' => ''.cau_pluginIssueCount().'', 'href' => cau_url( 'status' ), 'meta' => array( 'target' => '_self', 'title' => __( 'Companion Auto Update ran into a critical error. View the status log for more info.', 'companion-auto-update' ), ), )); } } add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 );