diff --git a/wp-content/plugins/companion-auto-update/admin/dashboard.php b/wp-content/plugins/companion-auto-update/admin/dashboard.php index 1e2acfda..53f3737f 100644 --- a/wp-content/plugins/companion-auto-update/admin/dashboard.php +++ b/wp-content/plugins/companion-auto-update/admin/dashboard.php @@ -1,573 +1,578 @@ -

'.__( 'Companion Auto Update was not able to set the event for sending you emails, please re-activate the plugin in order to set the event', 'companion-auto-update' ).'.

'; -} - -// Database requires an update -if ( cau_incorrectDatabaseVersion() ) { - echo '

'.__( 'Companion Auto Update Database Update', 'companion-auto-update' ).' – - '.__( 'We need you to update to the latest database version', 'companion-auto-update' ).'. '.__( 'Run updater now', 'companion-auto-update' ).'

'; -} - -// Update log DB is empty -if ( cau_updateLogDBisEmpty() ) { - echo '

'.__( 'Companion Auto Update Database Update', 'companion-auto-update' ).' – - '.__( 'We need to add some information to your database', 'companion-auto-update' ).'. '.__( 'Run updater now', 'companion-auto-update' ).'

'; -} - -// Save settings -if( isset( $_POST['submit'] ) ) { - - check_admin_referer( 'cau_save_settings' ); - - global $wpdb; - $table_name = $wpdb->prefix . "auto_updates"; - - // Auto updater - $plugins = isset( $_POST['plugins'] ) ? sanitize_text_field( $_POST['plugins'] ) : ''; - $themes = isset( $_POST['themes'] ) ? sanitize_text_field( $_POST['themes'] ) : ''; - $minor = isset( $_POST['minor'] ) ? sanitize_text_field( $_POST['minor'] ) : ''; - $major = isset( $_POST['major'] ) ? sanitize_text_field( $_POST['major'] ) : ''; - $translations = isset( $_POST['translations'] ) ? sanitize_text_field( $_POST['translations'] ) : ''; - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'plugins'", $plugins ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'themes'", $themes ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'minor'", $minor ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'major'", $major ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'translations'", $translations ) ); - - // Emails - $send = isset( $_POST['cau_send'] ) ? sanitize_text_field( $_POST['cau_send'] ) : ''; - $sendupdate = isset( $_POST['cau_send_update'] ) ? sanitize_text_field( $_POST['cau_send_update'] ) : ''; - $sendoutdated = isset( $_POST['cau_send_outdated'] ) ? sanitize_text_field( $_POST['cau_send_outdated'] ) : ''; - $wpemails = isset( $_POST['wpemails'] ) ? sanitize_text_field( $_POST['wpemails'] ) : ''; - $email = isset( $_POST['cau_email'] ) ? sanitize_text_field( $_POST['cau_email'] ) : ''; - $html_or_text = isset( $_POST['html_or_text'] ) ? sanitize_text_field( $_POST['html_or_text'] ) : 'html'; - $dbupdateemails = isset( $_POST['dbupdateemails'] ) ? sanitize_text_field( $_POST['dbupdateemails'] ) : ''; - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'email'", $email ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'send'", $send ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'sendupdate'", $sendupdate ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'sendoutdated'", $sendoutdated ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'wpemails'", $wpemails ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'html_or_text'", $html_or_text ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'dbupdateemails'", $dbupdateemails ) ); - - // Advanced - $allow_editor = isset( $_POST['allow_editor'] ) ? sanitize_text_field( $_POST['allow_editor'] ) : ''; - $allow_author = isset( $_POST['allow_author'] ) ? sanitize_text_field( $_POST['allow_author'] ) : ''; - $advanced_info_emails = isset( $_POST['advanced_info_emails'] ) ? sanitize_text_field( $_POST['advanced_info_emails'] ) : ''; - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'allow_editor'", $allow_editor ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'allow_author'", $allow_author ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'advanced_info_emails'", $advanced_info_emails ) ); - - // Delay - $update_delay = isset( $_POST['update_delay'] ) ? sanitize_text_field( $_POST['update_delay'] ) : ''; - $update_delay_days = isset( $_POST['update_delay_days'] ) ? sanitize_text_field( $_POST['update_delay_days'] ) : ''; - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'update_delay'", $update_delay ) ); - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = %s WHERE name = 'update_delay_days'", $update_delay_days ) ); - - // Intervals - - // Set variables - $plugin_sc = sanitize_text_field( $_POST['plugin_schedule'] ); - $theme_sc = sanitize_text_field( $_POST['theme_schedule'] ); - $core_sc = sanitize_text_field( $_POST['core_schedule'] ); - $schedule_mail = sanitize_text_field( $_POST['update_notifications'] ); - $outdated_notifier = sanitize_text_field( $_POST['outdated_notifier'] ); - $html_or_text = sanitize_text_field( $_POST['html_or_text'] ); - $dbupdateemails = sanitize_text_field( $_POST['dbupdateemails'] ); - - // First clear schedules - wp_clear_scheduled_hook('wp_update_plugins'); - wp_clear_scheduled_hook('wp_update_themes'); - wp_clear_scheduled_hook('wp_version_check'); - 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'); - wp_clear_scheduled_hook('cau_outdated_notifier'); - - // Then set the new times - - // Plugins - if( $plugin_sc == 'daily' ) { - - $date = date( 'Y-m-d' ); - $hours = sanitize_text_field( $_POST['plugin_schedule-sethour'] ); - $minutes = sanitize_text_field( $_POST['plugin_schedule-setminutes'] ); - $seconds = date( 's' ); - $fullDate = $date.' '.$hours.':'.$minutes.':'.$seconds; - $pluginSetTime = strtotime( $fullDate ); - - wp_schedule_event( $pluginSetTime, $plugin_sc, 'wp_update_plugins' ); - wp_schedule_event( $pluginSetTime, $plugin_sc, 'cau_custom_hooks_plugins' ); - wp_schedule_event( ( $pluginSetTime - 1800 ), $plugin_sc, 'cau_log_updater' ); - - } else { - - wp_schedule_event( time(), $plugin_sc, 'wp_update_plugins' ); - wp_schedule_event( time(), $plugin_sc, 'cau_custom_hooks_plugins' ); - wp_schedule_event( ( time() - 1800 ), $plugin_sc, 'cau_log_updater' ); - - } - - // Themes - if( $theme_sc == 'daily' ) { - - $dateT = date( 'Y-m-d' ); - $hoursT = sanitize_text_field( $_POST['theme_schedule-sethour'] ); - $minutesT = sanitize_text_field( $_POST['theme_schedule-setminutes'] ); - $secondsT = date( 's' ); - $fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT; - $themeSetTime = strtotime( $fullDateT ); - - wp_schedule_event( $themeSetTime, $theme_sc, 'wp_update_themes' ); - wp_schedule_event( $themeSetTime, $theme_sc, 'cau_custom_hooks_themes' ); - - } else { - - wp_schedule_event( time(), $theme_sc, 'wp_update_themes' ); - wp_schedule_event( time(), $theme_sc, 'cau_custom_hooks_themes' ); - - } - - // Core - if( $core_sc == 'daily' ) { - - $dateC = date( 'Y-m-d' ); - $hoursC = sanitize_text_field( $_POST['core_schedule-sethour'] ); - $minutesC = sanitize_text_field( $_POST['core_schedule-setminutes'] ); - $secondsC = date( 's' ); - $fullDateC = $dateC.' '.$hoursC.':'.$minutesC.':'.$secondsC; - $coreSetTime = strtotime( $fullDateC ); - - wp_schedule_event( $coreSetTime, $core_sc, 'wp_version_check' ); - - } else { - - wp_schedule_event( time(), $core_sc, 'wp_version_check' ); - - } - - // Update notifications - if( $schedule_mail == 'daily' ) { - - $dateT = date( 'Y-m-d' ); - $hoursT = sanitize_text_field( $_POST['update_notifications-sethour'] ); - $minutesT = sanitize_text_field( $_POST['update_notifications-setminutes'] ); - $secondsT = date( 's' ); - $fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT; - $emailSetTime = strtotime( $fullDateT ); - - wp_schedule_event( $emailSetTime, $schedule_mail, 'cau_set_schedule_mail' ); - - } else { - - wp_schedule_event( time(), $schedule_mail, 'cau_set_schedule_mail' ); - - } - - // Outdated notifications - if( $outdated_notifier == 'daily' ) { - - $dateT = date( 'Y-m-d' ); - $hoursT = sanitize_text_field( $_POST['outdated_notifier-sethour'] ); - $minutesT = sanitize_text_field( $_POST['outdated_notifier-setminutes'] ); - $secondsT = date( 's' ); - $fullDateT = $dateT.' '.$hoursT.':'.$minutesT.':'.$secondsT; - $emailSetTime = strtotime( $fullDateT ); - - wp_schedule_event( $emailSetTime, $outdated_notifier, 'cau_outdated_notifier' ); - - } else { - - wp_schedule_event( time(), $outdated_notifier, 'cau_outdated_notifier' ); - - } - - - echo '

