<?php
namespace ColibriWP\Theme\Components\Header;
use ColibriWP\Theme\Core\ComponentBase;
use ColibriWP\Theme\Core\Hooks;
use ColibriWP\Theme\Core\Utils;
use ColibriWP\Theme\Defaults;
use ColibriWP\Theme\Translations;
use ColibriWP\Theme\View;
use WP_Customize_Manager;
use WP_Customize_Setting;
class Logo extends ComponentBase {
protected static $settings_prefix = 'header_front_page.logo.';
public static function rearrangeControls( $wp_customize ) {
$prefix = static::$settings_prefix;
$controls = array( 'blogname', 'custom_logo' );
$priority_start = 20;
foreach ( $controls as $index => $control ) {
/** @var WP_Customize_Manager $wp_customize */
$instance = $wp_customize->get_control( $control );
if ( $instance ) {
$instance->section = "{$prefix}section";
$instance->json['colibri_tab'] = 'content';
$instance->priority = ( $priority_start + $index * 5 );
$active_rule_value = 'text';
if ( $control == 'custom_logo' ) {
$active_rule_value = 'image';
}
/** @var WP_Customize_Setting $setting */
$setting = $instance->setting;
// $setting->transport = 'postMessage';
$instance->json['active_rules'] = array(
array(
'setting' => "{$prefix}props.layoutType",
'operator' => '=',
'value' => $active_rule_value,
),
);
}
if ( $wp_customize->selective_refresh ) {
$id = static::selectiveRefreshSelector();
$partial = $wp_customize->selective_refresh->get_partial( Utils::slugify( $id ) );
if ( $partial ) {
$partial->settings = array_merge(
$partial->settings,
$controls
);
}
}
}
}
public static function selectiveRefreshSelector() {
$selector = Defaults::get( static::$settings_prefix . 'selective_selector', false );
return $selector;
}
/**
* @return array();
*/
protected static function getOptions() {
Hooks::prefixed_add_action( 'rearrange_customizer_components', array( __CLASS__, 'rearrangeControls' ) );
$prefix = static::$settings_prefix;
$custom_logo_args = get_theme_support( 'custom-logo' );
return array(
'sections' => array(
"{$prefix}section" => array(
'title' => Translations::get( 'logo' ),
'panel' => 'header_panel',
'type' => 'colibri_section',
'hidden' => true,
),
),
'settings' => array(
'alternate_logo' => array(
'default' => Defaults::get( 'dark_logo', '' ),
'control' => array(
'label' => Translations::escHtml( 'alternate_logo_image' ),
'type' => 'cropped_image',
'section' => "{$prefix}section",
'priority' => 35,
'colibri_tab' => 'content',
'height' => Utils::pathGet( $custom_logo_args, '0.height', false ),
'width' => Utils::pathGet( $custom_logo_args, '0.width', false ),
'flex_height' => Utils::pathGet( $custom_logo_args, '0.flex-height', false ),
'flex_width' => Utils::pathGet( $custom_logo_args, '0.flex-width', false ),
'active_rules' => array(
array(
'setting' => "{$prefix}props.heroSection.layout",
'operator' => '=',
'value' => 'image',
),
),
),
),
"{$prefix}props.heroSection.layout" => array(
'default' => Defaults::get( "{$prefix}props.heroSection.layout" ),
'control' => array(
'label' => Translations::get( 'layout_type' ),
'focus_alias' => 'logo',
'type' => 'select',
'section' => "{$prefix}section",
'colibri_tab' => 'content',
'choices' => array(
'image' => Translations::escHtml( 'logo_image_only' ),
'text' => Translations::escHtml( 'site_title_text_only' ), /*
'image_text_v' => Translations::escHtml( "image_with_text_below" ),
'image_text_h' => Translations::escHtml( "image_with_text_right" ),
'text_image_v' => Translations::escHtml( "image_with_text_above" ),
'text_image_h' => Translations::escHtml( "image_with_text_left" ),*/
),
),
),
),
);
}
public function getPenPosition() {
return static::PEN_ON_RIGHT;
}
public function renderContent( $parameters = array() ) {
View::partial(
'front-header',
'logo',
array(
'component' => $this,
)
);
}
public function printTextLogo() {
if ( $this->getLayoutType() == 'text' ) {
echo sprintf(
'<a class="text-logo" data-type="group" data-dynamic-mod="true" href="%1$s">%2$s</a>',
$this->getHomeurl(),
get_bloginfo( 'name' )
);
}
}
public function getLayoutType() {
$prefix = static::$settings_prefix;
return $this->mod( "{$prefix}props.layoutType" );
}
public function getHomeUrl() {
return esc_url( home_url( '/' ) );
}
public function printImageLogo( $class = '' ) {
$class = $class ? "{$class}-image" : '';
if ( $this->getLayoutType() == 'image' ) : ?>
<a href="<?php echo $this->getHomeUrl(); ?>" class="d-flex align-items-center">
<img src="<?php echo $this->customLogoUrl(); ?>"
class="h-logo__image h-logo__image_h logo-image <?php echo esc_attr( $class ); ?>"/>
<img src="<?php echo $this->alternateLogoUrl(); ?>"
class="h-logo__alt-image h-logo__alt-image_h logo-alt-image <?php echo esc_attr( $class ); ?>"/>
</a>
<?php
endif;
}
public function customLogoUrl() {
$custom_logo_id = get_theme_mod( 'custom_logo', - 1 );
if ( $custom_logo_id == - 1 || empty( $custom_logo_id ) ) {
return get_template_directory_uri() . '/resources/images/logo.png';
}
return esc_url( wp_get_attachment_image_url( $custom_logo_id, 'full' ) );
}
public function alternateLogoUrl() {
$alternate_logo_id = get_theme_mod( 'alternate_logo', - 1 );
if ( $alternate_logo_id == - 1 || empty( $alternate_logo_id ) ) {
return $this->customLogoUrl();
}
if ( is_numeric( $alternate_logo_id ) ) {
return esc_url( wp_get_attachment_image_url( $alternate_logo_id, 'full' ) );
} else {
return esc_url( $alternate_logo_id );
}
}
}