$version ) { if( $version == '' ) $version = __( "Unknown", "companion-auto-update" ); $text .= "- ".sprintf( esc_html__( "%s tested up to: %s", "companion-auto-update" ), $plugin, $version )."\n"; } } return $text; } // Set the content for the emails about pending updates function cau_pending_message( $single, $plural, $list ) { // What markup to use if( cau_is_html() ) $break = '
'; else $break = "\n"; // Base text $text = sprintf( esc_html__( 'You have pending %1$s updates on your WordPress site at %2$s.', 'companion-auto-update' ), $single, get_site_url() ); $text .= $break; if( !empty( $list ) ) { $text .= $break; $text .= sprintf( esc_html__( 'The following %1$s have new versions available.', 'companion-auto-update' ), $plural ); $text .= $break; if( cau_is_html() ) $text .= "
    "; foreach ( $list as $key => $value ) { if( cau_is_html() ) { $text .= "
  1. $value
  2. "; } else { $text .= "-$value\n"; } } if( cau_is_html() ) $text .= "
"; $text .= $break; } $text .= __( 'Leaving your site outdated is a security risk so please consider manually updating them.', 'companion-auto-update' ); $text .= $break; // End $text .= sprintf( esc_html__( 'Head over to %1$s and check the ones you want to update.', 'companion-auto-update' ), get_admin_url().'update-core.php' ); return $text; } // Set the content for the emails about recent updates function cau_updated_message( $type, $updatedList ) { // What markup to use if( cau_is_html() ) $break = '
'; else $break = "\n"; // The message $text = sprintf( esc_html__( 'One or more %1$s on your WordPress site at %2$s have been updated by Companion Auto Update. No further action is needed on your part. For more info on what is new visit your dashboard and check the changelog.', 'companion-auto-update' ), $type, get_site_url() ); $text .= $break; $text .= $break; $text .= sprintf( esc_html__( 'The following %1$s have been updated:', 'companion-auto-update' ), $type ); $text .= $break; $text .= $updatedList; $text .= $break; $text .= __( "(You'll also receive this email if you manually updated a plugin or theme)", "companion-auto-update" ); return $text; } // Checks if plugins are out of date function cau_list_outdated_software() { // Check if cau_get_db_value() function exists. if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' ); // Set up mail $subject = '['.get_bloginfo( 'name' ).'] ' . __( 'You have outdated plugins on your site.', 'companion-auto-update' ); $type = __( 'plugin', 'companion-auto-update' ); $type_plural = __( 'plugins', 'companion-auto-update' ); $message = cau_outdated_message( $type, $type_plural, cau_list_outdated() ); // Send to all addresses foreach ( cau_set_email() as $key => $value ) { foreach ( $value as $k => $v ) { wp_mail( $v, $subject, $message ); } break; } } // Checks if theme updates are available function cau_list_theme_updates() { global $wpdb; $table_name = $wpdb->prefix . "auto_updates"; $configs = $wpdb->get_results( "SELECT * FROM $table_name WHERE name = 'themes'"); foreach ( $configs as $config ) { if( $config->onoroff != 'on' ) { // Check for required files if ( !function_exists( 'get_theme_updates' ) ) { require_once ABSPATH . 'wp-admin/includes/update.php'; } // Begin $themes = get_theme_updates(); $list = array(); if ( !empty( $themes ) ) { foreach ( $themes as $stylesheet => $theme ) { array_push( $list, $theme->get( 'Name' ) ); } $subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'Theme update available.', 'companion-auto-update' ); $type = __('theme', 'companion-auto-update'); $type_plural = __('themes', 'companion-auto-update'); $message = cau_pending_message( $type, $type_plural, $list ); foreach ( cau_set_email() as $key => $value) { foreach ($value as $k => $v) { wp_mail( $v, $subject, $message ); } break; } } } } } // Checks if plugin updates are available function cau_list_plugin_updates() { global $wpdb; $table_name = $wpdb->prefix . "auto_updates"; $configs = $wpdb->get_results( "SELECT * FROM $table_name WHERE name = 'plugins'"); foreach ( $configs as $config ) { if( $config->onoroff != 'on' ) { require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; // Make sure get_plugin_updates() and get_plugins() are defined if ( !function_exists( 'get_plugin_updates' ) OR !function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; require_once ABSPATH . 'wp-admin/includes/update.php'; } // Begin $plugins = get_plugin_updates(); if ( !empty( $plugins ) ) { $list = array(); foreach ( (array) $plugins as $plugin_file => $plugin_data ) { $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true ); $name = $plugin_data->Name; array_push( $list, $name ); } $subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'Plugin update available.', 'companion-auto-update' ); $type = __( 'plugin', 'companion-auto-update' ); $type_plural = __( 'plugins', 'companion-auto-update' ); $message = cau_pending_message( $type, $type_plural, $list ); foreach ( cau_set_email() as $key => $value) { foreach ($value as $k => $v) { wp_mail( $v, $subject, $message ); } break; } } } } } // Alerts when plugin has been updated function cau_plugin_updated() { // Check if cau_get_db_value() function exists. if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' ); // Set the correct timezone for emails date_default_timezone_set( cau_get_proper_timezone() ); // Create arrays $pluginNames = array(); $pluginDates = array(); $pluginVersion = array(); $pluginSlug = array(); $pluginTimes = array(); $themeNames = array(); $themeDates = array(); $themeTimes = array(); // Where to look for plugins $plugdir = plugin_dir_path( __DIR__ ); if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); // Check if get_plugins() function exists. $allPlugins = get_plugins(); // Where to look for themes $themedir = get_theme_root(); $allThemes = wp_get_themes(); // Mail schedule $schedule_mail = wp_get_schedule( 'cau_set_schedule_mail' ); // Loop trough all plugins foreach ( $allPlugins as $key => $value ) { // Get plugin data $fullPath = $plugdir.'/'.$key; $getFile = $path_parts = pathinfo( $fullPath ); $pluginData = get_plugin_data( $fullPath ); // Get the slug $explosion = explode( '/', $key ); $actualSlug = array_shift( $explosion ); // Get last update date $fileDate = date ( 'YmdHi', filemtime( $fullPath ) ); switch ( $schedule_mail ) { case 'hourly': $lastday = date( 'YmdHi', strtotime( '-1 hour', time() ) ); break; case 'twicedaily': $lastday = date( 'YmdHi', strtotime( '-12 hours', time() ) ); break; default: $lastday = date( 'YmdHi', strtotime( '-1 day', time() ) ); break; } $dateFormat = get_option( 'date_format' ); $timestamp = date_i18n( $dateFormat, filemtime( $fullPath ) ); $timestamp .= ' - '.date( 'H:i', filemtime( $fullPath ) ); if( $fileDate >= $lastday ) { // Get plugin name foreach ( $pluginData as $dataKey => $dataValue ) { if( $dataKey == 'Name') { array_push( $pluginNames , $dataValue ); } if( $dataKey == 'Version') { array_push( $pluginVersion , $dataValue ); } } array_push( $pluginDates, $fileDate ); array_push( $pluginSlug, $actualSlug ); array_push( $pluginTimes, $timestamp ); } } // Loop trough all themes foreach ( $allThemes as $key => $value ) { // Get theme data $fullPath = $themedir.'/'.$key; $getFile = $path_parts = pathinfo( $fullPath ); // Get last update date $dateFormat = get_option( 'date_format' ); $fileDate = date ( 'YmdHi', filemtime( $fullPath ) ); if( $schedule_mail == 'hourly' ) { $lastday = date( 'YmdHi', strtotime( '-1 hour', time() ) ); } elseif( $schedule_mail == 'twicedaily' ) { $lastday = date( 'YmdHi', strtotime( '-12 hours', time() ) ); } elseif( $schedule_mail == 'daily' ) { $lastday = date( 'YmdHi', strtotime( '-1 day', time() ) ); } $dateFormat = get_option( 'date_format' ); $timestamp = date_i18n( $dateFormat, filemtime( $fullPath ) ); $timestamp .= ' - '.date( 'H:i', filemtime( $fullPath ) ); if( $fileDate >= $lastday ) { array_push( $themeNames, $path_parts['filename'] ); array_push( $themeDates, $fileDate ); array_push( $themeTimes, $timestamp ); } } $totalNumP = 0; $totalNumT = 0; $updatedListP = ''; $updatedListT = ''; if( cau_get_db_value( 'html_or_text' ) == 'html' ) { $updatedListP .= '
    '; $updatedListT .= '
      '; } foreach ( $pluginDates as $key => $value ) { // Set up some var $plugin_name = $pluginNames[$key]; $plugin_slug = $pluginSlug[$key]; $to_version = __( "to version", "companion-auto-update" ).' '.$pluginVersion[$key]; $more_info_arr = array( __( "Time of update", "companion-auto-update" ) => $pluginTimes[$key] ); // Plugin links if( cau_get_db_value( 'plugin_links_emails' ) == 'on' ) { $more_info_arr[__( "Plugin details", "companion-auto-update" )] = "".__( "Visit", "companion-auto-update" ).""; $more_info_arr[__( "Release notes", "companion-auto-update" )] = "".__( "Visit", "companion-auto-update" ).""; $more_info_arr[__( "Support", "companion-auto-update" )] = "".__( "Visit", "companion-auto-update" ).""; } // Email format $use_html = ( cau_get_db_value( 'html_or_text' ) == 'html' ) ? true : false; // Email content $updatedListP .= $use_html ? "
    1. " : "-"; // Start row $updatedListP .= $use_html ? "{$plugin_name} " : "{$plugin_name} "; // Show plugin name $updatedListP .= $to_version; // To version // Get advanced info if( cau_get_db_value( 'advanced_info_emails' ) == 'on' ) { foreach( $more_info_arr as $label => $value ) { $updatedListP .= $use_html ? "
      {$label}: {$value}" : "\n{$label}: {$value}"; } } $updatedListP .= $use_html ? "
    2. " : "\n"; // End row $totalNumP++; } foreach ( $themeNames as $key => $value ) { if( cau_get_db_value( 'html_or_text' ) == 'html' ) { $more_info = ''; if( cau_get_db_value( 'advanced_info_emails' ) == 'on' ) $more_info = "
      ".__( "Time of update", "companion-auto-update" ).": ".$themeTimes[$key].""; $updatedListT .= "
    3. ".$themeNames[$key]."".$more_info."
    4. "; } else { $updatedListT .= "- ".$themeNames[$key]."\n"; } $totalNumT++; } if( cau_get_db_value( 'html_or_text' ) == 'html' ) { $updatedListP .= '
    '; $updatedListT .= '
