PluginProbe
ManageWP Worker / 3.9.15
ManageWP Worker v3.9.15
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.15, at core.class.php

662 lines 20.5 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 'backup_req' => 'mmb_get_backup_req',
96 );
97
98 $this->mmb_init_actions = array(
99 'do_upgrade' => 'mmb_do_upgrade',
100 'get_stats' => 'mmb_stats_get',
101 'remove_site' => 'mmb_remove_site',
102 'backup_clone' => 'mmb_backup_now',
103 'restore' => 'mmb_restore_now',
104 'optimize_tables' => 'mmb_optimize_tables',
105 'check_wp_version' => 'mmb_wp_checkversion',
106 'create_post' => 'mmb_post_create',
107 'update_worker' => 'mmb_update_worker_plugin',
108 'change_comment_status' => 'mmb_change_comment_status',
109 'change_post_status' => 'mmb_change_post_status',
110 'get_comment_stats' => 'mmb_comment_stats_get',
111 'install_addon' => 'mmb_install_addon',
112 'add_link' => 'mmb_add_link',
113 'add_user' => 'mmb_add_user',
114 'email_backup' => 'mmb_email_backup',
115 'check_backup_compat' => 'mmb_check_backup_compat',
116 'scheduled_backup' => 'mmb_scheduled_backup',
117 'run_task' => 'mmb_run_task_now',
118 'execute_php_code' => 'mmb_execute_php_code',
119 'delete_backup' => 'mmm_delete_backup',
120 'remote_backup_now' => 'mmb_remote_backup_now',
121 'set_notifications' => 'mmb_set_notifications',
122 'clean_orphan_backups' => 'mmb_clean_orphan_backups',
123 'get_users' => 'mmb_get_users',
124 'edit_users' => 'mmb_edit_users',
125 'get_plugins_themes' => 'mmb_get_plugins_themes',
126 'edit_plugins_themes' => 'mmb_edit_plugins_themes',
127 'worker_brand' => 'mmb_worker_brand',
128 'set_alerts' => 'mmb_set_alerts',
129 'maintenance' => 'mmb_maintenance_mode'
130 );
131
132 add_action('rightnow_end', array( &$this, 'add_right_now_info' ));
133 add_action('admin_init', array(&$this,'admin_actions'));
134 add_action('init', array( &$this, 'mmb_remote_action'), 9999);
135 add_action('setup_theme', 'mmb_parse_request');
136 add_action('set_auth_cookie', array( &$this, 'mmb_set_auth_cookie'));
137 add_action('set_logged_in_cookie', array( &$this, 'mmb_set_logged_in_cookie'));
138
139 }
140
141 function mmb_remote_action(){
142 if($this->action_call != null){
143 $params = isset($this->action_params) && $this->action_params != null ? $this->action_params : array();
144 call_user_func($this->action_call, $params);
145 }
146 }
147
148 function register_action_params( $action = false, $params = array() ){
149
150 if(isset($this->mmb_pre_init_actions[$action]) && function_exists($this->mmb_pre_init_actions[$action])){
151 call_user_func($this->mmb_pre_init_actions[$action], $params);
152 }
153
154 if(isset($this->mmb_init_actions[$action]) && function_exists($this->mmb_init_actions[$action])){
155 $this->action_call = $this->mmb_init_actions[$action];
156 $this->action_params = $params;
157
158 if( isset($this->mmb_pre_init_filters[$action]) && !empty($this->mmb_pre_init_filters[$action])){
159 global $mmb_filters;
160
161 foreach($this->mmb_pre_init_filters[$action] as $_name => $_functions){
162 if(!empty($_functions)){
163 $data = array();
164
165 foreach($_functions as $_k => $_callback){
166 if(is_array($_callback) && method_exists($_callback[0], $_callback[1]) ){
167 $data = call_user_func( $_callback, $params );
168 } elseif (is_string($_callback) && function_exists( $_callback )){
169 $data = call_user_func( $_callback, $params );
170 }
171 $mmb_filters[$_name] = isset($mmb_filters[$_name]) && !empty($mmb_filters[$_name]) ? array_merge($mmb_filters[$_name], $data) : $data;
172 add_filter( $_name, create_function( '$a' , 'global $mmb_filters; return array_merge($a, $mmb_filters["'.$_name.'"]);') );
173 }
174 }
175
176 }
177 }
178 return true;
179 }
180 return false;
181 }
182
183 /**
184 * Add notice to network admin dashboard for security reasons
185 *
186 */
187 function network_admin_notice()
188 {
189 echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">Attention !</p><p>
190 Please add this site and your network blogs, with your network adminstrator username, to your <a target="_blank" href="http://managewp.com/wp-admin">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>.
191 </p></div>';
192 }
193
194
195 /**
196 * Add notice to admin dashboard for security reasons
197 *
198 */
199 function admin_notice()
200 {
201 echo '<div class="error" style="text-align: center;"><p style="color: red; font-size: 14px; font-weight: bold;">Attention !</p><p>
202 Please add this site now to your <a target="_blank" href="http://managewp.com/wp-admin">ManageWP.com</a> account. Or deactivate the Worker plugin to avoid <a target="_blank" href="http://managewp.com/user-guide/security">security issues</a>.
203 </p></div>';
204 }
205
206 /**
207 * Add an item into the Right Now Dashboard widget
208 * to inform that the blog can be managed remotely
209 *
210 */
211 function add_right_now_info()
212 {
213 echo '<div class="mmb-slave-info">
214 <p>This site can be managed remotely.</p>
215 </div>';
216 }
217
218 /**
219 * Get parent blog options
220 *
221 */
222 private function get_parent_blog_option( $option_name = '' )
223 {
224 global $wpdb;
225 $option = $wpdb->get_var( $wpdb->prepare( "SELECT `option_value` FROM {$wpdb->base_prefix}options WHERE option_name = '{$option_name}' LIMIT 1" ) );
226 return $option;
227 }
228
229 /**
230 * Gets an instance of the Comment class
231 *
232 */
233 function get_comment_instance()
234 {
235 if (!isset($this->comment_instance)) {
236 $this->comment_instance = new MMB_Comment();
237 }
238
239 return $this->comment_instance;
240 }
241
242 /**
243 * Gets an instance of the Plugin class
244 *
245 */
246 function get_plugin_instance()
247 {
248 if (!isset($this->plugin_instance)) {
249 $this->plugin_instance = new MMB_Plugin();
250 }
251
252 return $this->plugin_instance;
253 }
254
255 /**
256 * Gets an instance of the Theme class
257 *
258 */
259 function get_theme_instance()
260 {
261 if (!isset($this->theme_instance)) {
262 $this->theme_instance = new MMB_Theme();
263 }
264
265 return $this->theme_instance;
266 }
267
268
269 /**
270 * Gets an instance of MMB_Post class
271 *
272 */
273 function get_post_instance()
274 {
275 if (!isset($this->post_instance)) {
276 $this->post_instance = new MMB_Post();
277 }
278
279 return $this->post_instance;
280 }
281
282 /**
283 * Gets an instance of Blogroll class
284 *
285 */
286 function get_blogroll_instance()
287 {
288 if (!isset($this->blogroll_instance)) {
289 $this->blogroll_instance = new MMB_Blogroll();
290 }
291
292 return $this->blogroll_instance;
293 }
294
295
296
297 /**
298 * Gets an instance of the WP class
299 *
300 */
301 function get_wp_instance()
302 {
303 if (!isset($this->wp_instance)) {
304 $this->wp_instance = new MMB_WP();
305 }
306
307 return $this->wp_instance;
308 }
309
310 /**
311 * Gets an instance of User
312 *
313 */
314 function get_user_instance()
315 {
316 if (!isset($this->user_instance)) {
317 $this->user_instance = new MMB_User();
318 }
319
320 return $this->user_instance;
321 }
322
323 /**
324 * Gets an instance of stats class
325 *
326 */
327 function get_stats_instance()
328 {
329 if (!isset($this->stats_instance)) {
330 $this->stats_instance = new MMB_Stats();
331 }
332 return $this->stats_instance;
333 }
334 /**
335 * Gets an instance of search class
336 *
337 */
338 function get_search_instance()
339 {
340 if (!isset($this->search_instance)) {
341 $this->search_instance = new MMB_Search();
342 }
343 //return $this->search_instance;
344 return $this->search_instance;
345 }
346 /**
347 * Gets an instance of stats class
348 *
349 */
350 function get_backup_instance()
351 {
352 if (!isset($this->backup_instance)) {
353 $this->backup_instance = new MMB_Backup();
354 }
355
356 return $this->backup_instance;
357 }
358
359 /**
360 * Gets an instance of links class
361 *
362 */
363 function get_link_instance()
364 {
365 if (!isset($this->link_instance)) {
366 $this->link_instance = new MMB_Link();
367 }
368
369 return $this->link_instance;
370 }
371
372 function get_installer_instance()
373 {
374 if (!isset($this->installer_instance)) {
375 $this->installer_instance = new MMB_Installer();
376 }
377 return $this->installer_instance;
378 }
379
380 /**
381 * Plugin install callback function
382 * Check PHP version
383 */
384 function install() {
385
386 global $wpdb, $_wp_using_ext_object_cache, $current_user;
387 $_wp_using_ext_object_cache = false;
388
389 //delete plugin options, just in case
390 if ($this->mmb_multisite != false) {
391 $user_blogs = get_blogs_of_user($current_user->ID);
392 if(!empty($user_blogs)){
393 if( is_network_admin() ){
394 update_option('mmb_network_admin_install', 1);
395 foreach($user_blogs as $blog_id => $blog_data){
396 if($this->mmb_multisite != $blog_id)
397 update_blog_option($blog_id, 'mmb_network_admin_install', -1);
398
399 delete_blog_option($blog_id, '_worker_nossl_key');
400 delete_blog_option($blog_id, '_worker_public_key');
401 delete_blog_option($blog_id, '_action_message_id');
402 }
403 } else {
404 if(isset($user_blogs[$this->mmb_multisite])){
405 update_option('mmb_network_admin_install', -1);
406 delete_option('_worker_nossl_key');
407 delete_option('_worker_public_key');
408 delete_option('_action_message_id');
409 }
410 }
411 }
412 } else {
413 delete_option('_worker_nossl_key');
414 delete_option('_worker_public_key');
415 delete_option('_action_message_id');
416 }
417
418 delete_option('mwp_backup_tasks');
419 delete_option('mwp_notifications');
420 delete_option('mwp_worker_brand');
421 delete_option('mwp_pageview_alerts');
422
423 }
424
425 /**
426 * Saves the (modified) options into the database
427 *
428 */
429 function save_options()
430 {
431 if (get_option($this->slug)) {
432 update_option($this->slug, $this->settings);
433 } else {
434 add_option($this->slug, $this->settings);
435 }
436 }
437
438 /**
439 * Deletes options for communication with master
440 *
441 */
442 function uninstall( $deactivate = false )
443 {
444 global $current_user, $wpdb, $_wp_using_ext_object_cache;
445 $_wp_using_ext_object_cache = false;
446
447 if ($this->mmb_multisite != false) {
448 $user_blogs = get_blogs_of_user($current_user->ID);
449 if(!empty($user_blogs)){
450 if( is_network_admin() ){
451 if( $deactivate ) {
452 delete_option('mmb_network_admin_install');
453 foreach($user_blogs as $blog_id => $blog_data){
454 delete_blog_option($blog_id, 'mmb_network_admin_install');
455 delete_blog_option($blog_id, '_worker_nossl_key');
456 delete_blog_option($blog_id, '_worker_public_key');
457 delete_blog_option($blog_id, '_action_message_id');
458 delete_blog_option($blog_id, 'mwp_maintenace_mode');
459 }
460 }
461 } else {
462 if( $deactivate )
463 delete_option('mmb_network_admin_install');
464 if(isset($user_blogs[$this->mmb_multisite])){
465 delete_option('_worker_nossl_key');
466 delete_option('_worker_public_key');
467 delete_option('_action_message_id');
468 }
469 }
470 }
471 } else {
472 delete_option('_worker_nossl_key');
473 delete_option('_worker_public_key');
474 delete_option('_action_message_id');
475 }
476
477 //Delete options
478 delete_option('mwp_maintenace_mode');
479 delete_option('mwp_backup_tasks');
480 wp_clear_scheduled_hook('mwp_backup_tasks');
481 delete_option('mwp_notifications');
482 wp_clear_scheduled_hook('mwp_notifications');
483 delete_option('mwp_worker_brand');
484 delete_option('mwp_pageview_alerts');
485 }
486
487
488 /**
489 * Constructs a url (for ajax purpose)
490 *
491 * @param mixed $base_page
492 */
493 function construct_url($params = array(), $base_page = 'index.php')
494 {
495 $url = "$base_page?_wpnonce=" . wp_create_nonce($this->slug);
496 foreach ($params as $key => $value) {
497 $url .= "&$key=$value";
498 }
499
500 return $url;
501 }
502
503 /**
504 * Worker update
505 *
506 */
507 function update_worker_plugin($params)
508 {
509 extract($params);
510 if ($download_url) {
511 @include_once ABSPATH . 'wp-admin/includes/file.php';
512 @include_once ABSPATH . 'wp-admin/includes/misc.php';
513 @include_once ABSPATH . 'wp-admin/includes/template.php';
514 @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
515 @include_once ABSPATH . 'wp-admin/includes/screen.php';
516
517 if (!$this->is_server_writable()) {
518 return array(
519 'error' => 'Failed, please <a target="_blank" href="http://managewp.com/user-guide#ftp">add FTP details for automatic upgrades.</a></a>'
520 );
521 }
522
523 ob_start();
524 @unlink(dirname(__FILE__));
525 $upgrader = new Plugin_Upgrader();
526 $result = $upgrader->run(array(
527 'package' => $download_url,
528 'destination' => WP_PLUGIN_DIR,
529 'clear_destination' => true,
530 'clear_working' => true,
531 'hook_extra' => array(
532 'plugin' => 'worker/init.php'
533 )
534 ));
535 ob_end_clean();
536 if (is_wp_error($result) || !$result) {
537 return array(
538 'error' => 'ManageWP Worker plugin could not be updated.'
539 );
540 } else {
541 return array(
542 'success' => 'ManageWP Worker plugin successfully updated.'
543 );
544 }
545 }
546 return array(
547 'error' => 'Bad download path for worker installation file.'
548 );
549 }
550
551 /**
552 * Automatically logs in when called from Master
553 *
554 */
555 function automatic_login()
556 {
557 $where = isset($_GET['mwp_goto']) ? $_GET['mwp_goto'] : false;
558 $username = isset($_GET['username']) ? $_GET['username'] : '';
559 $auto_login = isset($_GET['auto_login']) ? $_GET['auto_login'] : 0;
560
561 if( !function_exists('is_user_logged_in') )
562 include_once( ABSPATH.'wp-includes/pluggable.php' );
563
564 if (( $auto_login && strlen(trim($username)) && !is_user_logged_in() ) || (isset($this->mmb_multisite) && $this->mmb_multisite )) {
565 $signature = base64_decode($_GET['signature']);
566 $message_id = trim($_GET['message_id']);
567
568 $auth = $this->authenticate_message($where . $message_id, $signature, $message_id);
569 if ($auth === true) {
570
571 if (!headers_sent())
572 header('P3P: CP="CAO PSA OUR"');
573
574 if(!defined('MMB_USER_LOGIN'))
575 define('MMB_USER_LOGIN', true);
576
577 $siteurl = function_exists('get_site_option') ? get_site_option( 'siteurl' ) : get_option('siteurl');
578 $user = $this->mmb_get_user_info($username);
579 wp_set_current_user($user->ID);
580
581 if(!defined('COOKIEHASH') || (isset($this->mmb_multisite) && $this->mmb_multisite) )
582 wp_cookie_constants();
583
584 wp_set_auth_cookie($user->ID);
585 @mmb_worker_header();
586
587 if((isset($this->mmb_multisite) && $this->mmb_multisite ) || isset($_REQUEST['mwpredirect'])){
588 if(function_exists('wp_safe_redirect') && function_exists('admin_url')){
589 wp_safe_redirect(admin_url($where));
590 exit();
591 }
592 }
593 } else {
594 wp_die($auth['error']);
595 }
596 } elseif( is_user_logged_in() ) {
597 @mmb_worker_header();
598 if(isset($_REQUEST['mwpredirect'])){
599 if(function_exists('wp_safe_redirect') && function_exists('admin_url')){
600 wp_safe_redirect(admin_url($where));
601 exit();
602 }
603 }
604 }
605 }
606
607 function mmb_set_auth_cookie( $auth_cookie ){
608 if(!defined('MMB_USER_LOGIN'))
609 return false;
610
611 if( !defined('COOKIEHASH') )
612 wp_cookie_constants();
613
614 $_COOKIE['wordpress_'.COOKIEHASH] = $auth_cookie;
615
616 }
617 function mmb_set_logged_in_cookie( $logged_in_cookie ){
618 if(!defined('MMB_USER_LOGIN'))
619 return false;
620
621 if( !defined('COOKIEHASH') )
622 wp_cookie_constants();
623
624 $_COOKIE['wordpress_logged_in_'.COOKIEHASH] = $logged_in_cookie;
625 }
626
627 function admin_actions(){
628 add_filter('all_plugins', array($this, 'worker_replace'));
629 }
630
631 function worker_replace($all_plugins){
632 $replace = get_option("mwp_worker_brand");
633 if(is_array($replace)){
634 if($replace['name'] || $replace['desc'] || $replace['author'] || $replace['author_url']){
635 $all_plugins['worker/init.php']['Name'] = $replace['name'];
636 $all_plugins['worker/init.php']['Title'] = $replace['name'];
637 $all_plugins['worker/init.php']['Description'] = $replace['desc'];
638 $all_plugins['worker/init.php']['AuthorURI'] = $replace['author_url'];
639 $all_plugins['worker/init.php']['Author'] = $replace['author'];
640 $all_plugins['worker/init.php']['AuthorName'] = $replace['author'];
641 $all_plugins['worker/init.php']['PluginURI'] = '';
642 }
643
644 if($replace['hide']){
645 if (!function_exists('get_plugins')) {
646 include_once(ABSPATH . 'wp-admin/includes/plugin.php');
647 }
648 $activated_plugins = get_option('active_plugins');
649 if (!$activated_plugins)
650 $activated_plugins = array();
651 if(in_array('worker/init.php',$activated_plugins))
652 unset($all_plugins['worker/init.php']);
653 }
654 }
655
656
657 return $all_plugins;
658 }
659
660
661 }
662 ?>