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

/***** プログラムの呼び出し *****/
require_once (__DIR__ .'/page.php');
require_once (__DIR__ .'/posts.php');
require_once (__DIR__ .'/archives.php');
require_once (__DIR__ .'/frontpage.php');
require_once (__DIR__ .'/add-user-meta-funcrions.php');

/*** トップページ・アーカイブ ***/
/* SNSのURL */
function haup_top_archive_schema_output_sns_url_callback(){
	//各SNSのID

	//設定から情報を取得
	$options = GetOP01_optimize(); 
	
	// X
	$x_id = '';

	// キーが存在するかをチェック
	if (isset($options['schema-x-user-name'])) {
		$x_id = $options['schema-x-user-name'];
	}

	// Facebook
		$fb_id = '';

	// キーが存在するかをチェック
	if (isset($options['schema-fb-user-name'])) {
		$fb_id = $options['schema-fb-user-name'];
	}

	// Instagram
		$insta_id = '';

	// キーが存在するかをチェック
	if (isset($options['schema-insta-user-name'])) {
		$insta_id = $options['schema-insta-user-name'];
	}

	//xのURL
	if(!empty( $x_id )){
		$x = 'https://twitter.com/'.$x_id;
	}else{
		$x = '';
	}

	//FacebookのURL
	if(!empty( $fb_id )){
		$fb = 'https://www.facebook.com/'.$fb_id;
	}else{
		$fb = '';
	}

	//InsagramのURL
	if(!empty( $insta_id )){
		$insta = 'https://www.instagram.com/'.$insta_id;
	}else{
		$insta = '';
	}

	// それぞれのURLを配列にする
	$sns_pre = array($x, $fb, $insta);

	// array_filter()を使って、配列の空の要素を削除する
    $filtered_sns = array_filter($sns_pre);

	return $filtered_sns; // フィルタリングされた配列をそのまま返す
}

/* 運営者名 */
function haup_top_archive_schema_output_site_owner(){
	//設定から情報を取得
	$options = GetOP01_optimize(); 
	$owner_name = ''; // 変数を初期化

	// キーが存在するかをチェック
	if (isset($options['schema-site-organizer-name'])) {
		$owner_name = $options['schema-site-organizer-name'];
	}

	//サイトタイトルを取得
	$site_title = get_bloginfo('name');
	
	if(!empty( $owner_name )){
		$owner = $owner_name;
	}else{
		$owner = $site_title;
	}

	return $owner;
}

/* 運営者URL */
function haup_top_archive_schema_output_site_owner_url(){
	//設定から情報を取得
	$options = GetOP01_optimize(); 
	$owner_url = ''; // 変数を初期化

	// キーが存在するかをチェック
	if (isset($options['schema-site-organizer-url'])) {
		$owner_url = $options['schema-site-organizer-url'];
	}

	//トップページのURLを取得
	$homeurl = home_url();
	
	if(!empty( $owner_url )){
		$owner = $owner_url;
	}else{
		$owner = $homeurl;
	}

	return $owner;
}

/*** パブリッシャー画像の処理 ***/
/* 画像の幅と高さを取得して配列として格納 */
function haup_schema_get_image_width_and_height($image_url){
	$res = null;
	$wp_content_dir = WP_CONTENT_DIR;
	$wp_content_url = content_url();
	// URLをローカルパスに置換
	$image_file = str_replace($wp_content_url, $wp_content_dir, $image_url);
	// 画像サイズを取得
	$imagesize = @getimagesize($image_file); // @でエラーを抑制
	if ($imagesize) {
		$res = array();
		$res['width'] = absint($imagesize[0]);
		$res['height'] = absint($imagesize[1]);

		return $res;
	}

	return null; // 画像サイズが取得できない場合はnullを返す
}

/* パブリッシャー画像のURLとサイズを取得して配列として出力 */
function haup_schema_pub_image_data_callback(){
	$image_url = '';
	// サイトアイコンが設定されていればそのURLを取得
	if(has_site_icon()){
		$image_url = get_site_icon_url();
	} else {
	// なければテーマのスクリーンショット画像（デフォルト）のURLを取得
 		$image_url = get_template_directory_uri() . '/screenshot.png';
	}

	$size_data = haup_schema_get_image_width_and_height($image_url);

	// サイズ情報が取得できた場合
	if ($size_data) {
		return [
			'url' => esc_url($image_url),
			'width' => $size_data['width'],
			'height' => $size_data['height']
		];
	}

	// サイズ情報が取得できなかった場合のフォールバック
	return [
		'url' => esc_url($image_url),
		'width' => 600, // 推奨サイズ
		'height' => 60
	];
}

