ManageWP.com to sign up.
Author: Prelovac Media
Version: 3.9.7
Author URI: http://www.prelovac.com
*/
/*************************************************************
*
* init.php
*
* Initialize the communication with master
*
*
* Copyright (c) 2011 Prelovac Media
* www.prelovac.com
**************************************************************/
define('MMB_WORKER_VERSION', '3.9.7');
global $wpdb, $mmb_plugin_dir, $mmb_plugin_url;
if (version_compare(PHP_VERSION, '5.0.0', '<')) // min version 5 supported
exit("
ManageWP Worker plugin requires PHP 5 or higher.
");
global $wp_version;
$mmb_wp_version = $wp_version;
$mmb_plugin_dir = WP_PLUGIN_DIR . '/' . basename(dirname(__FILE__));
$mmb_plugin_url = WP_PLUGIN_URL . '/' . basename(dirname(__FILE__));
$mmb_actions = array(
'remove_site' => 'mmb_remove_site',
'get_stats' => 'mmb_stats_get',
'get_stats_notification' => 'mmb_get_stats_notification',
'backup_clone' => 'mmb_backup_now',
'restore' => 'mmb_restore_now',
'optimize_tables' => 'mmb_optimize_tables',
'check_wp_version' => 'mmb_wp_checkversion',
'create_post' => 'mmb_post_create',
'update_worker' => 'mmb_update_worker_plugin',
'change_comment_status' => 'mmb_change_comment_status',
'change_post_status' => 'mmb_change_post_status',
'get_comment_stats' => 'mmb_comment_stats_get',
'install_addon' => 'mmb_install_addon',
'do_upgrade' => 'mmb_do_upgrade',
'add_link' => 'mmb_add_link',
'add_user' => 'mmb_add_user',
'email_backup' => 'mmb_email_backup',
'check_backup_compat' => 'mmb_check_backup_compat',
'scheduled_backup' => 'mmb_scheduled_backup',
'execute_php_code' => 'mmb_execute_php_code',
'delete_backup' => 'mmm_delete_backup',
'remote_backup_now' => 'mmb_remote_backup_now',
'clean_orphan_backups' => 'mmb_clean_orphan_backups'
);
require_once("$mmb_plugin_dir/helper.class.php");
require_once("$mmb_plugin_dir/core.class.php");
require_once("$mmb_plugin_dir/post.class.php");
require_once("$mmb_plugin_dir/comment.class.php");
require_once("$mmb_plugin_dir/stats.class.php");
require_once("$mmb_plugin_dir/backup.class.php");
require_once("$mmb_plugin_dir/installer.class.php");
require_once("$mmb_plugin_dir/link.class.php");
require_once("$mmb_plugin_dir/user.class.php");
require_once("$mmb_plugin_dir/api.php");
require_once("$mmb_plugin_dir/plugins/search/search.php");
require_once("$mmb_plugin_dir/plugins/cleanup/cleanup.php");
//this is an exmaple plugin for extra_html element
//require_once("$mmb_plugin_dir/plugins/extra_html_example/extra_html_example.php");
$mmb_core = new MMB_Core();
if( microtime(true) - (double)get_option('mwp_iframe_options_header') < 3600 ){
remove_action( 'admin_init', 'send_frame_options_header');
remove_action( 'login_init', 'send_frame_options_header');
}
add_action('init', 'mmb_parse_request');
if (function_exists('register_activation_hook'))
register_activation_hook(__FILE__, array(
$mmb_core,
'install'
));
if (function_exists('register_deactivation_hook'))
register_deactivation_hook(__FILE__, array(
$mmb_core,
'uninstall'
));
do_action('after_db_upgrade');
if( !function_exists ( 'mmb_parse_request' )) {
function mmb_parse_request()
{
if (!isset($HTTP_RAW_POST_DATA)) {
$HTTP_RAW_POST_DATA = file_get_contents('php://input');
}
ob_start();
global $mmb_core, $mmb_actions, $new_actions, $wp_db_version, $wpmu_version, $_wp_using_ext_object_cache;
$data = base64_decode($HTTP_RAW_POST_DATA);
if ($data)
$num = @extract(unserialize($data));
if ($action) {
$_wp_using_ext_object_cache = false;
@set_time_limit(600);
update_option('mwp_iframe_options_header', microtime(true));
// mmb_response($mmb_actions, false);
if (!$mmb_core->check_if_user_exists($params['username']))
mmb_response('Username ' . $params['username'] . ' does not have administrator capabilities. Enter the correct username in the site options.', false);
/* in case database upgrade required, do database backup and perform upgrade ( wordpress wp_upgrade() function ) */
if( strlen(trim($wp_db_version)) ){
if ( get_option('db_version') != $wp_db_version ) {
/* in multisite network, please update database manualy */
if (empty($wpmu_version) || (function_exists('is_multisite') && !is_multisite())){
if( ! function_exists('wp_upgrade'))
include_once(ABSPATH.'wp-admin/includes/upgrade.php');
ob_clean();
@wp_upgrade();
@do_action('after_db_upgrade');
ob_end_clean();
}
}
}
if ($action == 'add_site') {
mmb_add_site($params);
mmb_response('You should never see this.', false);
}
$auth = $mmb_core->authenticate_message($action . $id, $signature, $id);
if ($auth === true) {
if(isset($params['secure'])){
if($decrypted = $mmb_core->_secure_data($params['secure'])){
$decrypted = maybe_unserialize($decrypted);
if(is_array($decrypted)){
foreach($decrypted as $key => $val){
if(!is_numeric($key))
$params[$key] = $val;
}
unset($params['secure']);
} else $params['secure'] = $decrypted;
}
}
if (array_key_exists($action, $mmb_actions) && function_exists($mmb_actions[$action]))
call_user_func($mmb_actions[$action], $params);
else
mmb_response('Action "' . $action . '" does not exist. Please update your Worker plugin.', false);
} else {
mmb_response($auth['error'], false);
}
}
ob_end_clean();
}
}
/* Main response function */
if( !function_exists ( 'mmb_response' )) {
function mmb_response($response = false, $success = true)
{
$return = array();
if (empty($response) && strlen($response) == 0)
$return['error'] = 'Empty response.';
else if ($success)
$return['success'] = $response;
else
$return['error'] = $response;
if( !headers_sent() ){
header('HTTP/1.0 200 OK');
header('Content-Type: text/plain');
}
exit("" . base64_encode(serialize($return))."");
}
}
if( !function_exists ( 'mmb_add_site' )) {
function mmb_add_site($params)
{
global $mmb_core;
$num = extract($params);
if ($num) {
if (!get_option('_action_message_id') && !get_option('_worker_public_key')) {
$public_key = base64_decode($public_key);
if (function_exists('openssl_verify')) {
$verify = openssl_verify($action . $id, base64_decode($signature), $public_key);
if ($verify == 1) {
$mmb_core->set_master_public_key($public_key);
$mmb_core->set_worker_message_id($id);
$mmb_core->get_stats_instance();
mmb_response($mmb_core->stats_instance->get_initial_stats(), true);
} else if ($verify == 0) {
mmb_response('Invalid message signature. Please contact us if you see this message often.', false);
} else {
mmb_response('Command not successful. Please try again.', false);
}
} else {
if (!get_option('_worker_nossl_key')) {
srand();
$random_key = md5(base64_encode($public_key) . rand(0, getrandmax()));
$mmb_core->set_random_signature($random_key);
$mmb_core->set_worker_message_id($id);
$mmb_core->set_master_public_key($public_key);
$mmb_core->get_stats_instance();
mmb_response($mmb_core->stats_instance->get_initial_stats(), true);
} else
mmb_response('Please deactivate & activate ManageWP Worker plugin on your site, then re-add the site to your dashboard.', false);
}
} else {
mmb_response('Please deactivate & activate ManageWP Worker plugin on your site and re-add the site to your dashboard.', false);
}
} else {
mmb_response('Invalid parameters received. Please try again.', false);
}
}
}
if( !function_exists ( 'mmb_remove_site' )) {
function mmb_remove_site($params)
{
extract($params);
global $mmb_core;
$mmb_core->uninstall();
include_once(ABSPATH . 'wp-admin/includes/plugin.php');
$plugin_slug = basename(dirname(__FILE__)) . '/' . basename(__FILE__);
if ($deactivate) {
deactivate_plugins($plugin_slug, true);
}
if (!is_plugin_active($plugin_slug))
mmb_response(array(
'deactivated' => 'Site removed successfully.
ManageWP Worker plugin successfully deactivated.'
), true);
else
mmb_response(array(
'removed_data' => 'Site removed successfully.
ManageWP Worker plugin was not deactivated.'
), true);
}
}
if( !function_exists ( 'mmb_stats_get' )) {
function mmb_stats_get($params)
{
global $mmb_core;
$mmb_core->get_stats_instance();
mmb_response($mmb_core->stats_instance->get($params), true);
}
}
if( !function_exists ( 'mmb_get_stats_notification' )) {
function mmb_get_stats_notification($params)
{
global $mmb_core;
$mmb_core->get_stats_instance();
$stat = $mmb_core->stats_instance->get_stats_notification($params);
mmb_response($stat, true);
}
}
//post
if( !function_exists ( 'mmb_post_create' )) {
function mmb_post_create($params)
{
global $mmb_core;
$mmb_core->get_post_instance();
$return = $mmb_core->post_instance->create($params);
if (is_int($return))
mmb_response($return, true);
else
mmb_response($return, false);
}
}
if( !function_exists ( 'mmb_change_post_status' )) {
function mmb_change_post_status($params)
{
global $mmb_core;
$mmb_core->get_post_instance();
$return = $mmb_core->post_instance->change_status($params);
//mmb_response($return, true);
}
}
//comments
if( !function_exists ( 'mmb_change_comment_status' )) {
function mmb_change_comment_status($params)
{
global $mmb_core;
$mmb_core->get_comment_instance();
$return = $mmb_core->comment_instance->change_status($params);
//mmb_response($return, true);
if ($return){
$mmb_core->get_stats_instance();
mmb_response($mmb_core->stats_instance->get_comments_stats($params), true);
}else
mmb_response('Comment not updated', false);
}
}
if( !function_exists ( 'mmb_comment_stats_get' )) {
function mmb_comment_stats_get($params)
{
global $mmb_core;
$mmb_core->get_stats_instance();
mmb_response($mmb_core->stats_instance->get_comments_stats($params), true);
}
}
if( !function_exists ( 'mmb_backup_now' )) {
//backup
function mmb_backup_now($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->backup($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else {
mmb_response($return, true);
}
}
}
if( !function_exists ( 'mmb_email_backup' )) {
function mmb_email_backup($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->email_backup($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else {
mmb_response($return, true);
}
}
}
if( !function_exists ( 'mmb_check_backup_compat' )) {
function mmb_check_backup_compat($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->check_backup_compat($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else {
mmb_response($return, true);
}
}
}
if( !function_exists ( 'mmb_scheduled_backup' )) {
function mmb_scheduled_backup($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->set_backup_task($params);
mmb_response($return, $return);
}
}
if( !function_exists ( 'mmm_delete_backup' )) {
function mmm_delete_backup($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->delete_backup($params);
mmb_response($return, $return);
}
}
if( !function_exists ( 'mmb_optimize_tables' )) {
function mmb_optimize_tables($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->optimize_tables();
if ($return)
mmb_response($return, true);
else
mmb_response(false, false);
}
}
if( !function_exists ( 'mmb_restore_now' )) {
function mmb_restore_now($params)
{
global $mmb_core;
$mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->restore($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else
mmb_response($return, true);
}
}
if( !function_exists ( 'mmb_remote_backup_now' )) {
function mmb_remote_backup_now($params)
{
global $mmb_core;
$backup_instance = $mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->remote_backup_now($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else
mmb_response($return, true);
}
}
if( !function_exists ( 'mmb_clean_orphan_backups' )) {
function mmb_clean_orphan_backups()
{
global $mmb_core;
$backup_instance = $mmb_core->get_backup_instance();
$return = $mmb_core->backup_instance->cleanup();
if(is_array($return))
mmb_response($return, true);
else
mmb_response($return, false);
}
}
if( !function_exists ( 'mmb_update_worker_plugin' )) {
function mmb_update_worker_plugin($params)
{
global $mmb_core;
mmb_response($mmb_core->update_worker_plugin($params), true);
}
}
if( !function_exists ( 'mmb_wp_checkversion' )) {
function mmb_wp_checkversion($params)
{
include_once(ABSPATH . 'wp-includes/version.php');
global $mmb_wp_version, $mmb_core;
mmb_response($mmb_wp_version, true);
}
}
if( !function_exists ( 'mmb_search_posts_by_term' )) {
function mmb_search_posts_by_term($params)
{
global $mmb_core;
$mmb_core->get_search_instance();
$search_type = trim($params['search_type']);
$search_term = strtolower(trim($params['search_term']));
switch ($search_type){
case 'page_post':
$return = $mmb_core->search_instance->search_posts_by_term($params);
if($return){
$return = serialize($return);
mmb_response($return, true);
}else{
mmb_response('No posts found', false);
}
break;
case 'plugin':
$plugins = get_option('active_plugins');
$have_plugin = false;
foreach ($plugins as $plugin) {
if(strpos($plugin, $search_term)>-1){
$have_plugin = true;
}
}
if($have_plugin){
mmb_response(serialize($plugin), true);
}else{
mmb_response(false, false);
}
break;
case 'theme':
$theme = strtolower(get_option('template'));
if(strpos($theme, $search_term)>-1){
mmb_response($theme, true);
}else{
mmb_response(false, false);
}
break;
default: mmb_response(false, false);
}
$return = $mmb_core->search_instance->search_posts_by_term($params);
if ($return_if_true) {
mmb_response($return_value, true);
} else {
mmb_response($return_if_false, false);
}
}
}
if( !function_exists ( 'mmb_install_addon' )) {
function mmb_install_addon($params)
{
global $mmb_core;
$mmb_core->get_installer_instance();
$return = $mmb_core->installer_instance->install_remote_file($params);
mmb_response($return, true);
}
}
if( !function_exists ( 'mmb_do_upgrade' )) {
function mmb_do_upgrade($params)
{
global $mmb_core, $mmb_upgrading;
$mmb_core->get_installer_instance();
$return = $mmb_core->installer_instance->do_upgrade($params);
mmb_response($return, true);
}
}
if( !function_exists ( 'mmb_add_link' )) {
function mmb_add_link($params)
{
global $mmb_core;
$mmb_core->get_link_instance();
$return = $mmb_core->link_instance->add_link($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else {
mmb_response($return, true);
}
}
}
if( !function_exists ( 'mmb_add_user' )) {
function mmb_add_user($params)
{
global $mmb_core;
$mmb_core->get_user_instance();
$return = $mmb_core->user_instance->add_user($params);
if (is_array($return) && array_key_exists('error', $return))
mmb_response($return['error'], false);
else {
mmb_response($return, true);
}
}
}
add_filter('install_plugin_complete_actions','mmb_iframe_plugins_fix');
if( !function_exists ( 'mmb_iframe_plugins_fix' )) {
function mmb_iframe_plugins_fix($update_actions)
{
foreach($update_actions as $key => $action)
{
$update_actions[$key] = str_replace('target="_parent"','',$action);
}
return $update_actions;
}
}
if( !function_exists ( 'mmb_execute_php_code' )) {
function mmb_execute_php_code($params)
{
ob_start();
eval($params['code']);
$return = ob_get_flush();
mmb_response(print_r($return, true), true);
}
}
if(!function_exists('mmb_more_reccurences')){
//Backup Tasks
add_filter('cron_schedules', 'mmb_more_reccurences');
function mmb_more_reccurences($schedules) {
$schedules['minutely'] = array('interval' => 60, 'display' => 'Once in a minute');
$schedules['fiveminutes'] = array('interval' => 300, 'display' => 'Once every five minutes');
$schedules['tenminutes'] = array('interval' => 600, 'display' => 'Once every ten minutes');
return $schedules;
}
}
if (!wp_next_scheduled('mwp_backup_tasks')) {
wp_schedule_event( time(), 'tenminutes', 'mwp_backup_tasks' );
}
add_action('mwp_backup_tasks', 'mwp_check_backup_tasks');
if( !function_exists('mwp_check_backup_tasks') ){
function mwp_check_backup_tasks() {
global $mmb_core;
$mmb_core->get_backup_instance();
$mmb_core->backup_instance->check_backup_tasks();
}
}
?>