| 1 |
<?php |
| 2 |
|
| 3 |
namespace ABlocks\admin; |
| 4 |
|
| 5 |
if ( ! defined( 'ABSPATH' ) ) { |
| 6 |
exit; |
| 7 |
} |
| 8 |
|
| 9 |
use ABlocks\Admin\Settings\Base; |
| 10 |
use ABlocks\Helper; |
| 11 |
use ABlocks\Classes\GlobalClasses; |
| 12 |
|
| 13 |
class Export { |
| 14 |
|
| 15 |
public static function init() { |
| 16 |
$self = new self(); |
| 17 |
add_action( 'rss2_head', [ $self, 'add_options_to_rss' ] ); |
| 18 |
add_action( 'export_filters', [ $self, 'add_patterns_radio' ] ); |
| 19 |
add_action( 'init', [ $self, 'allow_template_export' ] ); |
| 20 |
} |
| 21 |
|
| 22 |
/** |
| 23 |
* Add options to WXR. |
| 24 |
* |
| 25 |
* @return void |
| 26 |
*/ |
| 27 |
public function add_options_to_rss() { |
| 28 |
global $pagenow; |
| 29 |
// phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Don't need nonce verification here, we're just checking if content's value. |
| 30 |
if ( 'export.php' !== $pagenow || ! isset( $_GET['content'] ) || 'all' !== sanitize_text_field( wp_unslash( $_GET['content'] ) ) ) { |
| 31 |
return; |
| 32 |
} |
| 33 |
|
| 34 |
$default_settings = Base::get_default_data(); |
| 35 |
$options = array( |
| 36 |
'show_on_front' => get_option( 'show_on_front', 'posts' ), |
| 37 |
'page_on_front' => get_option( 'page_on_front', 0 ), |
| 38 |
'page_for_posts' => get_option( 'page_for_posts', 0 ), |
| 39 |
'ablocks_login_page' => Helper::get_settings( 'login_page', 0 ), |
| 40 |
'ablocks_registration_page' => Helper::get_settings( 'registration_page', 0 ), |
| 41 |
'ablocks_forget_password_page' => Helper::get_settings( 'forget_password_page', 0 ), |
| 42 |
'ablocks_default_container_width' => Helper::get_settings( 'default_container_width', $default_settings['default_container_width'] ), |
| 43 |
'ablocks_container_padding' => Helper::get_settings( 'container_padding', $default_settings['container_padding'] ), |
| 44 |
'ablocks_container_element_gap' => Helper::get_settings( 'container_element_gap', $default_settings['container_element_gap'] ), |
| 45 |
'ablocks_global_color' => $this->process_ablocks_json_data( 'global_color' ), |
| 46 |
'ablocks_global_typography' => $this->process_ablocks_json_data( 'global_typography' ), |
| 47 |
'ablocks_global_font_family_fallback' => Helper::get_settings( 'global_font_family_fallback', $default_settings['global_font_family_fallback'] ), |
| 48 |
'ablocks_global_body_text_color' => Helper::get_settings( 'global_body_text_color', $default_settings['global_body_text_color'] ), |
| 49 |
'ablocks_global_body_typography' => $this->process_ablocks_json_data( 'global_body_typography' ), |
| 50 |
'ablocks_global_body_paragraph_space' => $this->process_ablocks_json_data( 'global_body_paragraph_space' ), |
| 51 |
'ablocks_global_link_color' => Helper::get_settings( 'global_link_color', $default_settings['global_link_color'] ), |
| 52 |
'ablocks_global_link_hover_color' => Helper::get_settings( 'global_link_hover_color', $default_settings['global_link_hover_color'] ), |
| 53 |
'ablocks_global_link_typography' => $this->process_ablocks_json_data( 'global_link_typography' ), |
| 54 |
'ablocks_global_link_hover_typography' => $this->process_ablocks_json_data( 'global_link_hover_typography' ), |
| 55 |
'ablocks_global_h1_color' => Helper::get_settings( 'global_h1_color', $default_settings['global_h1_color'] ), |
| 56 |
'ablocks_global_h1_typography' => $this->process_ablocks_json_data( 'global_h1_typography' ), |
| 57 |
'ablocks_global_h2_color' => Helper::get_settings( 'global_h2_color', $default_settings['global_h2_color'] ), |
| 58 |
'ablocks_global_h2_typography' => $this->process_ablocks_json_data( 'global_h2_typography' ), |
| 59 |
'ablocks_global_h3_color' => Helper::get_settings( 'global_h3_color', $default_settings['global_h3_color'] ), |
| 60 |
'ablocks_global_h3_typography' => $this->process_ablocks_json_data( 'global_h3_typography' ), |
| 61 |
'ablocks_global_h4_color' => Helper::get_settings( 'global_h4_color', $default_settings['global_h4_color'] ), |
| 62 |
'ablocks_global_h4_typography' => $this->process_ablocks_json_data( 'global_h4_typography' ), |
| 63 |
'ablocks_global_h5_color' => Helper::get_settings( 'global_h5_color', $default_settings['global_h5_color'] ), |
| 64 |
'ablocks_global_h5_typography' => $this->process_ablocks_json_data( 'global_h5_typography' ), |
| 65 |
'ablocks_global_h6_color' => Helper::get_settings( 'global_h6_color', $default_settings['global_h6_color'] ), |
| 66 |
'ablocks_global_h6_typography' => $this->process_ablocks_json_data( 'global_h6_typography' ), |
| 67 |
'ablocks_frontend_dashboard_page' => $this->process_ablocks_json_data( 'frontend_dashboard_page' ), |
| 68 |
'ablocks_frontend_dashboard_sub_pages' => base64_encode( get_option( 'ablocks_frontend_dashboard_sub_pages', '' ) ), |
| 69 |
// The atomic global-class library. Blocks save only class ids, so |
| 70 |
// without this the imported blocks resolve them to nothing and |
| 71 |
// render unstyled — silently, since nothing errors. |
| 72 |
'ablocks_global_classes' => base64_encode( wp_json_encode( GlobalClasses::get_all() ) ), |
| 73 |
); |
| 74 |
|
| 75 |
if ( class_exists( 'StoreEngine' ) ) { |
| 76 |
$options['storeengine_shop_page'] = \StoreEngine\Utils\Helper::get_settings( 'shop_page' ); |
| 77 |
$options['storeengine_cart_page'] = \StoreEngine\Utils\Helper::get_settings( 'cart_page' ); |
| 78 |
$options['storeengine_checkout_page'] = \StoreEngine\Utils\Helper::get_settings( 'checkout_page' ); |
| 79 |
$options['storeengine_thankyou_page'] = \StoreEngine\Utils\Helper::get_settings( 'thankyou_page' ); |
| 80 |
$options['storeengine_dashboard_page'] = \StoreEngine\Utils\Helper::get_settings( 'dashboard_page' ); |
| 81 |
$options['storeengine_membership_pricing_page'] = \StoreEngine\Utils\Helper::get_settings( 'membership_pricing_page' ); |
| 82 |
$options['storeengine_affiliate_registration_page'] = \StoreEngine\Utils\Helper::get_settings( 'affiliate_registration_page' ); |
| 83 |
} |
| 84 |
|
| 85 |
if ( class_exists( 'Academy' ) ) { |
| 86 |
$options['academy_frontend_dashboard_page'] = \Academy\Helper::get_settings( 'frontend_dashboard_page' ); |
| 87 |
$options['academy_frontend_student_reg_page'] = \Academy\Helper::get_settings( 'frontend_student_reg_page' ); |
| 88 |
$options['academy_password_reset_page'] = \Academy\Helper::get_settings( 'password_reset_page' ); |
| 89 |
$options['academy_lessons_page'] = \Academy\Helper::get_settings( 'lessons_page' ); |
| 90 |
$options['academy_course_page'] = \Academy\Helper::get_settings( 'course_page' ); |
| 91 |
$options['academy_frontend_instructor_reg_page'] = \Academy\Helper::get_settings( 'frontend_instructor_reg_page' ); |
| 92 |
$options['academy_tutor_booking_page'] = \Academy\Helper::get_settings( 'tutor_booking_page' ); |
| 93 |
} |
| 94 |
|
| 95 |
$custom_data_xml = '<ablocks_options>'; |
| 96 |
foreach ( $options as $key => $value ) { |
| 97 |
$custom_data_xml .= sprintf( |
| 98 |
'<%1$s>%2$s</%1$s>', |
| 99 |
esc_xml( $key ), |
| 100 |
esc_xml( $value ) |
| 101 |
); |
| 102 |
} |
| 103 |
$custom_data_xml .= '</ablocks_options>'; |
| 104 |
|
| 105 |
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Want to put valid xml in RSS head. |
| 106 |
echo $custom_data_xml; |
| 107 |
} |
| 108 |
|
| 109 |
private function process_ablocks_json_data( string $key ): string { |
| 110 |
$default_settings = Base::get_default_data(); |
| 111 |
|
| 112 |
return base64_encode( wp_json_encode( Helper::get_settings( $key, $default_settings[ $key ] ) ) ); |
| 113 |
} |
| 114 |
|
| 115 |
/** |
| 116 |
* Display "Patterns" radio in export page. |
| 117 |
* |
| 118 |
* @return void |
| 119 |
*/ |
| 120 |
public function add_patterns_radio() { |
| 121 |
?> |
| 122 |
<p> |
| 123 |
<label> |
| 124 |
<input type="radio" name="content" value="wp_block"/> |
| 125 |
<?php esc_html_e( 'Patterns', 'ablocks' ); ?> |
| 126 |
</label> |
| 127 |
</p> |
| 128 |
<?php |
| 129 |
} |
| 130 |
|
| 131 |
public function allow_template_export() { |
| 132 |
global $wp_post_types; |
| 133 |
|
| 134 |
if ( isset( $wp_post_types['wp_template'] ) ) { |
| 135 |
$wp_post_types['wp_template']->can_export = true; |
| 136 |
} |
| 137 |
|
| 138 |
if ( isset( $wp_post_types['wp_template_part'] ) ) { |
| 139 |
$wp_post_types['wp_template_part']->can_export = true; |
| 140 |
} |
| 141 |
} |
| 142 |
|
| 143 |
} |
| 144 |
|