/***** 固定ページにschemaタイプの選択ボックスを追加 *****/
/* メタボックスを作る */
function haup_page_schema_type_select_box() {
	$title_text = __('Structured Data Schema Types','hima-art-utility');

	add_meta_box(
		'haup-page-schema-type-selection', // 編集画面セクションのHTML要素のID
		esc_html( $title_text ), // 編集画面セクションのタイトル
		'haup_page_schema_type_select_box_callback', // 編集画面セクションにHTML出力する関数
		'page', // 投稿タイプ
		'normal',// 編集画面セクションが表示される部分
		'high'//位置
	);
}
add_action('admin_menu', 'haup_page_schema_type_select_box');

/* メタボックスの内容を作る */
function haup_page_schema_type_select_box_callback(){
	global $post;

	//カスタムフィールドの設定
	$field = get_post_meta(get_the_ID(), 'haup-page-schema-type', true);

	//文字列の変数化
	$text_webpage = __('WebPage - a schema type for general static pages','hima-art-utility');
	$text_faqpage = __('FAQPage - A schema type for pages that mainly contain frequently asked questions.','hima-art-utility');
	$text_aboutpage = __('AboutPage - Schema type for company/site overview pages','hima-art-utility');
	$text_contactpage = __('ContactPage - A schema type for pages that primarily contain contact forms.','hima-art-utility');
	$description = __('The schema type tells search engine crawlers what type of page it is, so choose one that matches the content of your page as closely as possible.','hima-art-utility');
	$description_2 = __('If you are unsure, we recommend leaving it as WebPage.','hima-art-utility');

//表示する内容
/* nonceフィールドの設定 */
/* save_postのところでも同一のキーとフィールドを設定すること */
	$nonce_key = 'haup_page_schema_metabox_nonce_key';
	$nonce_field = '_haup_page_schema_metabox_nonce_field';

	wp_nonce_field( $nonce_key , $nonce_field );
?>
<select name= 'haup-page-schema-type' >
<option value='WebPage' <?php selected('FAQPage', $field ); ?>><?php echo esc_html( $text_webpage ); ?></option>
<option value='FAQPage' <?php selected('FAQPage', $field ); ?>><?php echo esc_html( $text_faqpage ); ?></option>
<option value='AboutPage' <?php selected('AboutPage', $field ); ?>><?php echo esc_html( $text_aboutpage ); ?></option>
<option value='ContactPage' <?php selected('ContactPage', $field ); ?>><?php echo esc_html( $text_contactpage ); ?></option>
</select>
<p>
<span><?php echo esc_html( $description ); ?></span>
<br>
<span><?php echo esc_html( $description_2 ); ?></span>
</p>
<?php
}

/* カスタムフィールドの値を保存する処理 */
function haup_page_schema_type_data_save($post_id){
//自動保存では更新しない
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
	return $post_id;
}

//一括更新では更新しない
if(isset($_POST['action']) && $_POST['action'] == 'inline-save') {
	return $post_id;
}

/* nonceチェック（正しい場所から更新されているかのチェック） */
	$nonce_key = 'haup_page_schema_metabox_nonce_key';
	$nonce_field = '_haup_page_schema_metabox_nonce_field';

	//nonceフィールドがなければ無視する
	if ( !isset( $_POST[$nonce_field] ) ){
		return $post_id;
	}

	//nounceが正しくなければ無視する
	if ( !wp_verify_nonce( sanitize_text_field(wp_unslash($_POST[$nonce_field])), $nonce_key ) ){
		return $post_id;
	}

	
	// キーがあるかどうかを判断（PHP8以降の対策）
	if(isset($_POST['seo_title'])){
		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
		$schema_type = sanitize_text_field(wp_unslash($_POST['haup-page-schema-type']));
	}else{
		$schema_type = 'WebPage';
	}

	//情報の更新
	if(!empty($schema_type)){
		update_post_meta($post_id, 'haup-page-schema-type', $schema_type);
	} else {
		delete_post_meta($post_id, $schema_type);
	}
}
add_action('save_post', 'haup_page_schema_type_data_save');

/***** カスタムフィールド（キー）の登録 *****/
function haup_page_schema_type_register_meta_key(){
	register_meta(
		'page',
		'haup-page-schema-type',
		array(
			'show_in_rest' => true,
			'single'       => true,
			'type'         => 'string',
			'default'      => '',
		)
	);
}
add_action('init','haup_page_schema_type_register_meta_key');