<?php

/***********************************************************************************************************
*  PERSONNALISER EDITEUR GUTENBERG 
*	 DESACTIVER LE MODE PLEIN ECRAN DE GUTENBERG
*	 ACTIVER LA FEUILLE DE STYLE PAR DÉFAUT
*	 ALIGNEMENT LARGE & PLEINE LARGEUR POUR L 'EDITEUR DE BLOCS
*    EMBEDS RESPONSIVE (EX: Intégration Vidéos YouTUbe)
*    Activer la prise en charge des nouveaux paramètres de blocs Introduit depuis WordPress 6.0
*    	Désactiver la catégorie Openverse pour l'onglet média de l'inséreuse de blocs
*	 	Désactiver les onglets Paramètres & Styles pour la barre latérale onglet bloc
*	 Activer contrôles d'apparence pour des thèmes classique sans fichier thème JSON
*    	OMBRES PERSONNALISÉES POUR LE CONTRÔLE D'OMBRE PORTÉE AUX PARAMÉTRES DU BLOC 
*       Ajout d'aspect ratio personnalisé
*    Couleur d'arrière plan de l'éditeur
*    Désactiver pour une image JPEG la génération d'image WebP par défaut pour les miniatures introduit depuis WordPress 6.1
*    Désactiver le téléchargement des images WebP & pour le format JPEG la  génération d'image WebP pour les miniatures
*************************************************************************************************************/


/***********************************************************************************************
                                       PERSONNALISER EDITEUR GUTENBERG            
***********************************************************************************************/

/*-------------------------- DESACTIVER LE MODE PLEIN ECRAN DE GUTENBERG -------------------------*/
 //Ce code vérifie d’abord si un utilisateur affiche une page de zone d’administration de WordPress 
// et si on à choisi de désactiver le mode plein écran
//Si oui, il vérifie le statut de l’éditeur plein écran.
//Si l’éditeur plein écran est activé, il le désactive simplement. 
                
if (is_admin() && $custom_gutenberg_editor_settings['eccp_settings_disable_fullscreen_gutenberg_editor_checkbox_field'] == true ) {
	
    function eccp_disable_editor_fullscreen_by_default() {
		$script = "jQuery( window ).load(function() { 
		const isFullscreenMode = wp.data.select( 'core/edit-post' ).isFeatureActive( 'fullscreenMode' ); 
		if ( isFullscreenMode ) { wp.data.dispatch( 'core/edit-post' ).toggleFeature( 'fullscreenMode' ); } });";
		wp_add_inline_script( 'wp-blocks', $script );
    }
	
add_action( 'enqueue_block_editor_assets', 'eccp_disable_editor_fullscreen_by_default' );

}


/*------------ ACTIVER LA FEUILLE DE STYLE PAR DÉFAUT -------------------------*/

// si on à choisi d'activer la feuille de style par défauts de blocs Guteneberg en Front End
if( $custom_gutenberg_editor_settings['eccp_settings_activate_default_style_sheet_on_front_end_checkbox_field'] == true ) {
	add_theme_support( 'wp-block-styles' );
}

/*---------------- ALIGNEMENT LARGE & PLEINE LARGEUR POUR L 'EDITEUR DE BLOCS -------------------------*/
// Certains blocs tels que le bloc image ont la possibilité de définir 
// un alignement «pleine largeur» ou «grande largeur»
// Ajout dans l’éditeur de nouvelles options d’alignement : pleine largeur et grande largeur 
// n'est pas pris en charge par tous les thèmes.
function eccp_option_align_wide() {
	
	add_theme_support( 'align-wide' );
}

// si on à activé l'alignement large pour l'éditeur de blocs
if( $custom_gutenberg_editor_settings['eccp_settings_activate_align_wide_block_editor_checkbox_field'] == true ) {
	add_action( 'after_setup_theme', 'eccp_option_align_wide' );
}


/*------------ EMBEDS RESPONSIVE (EX: Intégration Vidéos YouTUbe) -------------------------*/