'; } // Set the email content type if( cau_get_db_value( 'html_or_text' ) == 'html' ) { function cau_mail_content_type() { return 'text/html'; } add_filter( 'wp_mail_content_type', 'cau_mail_content_type' ); } // If plugins have been updated, send email if( $totalNumP > 0 ) { // E-mail content $subject = '[' . get_bloginfo( 'name' ) . '] ' . __('One or more plugins have been updated.', 'companion-auto-update'); $type = __('plugins', 'companion-auto-update'); $message = cau_updated_message( $type, $updatedListP ); // Send to all addresses foreach ( cau_set_email() as $key => $value) { foreach ($value as $k => $v) { wp_mail( $v, $subject, $message ); } break; } } // If themes have been updated, send email if( $totalNumT > 0 ) { // E-mail content $subject = '[' . get_bloginfo( 'name' ) . '] ' . __('One or more themes have been updated.', 'companion-auto-update'); $type = __('themes', 'companion-auto-update'); $message = cau_updated_message( $type, $updatedListT ); // Send to all addresses foreach ( cau_set_email() as $key => $value) { foreach ($value as $k => $v) { wp_mail( $v, $subject, $message ); } break; } } if( cau_get_db_value( 'html_or_text' ) == 'html' ) remove_filter( 'wp_mail_content_type', 'cau_mail_content_type' ); // Prevent duplicate emails by setting the event again if( $totalNumT > 0 OR $totalNumP > 0 ) { if( $schedule_mail == 'hourly' ) { wp_clear_scheduled_hook('cau_set_schedule_mail'); wp_schedule_event( strtotime( '+1 hour', time() ) , 'hourly', 'cau_set_schedule_mail' ); } } } function cau_notify_outofdate_db() { // Check if cau_get_db_value() function exists. if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' ); // Database requires an update if ( cau_incorrectDatabaseVersion() ) { // Set up mail $subject = '[' . get_bloginfo( 'name' ) . '] ' . __( 'We need your help with something', 'companion-auto-update' ); $message = __( 'Hi there! We need your help updating the database of Companion Auto Update to the latest version. No rush, old features will continue to work but some new features might not work until you update the database.', 'companion-auto-update' ); // Send to all addresses foreach ( cau_set_email() as $key => $value ) { foreach ( $value as $k => $v ) { wp_mail( $v, $subject, $message ); } break; } } }