PluginProbe
ManageWP Worker / 3.9.10
ManageWP Worker v3.9.10
4.9.38 4.9.37 4.9.36 4.9.35 4.9.34 3.8.7 3.8.8 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.22 3.9.23 3.9.24 All 73 releases
worker / core.class.php

core.class.php in ManageWP Worker 3.9.10, at core.class.php

607 lines 18.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*************************************************************
3 *
4 * core.class.php
5 *
6 * Upgrade Plugins
7 *
8 *
9 * Copyright (c) 2011 Prelovac Media
10 * www.prelovac.com
11 **************************************************************/
12 class MMB_Core extends MMB_Helper
13 {
14 var $name;
15 var $slug;
16 var $settings;
17 var $remote_client;
18 var $comment_instance;
19 var $plugin_instance;
20 var $theme_instance;
21 var $wp_instance;
22 var $post_instance;
23 var $stats_instance;
24 var $search_instance;
25 var $links_instance;
26 var $user_instance;
27 var $backup_instance;
28 var $installer_instance;
29 var $mmb_multisite;
30 var $network_admin_install;
31 private $action_call;
32 private $action_params;
33 private $mmb_pre_init_actions;
34 private $mmb_pre_init_filters;
35 private $mmb_init_actions;
36
37
38 function __construct()
39 {
40 global $mmb_plugin_dir, $wpmu_version, $blog_id, $_mmb_plugin_actions, $_mmb_item_filter;
41
42 $_mmb_plugin_actions = array();
43 $this->name = 'Manage Multiple Blogs';
44 $this->slug = 'manage-multiple-blogs';
45 $this->action_call = null;
46 $this->action_params = null;
47
48
49 $this->settings = get_option($this->slug);
50 if (!$this->settings) {
51 $this->settings = array(
52 'blogs' => array(),
53 'current_blog' => array(
54 'type' => null
55 )
56 );
57 $this->save_options();
58 }
59 if ( function_exists('is_multisite') ) {
60 if ( is_multisite() ) {
61 $this->mmb_multisite = $blog_id;
62 $this->network_admin_install = get_option('mmb_network_admin_install');
63 }
64 } else if (!empty($wpmu_version)) {
65 $this->mmb_multisite = $blog_id;
66 $this->network_admin_install = get_option('mmb_network_admin_install');
67 } else {
68 $this->mmb_multisite = false;
69 $this->network_admin_install = null;
70 }
71
72 // admin notices
73 if ( !get_option('_worker_public_key') ){
74 if( $this->mmb_multisite ){
75 if( is_network_admin() && $this->network_admin_install == '1'){
76 add_action('network_admin_notices', array( &$this, 'network_admin_notice' ));
77 } else if( $this->network_admin_install != '1' ){
78 $parent_key = $this->get_parent_blog_option('_worker_public_key');
79 if(empty($parent_key))
80 add_action('admin_notices', array( &$this, 'admin_notice' ));
81 }
82 } else {
83 add_action('admin_notices', array( &$this, 'admin_notice' ));
84 }
85 }
86
87 // default filters
88 //$this->mmb_pre_init_filters['get_stats']['mmb_stats_filter'][] = array('MMB_Stats', 'pre_init_stats'); // called with class name, use global $mmb_core inside the function instead of $this
89 $this->mmb_pre_init_filters['get_stats']['mmb_stats_filter'][] = 'mmb_pre_init_stats';
90
91 $_mmb_item_filter['pre_init_stats'] = array( 'core_update', 'hit_counter', 'comments', 'backups', 'posts', 'drafts', 'scheduled' );
92 $_mmb_item_filter['get'] = array( 'updates', 'errors' );
93
94 $this->mmb_pre_init_actions = array(
95 'do_upgrade' => 'mmb_do_upgrade'
96 );
97 $this->mmb_init_actions = array(
98 'get_stats' => 'mmb_stats_get',
99 'remove_site' => 'mmb_remove_site',
100 'backup_clone' => 'mmb_backup_now',
101 'restore' => 'mmb_restore_now',
102 'optimize_tables' => 'mmb_optimize_tables',
103 'check_wp_version' => 'mmb_wp_checkversion',
104 'create_post' => 'mmb_post_create',
105 'update_worker' => 'mmb_update_worker_plugin',
106 'change_comment_status' => 'mmb_change_comment_status',
107 'change_post_status' => 'mmb_change_post_status',
108 'get_comment_stats' => 'mmb_comment_stats_get',
109 'install_addon' => 'mmb_install_addon',
110 'add_link' => 'mmb_add_link',
111 'add_user' => 'mmb_add_user',
112 'email_backup' => 'mmb_email_backup',
113 'check_backup_compat' => 'mmb_check_backup_compat',
114 'scheduled_backup' => 'mmb_scheduled_backup',
115 'execute_php_code' => 'mmb_execute_php_code',
116 'delete_backup' => 'mmm_delete_backup',
117 'remote_backup_now' => 'mmb_remote_backup_now',
118 'set_notifications' => 'mmb_set_notifications',
119 'clean_orphan_backups' => 'mmb_clean_orphan_backups',
120 'get_users' => 'mmb_get_users',
121 'edit_users' => 'mmb_edit_users',
122 'get_plugins_themes' => 'mmb_get_plugins_themes',
123 'edit_plugins_themes' => 'mmb_edit_plugins_themes',
124 'worker_brand' => 'mmb_worker_brand'
125 );
126
127 add_action('rightnow_end', array( 'MMB_Stats', 'add_right_now_info' ));
128 add_action('wp_footer', array( 'MMB_Stats', 'set_hit_count' ));
129 add_action('admin_init', array($this,'admin_actions'));
130 add_action('init', array( &$this, 'mmb_remote_action'), 9999);
131 add_action('setup_theme', 'mmb_parse_request');
132 }
133
134 function mmb_remote_action(){
135 if($this->action_call != null){
136 $params = isset($this->action_params) && $this->action_params != null ? $this->action_params : array();
137 call_user_func($this->action_call, $params);
138 }
139 }
140
141 function register_action_params( $action = false, $params = array() ){
142
143 if(isset($this->mmb_pre_init_actions[$action]) && function_exists($this->mmb_pre_init_actions[$action])){
144 call_user_func($this->mmb_pre_init_actions[$action], $params);
145 }
146
147 if(isset($this->mmb_init_actions[$action]) && function_exists($this->mmb_init_actions[$action])){
148 $this->action_call = $this->mmb_init_actions[$action];
149 $this->action_params = $params;
150
151 if( isset($this->mmb_pre_init_filters[$action]) && !empty($this->mmb_pre_init_filters[$action])){
152 global $mmb_filters;
153
154 foreach($this->mmb_pre_init_filters[$action] as $_name => $_functions){
155 if(!empty($_functions)){
156 $data = array();
157
158 foreach($_functions as $_k => $_callback){
159 if(is_array($_callback) && method_exists($_callback[0], $_callback[1]) ){
160 $data = call_user_func( $_callback, $params );
161 } elseif (is_string($_callback) && function_exists( $_callback )){
162 $data = call_user_func( $_callback, $params );
163 }
164 $mmb_filters[$_name] = isset($mmb_filters[$_name]) && !empty($mmb_filters[$_name]) ? array_merge($mmb_filters[$_name], $data) : $data;
165 add_filter( $_name, create_function( '$a' , 'global $mmb_filters; return array_merge($a, $mmb_filters["'.$_name.'"]);') );
166 }
167 }
168
169 }
170 }
171 return true;
172 }
173 return false;
174 }
175
176 /**
177 * Add notice to network admin dashboard for security reasons
178 *
179 */
180 function network_admin_notice()
181 {
182 echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">Attention !</p><p>
183 Please add this site and your network blogs, with your network adminstrator username, to your <a target="_blank" href="http://managewp.com/user-guide#multisite">ManageWP.com</a> account now to remove this notice or "Network Deactivate" the Worker plugin to avoid <a target="_blank" href="http://managewp.com/user-guide#security">security issues</a>.
184 </p></div>';
185 }
186
187
188 /**
189 * Add notice to admin dashboard for security reasons
190 *
191 */
192 function admin_notice()
193 {
194 echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">Attention !</p><p>
195 Please add this site to your <a target="_blank" href="http://managewp.com/user-guide#security">ManageWP.com</a> account now to remove this notice or deactivate the Worker plugin to avoid <a target="_blank" href="http://managewp.com/user-guide#security">security issues</a>.
196 </p></div>';
197 }
198
199 /**
200 * Add an item into the Right Now Dashboard widget
201 * to inform that the blog can be managed remotely
202 *
203 */
204 function add_right_now_info()
205 {
206 echo '<div class="mmb-slave-info">
207 <p>This site can be managed remotely.</p>
208 </div>';
209 }
210
211 /**
212 * Get parent blog options
213 *
214 */
215 private function get_parent_blog_option( $option_name = '' )
216 {
217 global $wpdb;
218 $option = $wpdb->get_var( $wpdb->prepare( "SELECT `option_value` FROM {$wpdb->base_prefix}options WHERE option_name = '{$option_name}' LIMIT 1" ) );
219 return $option;
220 }
221
222 /**
223 * Gets an instance of the Comment class
224 *
225 */
226 function get_comment_instance()
227 {
228 if (!isset($this->comment_instance)) {
229 $this->comment_instance = new MMB_Comment();
230 }
231
232 return $this->comment_instance;
233 }
234
235 /**
236 * Gets an instance of the Plugin class
237 *
238 */
239 function get_plugin_instance()
240 {
241 if (!isset($this->plugin_instance)) {
242 $this->plugin_instance = new MMB_Plugin();
243 }
244
245 return $this->plugin_instance;
246 }
247
248 /**
249 * Gets an instance of the Theme class
250 *
251 */
252 function get_theme_instance()
253 {
254 if (!isset($this->theme_instance)) {
255 $this->theme_instance = new MMB_Theme();
256 }
257
258 return $this->theme_instance;
259 }
260
261
262 /**
263 * Gets an instance of MMB_Post class
264 *
265 */
266 function get_post_instance()
267 {
268 if (!isset($this->post_instance)) {
269 $this->post_instance = new MMB_Post();
270 }
271
272 return $this->post_instance;
273 }
274
275 /**
276 * Gets an instance of Blogroll class
277 *
278 */
279 function get_blogroll_instance()
280 {
281 if (!isset($this->blogroll_instance)) {
282 $this->blogroll_instance = new MMB_Blogroll();
283 }
284
285 return $this->blogroll_instance;
286 }
287
288
289
290 /**
291 * Gets an instance of the WP class
292 *
293 */
294 function get_wp_instance()
295 {
296 if (!isset($this->wp_instance)) {
297 $this->wp_instance = new MMB_WP();
298 }
299
300 return $this->wp_instance;
301 }
302
303 /**
304 * Gets an instance of User
305 *
306 */
307 function get_user_instance()
308 {
309 if (!isset($this->user_instance)) {
310 $this->user_instance = new MMB_User();
311 }
312
313 return $this->user_instance;
314 }
315
316 /**
317 * Gets an instance of stats class
318 *
319 */
320 function get_stats_instance()
321 {
322 if (!isset($this->stats_instance)) {
323 $this->stats_instance = new MMB_Stats();
324 }
325 return $this->stats_instance;
326 }
327 /**
328 * Gets an instance of search class
329 *
330 */
331 function get_search_instance()
332 {
333 if (!isset($this->search_instance)) {
334 $this->search_instance = new MMB_Search();
335 }
336 //return $this->search_instance;
337 return $this->search_instance;
338 }
339 /**
340 * Gets an instance of stats class
341 *
342 */
343 function get_backup_instance()
344 {
345 if (!isset($this->backup_instance)) {
346 $this->backup_instance = new MMB_Backup();
347 }
348
349 return $this->backup_instance;
350 }
351
352 /**
353 * Gets an instance of links class
354 *
355 */
356 function get_link_instance()
357 {
358 if (!isset($this->link_instance)) {
359 $this->link_instance = new MMB_Link();
360 }
361
362 return $this->link_instance;
363 }
364
365 function get_installer_instance()
366 {
367 if (!isset($this->installer_instance)) {
368 $this->installer_instance = new MMB_Installer();
369 }
370 return $this->installer_instance;
371 }
372
373 /**
374 * Plugin install callback function
375 * Check PHP version
376 */
377 function install() {
378
379 global $wpdb, $_wp_using_ext_object_cache, $current_user;
380 $_wp_using_ext_object_cache = false;
381
382 //delete plugin options, just in case
383 if ($this->mmb_multisite != false) {
384 $user_blogs = get_blogs_of_user($current_user->ID);
385 if(!empty($user_blogs)){
386 if( is_network_admin() ){
387 update_option('mmb_network_admin_install', 1);
388 foreach($user_blogs as $blog_id => $blog_data){
389 if($this->mmb_multisite != $blog_id)
390 update_blog_option($blog_id, 'mmb_network_admin_install', -1);
391
392 delete_blog_option($blog_id, '_worker_nossl_key');
393 delete_blog_option($blog_id, '_worker_public_key');
394 delete_blog_option($blog_id, '_action_message_id');
395 }
396 } else {
397 if(isset($user_blogs[$this->mmb_multisite])){
398 update_option('mmb_network_admin_install', -1);
399 delete_option('_worker_nossl_key');
400 delete_option('_worker_public_key');
401 delete_option('_action_message_id');
402 }
403 }
404 }
405 } else {
406 delete_option('_worker_nossl_key');
407 delete_option('_worker_public_key');
408 delete_option('_action_message_id');
409 }
410
411 delete_option('mwp_backup_tasks');
412 delete_option('mwp_notifications');
413 delete_option('mwp_worker_brand');
414
415 }
416
417 /**
418 * Saves the (modified) options into the database
419 *
420 */
421 function save_options()
422 {
423 if (get_option($this->slug)) {
424 update_option($this->slug, $this->settings);
425 } else {
426 add_option($this->slug, $this->settings);
427 }
428 }
429
430 /**
431 * Deletes options for communication with master
432 *
433 */
434 function uninstall( $deactivate = false )
435 {
436 global $current_user, $wpdb, $_wp_using_ext_object_cache;
437 $_wp_using_ext_object_cache = false;
438
439 if ($this->mmb_multisite != false) {
440 $user_blogs = get_blogs_of_user($current_user->ID);
441 if(!empty($user_blogs)){
442 if( is_network_admin() ){
443 if( $deactivate ) {
444 delete_option('mmb_network_admin_install');
445 foreach($user_blogs as $blog_id => $blog_data){
446 delete_blog_option($blog_id, 'mmb_network_admin_install');
447 delete_blog_option($blog_id, '_worker_nossl_key');
448 delete_blog_option($blog_id, '_worker_public_key');
449 delete_blog_option($blog_id, '_action_message_id');
450 }
451 }
452 } else {
453 if( $deactivate )
454 delete_option('mmb_network_admin_install');
455 if(isset($user_blogs[$this->mmb_multisite])){
456 delete_option('_worker_nossl_key');
457 delete_option('_worker_public_key');
458 delete_option('_action_message_id');
459 }
460 }
461 }
462 } else {
463 delete_option('_worker_nossl_key');
464 delete_option('_worker_public_key');
465 delete_option('_action_message_id');
466 }
467
468 //Delete backup tasks
469 delete_option('mwp_backup_tasks');
470 wp_clear_scheduled_hook('mwp_backup_tasks');
471
472 //Delete notifications
473 delete_option('mwp_notifications');
474 wp_clear_scheduled_hook('mwp_notifications');
475 delete_option('mwp_worker_brand');
476 }
477
478
479 /**
480 * Constructs a url (for ajax purpose)
481 *
482 * @param mixed $base_page
483 */
484 function construct_url($params = array(), $base_page = 'index.php')
485 {
486 $url = "$base_page?_wpnonce=" . wp_create_nonce($this->slug);
487 foreach ($params as $key => $value) {
488 $url .= "&$key=$value";
489 }
490
491 return $url;
492 }
493
494 /**
495 * Worker update
496 *
497 */
498 function update_worker_plugin($params)
499 {
500 extract($params);
501 if ($download_url) {
502 @include_once ABSPATH . 'wp-admin/includes/file.php';
503 @include_once ABSPATH . 'wp-admin/includes/misc.php';
504 @include_once ABSPATH . 'wp-admin/includes/template.php';
505 @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
506 @include_once ABSPATH . 'wp-admin/includes/screen.php';
507
508 if (!$this->is_server_writable()) {
509 return array(
510 'error' => 'Failed, please <a target="_blank" href="http://managewp.com/user-guide#ftp">add FTP details for automatic upgrades.</a></a>'
511 );
512 }
513
514 ob_start();
515 @unlink(dirname(__FILE__));
516 $upgrader = new Plugin_Upgrader();
517 $result = $upgrader->run(array(
518 'package' => $download_url,
519 'destination' => WP_PLUGIN_DIR,
520 'clear_destination' => true,
521 'clear_working' => true,
522 'hook_extra' => array(
523 'plugin' => 'worker/init.php'
524 )
525 ));
526 ob_end_clean();
527 if (is_wp_error($result) || !$result) {
528 return array(
529 'error' => 'ManageWP Worker plugin could not be updated.'
530 );
531 } else {
532 return array(
533 'success' => 'ManageWP Worker plugin successfully updated.'
534 );
535 }
536 }
537 return array(
538 'error' => 'Bad download path for worker installation file.'
539 );
540 }
541
542 /**
543 * Automatically logs in when called from Master
544 *
545 */
546 function automatic_login()
547 {
548 $where = isset($_GET['mwp_goto']) ? $_GET['mwp_goto'] : false;
549 $username = isset($_GET['username']) ? $_GET['username'] : '';
550 $auto_login = isset($_GET['auto_login']) ? $_GET['auto_login'] : 0;
551
552 if( !function_exists('is_user_logged_in') )
553 include_once( ABSPATH.'wp-includes/pluggable.php' );
554
555 if (( $auto_login && strlen(trim($username)) && !is_user_logged_in() ) || (isset($this->mmb_multisite) && $this->mmb_multisite )) {
556 $signature = base64_decode($_GET['signature']);
557 $message_id = trim($_GET['message_id']);
558
559 $auth = $this->authenticate_message($where . $message_id, $signature, $message_id);
560 if ($auth === true) {
561
562 if (!headers_sent())
563 header('P3P: CP="CAO PSA OUR"');
564
565 $siteurl = get_site_option( 'siteurl' );
566 $user = get_user_by('login', $username);
567 wp_set_current_user($user->ID);
568
569 $expiration = time() + apply_filters('auth_cookie_expiration', 10800, $user->ID, false);
570 $auth_cookie = wp_generate_auth_cookie($user->ID, $expiration, 'auth');
571 $logged_in_cookie = wp_generate_auth_cookie($user->ID, $expiration, 'logged_in');
572 $_COOKIE['wordpress_'.md5( $siteurl )] = $auth_cookie;
573 $_COOKIE['wordpress_logged_in_'.md5( $siteurl )] = $logged_in_cookie;
574
575 wp_set_auth_cookie($user->ID);
576 setcookie(MMB_XFRAME_COOKIE, md5(MMB_XFRAME_COOKIE), $expiration, COOKIEPATH, COOKIE_DOMAIN, false, true);
577 $_COOKIE[MMB_XFRAME_COOKIE] = md5(MMB_XFRAME_COOKIE);
578 } else {
579 wp_die($auth['error']);
580 }
581 } elseif( is_user_logged_in() ) {
582 @mmb_worker_header();
583 }
584 }
585
586 function admin_actions(){
587 add_filter('all_plugins', array($this, 'worker_replace'));
588 }
589
590 function worker_replace($all_plugins){
591 $replace = get_option("mwp_worker_brand");
592 if(is_array($replace)){
593 if($replace['name']){
594 $all_plugins['worker/init.php']['Name'] = $replace['name'];
595 $all_plugins['worker/init.php']['Title'] = $replace['name'];
596 }
597 if($replace['desc']){
598 $all_plugins['worker/init.php']['Description'] = $replace['desc'];
599 }
600 }
601
602 return $all_plugins;
603 }
604
605
606 }
607 ?>