File: /var/www/clients/client0/web20/web/wp-content/themes/bridge/export/qode-export.php
<?php
if (!function_exists ('add_action')) {
header('Status: 403 Forbidden');
header('HTTP/1.1 403 Forbidden');
exit();
}
class Qode_Export {
public $export_values = "";
public $enable_export = false;
public function __construct() {
add_action('admin_menu', array($this, 'qode_admin_export'));
}
/**
* Method that checks 'export_option' variable in $_REQUEST
* and calls adequate method
*/
public function init_qode_export() {
if(isset($_REQUEST['export_option'])) {
switch($_REQUEST['export_option']) {
case "widgets":
$this->export_widgets_sidebars();
break;
case "custom_sidebars":
$this->export_custom_sidebars();
break;
case "qode_options":
$this->export_options();
break;
case "qode_menus":
$this->export_qode_menus();
break;
case "setting_pages":
$this->export_settings_pages();
break;
case "all":
$this->export_all();
break;
default:
break;
}
}
}
/**
* Method that exports custom made sidebars
*
* @param bool $save_file whether to save to file or not
* @return bool | array
*/
public function export_custom_sidebars($save_file = false){
$custom_sidebars = get_option("qode_sidebars");
$output = base64_encode(serialize($custom_sidebars));
return $this->save_as_txt_file("custom_sidebars.txt", $output, $save_file);
}
/**
* Method that exports theme options
*
* @param bool $save_file whether to save to file or not
* @return bool | array
*/
public function export_options($save_file = false) {
$qode_options = get_option("qode_options_proya");
$clean_output = array(
'google_maps_api_key' => ''
);
$output = base64_encode( serialize( array_merge( $qode_options, $clean_output ) ) );
return $this->save_as_txt_file("options.txt", $output, $save_file);
}
/**
* Method that exports widgets
*
* @param $save_file bool whether to save exported output to file
* @return bool | array
*
* @see Qode_Export::export_sidebars
* @see Qode_Export::export_widgets
*/
public function export_widgets_sidebars($save_file = false) {
$this->data = array();
$this->data['sidebars'] = $this->export_sidebars();
$this->data['widgets'] = $this->export_widgets();
$output = base64_encode(serialize($this->data));
return $this->save_as_txt_file("widgets.txt", $output, $save_file);
}
public function export_widgets(){
global $wp_registered_widgets;
$all_qode_widgets = array();
foreach ($wp_registered_widgets as $qode_widget_id => $widget_params) {
$all_qode_widgets[] = $widget_params['callback'][0]->id_base;
}
foreach ($all_qode_widgets as $qode_widget_id) {
$qode_widget_data = get_option( 'widget_' . $qode_widget_id );
if ( !empty($qode_widget_data) ) {
$widget_datas[ $qode_widget_id ] = $qode_widget_data;
}
}
unset($all_qode_widgets);
return $widget_datas;
}
public function export_sidebars(){
$qode_sidebars = get_option("sidebars_widgets");
$qode_sidebars = $this->exclude_sidebar_keys($qode_sidebars);
return $qode_sidebars;
}
private function exclude_sidebar_keys( $keys = array() ){
if (!is_array($keys)) {
return $keys;
}
unset($keys['wp_inactive_widgets']);
unset($keys['array_version']);
return $keys;
}
/**
* Method that exports navigation menus
*
* @param bool $save_file whether to save file or not
* @return bool | array
* @see get_nav_menu_locations()
*/
public function export_qode_menus($save_file = false){
global $wpdb;
$this->data = array();
$locations = get_nav_menu_locations();
$terms_table = $wpdb->prefix . "terms";
foreach ((array)$locations as $location => $menu_id) {
$menu_slug = $wpdb->get_results($wpdb->prepare("SELECT * FROM $terms_table where term_id=%d", $menu_id), ARRAY_A);
if (count($menu_slug) > 0)
$this->data[ $location ] = $menu_slug[0]['slug'];
}
$output = base64_encode(serialize( $this->data ));
return $this->save_as_txt_file("menus.txt", $output, $save_file);
}
/**
* Method that exports necessary options from Settings pages
*
* @param bool $save_file whether to save file or not
* @return bool | array
*/
public function export_settings_pages($save_file = false) {
$qode_static_page = get_option("page_on_front");
$qode_post_page = get_option("page_for_posts");
$qode_show_on_front = get_option("show_on_front");
$qode_settings_pages = array(
'show_on_front' => $qode_show_on_front,
'page_on_front' => $qode_static_page,
'page_for_posts' => $qode_post_page
);
$output = base64_encode(serialize($qode_settings_pages));
return $this->save_as_txt_file("settingpages.txt", $output, $save_file);
}
/**
* Method that exports all options and sends a zip file as an output to browser
*
* @see Qode_Export::export_settings_pages
* @see Qode_Export::export_widgets_sidebars
* @see Qode_Export::export_qode_menus
* @see Qode_Export::export_custom_sidebars
* @see Qode_Export::export_options
*/
public function export_all() {
global $wpdb;
$files_array = array();
//get all files created and all options exported
$settings_file = $this->export_settings_pages(true);
$widgets_file = $this->export_widgets_sidebars(true);
$menus_file = $this->export_qode_menus(true);
$custom_sidebar_file = $this->export_custom_sidebars(true);
$options_file = $this->export_options(true);
//add all generated files to files array
if($settings_file) {
$files_array[] = $settings_file;
}
if($widgets_file) {
$files_array[] = $widgets_file;
}
if($menus_file) {
$files_array[] = $menus_file;
}
if($custom_sidebar_file) {
$files_array[] = $custom_sidebar_file;
}
if($options_file) {
$files_array[] = $options_file;
}
//if we have added files to files array
if(is_array($files_array) && count($files_array)) {
/**
* Generate zip file name. It will contain name of the folder where WP is installed
* and current time stamp (for caching purposes)
*/
$wp_dir_array = parse_url(home_url());
$wp_dir_name = ltrim(end($wp_dir_array), '/');
//$zip_name = $wp_dir_name.'_'.date('y-m-d').'_'.date('H').'_'.date('s').'.zip';
$zip_name = $wpdb->dbname.'.zip';
/**
* Instantiate ZipArchive class and add all files to zip
*/
$zip = new ZipArchive();
$zip->open($zip_name, ZipArchive::CREATE);
foreach($files_array as $file) {
$zip->addFile($file['full_path'], $file['filename']);
}
$zip->close();
//delete all created export files from server
foreach ($files_array as $file) {
if(file_exists(dirname(__FILE__).'/'.$file['filename'])) {
unlink(dirname(__FILE__).'/'.$file['filename']);
}
}
//send output to browser so user can download generated zip
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zip_name);
header('Content-Length: ' . filesize($zip_name));
readfile($zip_name);
}
}
/**
* Method that saves output as a txt file. It has an option for sending file to browser
* or saving it on file system
*
* @param $file_name string name of the file to save
* @param $output string content of the file
* @param bool $save_to_file whether to save file to file system or not
* @return array|bool if file is saved on file system it returns an array that contains
* 'full_path' of the file and 'filename' of the file. If it fails to save file it returns false
*/
public function save_as_txt_file($file_name, $output, $save_to_file = false){
if($save_to_file) {
if(file_put_contents(get_template_directory().'/export/'.$file_name, $output)) {
return array(
'full_path' => get_template_directory().'/export/'.$file_name,
'filename' => $file_name
);
}
return false;
} else {
header("Content-type: application/text",true,200);
header("Content-Disposition: attachment; filename=$file_name");
header("Pragma: no-cache");
header("Expires: 0");
print $output;
exit;
}
}
/**
* Method that adds export admin page
*/
public function qode_admin_export() {
if(isset($_REQUEST['export'])) {
$this->init_qode_export();
}
$home_url = home_url();
if(strpos($home_url, 'qodeinteractive.com') !== false) {
$this->enable_export = true;
}
if($this->enable_export) {
$this->pagehook = add_menu_page(
'Qode Theme', esc_html__('Qode Export', 'qode'),
'manage_options',
'qode_options_export_page',
array($this, 'qode_generate_export_page')
);
}
}
/**
* Method that
*/
public function qode_generate_export_page() {
?>
<div id="qode-metaboxes-general" class="wrap">
<form method="post" action="">
<div id="poststuff" class="metabox-holder">
<div id="post-body" class="has-sidebar">
<div id="post-body-content" class="has-sidebar-content">
<table class="form-table">
<tbody>
<tr><td scope="row" width="150"><h2><?php esc_html_e('Export', 'qode'); ?></h2></td></tr>
<tr valign="middle">
<td>
<form method="post" action="">
<input type="hidden" name="export_option" value="widgets" />
<input type="submit" value="Export Widgets" name="export" />
</form>
<br />
<br />
<form method="post" action="">
<input type="hidden" name="export_option" value="custom_sidebars" />
<input type="submit" value="Export Custom Sidebars" name="export" />
</form>
<br />
<form method="post" action="">
<input type="hidden" name="export_option" value="qode_options" />
<input type="submit" value="Export Options" name="export" />
</form>
<br />
<form method="post" action="">
<input type="hidden" name="export_option" value="qode_menus" />
<input type="submit" value="Export Menus" name="export" />
</form>
<br />
<form method="post" action="">
<input type="hidden" name="export_option" value="setting_pages" />
<input type="submit" value="Export Setting Pages" name="export" />
</form>
<br />
<form method="post" action="">
<input type="hidden" name="export_option" value="all" />
<input type="submit" value="Export all" name="export" />
</form>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br class="clear"/>
</div>
</form>
</div>
<?php }
}
$my_Qode_Export = new Qode_Export();