<?php
/*/-----------------------------------------------------------------------------------

 TABLE OF CONTENTS

 - var $admin_page
 - var $token
 
 - function OptionsFramework_Backup () 						// Constructor
 - function init () 										// Initialize the class.
 - function register_admin_screen () 						// Register the admin screen within WordPress.
 - function admin_screen () 								// Load the admin screen.
 - function admin_screen_help ()							// Add contextual help to the admin screen.
 - function admin_notices() 								// Display admin notices when performing backup/restore.
 - function admin_screen_logic ()							// The processing code to generate the backup or restore from a previous backup.	
 - function import ()										// Import settings from a backup file.
 - function export ()										// Export settings to a backup file.
 - function construct_database_query ()						// Constructs the database query based on the export type.

 - Create $woo_backup Object
-----------------------------------------------------------------------------------*/

class OptionsFramework_Backup {
	
	var $admin_page;
	var $token;
	
	function OptionsFramework_Backup () {
		$this->admin_page = '';
		$this->token = 'options-backup';
	} // End Constructor
	
	/**
	 * init()
	 *
	 * Initialize the class.
	 *
	 * @since 1.0.0
	 */
	
	function init () {
		if ( is_admin() && ( get_option( 'framework_woo_backupmenu_disable' ) != 'true' ) ) {
			// Register the admin screen.
			add_action( 'admin_menu', array( &$this, 'register_admin_screen' ), 20 );
		}
	} // End init()
	
	/**
	 * register_admin_screen()
	 *
	 * Register the admin screen within WordPress.
	 *
	 * @since 1.0.0
	 */
	
	function register_admin_screen () {
			
		$this->admin_page = add_submenu_page('options-framework', __( 'اعدادات القالب - النسخ الاحتياطى و الاسترجاع', 'OptionsFramework' ), __( 'النسخ الاحتياطى', 'OptionsFramework' ), 'manage_options', $this->token, array( &$this, 'admin_screen' ) );

		// Adds actions to hook in the required css and javascript
		add_action("admin_print_styles-$this->admin_page",'optionsframework_load_adminstyles');

		/* Loads the CSS */

		function optionsframework_load_adminstyles() {
			wp_enqueue_style('admin-style', OPTIONS_FRAMEWORK_DIRECTORY.'css/admin-style.css');
		}
			
		// Admin screen logic.
		add_action( 'load-' . $this->admin_page, array( &$this, 'admin_screen_logic' ) );
		
		// Add contextual help.
		add_action( 'contextual_help', array( &$this, 'admin_screen_help' ), 10, 3 );
				
		add_action( 'admin_notices', array( &$this, 'admin_notices' ), 10 );
	
	} // End register_admin_screen()
	
	/**
	 * admin_screen()
	 *
	 * Load the admin screen.
	 *
	 * @since 1.0.0
	 */
	
	function admin_screen () {
	
		$export_type = 'all';
		
		if ( isset( $_POST['export-type'] ) ) {
			$export_type = esc_attr( $_POST['export-type'] );
		}
?>
	<div class="wrap" style="width:764px">
		    <div id="settings-icon"></div><br />
<br />
<br />

            <div>
<div id="update-icon"></div><br />
<div id="update-notes" style="width:752px"><div class="iconic">}</div>نعمل دائما على الرقى بأعمالنا من خلال تحديثات دوريه على كافه منتجاتنا .. و نشكرك لاستخدامك احدث اصدرا من محجوز بريس 1.0.1 Miles.
</div>
<h2></h2>
</div>

        
		<div class="import">
			<h3><?php _e( 'استيراد اعدادت القالب' ); ?></h3>
			
			<p><?php _e( 'من هنا يمكنك اختيار الملف الخاص ببيانات القالب المحفوظه. و من ثم رفعها و استرجاعها.' ); ?></p>


				<form enctype="multipart/form-data" method="post" action="<?php echo admin_url( 'admin.php?page=' . $this->token ); ?>">
					<?php wp_nonce_field( 'OptionsFramework-backup-import' ); ?>
					<label for="OptionsFramework-import-file"><?php printf( __( 'قم برفع الملف: (الحد الاقصى لحجم الملف: %s)' ), ini_get( 'post_max_size' ) ); ?></label>
					<input type="file" id="OptionsFramework-import-file" name="OptionsFramework-import-file" size="25" />
					<input type="hidden" name="OptionsFramework-backup-import" value="1" />
					<input type="submit" class="button"  value="<?php _e( 'رفع الملف و استيراد الاعدادات' ); ?>" />
				</form>		</div>
		
		<div class="export">
			<h3><?php _e( 'النسخ الاحتياطى للاعدادات' ); ?></h3>
			