'.__( 'Settings saved.' ).'

'; - -} - -if( isset( $_GET['welcome'] ) ) { - - echo '
-
-
- -

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

-
-

'.__( 'You\'re set and ready to go', 'companion-auto-update' ).'

-

'.__( 'The plugin is all set and ready to go with the recommended settings, but if you\'d like you can change them below.' ).'

-
-

'.__( 'Get Started' ).': '.__( 'Update filter', 'companion-auto-update' ).'   |   - '.__( 'More Actions' ).': '.__('Give feedback', 'companion-auto-update').' - '.__( 'Help us translate', 'companion-auto-update' ).'

- -
-
'; -} - -$cs_hooks_p = wp_get_schedule( 'cau_custom_hooks_plugins' ); -$cs_hooks_t = wp_get_schedule( 'cau_custom_hooks_themes' ); - -?> - -
- -
- -
- -

- - - - - -
-
- -

'; - - echo '

'; - - echo '

'; - - echo '

'; - - echo '

'; - - ?> - -
-
- -
- - - -
- -

- - "; - echo ""; - echo "

"; - - // Set the time when daily is selected - echo ""; - - } - - ?> - -
- -

- - -
- -
- -

- - -
- -
- -

- - -
- -

- -
- -

- - -
- -
- -

- - -
- -
- -
- -

- - - - - - - - - - - - > - - - - -
-

-

-

-
-

-
- -

-
- -
- - - -
- -
-
- -
- -
- -
-
-

-
    -
  • -
  • -
- -

-
    -
  • -
  • -
  • -
-
-
-

-
    -
  • -
-
-
- -
-
-

-

-

-

-
-
- -
-

-

You get useful software and we get to carry on making it better.', 'companion-auto-update'); ?>

- - - - - - -

-
- -
-

Plugin Promotion

-

Keep your site fast with our Revision Manager

-

Post Revisions are great, but will also slow down your site. Take back control over revisions with Companion Revision Manager!

- Read more -
- -
- - - - + + + +
+ +
+
+

+
    +
  • +
  • +
+ +

+
    +
  • +
  • +
  • +
+
+
+

+
    +
  • +
+
+
+ +
+
+

+

+

+

+
+
+ +
+

+

You get useful software and we get to carry on making it better.', 'companion-auto-update'); ?>

+ + + + + + +

+
+ +
+

Plugin Promotion

+

Keep your site fast with our Revision Manager

+

Post Revisions are great, but will also slow down your site. Take back control over revisions with Companion Revision Manager!

+ Read more +
+ +
+ + + + \ No newline at end of file diff --git a/wp-content/plugins/companion-auto-update/admin/log.php b/wp-content/plugins/companion-auto-update/admin/log.php index 2ad84c20..fc730e35 100644 --- a/wp-content/plugins/companion-auto-update/admin/log.php +++ b/wp-content/plugins/companion-auto-update/admin/log.php @@ -1,19 +1,19 @@ - - - - -
- - + + + +
+ + - - - -
- - -
- We've had to (temporarily) disable the theme filter because it was causing issues on some installations. We'll try to get it working again in a future update. -
- - -

- -prefix."auto_updates"; - -// Save list -if( isset( $_POST['submit'] ) ) { - - check_admin_referer( 'cau_save_pluginlist' ); - - $noUpdateList = ''; - $i = 0; - $noUpdateCount = 0; - - if( isset( $_POST['post'] ) ) { - $noUpdateCount = count( $_POST['post'] ); - } - - if( $noUpdateCount > 0 ) { - foreach ( $_POST['post'] as $key ) { - $noUpdateList .= sanitize_text_field( $key ); - $i++; - if( $i != $noUpdateCount ) $noUpdateList .= ', '; - } - } - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = '%s'", $noUpdateList, $db_table ) ); - echo '

'.__( 'Succes', 'companion-auto-update' ).' – '.sprintf( esc_html__( '%1$s %2$s have been added to the no-update-list', 'companion-auto-update' ), $noUpdateCount, strtolower( $filter_name ) ).'.

'; -} - - -// Reset list -if( isset( $_POST['reset'] ) ) { - - check_admin_referer( 'cau_save_pluginlist' ); - - $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = %s", "", $db_table ) ); - echo '

'.__( 'Succes', 'companion-auto-update' ).' – '.sprintf( esc_html__( 'The no-update-list has been reset, all %s will be auto-updated from now on', 'companion-auto-update' ), strtolower( $filter_name ) ).'.

'; -} - - -?> - -
- -
- - -
- - - - - - - - - - - - - - $value ) { - - $slug = $key; - $explosion = explode( '/', $slug ); - $actualSlug = array_shift( $explosion ); - $slug_hash = md5( $slug[0] ); - - if( $filter == 'themes' ) { - - $theme = wp_get_theme( $actualSlug ); - $name = $theme->get( 'Name' ); - $description = $theme->get( 'Description' ); - - } else { - - foreach ( $value as $k => $v ) { - - if( $k == "Name" ) $name = $v; - if( $k == "Description" ) $description = $v; - - } - - } - - if( in_array( $actualSlug, donotupdatelist( $filter ) ) ) { - - $class = 'inactive'; - $checked = 'CHECKED'; - $statusicon = 'no'; - $statusName = 'disabled'; - - } else { - - $class = 'active'; - $checked = ''; - $statusicon = 'yes'; - $statusName = 'enabled'; - } - - echo ' - - - - - - - - - - '; - - } - ?> - - -
 
- - -
-
-

'. $name .'

- '.$actualSlug.' -
-

'.__( 'Auto Updater', 'companion-auto-update' ).':

-
-

'.$description.'

-
- - - -
- - -
- + + + + +
+ + +
+ We've had to (temporarily) disable the theme filter because it was causing issues on some installations. We'll try to get it working again in a future update. +
+ + +

