Version Description
Download this release
Release Info
Developer | pento |
Plugin | Advanced Automatic Updates |
Version | 0.1 |
Comparing to | |
See all releases |
Version 0.1
- admin.php +85 -0
- automatic-updater.php +143 -0
- readme.txt +16 -0
- updater-skin.php +43 -0
admin.php
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
add_action( 'admin_menu', 'auto_updater_plugin_menu' );
|
4 |
+
|
5 |
+
function auto_updater_plugin_menu() {
|
6 |
+
$hook = add_options_page( __( 'Automatic Updater', 'automatic-updater' ), __( 'Automatic Updater', 'automatic-updater' ), 'update_core', 'automatic-updater', 'auto_updater_settings' );
|
7 |
+
add_action( "load-$hook", 'auto_updater_settings_loader' );
|
8 |
+
}
|
9 |
+
|
10 |
+
function auto_updater_settings_loader() {
|
11 |
+
get_current_screen()->add_help_tab( array(
|
12 |
+
'id' => 'overview',
|
13 |
+
'title' => __( 'Overview', 'automatic-updater' ),
|
14 |
+
'content' =>
|
15 |
+
'<p>' . __( 'This settings page allows you to select whether you would like WordPress Core, your plugins, and your themes to be automatically updated.', 'automatic-updater' ) . '</p>' .
|
16 |
+
'<p>' . __( 'It is very important to keep your WordPress installation up to date for security reasons, so unless you have a specific reason not to, we recommend allowing everything to automatically update.', 'automatic-updater' ) . '</p>'
|
17 |
+
) );
|
18 |
+
|
19 |
+
get_current_screen()->set_help_sidebar(
|
20 |
+
'<p><strong>' . sprintf( __( 'A Plugin By <a href="%s" target="_blank">Gary</a>', 'automatic-updater' ), 'http://pento.net/' ) . '</strong></p>' .
|
21 |
+
'<p><a href="http://pento.net/donate/">' . __( 'Donations', 'automatic-updater' ) . '</a></p>' .
|
22 |
+
'<p><a href="">' . __( 'Support Forums', 'automatic-updater' ) . '</a></p>'
|
23 |
+
);
|
24 |
+
}
|
25 |
+
|
26 |
+
function auto_updater_settings() {
|
27 |
+
if ( ! current_user_can( 'update_core' ) )
|
28 |
+
wp_die( __( 'You do not have sufficient permissions to access this page.', 'automatic-updater' ) );
|
29 |
+
|
30 |
+
$message = '';
|
31 |
+
if ( ! empty( $_REQUEST['submit'] ) ) {
|
32 |
+
check_admin_referer( 'automatic-updater-settings' );
|
33 |
+
|
34 |
+
auto_updater_save_settings();
|
35 |
+
$message = __( 'Settings updated', 'automatic-updater' );
|
36 |
+
}
|
37 |
+
$options = get_option( 'automatic-updater' );
|
38 |
+
$messages = array(
|
39 |
+
'core' => __( 'Update WordPress Core automatically? <strong>(Strongly Recommended)</strong>', 'automatic-updater' ),
|
40 |
+
'plugins' => __( 'Update your plugins automatically?', 'automatic-updater' ),
|
41 |
+
'themes' => __( 'Updater your themes automatically?', 'automatic-updater' )
|
42 |
+
);
|
43 |
+
?>
|
44 |
+
<div class="wrap">
|
45 |
+
<?php screen_icon('tools'); ?>
|
46 |
+
<h2><?php _e( 'Automattic Updater', 'automatic-updater' ); ?></h2>
|
47 |
+
<?php
|
48 |
+
if ( ! empty( $message ) ) {
|
49 |
+
?>
|
50 |
+
<div class="updated">
|
51 |
+
<p><?php echo $message; ?></p>
|
52 |
+
</div>
|
53 |
+
<?php
|
54 |
+
}
|
55 |
+
?>
|
56 |
+
<form method="post">
|
57 |
+
<?php wp_nonce_field( 'automatic-updater-settings' ); ?>
|
58 |
+
<?php
|
59 |
+
foreach ( $options['update'] as $type => $enabled ) {
|
60 |
+
$checked = '';
|
61 |
+
if ( $enabled )
|
62 |
+
$checked = ' checked="checked"';
|
63 |
+
|
64 |
+
echo "<p><input type='checkbox' id='$type' name='$type' value='1'$checked> <label for='$type'>{$messages[$type]}</label></p>";
|
65 |
+
}
|
66 |
+
?>
|
67 |
+
<p><input class="button button-primary" type="submit" name="submit" id="submit" value="<?php esc_attr_e( 'Save Changes', 'automatic-updater' ); ?>" /></p>
|
68 |
+
</form>
|
69 |
+
</div>
|
70 |
+
<?php
|
71 |
+
}
|
72 |
+
|
73 |
+
function auto_updater_save_settings() {
|
74 |
+
$types = array( 'core', 'plugins', 'themes' );
|
75 |
+
$options = get_option( 'automatic-updater' );
|
76 |
+
|
77 |
+
foreach ( $types as $type ) {
|
78 |
+
if ( ! empty( $_REQUEST[$type] ) )
|
79 |
+
$options['update'][$type] = true;
|
80 |
+
else
|
81 |
+
$options['update'][$type] = false;
|
82 |
+
}
|
83 |
+
|
84 |
+
update_option( 'automatic-updater', $options );
|
85 |
+
}
|
automatic-updater.php
ADDED
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
* Plugin Name: Automatic Updater
|
4 |
+
* Plugin URI: http://pento.net/
|
5 |
+
* Description: Automatically update your WordPress site, as soon as updates are released! Never worry about falling behing on updating again!
|
6 |
+
* Author: pento
|
7 |
+
* Version: 0.1
|
8 |
+
* Author URI: http://pento.net
|
9 |
+
* License: GPL2+
|
10 |
+
* Text Domain: automatic-updater
|
11 |
+
* Domain Path: /languages/
|
12 |
+
*/
|
13 |
+
|
14 |
+
global $auto_updater_running;
|
15 |
+
$auto_updater_running = false;
|
16 |
+
|
17 |
+
function auto_updater_init() {
|
18 |
+
if ( is_admin() )
|
19 |
+
include_once( dirname( __FILE__ ) . '/admin.php' );
|
20 |
+
|
21 |
+
$options = get_option( 'automatic-updater', array() );
|
22 |
+
|
23 |
+
if ( empty( $options ) ) {
|
24 |
+
$options = array(
|
25 |
+
'update' => array(
|
26 |
+
'core' => true,
|
27 |
+
'plugins' => false,
|
28 |
+
'themes' => false,
|
29 |
+
),
|
30 |
+
);
|
31 |
+
update_option( 'automatic-updater', $options );
|
32 |
+
}
|
33 |
+
|
34 |
+
global $auto_updater_running;
|
35 |
+
// If the update check was one we called manually, don't get into a crazy recusive loop.
|
36 |
+
if ( $auto_updater_running )
|
37 |
+
return;
|
38 |
+
|
39 |
+
// Only do this during the wp-cron version check, it'd suck if the upgrade was interrupted.
|
40 |
+
if ( ! defined( 'DOING_CRON' ) || ! DOING_CRON )
|
41 |
+
return;
|
42 |
+
|
43 |
+
if ( ! empty( $options['update']['core'] ) ) {
|
44 |
+
add_action( 'set_site_transient_update_core', 'auto_updater_core');
|
45 |
+
add_action( 'set_site_transient__site_transient_update_core', 'auto_updater_core');
|
46 |
+
}
|
47 |
+
if ( ! empty( $options['update']['plugins'] ) ) {
|
48 |
+
add_action( 'set_site_transient_update_plugins', 'auto_updater_plugins' );
|
49 |
+
add_action( 'set_site_transient__site_transient_update_plugins', 'auto_updater_plugins' );
|
50 |
+
}
|
51 |
+
if ( ! empty( $options['update']['themes'] ) ) {
|
52 |
+
add_action( 'set_site_transient_update_themes', 'auto_updater_themes' );
|
53 |
+
add_action( 'set_site_transient__site_transient_update_themes', 'auto_updater_themes' );
|
54 |
+
}
|
55 |
+
}
|
56 |
+
add_action( 'init', 'auto_updater_init' );
|
57 |
+
|
58 |
+
function auto_updater_core() {
|
59 |
+
global $auto_updater_running;
|
60 |
+
if ( $auto_updater_running )
|
61 |
+
return;
|
62 |
+
|
63 |
+
// Forgive me father, for I have sinned. I have included wp-admin files in a plugin.
|
64 |
+
// It's behind a DOING_CRON check, so won't cause much trouble.
|
65 |
+
include_once( ABSPATH . 'wp-admin/includes/update.php' );
|
66 |
+
include_once( ABSPATH . 'wp-admin/includes/file.php' );
|
67 |
+
|
68 |
+
include_once( dirname( __FILE__ ) . '/updater-skin.php' );
|
69 |
+
|
70 |
+
$updates = get_core_updates();
|
71 |
+
if ( empty( $updates ) )
|
72 |
+
return;
|
73 |
+
|
74 |
+
$update = find_core_update( $updates[0]->current, $updates[0]->locale );
|
75 |
+
if ( empty( $update ) )
|
76 |
+
return;
|
77 |
+
|
78 |
+
$auto_updater_running = true;
|
79 |
+
|
80 |
+
$skin = new Auto_Updater_Skin();
|
81 |
+
$upgrader = new Core_Upgrader( $skin );
|
82 |
+
$upgrader->upgrade( $update );
|
83 |
+
|
84 |
+
$message = join( "\r\n", $skin->messages );
|
85 |
+
|
86 |
+
wp_mail( get_option( 'admin_email' ), __( 'Core Update', 'automatic-updater' ), $message );
|
87 |
+
|
88 |
+
wp_version_check();
|
89 |
+
}
|
90 |
+
|
91 |
+
function auto_updater_plugins() {
|
92 |
+
global $auto_updater_running;
|
93 |
+
if ( $auto_updater_running )
|
94 |
+
return;
|
95 |
+
|
96 |
+
include_once( ABSPATH . 'wp-admin/includes/update.php' );
|
97 |
+
include_once( ABSPATH . 'wp-admin/includes/file.php' );
|
98 |
+
|
99 |
+
include_once( dirname( __FILE__ ) . '/updater-skin.php' );
|
100 |
+
|
101 |
+
$plugins = array_keys( get_plugin_updates() );
|
102 |
+
if ( empty( $plugins ) )
|
103 |
+
return;
|
104 |
+
|
105 |
+
$auto_updater_running = true;
|
106 |
+
|
107 |
+
$skin = new Auto_Updater_Skin();
|
108 |
+
$upgrader = new Plugin_Upgrader( $skin );
|
109 |
+
$upgrader->bulk_upgrade( $plugins );
|
110 |
+
|
111 |
+
$message = join( "\r\n", $skin->messages );
|
112 |
+
|
113 |
+
wp_mail( get_option( 'admin_email' ), __( 'Plugin Update', 'automatic-updater' ), $message );
|
114 |
+
|
115 |
+
wp_update_plugins();
|
116 |
+
}
|
117 |
+
|
118 |
+
function auto_updater_themes() {
|
119 |
+
global $auto_updater_running;
|
120 |
+
if ( $auto_updater_running )
|
121 |
+
return;
|
122 |
+
|
123 |
+
include_once( ABSPATH . 'wp-admin/includes/update.php' );
|
124 |
+
include_once( ABSPATH . 'wp-admin/includes/file.php' );
|
125 |
+
|
126 |
+
include_once( dirname( __FILE__ ) . '/updater-skin.php' );
|
127 |
+
|
128 |
+
$themes = array_keys( get_theme_updates() );
|
129 |
+
if ( empty( $themes ) )
|
130 |
+
return;
|
131 |
+
|
132 |
+
$auto_updater_running = true;
|
133 |
+
|
134 |
+
$skin = new Auto_Updater_Skin();
|
135 |
+
$upgrader = new Theme_Upgrader( $skin );
|
136 |
+
$upgrader->bulk_upgrade( $themes );
|
137 |
+
|
138 |
+
$message = join( "\r\n", $skin->messages );
|
139 |
+
|
140 |
+
wp_mail( get_option( 'admin_email' ), __( 'Theme Update', 'automatic-updater' ), $message );
|
141 |
+
|
142 |
+
wp_update_themes();
|
143 |
+
}
|
readme.txt
ADDED
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Automatic Updater ===
|
2 |
+
Contributors: pento
|
3 |
+
Tags: updates, core, plugins, themes
|
4 |
+
Requires at least: 3.1
|
5 |
+
Tested up to: 3.5
|
6 |
+
Stable tag: 0.1
|
7 |
+
|
8 |
+
Automatically update WordPress, your themes and plugins! Never have to click the update button again!
|
9 |
+
|
10 |
+
== Description ==
|
11 |
+
|
12 |
+
Automatic Updater keeps your WordPress install up to date with the latest releases automatically, as soon as the update is available.
|
13 |
+
|
14 |
+
While this will be useful for the vast majority of sites, please exercise caution, particularly if you have any custom themes or plugins running on your site.
|
15 |
+
|
16 |
+
You should also be aware that this will only work on WordPress installs that have the appropriate file permissions to update through the web interface - it will not work if you usually FTP updates to your server.
|
updater-skin.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
4 |
+
|
5 |
+
class Auto_Updater_Skin extends WP_Upgrader_Skin {
|
6 |
+
var $messages = array();
|
7 |
+
|
8 |
+
function __construct( $args = array() ) {
|
9 |
+
parent::__construct( $args );
|
10 |
+
}
|
11 |
+
|
12 |
+
function feedback( $data ) {
|
13 |
+
if ( is_wp_error( $data ) )
|
14 |
+
$string = $data->get_error_message();
|
15 |
+
else if ( is_array( $data ) ) {
|
16 |
+
return;
|
17 |
+
}
|
18 |
+
else
|
19 |
+
$string = $data;
|
20 |
+
|
21 |
+
if ( ! empty( $this->upgrader->strings[$string] ) )
|
22 |
+
$string = $this->upgrader->strings[$string];
|
23 |
+
|
24 |
+
if ( strpos($string, '%') !== false ) {
|
25 |
+
$args = func_get_args();
|
26 |
+
$args = array_splice( $args, 1 );
|
27 |
+
if ( ! empty( $args ) )
|
28 |
+
$string = vsprintf( $string, $args );
|
29 |
+
}
|
30 |
+
|
31 |
+
if ( empty( $string ) )
|
32 |
+
return;
|
33 |
+
|
34 |
+
$this->messages[] = $string;
|
35 |
+
}
|
36 |
+
|
37 |
+
function header() {}
|
38 |
+
function footer() {}
|
39 |
+
function bulk_header() {}
|
40 |
+
function bulk_footer() {}
|
41 |
+
function before() {}
|
42 |
+
function after() {}
|
43 |
+
}
|