// Si on à activé les embeds responsive
if( $custom_gutenberg_editor_settings['eccp_settings_activate_responsive_embeds_checkbox_field'] == true ) {
	add_theme_support( 'responsive-embeds' );
}

// pour cetrains thème l'activation Embeds Responsive est mal supporté
// et induit une marge interne haute, alors on désactive cette fonctionnalité
if( $custom_gutenberg_editor_settings['eccp_corrective_according_to_theme_radio_field'] == 'yes' ) {
	remove_theme_support( 'responsive-embeds' );
}


/*------------ Activer la prise en charge des nouveaux paramètres de blocs Introduit depuis WordPress 6.0 ---------*/

function eccp_enable_support_new_block_settings( $editor_settings ) {

	// récupération des paramètres du plugin pour personnaliser l'editeur
	$custom_gutenberg_editor_settings = get_option( 'eccp_settings_custom_gutenberg_editor' );

	/*------------ Activer la prise en charge de Padding et Margin --------------*/
	// Marge Interne: Groupe, Colonne, Cover, Bouton
	// Marge Externe: Titre,colonnes
	// Gap ou espacement des blocs: Colonnes
	if ($custom_gutenberg_editor_settings['eccp_settings_activate_support_margin_padding_checkbox_field']){
		
		$editor_settings["enableCustomSpacing"] = true;
		$editor_settings["__experimentalFeatures"]["spacing"]["margin"] = true;
		// espacement des blocs normalement activé avec WordPress 6.1
		$editor_settings["__experimentalFeatures"]["spacing"]["blockGap"] = true;
		
	}
	
	/*------------ Activer la prise en charge de la Bordure(Rayon Epaisseur,Couleur,Style) --*/
	// Bloc Colonnes,Groupe,Image
	if($custom_gutenberg_editor_settings['eccp_settings_activate_support_border_checkbox_field']){
	
		$editor_settings["__experimentalFeatures"]["border"]["color"] = true;
		$editor_settings["__experimentalFeatures"]["border"]["radius"] = true;
		$editor_settings["__experimentalFeatures"]["border"]["style"] = true;
		$editor_settings["__experimentalFeatures"]["border"]["width"] = true;
    
	}
	
	/*------------ activation de la hauteur de ligne en particulier pour le thème OceanWP --*/
	// activé par défaut pour le thème Astra
	$editor_settings["__experimentalFeatures"]["typography"]["lineHeight"] = true;
	
	
	/*------------ Désactiver la catégorie Openverse pour l'onglet média de l'inséreuse de blocs --*/
	if($custom_gutenberg_editor_settings['eccp_settings_disable_openverse_category_from_media_tab_checkbox_field']){
		$editor_settings['enableOpenverseMediaCategory'] = false;
	} 
	
	/*------------ Désactiver les onglets Paramètres & Styles pour la barre latérale onglet bloc --*/
	if($custom_gutenberg_editor_settings['eccp_settings_disable_settings_styles_tabs_for_sidebar_checkbox_field']){
		$editor_settings['blockInspectorTabs']['default'] = false;
	} 
	
	
	return $editor_settings;
	
}
  
add_filter( 'block_editor_settings_all', 'eccp_enable_support_new_block_settings', 10, 1 );


/*------------ Activer contrôles d'apparence pour des thèmes classique sans fichier thème JSON ---------*/

// prise en charge pour des thèmes classique sans fichier thème JSON
// des contrôles d'apparences
if($custom_gutenberg_editor_settings['eccp_settings_enable_appearance_control_checkbox_field']){
	add_theme_support('appearance-tools');
}

/***********************************************************************************************
      OMBRES PERSONNALISÉES POUR LE CONTRÔLE D'OMBRE PORTÉE AUX PARAMÉTRES DU BLOC           
***********************************************************************************************/


// Application d'ombres personnalisées pour le contrôle d'ombre portée aux paramètres du bloc
// pour les thèmes classiques sans et avec fichier theme.json
// remplace les 5 préréglages standard de WordPress
if($custom_gutenberg_editor_settings['eccp_settings_enable_custom_drop_shadows_checkbox_field']) {
	add_filter( 'wp_theme_json_data_theme', 'eccp_filter_custom_box_shadows_theme_json_data_default',1,1 );
}