+ +prefix."auto_updates"; + +// Save list +if( isset( $_POST['submit'] ) ) { + + check_admin_referer( 'cau_save_pluginlist' ); + + $noUpdateList = ''; + $i = 0; + $noUpdateCount = 0; + + if( isset( $_POST['post'] ) ) { + $noUpdateCount = count( $_POST['post'] ); + } + + if( $noUpdateCount > 0 ) { + foreach ( $_POST['post'] as $key ) { + $noUpdateList .= sanitize_text_field( $key ); + $i++; + if( $i != $noUpdateCount ) $noUpdateList .= ', '; + } + } + + $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = '%s'", $noUpdateList, $db_table ) ); + echo '

'.__( 'Succes', 'companion-auto-update' ).' – '.sprintf( esc_html__( '%1$s %2$s have been added to the no-update-list', 'companion-auto-update' ), $noUpdateCount, strtolower( $filter_name ) ).'.

'; +} + + +// Reset list +if( isset( $_POST['reset'] ) ) { + + check_admin_referer( 'cau_save_pluginlist' ); + + $wpdb->query( $wpdb->prepare( "UPDATE $table_name SET onoroff = '%s' WHERE name = %s", "", $db_table ) ); + echo '

'.__( 'Succes', 'companion-auto-update' ).' – '.sprintf( esc_html__( 'The no-update-list has been reset, all %s will be auto-updated from now on', 'companion-auto-update' ), strtolower( $filter_name ) ).'.

'; +} + + +?> + + + +
+ + +
+ + + + + + + + + + + + + + $value ) { + + $slug = $key; + $explosion = explode( '/', $slug ); + $actualSlug = array_shift( $explosion ); + $slug_hash = md5( $slug[0] ); + + if( $filter == 'themes' ) { + + $theme = wp_get_theme( $actualSlug ); + $name = $theme->get( 'Name' ); + $description = $theme->get( 'Description' ); + + } else { + + foreach ( $value as $k => $v ) { + + if( $k == "Name" ) $name = $v; + if( $k == "Description" ) $description = $v; + + } + + } + + if( in_array( $actualSlug, donotupdatelist( $filter ) ) ) { + + $class = 'inactive'; + $checked = 'CHECKED'; + $statusicon = 'no'; + $statusName = 'disabled'; + + } else { + + $class = 'active'; + $checked = ''; + $statusicon = 'yes'; + $statusName = 'enabled'; + } + + echo ' + + + + + + + + + + '; + + } + ?> + + +
 
+ + +
+
+

'. $name .'

+ '.$actualSlug.' +
+

'.__( 'Auto Updater', 'companion-auto-update' ).':

+
+

'.$description.'

+
+ + + +
+ + +
+
\ No newline at end of file diff --git a/wp-content/plugins/companion-auto-update/admin/rollback.php b/wp-content/plugins/companion-auto-update/admin/rollback.php index 3d819f63..c585e942 100644 --- a/wp-content/plugins/companion-auto-update/admin/rollback.php +++ b/wp-content/plugins/companion-auto-update/admin/rollback.php @@ -1,2 +1,2 @@ -

'.__( 'Database update completed' ).'

'; - } - - if( isset( $_GET['run'] ) && $_GET['run'] == 'db_info_update' ) { - cau_savePluginInformation(); - echo '

'.__( 'Database information update completed' ).'

'; - } - - if( isset( $_GET['ignore_report'] ) ) { - - $report_to_ignore = sanitize_text_field( $_GET['ignore_report'] ); - $allowedValues = array( 'seo', 'cron' ); - - if( !in_array( $report_to_ignore, $allowedValues ) ) { - wp_die( 'Trying to cheat eh?' ); - } else { - global $wpdb; - $table_name = $wpdb->prefix . "auto_updates"; - $wpdb->query( $wpdb->prepare( "UPDATE {$table_name} SET onoroff = %s WHERE name = 'ignore_$report_to_ignore'", 'yes' ) ); - $__ignored = __( 'This report will now be ignored', 'companion-auto-update' ); - echo "

$__ignored

"; - } - - } - - - - // Variables - $dateFormat = get_option( 'date_format' ); - $dateFormat .= ' '.get_option( 'time_format' ); - global $wpdb; - $table_name = $wpdb->prefix . "auto_updates"; - $schedules = wp_get_schedules(); - $interval_names = cau_wp_get_schedules(); - -?> - -
- - - - - - - - - - - - - - __( 'Plugins', 'companion-auto-update' ), - 'themes' => __( 'Themes', 'companion-auto-update' ), - 'minor' => __( 'Core (Minor)', 'companion-auto-update' ), - 'major' => __( 'Core (Major)', 'companion-auto-update' ) - ); - - $eventNames = array( - 'plugins' => 'wp_update_plugins', - 'themes' => 'wp_update_themes', - 'minor' => 'wp_version_check', - 'major' => 'wp_version_check' - ); - - foreach ( $auto_updaters as $key => $value ) { - - if( cau_get_db_value( $key ) == 'on' ) { - $__status = 'enabled'; - $__icon = 'yes-alt'; - $__text = __( 'Enabled', 'companion-auto-update' ); - $__interval = $interval_names[wp_get_schedule( $eventNames[$key] )]; - $__next = date_i18n( $dateFormat, wp_next_scheduled( $eventNames[$key] ) ); - } else { - $__status = 'disabled'; - $__icon = 'marker'; - $__text = __( 'Disabled', 'companion-auto-update' ); - $__interval = '‐'; - $__next = '‐'; - } - - $__nxt = __( 'Next', 'companion-auto-update' ); - - echo " - - - - - "; - } - - ?> - - -
$value $__text$__interval$__nxt: $__next
- - - - - - - - - - - - - - __( 'Update available', 'companion-auto-update' ), - 'sendupdate' => __( 'Successful update', 'companion-auto-update' ), - 'wpemails' => __( 'Core notifications', 'companion-auto-update' ) - ); - - $other_eventNames = array( - 'send' => 'cau_set_schedule_mail', - 'sendupdate' => 'cau_set_schedule_mail', - 'wpemails' => 'cau_set_schedule_mail', - ); - - foreach ( $other_events as $key => $value ) { - - if( cau_get_db_value( $key ) == 'on' ) { - $__status = 'enabled'; - $__icon = 'yes-alt'; - $__text = __( 'Enabled', 'companion-auto-update' ); - $__interval = $interval_names[wp_get_schedule( $other_eventNames[$key] )]; - $__next = date_i18n( $dateFormat, wp_next_scheduled( $other_eventNames[$key] ) ); - } else { - $__status = 'warning'; - $__icon = 'marker'; - $__text = __( 'Disabled', 'companion-auto-update' ); - $__interval = '‐'; - $__next = '‐'; - } - - $__nxt = __( 'Next', 'companion-auto-update' ); - - echo " - - - - - "; - } - - ?> - - -
$value $__text$__interval$__nxt: $__next
- - - - - - - - - - - - - - - - - - - - - - - - - - $__text"; - } else { - $__text = __( 'Disabled', 'companion-auto-update' ); - echo ""; - } ?> - - - > - - - - - - - - - - > - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - -
-
$__text
- - - - - -
DISABLE_WP_CRON true - - -
wp_version_check
VCS'>
- - - - - - - - - - - - - - - - - - - - - - - > - - - - - - - - - - - - - -
WordPress
PHP
Database (Latest: )
(GMT ) -
- - - - - - - - - - - - - $value ) { - if( is_plugin_active( $key ) ) { - echo ' - - - - '; - } - } - ?> - - -
'.$key.''.$value.''.__( 'How to fix this', 'companion-auto-update' ).'
- - - - - - - - - - - - - - - -
-
- - -
- - - -
- - $string ) { - - if( strpos( file_get_contents( $conFile ), $string ) !== false) { - $contents = file_get_contents( $conFile ); - $contents = str_replace( $string, $revLine, $contents ); - file_put_contents( $conFile, $contents ); - $melding = __( "We've fixed the error for you", 'companion-auto-update' ).' :)'; - $meldingS = 'updated'; - } - - } - - echo "