			<p><?php _e( 'عند الضغط على الزر التالى. سوف يتم توليد ملف يحوى على اعداد القالب. حيث تقوم بحفظه لديك. و يمكنك استيراد البيانات منه اى وقت شئت.' ); ?></p>
			<p><?php echo sprintf( __( '' ), get_bloginfo( 'name' ) ); ?></p>
				
			<form method="post" action="<?php echo admin_url( 'admin.php?page=' . $this->token ); ?>">
				<?php wp_nonce_field( 'OptionsFramework-backup-export' ); ?>
				<input type="hidden" name="OptionsFramework-backup-export" value="1" />
				<input type="submit" class="button" value="<?php _e( 'استخراج الملف و تحميله', 'OptionsFramework' ); ?>" />
			</form>
		</div>
		
	</div><!--/.wrap-->
<?php
	
	} // End admin_screen()
	
	/**
	 * admin_screen_help()
	 *
	 * Add contextual help to the admin screen.
	 *
	 * @since 1.0.0
	 */
	
	function admin_screen_help ( $contextual_help, $screen_id, $screen ) {
	
		// $contextual_help .= var_dump($screen); // use this to help determine $screen->id
		
		if ( $this->admin_page == $screen->id ) {
		
		$contextual_help =
		  '<h3>' . __( 'مرحبا بك فى منطقه الحفظ و الاسترجاع لاعدادت القالب.' ) . '</h3>' .
		  '<p>' . __( 'معلومات توضيحيه بلوحه التحكم.' ) . '</p>' .
		  '<p>' . __( 'يمكنك من هنا استخراج نسخه من اعدادات قالب الموقع. و كذلك استرجاعها فى اوقات اخرى.' ) . '</p>' .
		  '<p>' . __( 'لعمل نسخه احتياطيه من اعدادات القالب. فقط اختر استخراج الملف و تحميله بعد تحديد كافه البيانات المراد استخراجها . و احفظ الملف المستخرج لديك.' ) . '</p>' .
		  '<p>' . __( 'لاسترجاع النسخه المحفوظه احتياطيا مره اخرى. فقط اضغط تصفح ومن ثم . حدد الملف الخاص بالنسخه الاحتياطيه من جهازك. و اضغط بعدها رفع و استيراد الاعدادات.' ) . '</p>' .
		  
		  '<p><strong>' . __( 'لاخظ جيدا .. ان اعدادت القالب لا يمكنك فيها استيراد اى ملف غير هذا الذى يتم توليده بواسطه القالب ذاته , تجنبا لحدوث اى مشكله.' ) . '</strong></p>' .

		  '<p><strong>' . __( 'تبحث عن دعم لمشكلتك?' ) . '</strong></p>' .
		  '<p>' . sprintf( __( 'يمكنك الاتصال مع الدعم الفنى لمحجو.كوم و سوف نقوم بتلقى افادتك تجاه العمل. و من ثم العمل على تصحيح اى اخطأ قد تظهر.' ), '<a href="http://www.Mhgoz.com" target="_blank">', '</a>' ) . '</p>';
		
		} // End IF Statement
		
		return $contextual_help;
	
	} // End admin_screen_help()
	
	/**
	 * admin_notices()
	 *
	 * Display admin notices when performing backup/restore.
	 *
	 * @since 1.0.0
	 */
	
	function admin_notices () {
	
		if ( ! isset( $_GET['page'] ) || ( $_GET['page'] != $this->token ) ) { return; }
	
		echo '<div id="import-notice" class="updated"><p>' . sprintf( __( 'عزيزى المستخدم. يرجى معرفه ان النسخ الاحتياطيه تأخذ فقط من اعداد القالب . وليس محتوى موقعك. لذا اذا ما ودت فى استخراج نسخه احتياطيه من اعداد موقعك بالكامل و ملفاته. يمكنك استخدام اداه  %sWordPress Export Tool%s.', 'OptionsFramework' ), '<a href="' . admin_url( 'export.php' ) . '">', '</a>' ) . '</p></div><!--/#import-notice .message-->' . "\n";
			
		if ( isset( $_GET['error'] ) && $_GET['error'] == 'true' ) {
			echo '<div id="message" class="error"><p>' . __( 'هناك خطأ .. تأكد من استخدامك للخطوات بطريقه صحيحه و اعد المحاوله.' ) . '</p></div>';
		} else if ( isset( $_GET['error-export'] ) && $_GET['error-export'] == 'true' ) {  
			echo '<div id="message" class="error"><p>' . __( 'خدث خطأ اثناء محاوله استيراد اعدادت القالب. حاول مره اخرى.' ) . '</p></div>';
		} else if ( isset( $_GET['invalid'] ) && $_GET['invalid'] == 'true' ) {  
			echo '<div id="message" class="error"><p>' . __( 'ملف النسخه الاحتياطيه الذى قمت بتحديده معطوب. برجاء تحديد ملف سليم و اعاده المحاوله.' ) . '</p></div>';
		} else if ( isset( $_GET['imported'] ) && $_GET['imported'] == 'true' ) {  
			echo '<div id="message" class="updated"><p>' . sprintf( __( 'تم استيراد الاعداد بنجاح. | يمكن العوده الى  %sTheme Options%s', 'OptionsFramework' ), '<a href="' . admin_url( 'admin.php?page=options-framework' ) . '">', '</a>' ) . '</p></div>';
		} // End IF Statement
		
	} // End admin_notices()
	
	/**
	 * admin_screen_logic()
	 *
	 * The processing code to generate the backup or restore from a previous backup.
	 *
	 * @since 1.0.0
	 */
	
	function admin_screen_logic () {
		
		if ( ! isset( $_POST['OptionsFramework-backup-export'] ) && isset( $_POST['OptionsFramework-backup-import'] ) && ( $_POST['OptionsFramework-backup-import'] == true ) ) {
			$this->import();
		}
		
		if ( ! isset( $_POST['OptionsFramework-backup-import'] ) && isset( $_POST['OptionsFramework-backup-export'] ) && ( $_POST['OptionsFramework-backup-export'] == true ) ) {
			$this->export();
		}

	} // End admin_screen_logic()
	

	
	/**
	 * import()
	 *
	 * Import settings from a backup file.
	 *
	 * @since 1.0.0
	 */



	function import() {
		check_admin_referer( 'OptionsFramework-backup-import' ); // Security check.
		
		if ( ! isset( $_FILES['OptionsFramework-import-file'] ) ) { return; } // We can't import the settings without a settings file.
		
		// Extract file contents
		$upload = file_get_contents( $_FILES['OptionsFramework-import-file']['tmp_name'] );
		
		// Decode the JSON from the uploaded file
		$datafile = json_decode( $upload, true );
		
		// Check for errors
		if ( ! $datafile || $_FILES['OptionsFramework-import-file']['error'] ) {
			wp_redirect( admin_url( 'admin.php?page=' . $this->token . '&error=true' ) );
			exit;
		}
		
		// Make sure this is a valid backup file.
		if ( ! isset( $datafile['OptionsFramework-backup-validator'] ) ) {
			wp_redirect( admin_url( 'admin.php?page=' . $this->token . '&invalid=true' ) );
			exit;
		} else {
			unset( $datafile['OptionsFramework-backup-validator'] ); // Now that we've checked it, we don't need the field anymore.
		}

		
		// Get the theme name from the database.
		$optionsframework_data = get_option('optionsframework');
		$optionsframework_name = $optionsframework_data['id'];
		//$optionsframework_name = get_option( $optionsframework_name );
		
		// Update the settings in the database
		if ( update_option( $optionsframework_name, $datafile ) ) {
		
		// Redirect, add success flag to the URI
			wp_redirect( admin_url( 'admin.php?page=' . $this->token . '&imported=true' ) );
			exit;
		} else {
		// Errors: update fail
			var_dump($optionsframework_name);
			wp_redirect( admin_url( 'admin.php?page=' . $this->token . '&error=true' ) );
			exit;
		}
		
	} // End import()



	
	/**
	 * export()
	 *
	 * Export settings to a backup file.
	 *
	 * @since 1.0.0
	 * @uses global $wpdb
	 */
	 
	function export() {
		global $wpdb;
		check_admin_referer( 'OptionsFramework-backup-export' ); // Security check.
		
		$optionsframework_settings = get_option('optionsframework');
		$database_options = get_option( $optionsframework_settings['id'] );
		
		// Error trapping for the export.
		if ( $database_options == '' ) {
			wp_redirect( admin_url( 'admin.php?page=' . $this->token . '&error-export=true' ) );
			return;
		}
		
		if ( ! $database_options ) { return; }
	
		// Add our custom marker, to ensure only valid files are imported successfully.
		$database_options['OptionsFramework-backup-validator'] = date( 'Y-m-d h:i:s' );
	
		// Generate the export file.
	    $output = json_encode( (array)$database_options );
	
	    header( 'Content-Description: File Transfer' );
	    header( 'Cache-Control: public, must-revalidate' );
	    header( 'Pragma: hack' );
	    header( 'Content-Type: text/plain' );
	    header( 'Content-Disposition: attachment; filename="' . $this->token . '-' . date( 'Ymd-His' ) . '.json"' );
	    header( 'Content-Length: ' . strlen( $output ) );
	    echo $output;
	    exit;
			
	} // End export()

} // End Class

/**
 * Create $woo_backup Object.
 *
 * @since 1.0.0
 * @uses OptionsFramework_Backup
 */

$of_backup = new OptionsFramework_Backup();
$of_backup->init();
?>