function eccp_filter_custom_box_shadows_theme_json_data_default( $theme_json ){

	// on récupère les paramètres de l'editeur
	$custom_gutenberg_editor_settings = get_option( 'eccp_settings_custom_gutenberg_editor' );
	

    $new_data = array(
	
		'version' => 3,
		
		'settings' => array(
		
			'shadow' => array(
			
				'defaultPresets' => false,
			
				'presets' => array(
				
					
					array(
						'name' => __( 'Light', 'editor-custom-color-palette' ),
						'slug' => 'light',
						'shadow' => $custom_gutenberg_editor_settings['eccp_settings_light_drop_shadow_text_field']
					),
				
					array(
						'name' => __( 'Natural', 'editor-custom-color-palette' ),
						'slug' =>'natural',
						'shadow' => $custom_gutenberg_editor_settings['eccp_settings_natural_drop_shadow_text_field']
					),
					
					array(
						'name' => __( 'Deep', 'editor-custom-color-palette' ),
						'slug' => 'deep',
						'shadow' => $custom_gutenberg_editor_settings['eccp_settings_deep_drop_shadow_text_field']
					),
					
					array(
						'name' => __( 'Sharp', 'editor-custom-color-palette' ),
						'slug' =>'sharp',
						'shadow' => $custom_gutenberg_editor_settings['eccp_settings_sharp_drop_shadow_text_field']
					),
					
					array(
						'name' => __( 'Card', 'editor-custom-color-palette' ),
						'slug' => 'card',
						'shadow' => $custom_gutenberg_editor_settings['eccp_settings_card_drop_shadow_text_field']
					),
					
				),
			),
		),
		
	);

	return $theme_json->update_with( $new_data );
	
}

/*************************************************************************************
                   Ajout d'aspect ratio personnalisé
*************************************************************************************/

if ($custom_gutenberg_editor_settings['eccp_settings_enable_custom_aspect_ratio_checkbox_field']) {
	add_filter( 'wp_theme_json_data_default', 'eccp_filter_aspect_ratio_theme_json_data_default',1,1 );
}

/* 
	Pour le contrôle Dimensions aux paramètres du bloc,
	ajout de tailles d'aspect ratio personnalisées: 2/3 4/5 1/2 2/1
	a celles déja existante, pour les thèmes classiques sans ou avec fichier theme.json. 
	On est obligé auparavent de repréciser les tailles d'aspect ratio existante comme:
	square,Standard,Portrait,Classic,Classic Portrait,Wide,Tall
*/
function eccp_filter_aspect_ratio_theme_json_data_default( $theme_json ){

    $new_data = array(
	
		'version' => 3,
		
		'settings' => array(
		
			'dimensions' => array(
			
				'aspectRatios' => array(
				
					array(
						'name' => __( 'Square - 1:1','editor-custom-color-palette' ),
						'slug' => 'square',
						'ratio' => '1' ,
					),
					array(
						'name' => __( 'Standard - 4:3','editor-custom-color-palette' ),
						'slug' => '4-3',
						'ratio' => '4/3' ,
					),
					
					array(
						'name' => __( 'Portrait - 3:4','editor-custom-color-palette' ),
						'slug' => '3-4',
						'ratio' => '3/4' ,
					),
					array(
						'name' => __( 'Classic - 3:2','editor-custom-color-palette' ),
						'slug' => '3-2',
						'ratio' => '3/2' ,
					),
					
					array(
						'name' => __( 'Classic Portrait - 1:3','editor-custom-color-palette' ),
						'slug' => '1-3',
						'ratio' => '1/3' ,
					),
					array(
						'name' => __( 'Wide - 16:9','editor-custom-color-palette' ),
						'slug' => '16-9',
						'ratio' => '16/9' ,
					),
					
					array(
						'name' => __( 'Tall - 9:16','editor-custom-color-palette' ),
						'slug' => '9-16',
						'ratio' => '9/16' ,
					),
					array(
						'name' => __( 'Custom Size - 2:3','editor-custom-color-palette' ),
						'slug' => '2-3',
						'ratio' => '2/3' ,
					),
					array(
						'name' => __( 'Custom Size - 4:5','editor-custom-color-palette' ),
						'slug' => '4-5',
						'ratio' => '4/5' ,
					),
					array(
						'name' => __( 'Custom Size - 1:2','editor-custom-color-palette' ),
						'slug' => '1-2',
						'ratio' => '1/2' ,
					),
					array(
						'name' => __( 'Custom Size - 2:1','editor-custom-color-palette' ),
						'slug' => '2-1',
						'ratio' => '2/1' ,
					),
					
					array(
						'name' => __( 'Custom Size - 21:9','editor-custom-color-palette' ),
						'slug' => '21-9',
						'ratio' => '21/9' ,
					),
				
				),
				
			),
			
		),
		
	);

	return $theme_json->update_with( $new_data );
	
}