$melding

"; - -} - +

'.__( 'Database update completed' ).'

'; + } + + if( isset( $_GET['run'] ) && $_GET['run'] == 'db_info_update' ) { + cau_savePluginInformation(); + echo '

'.__( 'Database information update completed' ).'

'; + } + + if( isset( $_GET['ignore_report'] ) ) { + + $report_to_ignore = sanitize_text_field( $_GET['ignore_report'] ); + $allowedValues = array( 'seo', 'cron' ); + + if( !in_array( $report_to_ignore, $allowedValues ) ) { + wp_die( 'Trying to cheat eh?' ); + } else { + global $wpdb; + $table_name = $wpdb->prefix . "auto_updates"; + $wpdb->query( $wpdb->prepare( "UPDATE {$table_name} SET onoroff = %s WHERE name = 'ignore_$report_to_ignore'", 'yes' ) ); + $__ignored = __( 'This report will now be ignored', 'companion-auto-update' ); + echo "

$__ignored

"; + } + + } + + + + // Variables + $dateFormat = get_option( 'date_format' ); + $dateFormat .= ' '.get_option( 'time_format' ); + global $wpdb; + $table_name = $wpdb->prefix . "auto_updates"; + $schedules = wp_get_schedules(); + $interval_names = cau_wp_get_schedules(); + +?> + +
+ + + + + + + + + + + + + + __( 'Plugins', 'companion-auto-update' ), + 'themes' => __( 'Themes', 'companion-auto-update' ), + 'minor' => __( 'Core (Minor)', 'companion-auto-update' ), + 'major' => __( 'Core (Major)', 'companion-auto-update' ) + ); + + $eventNames = array( + 'plugins' => 'wp_update_plugins', + 'themes' => 'wp_update_themes', + 'minor' => 'wp_version_check', + 'major' => 'wp_version_check' + ); + + foreach ( $auto_updaters as $key => $value ) { + + if( cau_get_db_value( $key ) == 'on' ) { + $__status = 'enabled'; + $__icon = 'yes-alt'; + $__text = __( 'Enabled', 'companion-auto-update' ); + $__interval = $interval_names[wp_get_schedule( $eventNames[$key] )]; + $__next = date_i18n( $dateFormat, wp_next_scheduled( $eventNames[$key] ) ); + } else { + $__status = 'disabled'; + $__icon = 'marker'; + $__text = __( 'Disabled', 'companion-auto-update' ); + $__interval = '‐'; + $__next = '‐'; + } + + $__nxt = __( 'Next', 'companion-auto-update' ); + + echo " + + + + + "; + } + + ?> + + +
$value $__text$__interval$__nxt: $__next
+ + + + + + + + + + + + + + __( 'Update available', 'companion-auto-update' ), + 'sendupdate' => __( 'Successful update', 'companion-auto-update' ), + 'wpemails' => __( 'Core notifications', 'companion-auto-update' ) + ); + + $other_eventNames = array( + 'send' => 'cau_set_schedule_mail', + 'sendupdate' => 'cau_set_schedule_mail', + 'wpemails' => 'cau_set_schedule_mail', + ); + + foreach ( $other_events as $key => $value ) { + + if( cau_get_db_value( $key ) == 'on' ) { + $__status = 'enabled'; + $__icon = 'yes-alt'; + $__text = __( 'Enabled', 'companion-auto-update' ); + $__interval = $interval_names[wp_get_schedule( $other_eventNames[$key] )]; + $__next = date_i18n( $dateFormat, wp_next_scheduled( $other_eventNames[$key] ) ); + } else { + $__status = 'warning'; + $__icon = 'marker'; + $__text = __( 'Disabled', 'companion-auto-update' ); + $__interval = '‐'; + $__next = '‐'; + } + + $__nxt = __( 'Next', 'companion-auto-update' ); + + echo " + + + + + "; + } + + ?> + + +
$value $__text$__interval$__nxt: $__next
+ + + + + + + + + + + + + + + + + + + + + + + + + + $__text"; + } else { + $__text = __( 'Disabled', 'companion-auto-update' ); + echo ""; + } ?> + + + > + + + + + + + + + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
$__text
+ + + + + +
DISABLE_WP_CRON true + + +
wp_version_check
VCS'>
+ + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + + + + + +
WordPress
PHP
Database (Latest: )
(GMT ) -
+ + + + + + + + + + + + + $value ) { + if( is_plugin_active( $key ) ) { + echo ' + + + + '; + } + } + ?> + + +
'.$key.''.$value.''.__( 'How to fix this', 'companion-auto-update' ).'
+ + + + + + + + + + + + + + + +
+
+ + +
+ + + +
+ + $string ) { + + if( strpos( file_get_contents( $conFile ), $string ) !== false) { + $contents = file_get_contents( $conFile ); + $contents = str_replace( $string, $revLine, $contents ); + file_put_contents( $conFile, $contents ); + $melding = __( "We've fixed the error for you", 'companion-auto-update' ).' :)'; + $meldingS = 'updated'; + } + + } + + echo "

$melding

