<?php
/*

Plugin Name: WP Pipeline Slave
Plugin URI: http://WPPipeline.com
Description: Remote Blog Client plugin adds additional functionality to WP Pipeline Master
Author: Tony Marriott & Ben Shaffer
Author URI: http://WPPipeline.com
Version: 1.3.0


Copyright (C) 2013 Tony Marriott

BenandTony@WPPipeline.com
http://WPPipeline.com

This plugin is not free software
You may not distribute this plugin in any way
You may not modify or claim derivative works as your own
This plugin remains the copyright of Tony Marriott
You may use this plugin as described by the licence 
you have purchased and when it is managed with a 
WPPipeline Master plugin installed on a seperate blog. 

Plugin Update Checker Library 1.3 is independent of
the main plugin and is licensed under the GNU GPL license.
full details can be found at http://www.gnu.org/licenses/gpl.html
The library remains copyright 2011 Janis Elsts
http://w-shadow.com/

Duplicator plugin is automatically installed and integrated
with WPpipeline. Duplicator is distributed under GPLv2 license
and can be viewed at http://www.gnu.org/licenses/gpl-2.0.html
Duplicator plugin and source files can be download from
http://lifeinthegrid.com/duplicator.

BackWPup plugin is automatically installed and integrated
with WPpipeline. BackWPup is distributed under GPLv2 license
and can be viewed at http://www.gnu.org/licenses/gpl-2.0.html
BackWPup plugin and source files can be download from
http://downloads.wordpress.org/plugin/backwpup.latest-stable.zip
*/ 




if ( !class_exists('PluginUpdateChecker') ) require 'plugin-updates/plugin-update-checker.php';
	$wppipelines_UpdateChecker = new PluginUpdateChecker(
	'https://s3.amazonaws.com/wppipeline/plugins/wppipeline-slave.json',
	__FILE__,
	'wppipeline-slave',
	72
	);


add_action('admin_menu', 'wpp_add_pages_client');


// action function for above hook
function wpp_add_pages_client() {
    // Add a new submenus under Dashboard:
   
    add_management_page('Update WPP','Update WP(IMC)','manage_options','wppipeline-slave/wpimc-update-core.php');
    add_management_page('Update Plugins WPP','Update Plugins WPP','manage_options','wppipeline-slave/plugin-update-core.php');
    add_management_page('Update Themes WPP','Update Themes WPP','manage_options','wppipeline-slave/theme-update-core.php');
    add_management_page('Get Data WPP)','Get DataWPP','manage_options','wppipeline-slave/get-data.php');
    add_management_page('Get AU WPP','Get WPP','manage_options','wppipeline-slave/get-au.php');
    //add_management_page('Activate(IMC)','Activate(IMC)','manage_options','wppipeline-slave/activate.php');


}

 include("backwpup.php");
 include("duplicator.php");
 include("ivu.php");
 
 
 
 /**
 *  BackWPup
 *  https://marketpress.com/product/backwpup-pro/
 *  WordPress Backup and more...
 *  Inpsyde GmbH
 *  http://inpsyde.com
 *  3.0.12
 *  backwpup
 * /languages/
 *  true
 *  GPLv3
 *  http://www.gnu.org/licenses/gpl-3.0
 *  backwpup
 */

