PluginProbe
ManageWP Worker / 3.9.16
ManageWP Worker v3.9.16
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.16, at core.class.php

660 lines 21.2 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 $network_blogs = $wpdb->get_results($wpdb->prepare("select `blog_id`, `site_id` from `{$wpdb->blogs}`"));
392 if(!empty($network_blogs)){
393 if( is_network_admin() ){
394 update_option('mmb_network_admin_install', 1);
395 foreach($network_blogs as $details){
396 if($details->site_id == $details->blog_id)
397 update_blog_option($details->blog_id, 'mmb_network_admin_install', 1);
398 else
399 update_blog_option($details->blog_id, 'mmb_network_admin_install', -1);
400
401 delete_blog_option($blog_id, '_worker_nossl_key');
402 delete_blog_option($blog_id, '_worker_public_key');
403 delete_blog_option($blog_id, '_action_message_id');
404 }
405 } else {
406 update_option('mmb_network_admin_install', -1);
407 delete_option('_worker_nossl_key');
408 delete_option('_worker_public_key');
409 delete_option('_action_message_id');
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 $network_blogs = $wpdb->get_col($wpdb->prepare("select `blog_id` from `{$wpdb->blogs}`"));
449 if(!empty($network_blogs)){
450 if( is_network_admin() ){
451 if( $deactivate ) {
452 delete_option('mmb_network_admin_install');
453 foreach($network_blogs as $blog_id){
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
465 delete_option('_worker_nossl_key');
466 delete_option('_worker_public_key');
467 delete_option('_action_message_id');
468 }
469 }
470 } else {
471 delete_option('_worker_nossl_key');
472 delete_option('_worker_public_key');
473 delete_option('_action_message_id');
474 }
475
476 //Delete options
477 delete_option('mwp_maintenace_mode');
478 delete_option('mwp_backup_tasks');
479 wp_clear_scheduled_hook('mwp_backup_tasks');
480 delete_option('mwp_notifications');
481 wp_clear_scheduled_hook('mwp_notifications');
482 delete_option('mwp_worker_brand');
483 delete_option('mwp_pageview_alerts');
484 }
485
486
487 /**
488 * Constructs a url (for ajax purpose)
489 *
490 * @param mixed $base_page
491 */
492 function construct_url($params = array(), $base_page = 'index.php')
493 {
494 $url = "$base_page?_wpnonce=" . wp_create_nonce($this->slug);
495 foreach ($params as $key => $value) {
496 $url .= "&$key=$value";
497 }
498
499 return $url;
500 }
501
502 /**
503 * Worker update
504 *
505 */
506 function update_worker_plugin($params)
507 {
508 extract($params);
509 if ($download_url) {
510 @include_once ABSPATH . 'wp-admin/includes/file.php';
511 @include_once ABSPATH . 'wp-admin/includes/misc.php';
512 @include_once ABSPATH . 'wp-admin/includes/template.php';
513 @include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
514 @include_once ABSPATH . 'wp-admin/includes/screen.php';
515
516 if (!$this->is_server_writable()) {
517 return array(
518 'error' => 'Failed, please <a target="_blank" href="http://managewp.com/user-guide#ftp">add FTP details for automatic upgrades.</a></a>'
519 );
520 }
521
522 ob_start();
523 @unlink(dirname(__FILE__));
524 $upgrader = new Plugin_Upgrader();
525 $result = $upgrader->run(array(
526 'package' => $download_url,
527 'destination' => WP_PLUGIN_DIR,
528 'clear_destination' => true,
529 'clear_working' => true,
530 'hook_extra' => array(
531 'plugin' => 'worker/init.php'
532 )
533 ));
534 ob_end_clean();
535 if (is_wp_error($result) || !$result) {
536 return array(
537 'error' => 'ManageWP Worker plugin could not be updated.'
538 );
539 } else {
540 return array(
541 'success' => 'ManageWP Worker plugin successfully updated.'
542 );
543 }
544 }
545 return array(
546 'error' => 'Bad download path for worker installation file.'
547 );
548 }
549
550 /**
551 * Automatically logs in when called from Master
552 *
553 */
554 function automatic_login()
555 {
556 $where = isset($_GET['mwp_goto']) ? $_GET['mwp_goto'] : false;
557 $username = isset($_GET['username']) ? $_GET['username'] : '';
558 $auto_login = isset($_GET['auto_login']) ? $_GET['auto_login'] : 0;
559
560 if( !function_exists('is_user_logged_in') )
561 include_once( ABSPATH.'wp-includes/pluggable.php' );
562
563 if (( $auto_login && strlen(trim($username)) && !is_user_logged_in() ) || (isset($this->mmb_multisite) && $this->mmb_multisite )) {
564 $signature = base64_decode($_GET['signature']);
565 $message_id = trim($_GET['message_id']);
566
567 $auth = $this->authenticate_message($where . $message_id, $signature, $message_id);
568 if ($auth === true) {
569
570 if (!headers_sent())
571 header('P3P: CP="CAO PSA OUR"');
572
573 if(!defined('MMB_USER_LOGIN'))
574 define('MMB_USER_LOGIN', true);
575
576 $siteurl = function_exists('get_site_option') ? get_site_option( 'siteurl' ) : get_option('siteurl');
577 $user = $this->mmb_get_user_info($username);
578 wp_set_current_user($user->ID);
579
580 if(!defined('COOKIEHASH') || (isset($this->mmb_multisite) && $this->mmb_multisite) )
581 wp_cookie_constants();
582
583 wp_set_auth_cookie($user->ID);
584 @mmb_worker_header();
585
586 if((isset($this->mmb_multisite) && $this->mmb_multisite ) || isset($_REQUEST['mwpredirect'])){
587 if(function_exists('wp_safe_redirect') && function_exists('admin_url')){
588 wp_safe_redirect(admin_url($where));
589 exit();
590 }
591 }
592 } else {
593 wp_die($auth['error']);
594 }
595 } elseif( is_user_logged_in() ) {
596 @mmb_worker_header();
597 if(isset($_REQUEST['mwpredirect'])){
598 if(function_exists('wp_safe_redirect') && function_exists('admin_url')){
599 wp_safe_redirect(admin_url($where));
600 exit();
601 }
602 }
603 }
604 }
605
606 function mmb_set_auth_cookie( $auth_cookie ){
607 if(!defined('MMB_USER_LOGIN'))
608 return false;
609
610 if( !defined('COOKIEHASH') )
611 wp_cookie_constants();
612
613 $_COOKIE['wordpress_'.COOKIEHASH] = $auth_cookie;
614
615 }
616 function mmb_set_logged_in_cookie( $logged_in_cookie ){
617 if(!defined('MMB_USER_LOGIN'))
618 return false;
619
620 if( !defined('COOKIEHASH') )
621 wp_cookie_constants();
622
623 $_COOKIE['wordpress_logged_in_'.COOKIEHASH] = $logged_in_cookie;
624 }
625
626 function admin_actions(){
627 add_filter('all_plugins', array($this, 'worker_replace'));
628 }
629
630 function worker_replace($all_plugins){
631 $replace = get_option("mwp_worker_brand");
632 if(is_array($replace)){
633 if($replace['name'] || $replace['desc'] || $replace['author'] || $replace['author_url']){
634 $all_plugins['worker/init.php']['Name'] = $replace['name'];
635 $all_plugins['worker/init.php']['Title'] = $replace['name'];
636 $all_plugins['worker/init.php']['Description'] = $replace['desc'];
637 $all_plugins['worker/init.php']['AuthorURI'] = $replace['author_url'];
638 $all_plugins['worker/init.php']['Author'] = $replace['author'];
639 $all_plugins['worker/init.php']['AuthorName'] = $replace['author'];
640 $all_plugins['worker/init.php']['PluginURI'] = '';
641 }
642
643 if($replace['hide']){
644 if (!function_exists('get_plugins')) {
645 include_once(ABSPATH . 'wp-admin/includes/plugin.php');
646 }
647 $activated_plugins = get_option('active_plugins');
648 if (!$activated_plugins)
649 $activated_plugins = array();
650 if(in_array('worker/init.php',$activated_plugins))
651 unset($all_plugins['worker/init.php']);
652 }
653 }
654
655
656 return $all_plugins;
657 }
658
659 }
660 ?>