/*------------ Couleur d'arrière plan de l'éditeur ---------*/

// pour bien déclarer le style uniquemment pour l'éditeur en back office on utilise 
// le hook: enqueue_block_editor_assets
if ( $custom_gutenberg_editor_settings['eccp_settings_enable_editor_background_color_checkbox_field'] ) {
	add_action('enqueue_block_editor_assets', 'ecpp_default_gutenberg_editor_background');
}

function ecpp_default_gutenberg_editor_background() {
	
	add_action( 'admin_head', function() {
	
		// Si on est en back office & si l'objet d'écran est l'éditeur Gutenberg,
		// alors on peut charger notre style sinon on sort
		if (!is_admin() and !get_current_screen()->is_block_editor() ) {
			return;
		}
		
		// récupération des paramètres du plugin pour personnaliser l'editeur
	    $custom_gutenberg_editor_settings = get_option( 'eccp_settings_custom_gutenberg_editor' );

		
		echo '<style id="editor-custom-color-palette" type="text/css">';
		
			echo'body.wp-admin .editor-styles-wrapper.block-editor-writing-flow{';
				echo'background-color:'.$custom_gutenberg_editor_settings['eccp_settings_editor_background_color_text_field'].';';
			echo'}';

		echo '</style>';
		
	});

}



/*------------ Désactiver pour une image JPEG la génération d'image WebP par défaut pour les miniatures introduit depuis WordPress 6.1 ---------*/

// Si on a désactivé la génération d'image WebP
// On utilise le hook wp_upload_image_mime_transforms qui permet de 
// filtrer les types mime utilisés uniquement pour la génération des miniatures JPEG. 
// N'empêche pas la génération de l'image d'origine au format WebP car c'est le format de sortie
// par défaut à partir de WordPress 6.1.
// si on désactive les miniatures WebP 
// alors c'est l'image JPEG qui est présenté dans la médiathèque et en Front End
// car il est précisé Par défaut, lorsqu'un type n'est pas mappé dans le tableau fournit en paramètre 
// de la fonction wp_upload_image_mime_transforms, la sortie est dans le type mime de l'image téléchargée

/*
if($custom_gutenberg_editor_settings['eccp_settings_disable_webp_image_generation_checkbox_field']){
	add_filter( 'wp_upload_image_mime_transforms', '__return_empty_array' );
}
*/

/*------------ Désactiver le téléchargement des images WebP & pour le format JPEG la  génération d'image WebP pour les miniatures  ---------*/

// Remarque: le format de sortie pour la balise image étant le WebP a partir de WordPress 6.1
// même si on interdit le type mime WebP, l'image d'origine au format JPEG sera quand même 
// généré en WebP

// supprime le type mime:WebP
function my_custom_mime_types( $mimes ) {
     
    // supprimer le type mime WebP
    unset( $mimes['webp'] );
 
    return $mimes;
}

/*
if($custom_gutenberg_editor_settings['eccp_settings_disable_downloading_and_image_generation_webp_checkbox_field']){
	add_filter( 'upload_mimes', 'my_custom_mime_types' );
}
*/
