<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/***** ポップアップコンテンツ *****/
/*** スクリプトの読み込み ***/
function haup_popup_script_include() {
	wp_enqueue_script('haup-popup-cpt-js');
}
add_action( 'wp_enqueue_scripts', 'haup_popup_script_include' );

/*** ポップアップ用の投稿タイプを作る ***/
/* 投稿タイプを追加 */
function haup_create_popup_post_type() {
	$title = __('HAUP Popup Contents','hima-art-utility');

	register_post_type('haup_popup',
		array(
			'labels' => array(
				'name' => esc_html($title),
				'singular_name' => esc_html($title),
			),
			'public' => true,
			'has_archive' => true,
			'supports' => array('title', 'editor', 'thumbnail','custom-fields'), // ブロックエディターをサポート
			'rewrite' => array('slug' => 'haup_popup'),
			'show_in_rest' => true, // Gutenbergを有効にする
			'show_in_menu' => false,//設定メニュー内に表示させるため非表示にする
		)
	);
}
add_action('init', 'haup_create_popup_post_type');

/* Hima Art Utilityプラグインの設定画面内にメニューを追加 */
function haup_add_popup_content_menu() {
	$menu_title = __('PopUp Contents','hima-art-utility');

	// カスタム投稿タイプのサブメニューを追加
		add_submenu_page(
			'haumenu-admin-page', // 親メニューのスラッグ
			$menu_title, // サブメニューのページタイトル
			$menu_title, // サブメニューのタイトル
			'manage_options', // 権限
			'edit.php?post_type=haup_popup' // サブメニューのスラッグ
		);
}
add_action('admin_menu', 'haup_add_popup_content_menu');


/* 投稿タイプへの直接アクセスを404ページへ遷移させる */
function haup_restrict_popup_access() {
	if (is_singular('haup_popup') && !current_user_can('manage_options')) {
		global $wp_query;
		$wp_query->set_404(); // 404エラーを設定
		status_header(404); // 404ステータスを送信
		// サイトの404テンプレートを表示
		include(get_404_template());
		exit;
	}
}
add_action('template_redirect', 'haup_restrict_popup_access');

/* 投稿タイプの投稿へnoindexタグを付与 */
function haup_add_noindex_to_popup() {
	if (is_singular('haup_popup')) {
		echo wp_kses_post('<meta name="robots" content="noindex, nofollow" />') . "\n";
	}
}
add_action('wp_head', 'haup_add_noindex_to_popup');

/* feedから除外 */
function haup_exclude_popup_from_feed($query) {
	if ($query->is_feed() && $query->is_main_query()) {
		// 除外したいカスタム投稿タイプのスラッグを指定
		$post_types = $query->get('post_type');
		
		// $post_typesが配列でない場合は配列に変換
		if (!is_array($post_types)) {
			$post_types = array($post_types);
		}

		$query->set('post_type', array_diff($post_types, array('haup_popup')));
	}
}
add_action('pre_get_posts', 'haup_exclude_popup_from_feed');

/* wp-sitemapから除外 */
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
function remove_haup_popup_from_wp_sitemap( $post_types ) {
	unset( $post_types['haup_popup'] ); // Change page to any post type name
	return $post_types;
}

add_filter( 'wp_sitemaps_post_types', 'remove_haup_popup_from_wp_sitemap' );

/*** HTMLを利用したリンクを作れるようカスタムフィールドを追加 ***/
/* メタボックスの追加 */
function haup_popup_meta_box() {
	$title = __('Popup Link Title','hima-art-utility');

	add_meta_box(
		'haup_popup_title_meta_box',
		$title,
		'haup_popup_title_meta_box_callback',
		'haup_popup',
		'normal',
		'high'
	);
}
add_action('add_meta_boxes', 'haup_popup_meta_box');