"; + +} + ?> \ No newline at end of file diff --git a/wp-content/plugins/companion-auto-update/backend/style.css b/wp-content/plugins/companion-auto-update/backend/style.css index 599c02ca..ac096978 100644 --- a/wp-content/plugins/companion-auto-update/backend/style.css +++ b/wp-content/plugins/companion-auto-update/backend/style.css @@ -1,567 +1,575 @@ -/* Default Stylings */ -.nowrap { - white-space: nowrap; -} -.cau_spacing { - height: 25px; -} -.cau_support_buttons { - display: inline-block; -} - -/* Welcome screen */ -.welcome-to-cau { - background: #FFF; - border: 1px solid #CCD0D4; - margin: 25px 0; - padding: 30px; - background-size: 140px; - background-position: left bottom; - background-repeat: no-repeat; - box-shadow: 0 1px 1px rgba(0,0,0,.04); -} -.welcome-to-cau .welcome-image { - display: inline-block; - vertical-align: middle; - width: 100px; - height: 100px; - background-image: url('images/welcome.svg'); - background-size: contain; - background-position: center; - box-sizing: border-box; -} -.welcome-to-cau .welcome-content { - display: inline-block; - vertical-align: middle; - width: calc(100% - 100px); - padding-left: 25px; - box-sizing: border-box; -} -.welcome-to-cau .welcome-content strong { - color: #000; -} -.welcome-to-cau .welcome-content p { - margin: 2px 0; -} -.welcome-to-cau.help-bg { - background-image: url('images/help.svg'); -} -.welcome-to-cau.support-bg { - background-image: url('images/support.svg'); -} -.welcome-to-cau.love-bg { - background-image: url('images/love.svg'); -} -.welcome-to-cau.update-bg { - background-image: url('images/update.svg'); -} -.welcome-to-cau.email-bg { - background-image: url('images/email.svg'); -} -.welcome-to-cau.interval-bg { - background-image: url('images/interval.svg'); -} -.welcome-to-cau.advanced-bg { - background-image: url('images/settings.svg'); -} -.welcome-to-cau h2 { - margin: 0; - margin-bottom: 25px; - font-size: 21px; - font-weight: 400; - line-height: 1.2; -} -.welcome-to-cau h2.title { - margin-bottom: 10px; -} -.welcome-to-cau h3 { - font-size: 16px; - margin-top: 0; -} -.welcome-to-cau a { - text-decoration: none; -} -.welcome-to-cau .welcome-column { - display: inline-block; - vertical-align: top; - box-sizing: border-box; -} -.welcome-to-cau.cau-show-love .welcome-column { - vertical-align: middle; -} -.welcome-to-cau .welcome-column.welcome-column-first { - display: block; - width: 100%; -} -.first-column { - padding-left: 140px; -} -.welcome-to-cau .welcome-column.welcome-column-half { - width: 50%; -} -.welcome-to-cau .welcome-column.welcome-column-third { - width: 33%; -} -.welcome-to-cau .welcome-column.welcome-column-quarter { - width: 25%; -} -.welcome-to-cau a.minimal-button { - display: inline-block; - padding: 5px; -} -select.schedule_interval { - max-width: 90%; - width: 225px; -} -.cau_save_button { - background: #FFF; - box-sizing: border-box; - padding: 0 25px; - position: fixed; - width: 100%; - right: 0; - bottom: 0; - margin-left: -25px; - z-index: 1001; - box-shadow: 0 -8px 16px 0 rgb(85 93 102 / 30%); -} -.cau_save_button p.submit { - display: block; - text-align: right; - font-weight: bold; -} -.cau_save_button__space { - height: 75px; -} - -/* Overwrite core UI */ -/*.cau_content input[type="checkbox"]:checked::before { - content: ""; - background: url( 'images/check.svg' ); - background-size: contain; - background-position: center center; -}*/ -.cau_content a { - color: #9178B7; -} -.cau_content a.nav-tab { - color: #23282D; -} -.cau_content .button-primary { - background-color: #9178B7!important; - border-color: #9178B7!important; -} -.cau_content .button-alt { - color: #9178B7!important; - border-color: #9178B7!important; -} -.cau_content .button-hero { - font-weight: 500; - padding: 15px 30px!important; -} -#message.cau { - background: #FFF; - border: 1px solid #CCD0D4; - border-left-width: 4px; - border-left-color: #9178B7; - box-shadow: 0 1px 1px rgba(0,0,0,.04); - margin: 25px 0px 5px 0; - padding: 15px; -} -#message.cau a, #message.cau strong { - color: #9178B7; -} - -/* Dashboard */ -.cau-column-wide { - box-sizing: border-box; - display: inline-block; - vertical-align: top; - width: calc(100% - 450px); - padding-right: 25px; -} -.cau-column-small { - display: inline-block; - vertical-align: top; - width: 450px; -} -.cau-dashboard-box { - background-position: right bottom; -} -.cau-column-wide .cau-dashboard-box { - padding-right: 125px; -} -.cau-dashboard-box a { - margin-left: 0px; - margin-top: 10px; -} -.cau-dashboard-box .welcome-column { - padding-right: 25px; -} -.support-sidebar-list { - margin-bottom: 25px; -} -.cau_content .nav-tab { - position: relative; -} -.cau_content .nav-tab .cau_melding { - display: inline-block; - width: 11px; - height: 11px; - border-radius: 10px; - margin-left: 5px; - position: relative; - bottom: -1px; -} -.cau_content .nav-tab .cau_melding.level-okay { - background: #7AD03A; -} -.cau_content .nav-tab .cau_melding.level-low { - background: #FFBA00; -} -.cau_content .nav-tab .cau_melding.level-high { - background: #FF0000; -} - -/* Table Styling */ -.cau_content .widefat td { - vertical-align: middle!important; -} -table.autoupdate th.head-plugin { - min-width: 250px; -} -table.autoupdate th.head-status { - min-width: 150px; -} -table.autoupdate th.check-column { - position: relative; - min-width: 55px; -} -table.autoupdate tr.inactive { - background: #FEF7F1; -} -table.autoupdate tr.active .check-column { - border-left: 3px solid transparent; -} -table.autoupdate tr.inactive .check-column { - border-left: 3px solid #D54E21; -} -table.autoupdate tr.inactive td.column-status p { - color: #BF3D3C; -} -table.autoupdate tr.active td.column-status p { - color: #000; -} -table.autoupdate tr td.column-description p { - overflow: hidden; - max-height: 18px; -} - -/* Update Log */ -table.autoupdatelog { - margin-top: 25px; -} -table.autoupdatelog strong { - color: #000; -} -table.autoupdatelog .dashicons { - color: #00A0D2; -} - -/* Status */ -table.cau_status_list { - margin-top: 25px; -} -table.cau_status_list:not(.no_column_width) th, table.cau_status_list:not(.no_column_width) td { - width: 25%; -} -.cau_enabled { - color: #7AD03A; -} -.cau_disabled { - color: #FF0000; -} -.cau_warning { - color: #FFBA00; -} -.cau_mobile_prefix { - display: none; -} - -/* Rollback list */ -table.rollbacklist { - max-width: 650px; -} -table.rollbacklist td { - vertical-align: middle; -} -table.rollbacklist td a.versionselectbutton { - display: inline-block; - width: 100px; - text-align: center; -} - -/* Plugin list */ -.pluginListButtons { - display: block; - padding: 15px 0; -} -.pluginListButtons p.submit { - display: inline-block; - margin: 0!important; - padding: 0!important; -} -.cau_content #the-list input[type="checkbox"]:not(:checked), .cau_content #the-list input[type="checkbox"]:checked { - width: 45px; - height: 45px; - position: absolute; - top: 0; - bottom: 0; - z-index: 100; - display: block; - opacity: 0; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label, .cau_content #the-list input[type="checkbox"]:checked + label { - position: absolute; - top: 15px; - left: 12px; - cursor: pointer; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before, .cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after { - content: ''; - position: absolute; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before { - left: 0; - top: -3px; - width: 30px; - height: 16px; - background: transparent; - border: 2px solid #9178B7; - border-radius: 15px; - transition: background-color .2s; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after { - width: 8px; - height: 8px; - transition: all .2s; - border-radius: 500px; - background: transparent; - border: 2px solid #9178B7; - top: 1px; - left: 5px; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before { - background: #9178B7; - border: 2px solid #9178B7; -} -.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after { - background: #9178B7; - border-color: #FFF; - left: 18px; -} - -/* Scheduling */ -.cau_schedule_input { - display: inline-block; - vertical-align: middle; - width: 50px; - padding-top: 5px; -} -.cau_schedule_input input { - max-width: 100%; - text-align: center; -} -.cau_schedule_input_div { - display: inline-block; - vertical-align: middle; - padding: 0 6px; - font-weight: bold; -} -.cau_shedule_notation { - display: inline-block; - vertical-align: middle; - width: 125px; - padding-left: 5px; -} -.cau_shedule_notation .dashicons { - position: relative; - bottom: -5px; -} - -/* Tooltip */ -.cau_tooltip { - position: relative; -} -.cau_tooltip .cau_tooltip_text { - visibility: hidden; - background-color: rgba(0,0,0,0.7); - color: #FFF; - text-align: left; - font-size: 14px; - padding: 15px; - border-radius: 6px; - position: absolute; - z-index: 1; - width: 240px; - bottom: 100%; - left: 50%; - margin-left: -60px; - margin-bottom: 10px; - opacity: 0; - transition: .3s; - font-weight: normal; -} -.cau_tooltip:hover .cau_tooltip_text { - visibility: visible; - opacity: 1; -} -.cau_tooltip .cau_tooltip_text::after { - content: " "; - position: absolute; - top: 100%; - left: 50%; - margin-left: -75px; - border-width: 5px; - border-style: solid; - border-color: rgba(0,0,0,0.7) transparent transparent transparent; -} - -/* Responsive */ -@media screen and (max-width: 1400px) { - - .cau-column-wide { - width: calc(100% - 350px); - } - .cau-column-small { - width: 350px; - } - .welcome-to-cau .welcome-column.welcome-column-quarter { - width: 50%; - padding-bottom: 35px; - } - .cau-column-small .welcome-to-cau { - background-image: none; - } - -} -@media screen and (max-width: 1150px) { - - .cau-column-wide, .cau-column-small { - width: 100%; - padding: 0; - } - -} -@media screen and (max-width: 1000px) { - - /* Basics */ - .cau_hide_on_mobile, table.autoupdate thead { - display: none!important; - } - .form-table td fieldset p { - display: block; - padding: 5px 0; - } - .form-table td fieldset input[type="checkbox"] { - display: inline-block; - vertical-align: middle; - width: 25px; - } - .form-table td fieldset label { - display: inline-block; - vertical-align: middle; - width: calc(100% - 40px); - box-sizing: border-box; - padding-left: 5px; - } - .cau_content .nav-tab-wrapper { - position: relative; - top: -20px; - border-bottom: 1px solid #CCC!important; - padding-bottom: 15px!important; - margin-bottom: 0px!important; - } - .cau_content .nav-tab { - font-size: 12px; - margin: 5px 5px 0 0!important; - box-sizing: border-box; - text-align: center; - } - - /* Scheduling */ - .cau_schedule_input { - width: 75px; - } - - /* Custom buttons */ - .cau-button { - display: block; - text-align: center; - margin: 5px 0; - } - .cau-button .dashicons { - float: left; - } - - /* Dashboard */ - .welcome-to-cau { - background-position: right bottom; - } - .welcome-to-cau.love-bg { - background-image: none; - } - .welcome-to-cau .welcome-column { - min-width: 100%; - } - .welcome-to-cau .welcome-column.welcome-column-first { - padding-left: 0px; - } - .cau-column-wide .cau-dashboard-box { - padding-right: 30px; - padding-bottom: 125px - } - .majorMinorExplain { - display: none; - } - - /* Status */ - table.cau_status_list .cau_status_name { - display: inline-block; - width: 50%; - box-sizing: border-box; - font-weight: 500; - } - table.cau_status_list .cau_status_interval { - display: none; - } - table.cau_status_list th.cau_status_next { - display: none; - } - table.cau_status_list td.cau_status_next { - display: block; - width: 100%; - } - table.cau_status_list .cau_status_active_state { - display: inline-block; - width: 50%; - box-sizing: border-box; - text-align: right; - } - .cau_mobile_prefix { - display: inline-block; - padding-right: 5px; - } - table.cau_status_list.cau_status_warnings td { - display: block; - width: 100%; - box-sizing: border-box; - } - table.cau_status_list.cau_status_warnings th.cau_plugin_issue_explain, table.cau_status_list.cau_status_warnings th.cau_plugin_issue_fixit { - display: none; - } - table.cau_status_list.cau_status_warnings td.cau_plugin_issue_name { - font-weight: 500; - } - +/* Default Stylings */ +.nowrap { + white-space: nowrap; +} +.cau_spacing { + height: 25px; +} +.cau_support_buttons { + display: inline-block; +} + +/* Welcome screen */ +.welcome-to-cau { + background: #FFF; + border: 1px solid #CCD0D4; + margin: 25px 0; + padding: 30px; + background-size: 140px; + background-position: left bottom; + background-repeat: no-repeat; + box-shadow: 0 1px 1px rgba(0,0,0,.04); +} +.welcome-to-cau .welcome-image { + display: inline-block; + vertical-align: middle; + width: 100px; + height: 100px; + background-image: url('images/welcome.svg'); + background-size: contain; + background-position: center; + box-sizing: border-box; +} +.welcome-to-cau .welcome-content { + display: inline-block; + vertical-align: middle; + width: calc(100% - 100px); + padding-left: 25px; + box-sizing: border-box; +} +.welcome-to-cau .welcome-content strong { + color: #000; +} +.welcome-to-cau .welcome-content p { + margin: 2px 0; +} +.welcome-to-cau.help-bg { + background-image: url('images/help.svg'); +} +.welcome-to-cau.support-bg { + background-image: url('images/support.svg'); +} +.welcome-to-cau.love-bg { + background-image: url('images/love.svg'); +} +.welcome-to-cau.update-bg { + background-image: url('images/update.svg'); +} +.welcome-to-cau.email-bg { + background-image: url('images/email.svg'); +} +.welcome-to-cau.interval-bg { + background-image: url('images/interval.svg'); +} +.welcome-to-cau.advanced-bg { + background-image: url('images/settings.svg'); +} +.welcome-to-cau h2 { + margin: 0; + margin-bottom: 25px; + font-size: 21px; + font-weight: 400; + line-height: 1.2; +} +.welcome-to-cau h2.title { + margin-bottom: 10px; +} +.welcome-to-cau h3 { + font-size: 16px; + margin-top: 0; +} +.welcome-to-cau a { + text-decoration: none; +} +.welcome-to-cau .welcome-column { + display: inline-block; + vertical-align: top; + box-sizing: border-box; +} +.welcome-to-cau.cau-show-love .welcome-column { + vertical-align: middle; +} +.welcome-to-cau .welcome-column.welcome-column-first { + display: block; + width: 100%; +} +.first-column { + padding-left: 140px; +} +.welcome-to-cau .welcome-column.welcome-column-half { + width: 50%; +} +.welcome-to-cau .welcome-column.welcome-column-third { + width: 33%; +} +.welcome-to-cau .welcome-column.welcome-column-quarter { + width: 25%; +} +.welcome-to-cau a.minimal-button { + display: inline-block; + padding: 5px; +} +select.schedule_interval { + max-width: 90%; + width: 225px; +} +.cau_save_button.fixed_button { + background: #FFF; + box-sizing: border-box; + position: fixed; + width: 100%; + right: 0; + bottom: 0; + margin-left: -25px; + z-index: 1001; + padding: 5px; + box-shadow: 0 -8px 16px 0 rgb(85 93 102 / 30%); +} +.cau_save_button.fixed_button p.submit { + display: block; + text-align: center; + font-weight: bold; + margin: 0; + padding: 0; +} +.cau_save_button.fixed_button p.submit input { + width: 100%; + max-width: 250px; + height: 100%; + padding: 5px; +} +.cau_save_button__space { + height: 75px; +} + +/* Overwrite core UI */ +/*.cau_content input[type="checkbox"]:checked::before { + content: ""; + background: url( 'images/check.svg' ); + background-size: contain; + background-position: center center; +}*/ +.cau_content a { + color: #9178B7; +} +.cau_content a.nav-tab { + color: #23282D; +} +.cau_content .button-primary { + background-color: #9178B7!important; + border-color: #9178B7!important; +} +.cau_content .button-alt { + color: #9178B7!important; + border-color: #9178B7!important; +} +.cau_content .button-hero { + font-weight: 500; + padding: 15px 30px!important; +} +#message.cau { + background: #FFF; + border: 1px solid #CCD0D4; + border-left-width: 4px; + border-left-color: #9178B7; + box-shadow: 0 1px 1px rgba(0,0,0,.04); + margin: 25px 0px 5px 0; + padding: 15px; +} +#message.cau a, #message.cau strong { + color: #9178B7; +} + +/* Dashboard */ +.cau-column-wide { + box-sizing: border-box; + display: inline-block; + vertical-align: top; + width: calc(100% - 450px); + padding-right: 25px; +} +.cau-column-small { + display: inline-block; + vertical-align: top; + width: 450px; +} +.cau-dashboard-box { + background-position: right bottom; +} +.cau-column-wide .cau-dashboard-box { + padding-right: 125px; +} +.cau-dashboard-box a { + margin-left: 0px; + margin-top: 10px; +} +.cau-dashboard-box .welcome-column { + padding-right: 25px; +} +.support-sidebar-list { + margin-bottom: 25px; +} +.cau_content .nav-tab { + position: relative; +} +.cau_content .nav-tab .cau_melding { + display: inline-block; + width: 11px; + height: 11px; + border-radius: 10px; + margin-left: 5px; + position: relative; + bottom: -1px; +} +.cau_content .nav-tab .cau_melding.level-okay { + background: #7AD03A; +} +.cau_content .nav-tab .cau_melding.level-low { + background: #FFBA00; +} +.cau_content .nav-tab .cau_melding.level-high { + background: #FF0000; +} + +/* Table Styling */ +.cau_content .widefat td { + vertical-align: middle!important; +} +table.autoupdate th.head-plugin { + min-width: 250px; +} +table.autoupdate th.head-status { + min-width: 150px; +} +table.autoupdate th.check-column { + position: relative; + min-width: 55px; +} +table.autoupdate tr.inactive { + background: #FEF7F1; +} +table.autoupdate tr.active .check-column { + border-left: 3px solid transparent; +} +table.autoupdate tr.inactive .check-column { + border-left: 3px solid #D54E21; +} +table.autoupdate tr.inactive td.column-status p { + color: #BF3D3C; +} +table.autoupdate tr.active td.column-status p { + color: #000; +} +table.autoupdate tr td.column-description p { + overflow: hidden; + max-height: 18px; +} + +/* Update Log */ +table.autoupdatelog { + margin-top: 25px; +} +table.autoupdatelog strong { + color: #000; +} +table.autoupdatelog .dashicons { + color: #00A0D2; +} + +/* Status */ +table.cau_status_list { + margin-top: 25px; +} +table.cau_status_list:not(.no_column_width) th, table.cau_status_list:not(.no_column_width) td { + width: 25%; +} +.cau_enabled { + color: #7AD03A; +} +.cau_disabled { + color: #FF0000; +} +.cau_warning { + color: #FFBA00; +} +.cau_mobile_prefix { + display: none; +} + +/* Rollback list */ +table.rollbacklist { + max-width: 650px; +} +table.rollbacklist td { + vertical-align: middle; +} +table.rollbacklist td a.versionselectbutton { + display: inline-block; + width: 100px; + text-align: center; +} + +/* Plugin list */ +.pluginListButtons { + display: block; + padding: 15px 0; +} +.pluginListButtons p.submit { + display: inline-block; + margin: 0!important; + padding: 0!important; +} +.cau_content #the-list input[type="checkbox"]:not(:checked), .cau_content #the-list input[type="checkbox"]:checked { + width: 45px; + height: 45px; + position: absolute; + top: 0; + bottom: 0; + z-index: 100; + display: block; + opacity: 0; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label, .cau_content #the-list input[type="checkbox"]:checked + label { + position: absolute; + top: 15px; + left: 12px; + cursor: pointer; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before, .cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after { + content: ''; + position: absolute; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before, .cau_content #the-list input[type="checkbox"]:checked + label:before { + left: 0; + top: -3px; + width: 30px; + height: 16px; + background: transparent; + border: 2px solid #9178B7; + border-radius: 15px; + transition: background-color .2s; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after, .cau_content #the-list input[type="checkbox"]:checked + label:after { + width: 8px; + height: 8px; + transition: all .2s; + border-radius: 500px; + background: transparent; + border: 2px solid #9178B7; + top: 1px; + left: 5px; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label:before { + background: #9178B7; + border: 2px solid #9178B7; +} +.cau_content #the-list input[type="checkbox"]:not(:checked) + label:after { + background: #9178B7; + border-color: #FFF; + left: 18px; +} + +/* Scheduling */ +.cau_schedule_input { + display: inline-block; + vertical-align: middle; + width: 50px; + padding-top: 5px; +} +.cau_schedule_input input { + max-width: 100%; + text-align: center; +} +.cau_schedule_input_div { + display: inline-block; + vertical-align: middle; + padding: 0 6px; + font-weight: bold; +} +.cau_shedule_notation { + display: inline-block; + vertical-align: middle; + width: 125px; + padding-left: 5px; +} +.cau_shedule_notation .dashicons { + position: relative; + bottom: -5px; +} + +/* Tooltip */ +.cau_tooltip { + position: relative; +} +.cau_tooltip .cau_tooltip_text { + visibility: hidden; + background-color: rgba(0,0,0,0.7); + color: #FFF; + text-align: left; + font-size: 14px; + padding: 15px; + border-radius: 6px; + position: absolute; + z-index: 1; + width: 240px; + bottom: 100%; + left: 50%; + margin-left: -60px; + margin-bottom: 10px; + opacity: 0; + transition: .3s; + font-weight: normal; +} +.cau_tooltip:hover .cau_tooltip_text { + visibility: visible; + opacity: 1; +} +.cau_tooltip .cau_tooltip_text::after { + content: " "; + position: absolute; + top: 100%; + left: 50%; + margin-left: -75px; + border-width: 5px; + border-style: solid; + border-color: rgba(0,0,0,0.7) transparent transparent transparent; +} + +/* Responsive */ +@media screen and (max-width: 1400px) { + + .cau-column-wide { + width: calc(100% - 350px); + } + .cau-column-small { + width: 350px; + } + .welcome-to-cau .welcome-column.welcome-column-quarter { + width: 50%; + padding-bottom: 35px; + } + .cau-column-small .welcome-to-cau { + background-image: none; + } + +} +@media screen and (max-width: 1150px) { + + .cau-column-wide, .cau-column-small { + width: 100%; + padding: 0; + } + +} +@media screen and (max-width: 1000px) { + + /* Basics */ + .cau_hide_on_mobile, table.autoupdate thead { + display: none!important; + } + .form-table td fieldset p { + display: block; + padding: 5px 0; + } + .form-table td fieldset input[type="checkbox"] { + display: inline-block; + vertical-align: middle; + width: 25px; + } + .form-table td fieldset label { + display: inline-block; + vertical-align: middle; + width: calc(100% - 40px); + box-sizing: border-box; + padding-left: 5px; + } + .cau_content .nav-tab-wrapper { + position: relative; + top: -20px; + border-bottom: 1px solid #CCC!important; + padding-bottom: 15px!important; + margin-bottom: 0px!important; + } + .cau_content .nav-tab { + font-size: 12px; + margin: 5px 5px 0 0!important; + box-sizing: border-box; + text-align: center; + } + + /* Scheduling */ + .cau_schedule_input { + width: 75px; + } + + /* Custom buttons */ + .cau-button { + display: block; + text-align: center; + margin: 5px 0; + } + .cau-button .dashicons { + float: left; + } + + /* Dashboard */ + .welcome-to-cau { + background-position: right bottom; + } + .welcome-to-cau.love-bg { + background-image: none; + } + .welcome-to-cau .welcome-column { + min-width: 100%; + } + .welcome-to-cau .welcome-column.welcome-column-first { + padding-left: 0px; + } + .cau-column-wide .cau-dashboard-box { + padding-right: 30px; + padding-bottom: 125px + } + .majorMinorExplain { + display: none; + } + + /* Status */ + table.cau_status_list .cau_status_name { + display: inline-block; + width: 50%; + box-sizing: border-box; + font-weight: 500; + } + table.cau_status_list .cau_status_interval { + display: none; + } + table.cau_status_list th.cau_status_next { + display: none; + } + table.cau_status_list td.cau_status_next { + display: block; + width: 100%; + } + table.cau_status_list .cau_status_active_state { + display: inline-block; + width: 50%; + box-sizing: border-box; + text-align: right; + } + .cau_mobile_prefix { + display: inline-block; + padding-right: 5px; + } + table.cau_status_list.cau_status_warnings td { + display: block; + width: 100%; + box-sizing: border-box; + } + table.cau_status_list.cau_status_warnings th.cau_plugin_issue_explain, table.cau_status_list.cau_status_warnings th.cau_plugin_issue_fixit { + display: none; + } + table.cau_status_list.cau_status_warnings td.cau_plugin_issue_name { + font-weight: 500; + } + } \ No newline at end of file diff --git a/wp-content/plugins/companion-auto-update/cau_emails.php b/wp-content/plugins/companion-auto-update/cau_emails.php index 251134df..8e0f75ac 100644 --- a/wp-content/plugins/companion-auto-update/cau_emails.php +++ b/wp-content/plugins/companion-auto-update/cau_emails.php @@ -1,512 +1,525 @@ - $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' ) { - - 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 .= '
    '; - $updatedListT .= '
      '; - } - - 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 = "
      ".__( "Time of update", "companion-auto-update" ).": ".$pluginTimes[$key].""; - - $updatedListP .= "
    1. - ".$pluginNames[$key]."
      - ".__( "to version", "companion-auto-update" )." ".$pluginVersion[$key]." ".__( "Release notes", "companion-auto-update" )." - ".$more_info." -
    2. "; - - } 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 = "
      ".__( "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; - } - - } - -} - + $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' ) { + + 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 .= '
    '; + $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; + } + + } + +} + diff --git a/wp-content/plugins/companion-auto-update/cau_functions.php b/wp-content/plugins/companion-auto-update/cau_functions.php index 30da3732..6e8e9381 100644 --- a/wp-content/plugins/companion-auto-update/cau_functions.php +++ b/wp-content/plugins/companion-auto-update/cau_functions.php @@ -1026,6 +1026,10 @@ function cau_list_outdated() { if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } + + if( !function_exists( 'plugins_api' ) ) { + require_once( ABSPATH.'wp-admin/includes/plugin-install.php' ); + } foreach ( get_plugins() as $key => $value) { @@ -1037,17 +1041,24 @@ function cau_list_outdated() { foreach ( $value as $k => $v ) if( $k == "Name" ) $name = $v; // Get plugins tested up to version - if( !function_exists( 'plugins_api' ) ) require_once( ABSPATH.'wp-admin/includes/plugin-install.php' ); - $api = plugins_api( 'plugin_information', array( 'slug' => wp_unslash( $actualSlug ) ) ); + $api = plugins_api( 'plugin_information', array( 'slug' => wp_unslash( $actualSlug ), 'tested' => true ) ); // Version compare $tested_version = substr( $api->tested, 0, 3 ); // Format version number - $current_version = substr( get_bloginfo( 'version' ), 0, 3 ); // Format version number - $version_difference = ($current_version - $tested_version); // Get the difference - // $tested_wp = ( empty( $api->tested ) || cau_version_compare( get_bloginfo( 'version' ), $api->tested, '<' ) ); - if( $version_difference >= '0.3' ) { - $outdatedList[$name] = substr( $api->tested, 0, 3 ); + // Check if "tested up to" version number is set + if( $tested_version != '' ) { + + $current_version = substr( get_bloginfo( 'version' ), 0, 3 ); // Format version number + $version_difference = ( (int)$current_version - (int)$tested_version ); // Get the difference + // $tested_wp = ( empty( $api->tested ) || cau_version_compare( get_bloginfo( 'version' ), $api->tested, '<' ) ); + + if( $version_difference >= '0.3' ) { + $outdatedList[$name] = substr( $api->tested, 0, 3 ); + } + + } else { + $outdatedList[$name] = ''; // We'll catch this when sending the e-mail } } diff --git a/wp-content/plugins/companion-auto-update/companion-auto-update.php b/wp-content/plugins/companion-auto-update/companion-auto-update.php index 7e0d57b8..80d07f86 100644 --- a/wp-content/plugins/companion-auto-update/companion-auto-update.php +++ b/wp-content/plugins/companion-auto-update/companion-auto-update.php @@ -1,466 +1,467 @@ -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() { ?> - -
- -

- -
- - __( '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.'.' ); - } - - ?> - -
- -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; } '; - 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 ) { - - // 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 = ''.__( '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 { - - 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' => ''.cau_pluginIssueCount().'', - 'href' => cau_url( 'status' ), - 'meta' => array( - 'target' => '_self', - 'title' => $cauWaningBarTitle, - ), - )); - - } - - } - -} -add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 ); +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.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]; + + 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' => '' ) ); + 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 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() { ?> + +
+ +

+ +
+ + __( '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.'.' ); + } + + ?> + +
+ +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; } '; + 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 ) { + + // 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 = ''.__( '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 { + + 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' => ''.cau_pluginIssueCount().'', + 'href' => cau_url( 'status' ), + 'meta' => array( + 'target' => '_self', + 'title' => $cauWaningBarTitle, + ), + )); + + } + + } + +} +add_action( 'admin_bar_menu', 'cau_checkForIssues', 150 ); diff --git a/wp-content/plugins/companion-auto-update/readme.txt b/wp-content/plugins/companion-auto-update/readme.txt index 3ef988da..e490d174 100644 --- a/wp-content/plugins/companion-auto-update/readme.txt +++ b/wp-content/plugins/companion-auto-update/readme.txt @@ -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.7 +Tested up to: 5.9 Requires PHP: 5.1 -Stable tag: 3.8.2 +Stable tag: 3.8.3 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html @@ -81,6 +81,11 @@ So obviously, some of you wondered what the difference would be between the defa == Changelog == += 3.8.3 (December 9, 2021) = +* New: Plugin update e-mails now have an option to link to a few important pages +* Fix: Error: Undefined index: dbupdateemails +* Fix: Error: A non-numeric value encountered + = 3.8.2 (July 1, 2021) = * Fix: Error: Call to undefined function get_plugin_updates()