add_panel( 'bp_mailtpl', array( 'description' => __( 'Customize the appearance of emails sent by BuddyPress.', 'buddypress' ), 'title' => _x( 'BuddyPress Emails', 'screen heading', 'buddypress' ), ) ); $sections = bp_email_get_customizer_sections(); foreach( $sections as $section_id => $args ) { $wp_customize->add_section( $section_id, $args ); } $settings = bp_email_get_customizer_settings(); foreach( $settings as $setting_id => $args ) { $wp_customize->add_setting( $setting_id, $args ); } /** * Fires to let plugins register extra Customizer controls for emails. * * @since 2.5.0 * * @param WP_Customize_Manager $wp_customize The Customizer object. */ do_action( 'bp_email_customizer_register_sections', $wp_customize ); $controls = bp_email_get_customizer_controls(); foreach ( $controls as $control_id => $args ) { $wp_customize->add_control( new $args['class']( $wp_customize, $control_id, $args ) ); } /* * Hook actions/filters for further configuration. */ add_filter( 'customize_section_active', 'bp_email_customizer_hide_sections', 12, 2 ); if ( is_customize_preview() ) { /* * Enqueue scripts/styles for the Customizer's preview window. * * Scripts can't be registered in bp_core_register_common_styles() etc because * the Customizer loads very, very early. */ $bp = buddypress(); $min = bp_core_get_minified_asset_suffix(); wp_enqueue_script( 'bp-customizer-receiver-emails', "{$bp->plugin_url}bp-core/admin/js/customizer-receiver-emails{$min}.js", array( 'customize-preview' ), bp_get_version(), true ); // Include the preview loading style. add_action( 'wp_footer', array( $wp_customize, 'customize_preview_loading_style' ) ); } } add_action( 'bp_customize_register', 'bp_email_init_customizer' ); /** * Are we looking at the email customizer? * * @since 2.5.0 * * @return bool */ function bp_is_email_customizer() { return isset( $_GET['bp_customizer'] ) && $_GET['bp_customizer'] === 'email'; } /** * Only show email sections in the Customizer. * * @since 2.5.0 * * @param bool $active Whether the Customizer section is active. * @param WP_Customize_Section $section {@see WP_Customize_Section} instance. * @return bool */ function bp_email_customizer_hide_sections( $active, $section ) { if ( ! bp_is_email_customizer() ) { return $active; } return in_array( $section->id, array_keys( bp_email_get_customizer_sections() ), true ); } /** * Get Customizer sections for emails. * * @since 2.5.0 * * @return array */ function bp_email_get_customizer_sections() { /** * Filter Customizer sections for emails. * * @since 2.5.0 * * @param array $sections Email Customizer sections to add. */ return apply_filters( 'bp_email_get_customizer_sections', array( 'section_bp_mailtpl_header' => array( 'capability' => 'bp_moderate', 'panel' => 'bp_mailtpl', 'title' => _x( 'Header', 'email', 'buddypress' ), ), 'section_bp_mailtpl_body' => array( 'capability' => 'bp_moderate', 'panel' => 'bp_mailtpl', 'title' => _x( 'Body', 'email', 'buddypress' ), ), 'section_bp_mailtpl_footer' => array( 'capability' => 'bp_moderate', 'panel' => 'bp_mailtpl', 'title' => _x( 'Footer', 'email', 'buddypress' ), ), ) ); } /** * Get Customizer settings for emails. * * @since 2.5.0 * * @return array */ function bp_email_get_customizer_settings() { $defaults = bp_email_get_appearance_settings(); /** * Filter Customizer settings for emails. * * @since 2.5.0 * * @param array $settings Email Customizer settings to add. */ return apply_filters( 'bp_email_get_customizer_settings', array( 'bp_email_options[email_bg]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['email_bg'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[header_bg]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['header_bg'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[header_text_size]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['header_text_size'], 'sanitize_callback' => 'absint', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[header_text_color]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['header_text_color'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[highlight_color]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['highlight_color'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[body_bg]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['body_bg'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[body_text_size]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['body_text_size'], 'sanitize_callback' => 'absint', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[body_text_color]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['body_text_color'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[footer_text]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['footer_text'], 'sanitize_callback' => 'wp_filter_post_kses', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[footer_bg]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['footer_bg'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[footer_text_size]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['footer_text_size'], 'sanitize_callback' => 'absint', 'transport' => 'postMessage', 'type' => 'option', ), 'bp_email_options[footer_text_color]' => array( 'capability' => 'bp_moderate', 'default' => $defaults['footer_text_color'], 'sanitize_callback' => 'sanitize_hex_color', 'transport' => 'postMessage', 'type' => 'option', ), ) ); } /** * Get Customizer controls for emails. * * @since 2.5.0 * * @return array */ function bp_email_get_customizer_controls() { /** * Filter Customizer controls for emails. * * @since 2.5.0 * * @param array $controls Email Customizer controls to add. */ return apply_filters( 'bp_email_get_customizer_controls', array( 'bp_mailtpl_email_bg' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Email background color', 'buddypress' ), 'section' => 'section_bp_mailtpl_header', 'settings' => 'bp_email_options[email_bg]', ), 'bp_mailtpl_header_bg' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Header background color', 'buddypress' ), 'section' => 'section_bp_mailtpl_header', 'settings' => 'bp_email_options[header_bg]', ), 'bp_mailtpl_highlight_color' => array( 'class' => 'WP_Customize_Color_Control', 'description' => __( 'Applied to links and other decorative areas.', 'buddypress' ), 'label' => __( 'Highlight color', 'buddypress' ), 'section' => 'section_bp_mailtpl_header', 'settings' => 'bp_email_options[highlight_color]', ), 'bp_mailtpl_header_text_color' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Text color', 'buddypress' ), 'section' => 'section_bp_mailtpl_header', 'settings' => 'bp_email_options[header_text_color]', ), 'bp_mailtpl_header_text_size' => array( 'class' => 'BP_Customizer_Control_Range', 'label' => __( 'Text size', 'buddypress' ), 'section' => 'section_bp_mailtpl_header', 'settings' => 'bp_email_options[header_text_size]', 'input_attrs' => array( 'max' => 100, 'min' => 1, 'step' => 1, ), ), 'bp_mailtpl_body_bg' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Background color', 'buddypress' ), 'section' => 'section_bp_mailtpl_body', 'settings' => 'bp_email_options[body_bg]', ), 'bp_mailtpl_body_text_color' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Text color', 'buddypress' ), 'section' => 'section_bp_mailtpl_body', 'settings' => 'bp_email_options[body_text_color]', ), 'bp_mailtpl_body_text_size' => array( 'class' => 'BP_Customizer_Control_Range', 'label' => __( 'Text size', 'buddypress' ), 'section' => 'section_bp_mailtpl_body', 'settings' => 'bp_email_options[body_text_size]', 'input_attrs' => array( 'max' => 24, 'min' => 8, 'step' => 1, ), ), 'bp_mailtpl_footer_text' => array( 'class' => 'WP_Customize_Control', 'description' => __('Change the email footer here', 'buddypress' ), 'label' => __( 'Footer text', 'buddypress' ), 'section' => 'section_bp_mailtpl_footer', 'settings' => 'bp_email_options[footer_text]', 'type' => 'textarea', ), 'bp_mailtpl_footer_bg' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Background color', 'buddypress' ), 'section' => 'section_bp_mailtpl_footer', 'settings' => 'bp_email_options[footer_bg]', ), 'bp_mailtpl_footer_text_color' => array( 'class' => 'WP_Customize_Color_Control', 'label' => __( 'Text color', 'buddypress' ), 'section' => 'section_bp_mailtpl_footer', 'settings' => 'bp_email_options[footer_text_color]', ), 'bp_mailtpl_footer_text_size' => array( 'class' => 'BP_Customizer_Control_Range', 'label' => __( 'Text size', 'buddypress' ), 'section' => 'section_bp_mailtpl_footer', 'settings' => 'bp_email_options[footer_text_size]', 'input_attrs' => array( 'max' => 24, 'min' => 8, 'step' => 1, ), ), ) ); } /** * Implements a JS redirect to the Customizer, previewing a randomly selected email. * * @since 2.5.0 */ function bp_email_redirect_to_customizer() { $switched = false; // Switch to the root blog, where the email posts live. if ( ! bp_is_root_blog() ) { switch_to_blog( bp_get_root_blog_id() ); $switched = true; } $email = get_posts( array( 'fields' => 'ids', 'orderby' => 'rand', 'post_status' => 'publish', 'post_type' => bp_get_email_post_type(), 'posts_per_page' => 1, 'suppress_filters' => false, ) ); $preview_url = admin_url(); if ( $email ) { $preview_url = get_post_permalink( $email[0] ) . '&bp_customizer=email'; } $redirect_url = add_query_arg( array( 'autofocus[panel]' => 'bp_mailtpl', 'bp_customizer' => 'email', 'return' => rawurlencode( admin_url() ), 'url' => rawurlencode( $preview_url ), ), admin_url( 'customize.php' ) ); if ( $switched ) { restore_current_blog(); } printf( '', esc_url_raw( $redirect_url ) ); exit; }