/* メタボックスのコールバック関数 */
function haup_popup_title_meta_box_callback($post) {
	// Nonceフィールドを追加
	wp_nonce_field('haup_popup_nonce_action', 'haup_popup_nonce');

//カスタムタイトル
	// 現在のカスタムフィールドの値を取得
	$title_value = get_post_meta($post->ID, 'ha-popup-title', true);

	//文字列
	$form_title_title = __('Specify the string to be displayed as a popup link.','hima-art-utility');
	$form_title_des_a = __('You can use HTML tags that can be used in the post body, so if you want to display an icon or something, enter it here.','hima-art-utility');
	$form_title_des_b = __('If left blank, the title of this post will be used as the link string.','hima-art-utility');

?>
<p><?php echo esc_html( $form_title_title ); ?>
<br><span style="color:green;font-weight:700;"><?php echo esc_html( $form_title_des_a ); ?></span>
<br><span style="color:red;font-weight:700;"><?php echo esc_html( $form_title_des_b ); ?></span>
</p>
<textarea name="ha-popup-title" id="ha-popup-title" cols="100" rows="4" style="width: 100%;" /><?php echo esc_html($title_value); ?></textarea>
<?php
}


/* カスタムフィールドの保存 */
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
function haup_save_haup_popup_meta_box_data($post_id) {
	// 自動保存の際は処理を行わない
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
		return;
	}

	// ユーザーが権限を持っているか確認
	if (!current_user_can('edit_post', $post_id)) {
		return;
	}

	// Nonceの検証
	if (!isset($_POST['haup_popup_nonce']) || !wp_verify_nonce(sanitize_text_field( wp_unslash($_POST['haup_popup_nonce'])), 'haup_popup_nonce_action')) {
		return;
	}

	// フィールドの値を保存
	if (!empty($_POST['ha-popup-title'])) {
		//$value = wp_kses_post($_POST['ha-popup-title']);
		if ( isset($_POST['ha-popup-title']) ) {
			$value = wp_kses_post(wp_unslash($_POST['ha-popup-title']));
		} else {
			$value = '';
		}

		update_post_meta($post_id, 'ha-popup-title', $value);
	}else{
		//$value = wp_kses_post($_POST['ha-popup-title']);
		if ( isset($_POST['ha-popup-title']) ) {
			$value = wp_kses_post(wp_unslash($_POST['ha-popup-title']));
		} else {
			$value = '';
		}

		delete_post_meta($post_id, 'ha-popup-title', $value);
	}
}
add_action('save_post', 'haup_save_haup_popup_meta_box_data');

/*** 投稿タイプの投稿をショートコードで表示 ***/
/* 投稿タイトルをポップアップのリンクタイトルにする */
/* ショートコードを追加 */
function haup_popup_shortcode($atts) {
// 引数を取得
	$atts = shortcode_atts(array(
		'ids' => '', // デフォルトは空
		'width' => '',//幅の指定（指定なしの場合はtheme.jsonのコンテンツ幅）
		'type' => '',
	), $atts);

	//幅を変数化
	if(!empty($atts['width'])){
		$wide = $atts['width'].'px';
	}else{
		$wide = 'var(--wp--style--global--content-size)';
	}

	//種類を変数化
	$types = $atts['type'];

	// 指定された投稿IDを配列に変換
	$ids = array_map('trim', explode(',', $atts['ids']));

	// カスタム投稿タイプ「popup」から投稿を取得
	$args = array(
		'post_type' => 'haup_popup',
		'posts_per_page' => -1,
		'post__in' => $ids, // 指定された投稿IDのみを取得
		'orderby' => 'post__in', // IDの順序を保つ
	);

	$popup_posts = new WP_Query($args);
    
	$output = '';

	if ($popup_posts->have_posts()) {
		while ($popup_posts->have_posts()) {
			$popup_posts->the_post();
			$popup_id = uniqid('haup-popup_'); // ユニークなIDを生成

			// リンクを生成
			if(!empty($types)){//typeパラメーターが空でなかったらnavタグを出力
				$output .= '<nav class="ha-popup-nav">';
			}

			//カスタムフィールドに値があればそれを、なければタイトルを出力
			$cf_title = get_post_meta(get_the_ID(), 'ha-popup-title', true);
			$p_title = get_the_title(get_the_ID());
			if(!empty( $cf_title )){
				$title = $cf_title;
			}else{
				$title = $p_title;
			}

			$output .= '<a href="#" class="ha-popup-trigger" data-popup-id="' . esc_attr($popup_id) . '">';
			//$output .= get_the_title();
			$output .= wp_kses_post( $title );
			$output .= '</a>';
			$output .= '<div id="' . esc_attr($popup_id) . '" class="ha-popup" style="display:none;width:'.$wide.';">';

			$output .= '<div class="ha-popup-content">';
			$output .= '<span class="ha-popup-close">×</span>';
			// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
			$output .= apply_filters('the_content', get_the_content()); // 投稿の内容を表示
			$output .= '</div>';
			$output .= '</div>';
			
			if(!empty($types)){
				$output .= '</nav>';//typeパラメーターが空でなかったらnavタグを出力
			}

		}

		wp_reset_postdata(); // クエリのリセット
	}

	return $output;

}
add_shortcode('ha-popup-links', 'haup_popup_shortcode');

