updated plugin Companion Auto Update
version 3.8.2
This commit is contained in:
parent
e80e4be44b
commit
d7964b08bd
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,480 +1,512 @@
|
||||
<?php
|
||||
|
||||
// Check if emails should be send or not
|
||||
function cau_check_updates_mail() {
|
||||
|
||||
// Notify of pending updates
|
||||
if( cau_get_db_value( 'send' ) == 'on' ) {
|
||||
cau_list_theme_updates(); // Check for theme updates
|
||||
cau_list_plugin_updates(); // Check for plugin updates
|
||||
}
|
||||
|
||||
// Notify of completed updates
|
||||
if( cau_get_db_value( 'sendupdate' ) == 'on' && cau_get_db_value( 'plugins' ) == 'on' ) {
|
||||
cau_plugin_updated(); // Check for updated plugins
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Notify of out of date software
|
||||
function cau_outdated_notifier_mail() {
|
||||
if( cau_get_db_value( 'sendoutdated' ) == 'on' ) {
|
||||
cau_list_outdated_software(); // Check for oudated plugins
|
||||
}
|
||||
}
|
||||
|
||||
// Ge the emailadresses it should be send to
|
||||
function cau_set_email() {
|
||||
|
||||
$emailArray = array();
|
||||
|
||||
if( cau_get_db_value( 'email' ) == '' ) {
|
||||
array_push( $emailArray, get_option('admin_email') );
|
||||
} else {
|
||||
$emailAdresses = cau_get_db_value( 'email' );
|
||||
$list = explode( ", ", $emailAdresses );
|
||||
foreach ( $list as $key ) {
|
||||
array_push( $emailArray, $list );
|
||||
}
|
||||
}
|
||||
|
||||
return $emailArray;
|
||||
|
||||
}
|
||||
|
||||
// Mail format
|
||||
function cau_is_html() {
|
||||
|
||||
// Check if cau_get_db_value() function exists.
|
||||
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
|
||||
|
||||
// Check if html
|
||||
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
|
||||
$html = true;
|
||||
} else {
|
||||
$html = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Set the content for the emails about pending updates
|
||||
function cau_outdated_message( $single, $plural, $list ) {
|
||||
|
||||
// WP version
|
||||
$wpversion = get_bloginfo( 'version' );
|
||||
|
||||
// Base text
|
||||
$text = sprintf( esc_html__( "You have %s on your WordPress site at %s that have not been tested with the latest 3 major releases of WordPress.", "companion-auto-update" ), $plural, get_site_url() );
|
||||
$text .= "\n";
|
||||
$text .= "\n";
|
||||
|
||||
// The list
|
||||
if( !empty( $list ) ) {
|
||||
|
||||
$text .= sprintf( esc_html__( "The following %s have not been tested with WordPress %s:", "companion-auto-update" ), $plural, $wpversion );
|
||||
$text .= "\n";
|
||||
$text .= "\n";
|
||||
|
||||
foreach ( $list as $plugin => $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 = '<br />';
|
||||
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 .= "<ol>";
|
||||
foreach ( $list as $key => $value ) {
|
||||
if( cau_is_html() ) {
|
||||
$text .= "<li>$value</li>";
|
||||
} else {
|
||||
$text .= "-$value\n";
|
||||
}
|
||||
}
|
||||
if( cau_is_html() ) $text .= "</ol>";
|
||||
|
||||
$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 = '<br />';
|
||||
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' ) {
|
||||
|
||||
require_once ABSPATH . '/wp-admin/includes/update.php';
|
||||
$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');
|
||||
$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 .= '<ol>';
|
||||
$updatedListT .= '<ol>';
|
||||
}
|
||||
|
||||
foreach ( $pluginDates 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 = "<br /><span style='opacity: 0.5;'>".__( "Time of update", "companion-auto-update" ).": ".$pluginTimes[$key]."</span>";
|
||||
|
||||
$updatedListP .= "<li>
|
||||
<strong>".$pluginNames[$key]." </strong><br />
|
||||
".__( "to version", "companion-auto-update" )." ".$pluginVersion[$key]." <a href='https://wordpress.org/plugins/".$pluginSlug[$key]."/#developers'>".__( "Release notes", "companion-auto-update" )."</a>
|
||||
".$more_info."
|
||||
</li>";
|
||||
|
||||
} else {
|
||||
|
||||
$updatedListP .= "- ".$pluginNames[$key]." ".__( "to version", "companion-auto-update" )." ".$pluginVersion[$key]."\n";
|
||||
$updatedListP .= " ".__( "Release notes", "companion-auto-update" ).": https://wordpress.org/plugins/".$pluginSlug[$key]."/#developers\n";
|
||||
|
||||
}
|
||||
|
||||
$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 = "<br /><span style='opacity: 0.5;'>".__( "Time of update", "companion-auto-update" ).": ".$themeTimes[$key]."</span>";
|
||||
$updatedListT .= "<li><strong>".$themeNames[$key]."</strong>".$more_info."</li>";
|
||||
|
||||
} else {
|
||||
$updatedListT .= "- ".$themeNames[$key]."\n";
|
||||
}
|
||||
|
||||
$totalNumT++;
|
||||
}
|
||||
|
||||
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
|
||||
$updatedListP .= '</ol>';
|
||||
$updatedListT .= '</ol>';
|
||||
}
|
||||
|
||||
// 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' );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
// Check if emails should be send or not
|
||||
function cau_check_updates_mail() {
|
||||
|
||||
// Notify of pending updates
|
||||
if( cau_get_db_value( 'send' ) == 'on' ) {
|
||||
cau_list_theme_updates(); // Check for theme updates
|
||||
cau_list_plugin_updates(); // Check for plugin updates
|
||||
}
|
||||
|
||||
// Notify of completed updates
|
||||
if( cau_get_db_value( 'sendupdate' ) == 'on' && cau_get_db_value( 'plugins' ) == 'on' ) {
|
||||
cau_plugin_updated(); // Check for updated plugins
|
||||
}
|
||||
|
||||
// Notify of required db update
|
||||
if( cau_get_db_value( 'dbupdateemails' ) == 'on' ) {
|
||||
cau_notify_outofdate_db();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Notify of out of date software
|
||||
function cau_outdated_notifier_mail() {
|
||||
if( cau_get_db_value( 'sendoutdated' ) == 'on' ) {
|
||||
cau_list_outdated_software(); // Check for oudated plugins
|
||||
}
|
||||
}
|
||||
|
||||
// Ge the emailadresses it should be send to
|
||||
function cau_set_email() {
|
||||
|
||||
$emailArray = array();
|
||||
|
||||
if( cau_get_db_value( 'email' ) == '' ) {
|
||||
array_push( $emailArray, get_option('admin_email') );
|
||||
} else {
|
||||
$emailAdresses = cau_get_db_value( 'email' );
|
||||
$list = explode( ", ", $emailAdresses );
|
||||
foreach ( $list as $key ) {
|
||||
array_push( $emailArray, $list );
|
||||
}
|
||||
}
|
||||
|
||||
return $emailArray;
|
||||
|
||||
}
|
||||
|
||||
// Mail format
|
||||
function cau_is_html() {
|
||||
|
||||
// Check if cau_get_db_value() function exists.
|
||||
if ( !function_exists( 'cau_get_db_value' ) ) require_once( plugin_dir_path( __FILE__ ) . 'cau_function.php' );
|
||||
|
||||
// Check if html
|
||||
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
|
||||
$html = true;
|
||||
} else {
|
||||
$html = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Set the content for the emails about pending updates
|
||||
function cau_outdated_message( $single, $plural, $list ) {
|
||||
|
||||
// WP version
|
||||
$wpversion = get_bloginfo( 'version' );
|
||||
|
||||
// Base text
|
||||
$text = sprintf( esc_html__( "You have %s on your WordPress site at %s that have not been tested with the latest 3 major releases of WordPress.", "companion-auto-update" ), $plural, get_site_url() );
|
||||
$text .= "\n";
|
||||
$text .= "\n";
|
||||
|
||||
// The list
|
||||
if( !empty( $list ) ) {
|
||||
|
||||
$text .= sprintf( esc_html__( "The following %s have not been tested with WordPress %s:", "companion-auto-update" ), $plural, $wpversion );
|
||||
$text .= "\n";
|
||||
$text .= "\n";
|
||||
|
||||
foreach ( $list as $plugin => $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 = '<br />';
|
||||
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 .= "<ol>";
|
||||
foreach ( $list as $key => $value ) {
|
||||
if( cau_is_html() ) {
|
||||
$text .= "<li>$value</li>";
|
||||
} else {
|
||||
$text .= "-$value\n";
|
||||
}
|
||||
}
|
||||
if( cau_is_html() ) $text .= "</ol>";
|
||||
|
||||
$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 = '<br />';
|
||||
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' ) {
|
||||
|
||||
require_once ABSPATH . '/wp-admin/includes/update.php';
|
||||
$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');
|
||||
|
||||
if ( !function_exists( 'get_plugin_updates' ) ) require_once ABSPATH . 'wp-admin/includes/update.php';
|
||||
$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 .= '<ol>';
|
||||
$updatedListT .= '<ol>';
|
||||
}
|
||||
|
||||
foreach ( $pluginDates 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 = "<br /><span style='opacity: 0.5;'>".__( "Time of update", "companion-auto-update" ).": ".$pluginTimes[$key]."</span>";
|
||||
|
||||
$updatedListP .= "<li>
|
||||
<strong>".$pluginNames[$key]." </strong><br />
|
||||
".__( "to version", "companion-auto-update" )." ".$pluginVersion[$key]." <a href='https://wordpress.org/plugins/".$pluginSlug[$key]."/#developers'>".__( "Release notes", "companion-auto-update" )."</a>
|
||||
".$more_info."
|
||||
</li>";
|
||||
|
||||
} else {
|
||||
|
||||
$updatedListP .= "- ".$pluginNames[$key]." ".__( "to version", "companion-auto-update" )." ".$pluginVersion[$key]."\n";
|
||||
$updatedListP .= " ".__( "Release notes", "companion-auto-update" ).": https://wordpress.org/plugins/".$pluginSlug[$key]."/#developers\n";
|
||||
|
||||
}
|
||||
|
||||
$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 = "<br /><span style='opacity: 0.5;'>".__( "Time of update", "companion-auto-update" ).": ".$themeTimes[$key]."</span>";
|
||||
$updatedListT .= "<li><strong>".$themeNames[$key]."</strong>".$more_info."</li>";
|
||||
|
||||
} else {
|
||||
$updatedListT .= "- ".$themeNames[$key]."\n";
|
||||
}
|
||||
|
||||
$totalNumT++;
|
||||
}
|
||||
|
||||
if( cau_get_db_value( 'html_or_text' ) == 'html' ) {
|
||||
$updatedListP .= '</ol>';
|
||||
$updatedListT .= '</ol>';
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,465 +1,466 @@
|
||||
<?php
|
||||
/*
|
||||
* Plugin Name: Companion Auto Update
|
||||
* Plugin URI: http://codeermeneer.nl/portfolio/companion-auto-update/
|
||||
* Description: This plugin auto updates all plugins, all themes and the wordpress core.
|
||||
* Version: 3.8.0
|
||||
* Author: Papin Schipper
|
||||
* Author URI: http://codeermeneer.nl/
|
||||
* Contributors: papin
|
||||
* License: GPLv2 or later
|
||||
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||
* Text Domain: companion-auto-update
|
||||
* Domain Path: /languages/
|
||||
*/
|
||||
|
||||
// Disable direct access
|
||||
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
|
||||
|
||||
// Load translations
|
||||
function cau_init() {
|
||||
load_plugin_textdomain( 'companion-auto-update', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); // Load language files (for backwards compat mostly)
|
||||
add_filter( 'plugins_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 plugin update features to avoid confusion
|
||||
add_filter( 'themes_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 theme update features to avoid confusion
|
||||
}
|
||||
add_action( 'init', 'cau_init' );
|
||||
|
||||
// Set up the database and required schedules
|
||||
function cau_install( $network_wide ) {
|
||||
if ( is_multisite() && $network_wide ) {
|
||||
global $wpdb;
|
||||
$blog_ids = $wpdb->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');
|
||||
|
||||
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.7.2';
|
||||
}
|
||||
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];
|
||||
|
||||
if( $check > 0 ) {
|
||||
return true;
|
||||
} else {
|
||||
return 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' ) );
|
||||
|
||||
// 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' => '' ) );
|
||||
|
||||
}
|
||||
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 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() { ?>
|
||||
|
||||
<div class='wrap cau_content_wrap cau_content'>
|
||||
|
||||
<h1 class="wp-heading-inline"><?php _e( 'Companion Auto Update', 'companion-auto-update' ); ?></h1>
|
||||
|
||||
<hr class="wp-header-end">
|
||||
|
||||
<?php
|
||||
|
||||
// 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 "<h2 class='nav-tab-wrapper wp-clearfix'>";
|
||||
foreach ( $allowedPages as $page => $title ) {
|
||||
echo "<a href='".cau_url( $page )."' id='tab-".$page."' class='nav-tab "._active_tab( $page )."'>".$title;
|
||||
if( $page == 'status' ) {
|
||||
if( cau_pluginHasIssues() ) {
|
||||
echo "<span class='cau_melding level-".cau_pluginIssueLevels()."'></span>";
|
||||
} else {
|
||||
echo "<span class='cau_melding level-okay'></span>";
|
||||
}
|
||||
}
|
||||
echo "</a>";
|
||||
}
|
||||
echo "</h2>";
|
||||
|
||||
// Show page content
|
||||
if( !isset( $_GET['tab'] ) ) {
|
||||
$requestedPage = 'dashboard';
|
||||
echo "<script>jQuery('#tab-dashboard').addClass('nav-tab-active');</script>"; // 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 <strong>'.$requestedPage.'</strong>.' );
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php }
|
||||
|
||||
// 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' );
|
||||
|
||||
function cau_widget() {
|
||||
|
||||
echo '<style>table.autoupdatewidget { border: 0px solid transparent; border-bottom: 1px solid #EEEEEE; margin: 0 -12px; width: calc(100% + 24px); } table.autoupdatewidget tr td { border-top: 1px solid #EEEEEE; padding: 9px 12px 5px 12px; background: #FAFAFA; } .cau_divide { display: inline-block; color: #E7E0DF; padding: 0 2px; } </style>';
|
||||
echo '<p>'.__('Below are the last 7 updates ran on this site. Includes plugins and themes, both automatically updated and manually updated.', 'companion-auto-update').'</p>';
|
||||
cau_fetch_log( '7' );
|
||||
echo '<p>
|
||||
<a href="'.cau_url( 'log' ).'">'.__('View full changelog', 'companion-auto-update').'</a>
|
||||
<span class="cau_divide">|</span>
|
||||
<a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a>
|
||||
</p>';
|
||||
|
||||
}
|
||||
|
||||
// Load admin styles
|
||||
function load_cau_global_styles( $hook ) {
|
||||
|
||||
// Plugin scripts
|
||||
wp_enqueue_style( 'cau_admin_styles', plugins_url( 'backend/style.css' , __FILE__ ) );
|
||||
|
||||
// Check for issues
|
||||
wp_enqueue_style( 'cau_warning_styles', plugins_url( 'backend/warningbar.css' , __FILE__ ) );
|
||||
|
||||
}
|
||||
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 = '<a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a>';
|
||||
$settings_link2 = '<a href="https://translate.wordpress.org/projects/wp-plugins/companion-auto-update">'.__( 'Help us translate', 'companion-auto-update' ).'</a>';
|
||||
$settings_link3 = '<a href="'.cau_donateUrl().'">'.__( 'Donate to help development', 'companion-auto-update' ).'</a>';
|
||||
|
||||
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 {
|
||||
|
||||
public function __construct() {
|
||||
|
||||
// Enable Update filters
|
||||
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' ); // Core updates
|
||||
} else {
|
||||
add_filter( 'auto_core_update_send_email', '__return_false' ); // Core updates
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
new CAU_auto_update();
|
||||
|
||||
// Check for issues
|
||||
function cau_checkForIssues( $admin_bar ) {
|
||||
|
||||
if( cau_pluginHasIssues() && is_admin() ) {
|
||||
|
||||
if( cau_pluginIssueLevels() == 'high' ) {
|
||||
$cauWaningBarTitle = __( 'Companion Auto Update ran into a critical error. View the status log for more info.', 'companion-auto-update' );
|
||||
|
||||
$admin_bar->add_menu( array(
|
||||
'id' => 'cau-has-issues',
|
||||
'title' => '<span class="ab-icon"></span><span class="cau-level-'.cau_pluginIssueLevels().'">'.cau_pluginIssueCount().'</span>',
|
||||
'href' => cau_url( 'status' ),
|
||||
'meta' => array(
|
||||
'target' => '_self',
|
||||
'title' => $cauWaningBarTitle,
|
||||
),
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 );
|
||||
<?php
|
||||
/*
|
||||
* Plugin Name: Companion Auto Update
|
||||
* Plugin URI: http://codeermeneer.nl/portfolio/companion-auto-update/
|
||||
* Description: This plugin auto updates all plugins, all themes and the wordpress core.
|
||||
* Version: 3.8.2
|
||||
* Author: Papin Schipper
|
||||
* Author URI: http://codeermeneer.nl/
|
||||
* Contributors: papin
|
||||
* License: GPLv2 or later
|
||||
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||
* Text Domain: companion-auto-update
|
||||
* Domain Path: /languages/
|
||||
*/
|
||||
|
||||
// Disable direct access
|
||||
defined( 'ABSPATH' ) or die( 'No script kiddies please!' );
|
||||
|
||||
// Load translations
|
||||
function cau_init() {
|
||||
load_plugin_textdomain( 'companion-auto-update', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); // Load language files (for backwards compat mostly)
|
||||
add_filter( 'plugins_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 plugin update features to avoid confusion
|
||||
add_filter( 'themes_auto_update_enabled', '__return_false' ); // Turn off default WP5.5 theme update features to avoid confusion
|
||||
}
|
||||
add_action( 'init', 'cau_init' );
|
||||
|
||||
// Set up the database and required schedules
|
||||
function cau_install( $network_wide ) {
|
||||
if ( is_multisite() && $network_wide ) {
|
||||
global $wpdb;
|
||||
$blog_ids = $wpdb->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');
|
||||
|
||||
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.1';
|
||||
}
|
||||
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];
|
||||
|
||||
if( $check > 0 ) {
|
||||
return true;
|
||||
} else {
|
||||
return 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' => '' ) );
|
||||
|
||||
}
|
||||
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 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() { ?>
|
||||
|
||||
<div class='wrap cau_content_wrap cau_content'>
|
||||
|
||||
<h1 class="wp-heading-inline"><?php _e( 'Companion Auto Update', 'companion-auto-update' ); ?></h1>
|
||||
|
||||
<hr class="wp-header-end">
|
||||
|
||||
<?php
|
||||
|
||||
// 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 "<h2 class='nav-tab-wrapper wp-clearfix'>";
|
||||
foreach ( $allowedPages as $page => $title ) {
|
||||
echo "<a href='".cau_url( $page )."' id='tab-".$page."' class='nav-tab "._active_tab( $page )."'>".$title;
|
||||
if( $page == 'status' ) {
|
||||
if( cau_pluginHasIssues() ) {
|
||||
echo "<span class='cau_melding level-".cau_pluginIssueLevels()."'></span>";
|
||||
} else {
|
||||
echo "<span class='cau_melding level-okay'></span>";
|
||||
}
|
||||
}
|
||||
echo "</a>";
|
||||
}
|
||||
echo "</h2>";
|
||||
|
||||
// Show page content
|
||||
if( !isset( $_GET['tab'] ) ) {
|
||||
$requestedPage = 'dashboard';
|
||||
echo "<script>jQuery('#tab-dashboard').addClass('nav-tab-active');</script>"; // 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 <strong>'.$requestedPage.'</strong>.' );
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
<?php }
|
||||
|
||||
// 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' );
|
||||
|
||||
function cau_widget() {
|
||||
|
||||
echo '<style>table.autoupdatewidget { border: 0px solid transparent; border-bottom: 1px solid #EEEEEE; margin: 0 -12px; width: calc(100% + 24px); } table.autoupdatewidget tr td { border-top: 1px solid #EEEEEE; padding: 9px 12px 5px 12px; background: #FAFAFA; } .cau_divide { display: inline-block; color: #E7E0DF; padding: 0 2px; } </style>';
|
||||
echo '<p>'.__('Below are the last 7 updates ran on this site. Includes plugins and themes, both automatically updated and manually updated.', 'companion-auto-update').'</p>';
|
||||
cau_fetch_log( '7' );
|
||||
echo '<p>
|
||||
<a href="'.cau_url( 'log' ).'">'.__('View full changelog', 'companion-auto-update').'</a>
|
||||
<span class="cau_divide">|</span>
|
||||
<a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a>
|
||||
</p>';
|
||||
|
||||
}
|
||||
|
||||
// Load admin styles
|
||||
function load_cau_global_styles( $hook ) {
|
||||
|
||||
// Plugin scripts
|
||||
wp_enqueue_style( 'cau_admin_styles', plugins_url( 'backend/style.css' , __FILE__ ) );
|
||||
|
||||
// Check for issues
|
||||
wp_enqueue_style( 'cau_warning_styles', plugins_url( 'backend/warningbar.css' , __FILE__ ) );
|
||||
|
||||
}
|
||||
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 = '<a href="'.cau_url( 'dashboard' ).'">'.__( 'Settings' ).'</a>';
|
||||
$settings_link2 = '<a href="https://translate.wordpress.org/projects/wp-plugins/companion-auto-update">'.__( 'Help us translate', 'companion-auto-update' ).'</a>';
|
||||
$settings_link3 = '<a href="'.cau_donateUrl().'">'.__( 'Donate to help development', 'companion-auto-update' ).'</a>';
|
||||
|
||||
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 {
|
||||
|
||||
public function __construct() {
|
||||
|
||||
// Enable Update filters
|
||||
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' ); // Core updates
|
||||
} else {
|
||||
add_filter( 'auto_core_update_send_email', '__return_false' ); // Core updates
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
new CAU_auto_update();
|
||||
|
||||
// Check for issues
|
||||
function cau_checkForIssues( $admin_bar ) {
|
||||
|
||||
if( cau_pluginHasIssues() && is_admin() ) {
|
||||
|
||||
if( cau_pluginIssueLevels() == 'high' ) {
|
||||
$cauWaningBarTitle = __( 'Companion Auto Update ran into a critical error. View the status log for more info.', 'companion-auto-update' );
|
||||
|
||||
$admin_bar->add_menu( array(
|
||||
'id' => 'cau-has-issues',
|
||||
'title' => '<span class="ab-icon"></span><span class="cau-level-'.cau_pluginIssueLevels().'">'.cau_pluginIssueCount().'</span>',
|
||||
'href' => cau_url( 'status' ),
|
||||
'meta' => array(
|
||||
'target' => '_self',
|
||||
'title' => $cauWaningBarTitle,
|
||||
),
|
||||
));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 );
|
||||
|
@ -1,2 +1,2 @@
|
||||
<?php
|
||||
<?php
|
||||
# Silence is golden.
|
@ -3,9 +3,9 @@ Contributors: Papin, qweb
|
||||
Donate link: https://www.paypal.me/dakel/10/
|
||||
Tags: auto, automatic, background, update, updates, updating, automatic updates, automatic background updates, easy update, wordpress update, theme update, plugin update, up-to-date, security, update latest version, update core, update wp, update wp core, major updates, minor updates, update to new version, update core, update plugin, update plugins, update plugins automatically, update theme, plugin, theme, advance, control, mail, notifations, enable
|
||||
Requires at least: 3.6.0
|
||||
Tested up to: 5.6
|
||||
Tested up to: 5.7
|
||||
Requires PHP: 5.1
|
||||
Stable tag: 3.8.0
|
||||
Stable tag: 3.8.2
|
||||
License: GPLv2 or later
|
||||
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
@ -81,7 +81,14 @@ So obviously, some of you wondered what the difference would be between the defa
|
||||
|
||||
== Changelog ==
|
||||
|
||||
= 3.8.0 (January 14, 2020) =
|
||||
= 3.8.2 (July 1, 2021) =
|
||||
* Fix: Error: Call to undefined function get_plugin_updates()
|
||||
|
||||
= 3.8.1 (June 4, 2021) =
|
||||
* New: Be notified when we need your help updating to a new database version [Feature Request](https://wordpress.org/support/topic/feature-request-839/)
|
||||
* Tweak: Made some under the hood performance improvements
|
||||
|
||||
= 3.8.0 (January 14, 2021) =
|
||||
* New: Better handling of plugins with an unknown WP version
|
||||
* New: More intervals for notifications
|
||||
* Fix: Call to undefined function errors
|
||||
|
Loading…
Reference in New Issue
Block a user