/**
 *	Copyright (C) 2012-2013 Inpsyde GmbH (email: info@inpsyde.com)
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License
 *	as published by the Free Software Foundation; either version 2
 *	of the License, or (at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

if ( ! class_exists( 'BackWPup' ) ) {

	// Don't activate on anything less than PHP 5.2.4 or WordPress 3.1
	if ( version_compare( PHP_VERSION, '5.2.6', '<' ) || version_compare( get_bloginfo( 'version' ), '3.2', '<' ) ) {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
		deactivate_plugins( basename( __FILE__ ) );
		if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
			die( __( 'BackWPup requires PHP version 5.2.6 or greater and WordPress 3.2 or greater.', 'backwpup' ) );
	}

	//Start Plugin
	if ( function_exists( 'add_filter' ) )
		add_action( 'plugins_loaded', array( 'BackWPup', 'getInstance' ), 11 );

	/**
	 * Main BackWPup Plugin Class
	 */
	final class BackWPup {

		private static $instance = NULL;
		private static $plugin_data = array();
		private static $destinations = array();
		private static $job_types = array();
		private static $wizards = array();

		/**
		 * Set needed filters and actions and load
		 */
		private function __construct() {

			// Nothing else matters if we're on WP-MS and not on the main site
			if ( is_multisite() && ! is_main_site() )
				return;
			//auto loader
			if ( function_exists( 'spl_autoload_register' ) ) //register auto load
				spl_autoload_register( array( $this, 'autoloader' ) );
			else //auto loader fallback
				$this->autoloader_fallback();
			//start upgrade if needed
			if ( get_site_option( 'backwpup_version' ) != self::get_plugin_data( 'Version' ) && class_exists( 'BackWPup_Install' ) )
				BackWPup_Install::activate();
			//load pro features
			if ( is_file( dirname( __FILE__ ) . '/inc/features/class-features.php' ) )
				require dirname( __FILE__ ) . '/inc/features/class-features.php';						
			//WP-Cron
			if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
				// add normal cron actions
				add_action( 'backwpup_cron', array( 'BackWPup_Cron', 'run' ) );
				add_action( 'backwpup_check_cleanup', array( 'BackWPup_Cron', 'check_cleanup' ) );
				// add action for doing thinks if cron active
				// must done in int before wp-cron control
				add_action( 'init', array( 'BackWPup_Cron', 'cron_active' ), 1 ); 
				// if in cron the rest must not needed
				return;
			}
			//deactivation hook
			register_deactivation_hook( __FILE__, array( 'BackWPup_Install', 'deactivate' ) );
			//Things that must do in plugin init
			add_action( 'init', array( $this, 'plugin_init' ) );
			//only in backend
			if ( is_admin() && class_exists( 'BackWPup_Admin' ) )
				BackWPup_Admin::getInstance();
			//work with wp-cli
			if ( defined( 'WP_CLI' ) && WP_CLI ) {
				require dirname( __FILE__ ) . '/inc/class-wp-cli.php';
				WP_CLI::addCommand( 'backwpup', 'BackWPup_WP_CLI' );
			}
		}

		/**
		 * @static
		 *
		 * @return self
		 */
		public static function getInstance() {

			if (NULL === self::$instance) {
				self::$instance = new self;
			}
			return self::$instance;
		}


		private function __clone() {}

		/**
		 * get information about the Plugin
		 *
		 * @param string $name Name of info to get or NULL to get all
		 * @return string|array
		 */
		public static function get_plugin_data( $name = NULL ) {

			if ( $name )
				$name = strtolower( $name );

			if ( empty( self::$plugin_data ) ) {
				self::$plugin_data = get_file_data( __FILE__, array(
																   'name'        => 'Plugin Name',
																   'pluginuri'   => 'Plugin URI',
																   'version'     => 'Version',
																   'description' => 'Description',
																   'author'      => 'Author',
																   'authoruri'   => 'Author URI',
																   'textdomain'  => 'Text Domain',
																   'domainpath'  => 'Domain Path',
																   'slug'  		 => 'Slug',
																   'license'     => 'License',
																   'licenseuri'  => 'License URI'
															  ), 'plugin' );
				//Translate some vars
				self::$plugin_data[ 'name' ]        = trim( self::$plugin_data[ 'name' ] );
				self::$plugin_data[ 'pluginuri' ]   = trim( self::$plugin_data[ 'pluginuri' ] );
				self::$plugin_data[ 'description' ] = trim( self::$plugin_data[ 'description' ] );
				self::$plugin_data[ 'author' ]      = trim( self::$plugin_data[ 'author' ] );
				self::$plugin_data[ 'authoruri' ]   = trim( self::$plugin_data[ 'authoruri' ] );
				//set some extra vars
				self::$plugin_data[ 'basename' ] = plugin_basename( dirname( __FILE__ ) );
				self::$plugin_data[ 'mainfile' ] = __FILE__ ;
				self::$plugin_data[ 'plugindir' ] = untrailingslashit( dirname( __FILE__ ) ) ;
				if ( defined( 'WP_TEMP_DIR' ) && is_dir( WP_TEMP_DIR ) ) {
					self::$plugin_data[ 'temp' ] = trailingslashit( str_replace( '\\', '/', WP_TEMP_DIR ) ) . 'backwpup-' . substr( md5( md5( SECURE_AUTH_KEY ) ), - 5 ) . '/';
				} else {
					$upload_dir = wp_upload_dir();
					self::$plugin_data[ 'temp' ] = trailingslashit( str_replace( '\\', '/',$upload_dir[ 'basedir' ] ) ) . 'backwpup-' . substr( md5( md5( SECURE_AUTH_KEY ) ), - 5 ) . '-temp/';
				}
				self::$plugin_data[ 'running_file' ] = self::$plugin_data[ 'temp' ] . 'backwpup-' . substr( md5( NONCE_SALT ), 13, 6 ) . '-working.php';
				self::$plugin_data[ 'url' ] = plugins_url( '', __FILE__ );
				//get unmodified WP Versions
				include ABSPATH . WPINC . '/version.php';
				/** @var $wp_version string */
				self::$plugin_data[ 'wp_version' ] = $wp_version;
				//Build User Agent
				self::$plugin_data[ 'user-agent' ] = self::$plugin_data[ 'name' ].'/' . self::$plugin_data[ 'version' ] . '; WordPress/' . self::$plugin_data[ 'wp_version' ] . '; ' . home_url();
			}

			if ( ! empty( $name ) )
				return self::$plugin_data[ $name ];
			else
				return self::$plugin_data;
		}


		/**
		 * include not existing classes automatically
		 *
		 * @param string $class_name Class to load from file
		 */
		private function autoloader( $class_name ) {

			//BackWPup classes to load
			if ( strstr( $class_name, 'BackWPup_' ) ) {
				$class_file_name =  DIRECTORY_SEPARATOR . 'class-' . strtolower( str_replace( array( 'BackWPup_', '_' ), array( '', '-' ), $class_name ) ) . '.php';
				if ( class_exists( 'BackWPup_Features', FALSE ) && is_file( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'features' . $class_file_name ) )
					require dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'inc' . DIRECTORY_SEPARATOR . 'features' . $class_file_name;
				elseif ( is_file( dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'inc' . $class_file_name ) )
					require dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'inc' . $class_file_name;
			}
		}

		/**
		 * load all classes if spl auto loader not exists
		 */
		private function autoloader_fallback() {

			//add class files that should excluded that are classes that extra loaded with require or needs spl_autoload_register to work
			$loaded_class_files = array( 'class-auto-update.php', 'class-documentation.php', 'class-features.php',
										 'class-destination-msazure.php', 'class-destination-msazure-pro.php',
										 'class-destination-email.php', 'class-destination-email-pro.php',
										 'class-destination-rsc.php', 'class-destination-rsc-pro.php',
										 'class-destination-s3.php', 'class-destination-s3-pro.php',
										 'class-destination-s3-v1.php', 'class-destination-s3-v1-pro.php',
										 'class-destinations.php', 'class-jobtypes.php', 'class-wizards.php',
										 'class-wp-cli.php' );

			//load first abstraction classes
			require dirname( __FILE__ ) . '/inc/class-destinations.php';
			require dirname( __FILE__ ) . '/inc/class-jobtypes.php';
			if ( is_file( dirname( __FILE__ ) . '/inc/features/class-features.php' ) )
				require  dirname( __FILE__ ) . '/inc/features/class-wizards.php';
			require_once ABSPATH . '/wp-admin/includes/class-wp-list-table.php';

			//load normal classes
			foreach( glob( dirname( __FILE__ ) . '/inc/class-*.php' ) as $class ) {
				if ( ! in_array( basename( $class ), $loaded_class_files ) )
					require $class;
			}

			//load features
			if ( is_file( dirname( __FILE__ ) . '/inc/features/class-features.php' ) ) {
				foreach( glob( dirname( __FILE__ ) . '/inc/features/class-*.php' ) as $class ) {
					if ( ! in_array( basename( $class ), $loaded_class_files ) )
						require $class;
				}
			}
		}

		/**
		 * Plugin init function
		 *
		 * @return void
		 */
		public function plugin_init() {

			//Add Admin Bar
			if ( ! defined( 'DOING_CRON' ) && current_user_can( 'backwpup' ) && current_user_can( 'backwpup' ) && is_admin_bar_showing() && get_site_option( 'backwpup_cfg_showadminbar', FALSE ) )
				BackWPup_Adminbar::getInstance();
			
			//display about page after Update
			if ( ! get_site_option( 'backwpup_about_page', FALSE ) && $_REQUEST[ 'page' ] != 'backwpupabout' ) 
				wp_redirect( network_admin_url( 'admin.php' ) . '?page=backwpupabout' );
		}

		/**
		 * Get a array of instances for Backup Destination's
		 *
		 * @return array BackWPup_Destinations
		 */
		public static function get_destinations() {

			if ( ! empty( self::$destinations ) )
				return self::$destinations;

			//add BackWPup Destinations
			self::$destinations[ 'FOLDER' ] 		= new BackWPup_Destination_Folder;
			if ( class_exists( 'BackWPup_Destination_Email' ) )
				self::$destinations[ 'EMAIL' ]   	= new BackWPup_Destination_Email;
			if ( function_exists( 'ftp_login' ) )
				self::$destinations[ 'FTP' ] 		= new BackWPup_Destination_Ftp;
			if ( function_exists( 'curl_exec' ) )
				self::$destinations[ 'DROPBOX' ] 	= new BackWPup_Destination_Dropbox;
			if (  function_exists( 'curl_exec' ) && version_compare( PHP_VERSION, '5.3.3', '>=' ) && class_exists( 'BackWPup_Destination_S3' ) )
				self::$destinations[ 'S3' ] 		= new BackWPup_Destination_S3;
			elseif (  function_exists( 'curl_exec' ) && class_exists( 'BackWPup_Destination_S3_V1' ) )
				self::$destinations[ 'S3' ] 		= new BackWPup_Destination_S3_V1;
			if ( version_compare( PHP_VERSION, '5.3.2', '>=' ) && class_exists( 'BackWPup_Destination_MSAzure' )  )
				self::$destinations[ 'MSAZURE' ] 	= new BackWPup_Destination_MSAzure;
			if ( function_exists( 'curl_exec' ) && version_compare( PHP_VERSION, '5.3.0', '>=' ) && class_exists( 'BackWPup_Destination_RSC' ) )
				self::$destinations[ 'RSC' ] 		= new BackWPup_Destination_RSC;
			if ( function_exists( 'curl_exec' ) )
				self::$destinations[ 'SUGARSYNC' ]	= new BackWPup_Destination_SugarSync;

			self::$destinations = apply_filters( 'backwpup_destinations', self::$destinations );

			//remove destinations can't load
			foreach ( self::$destinations as $key => $destination ) {
				if ( empty( $destination ) || ! is_object( $destination ) )
					unset( self::$destinations[ $key ] );
			}

			return self::$destinations;
		}


		/**
		 * Gets a array of instances from Job types
		 *
		 * @return array BackWPup_JobTypes
		 */
		public static function get_job_types() {

			if ( !empty( self::$job_types ) )
				return self::$job_types;

			self::$job_types[ 'DBDUMP' ]= new BackWPup_JobType_DBDump;
			self::$job_types[ 'FILE' ] 		= new BackWPup_JobType_File;
			self::$job_types[ 'WPEXP' ] 	= new BackWPup_JobType_WPEXP;
			self::$job_types[ 'WPPLUGIN' ]  = new BackWPup_JobType_WPPlugin;
			self::$job_types[ 'DBOPTIMIZE' ]= new BackWPup_JobType_DBOptimize;
			self::$job_types[ 'DBCHECK' ]   = new BackWPup_JobType_DBCheck;

			self::$job_types = apply_filters( 'backwpup_job_types', self::$job_types );

			//remove types can't load
			foreach ( self::$job_types as $key => $job_type ) {
				if ( empty( $job_type ) || ! is_object( $job_type ) )
					unset( self::$job_types[ $key ] );
			}

			return self::$job_types;
		}



		/**
		 * Gets a array of instances from Wizards Pro version Only
		 *
		 * @return array BackWPup_Wizards
		 */
		public static function get_wizards() {

			if ( !empty( self::$wizards ) )
				return self::$wizards;

			self::$wizards  = apply_filters( 'backwpup_wizards', self::$wizards );

			//remove wizards can't load
			foreach ( self::$wizards as $key => $wizard ) {
				if ( empty( $wizard ) || ! is_object( $wizard ) )
					unset( self::$wizards[ $key ] );
			}

			return self::$wizards;

		}

	}

}
?>