/* ブロックパターンとして「HAUブロックパターン」カテゴリーへ登録 */
function haup_popup_close_button_pattern_init(){
	$slug = 'hima-art-utility/popup-close-button-pattern';
	$title = __('Popup Close Button','hima-art-utility');

	$pattern = [
		"title" => $title,
		"categories" => ["hima-art-utility/original-patterns"],
		"content" => '
			<!-- wp:buttons {"metadata":{"categories":["hima-art-utility/original-patterns"],"patternName":"hima-art-utility/popup-close-button-pattern","name":"Popup Close Button"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"ha-popup-close-btn"} -->
<div class="wp-block-button ha-popup-close-btn"><a class="wp-block-button__link wp-element-button">閉じる</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->
		',
	];

	register_block_pattern($slug, $pattern);
}
add_action('admin_init', 'haup_popup_close_button_pattern_init');

/*** 管理画面 ***/
/* ショートコードを表示させ、１クリックでコピーできるようにする */
/* カラムを追加 */
function haup_add_popup_shortcode_column($columns) {
	$text = __('Shortcode','hima-art-utility');

	$columns['haup_admin_popup_shortcode'] = esc_html( $text );

	return $columns;
}
add_filter('manage_haup_popup_posts_columns', 'haup_add_popup_shortcode_column');

/* カスタムカラムにショートコードを表示 */
function haup_display_popup_shortcode_column($column, $post_id) {
	$text = __('Copy','hima-art-utility');

if ($column === 'haup_admin_popup_shortcode') {
	$shortcode = '[ha-popup-links ids="' . $post_id . '" width="" type=""]';

	echo '<span class="ha-admin-popup-shortcode-display" style="cursor: pointer;" data-shortcode="' . esc_attr($shortcode) . '">' . esc_html($shortcode) . '</span>';
 
	echo '<span class="copy-tooltip" style="display: none; position: absolute; background-color: #777; color: #fff; padding: 2px; border-radius: 5px; z-index: 10;">'.esc_html( $text ).'</span>';
}
}
add_action('manage_haup_popup_posts_custom_column', 'haup_display_popup_shortcode_column', 10, 2);

/* ホーバー時にツールチップを出すためのjQueryを追加 */
function haup_enqueue_copy_shortcode_script() {
	$success_message = __('Shortcode Copied','hima-art-utility');
	$failed_message = __('Copy Failed','hima-art-utility');
?>
<script>
jQuery(document).ready(function($) {
	$('.ha-admin-popup-shortcode-display').each(function() {
		const element = $(this);
		const tooltip = element.next(); // コピーのツールチップ
		const SuccessMSG = '<?php echo esc_js($success_message); ?>';
		const FailedMSG = '<?php echo esc_js($failed_message); ?>';

		element.on('mouseenter', function() {
			tooltip.css('display', 'block');
			const rect = this.getBoundingClientRect();
			tooltip.css({
				'left': (rect.left - tooltip.outerWidth() - 5) + 'px', // 左に表示
				'top': (rect.top - tooltip.outerHeight()) + 'px' // 上に表示
			});
		});

		element.on('mouseleave', function() {
			tooltip.css('display', 'none');
		});

		element.on('click', function() {
			const shortcode = element.data('shortcode');
			navigator.clipboard.writeText(shortcode).then(function() {
				alert( SuccessMSG + shortcode);
			}, function() {
				alert( FailedMSG );
			});
		});
	});
});
</script>
<?php
}
add_action('admin_footer', 'haup_enqueue_copy_shortcode_script');