<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否
/*
Plugin Name: Hima Art Utility
Plugin URI: https://habone.biz/hima-art-utility-about
Description: A collection of utility plugins for safe and convenient use of WordPress sites
Version: 6.1
Tested up to: 6.9
Requires at least: 6.9
Requires PHP: 8.2
Author: Hima Art
Author URI: https://habone.biz
License: GPLv2 or later
Text Domain: hima-art-utility
*/

/* $hook_suffixを表示（設定画面の子項目コントロールのメンテナンス後に削除） */
//add_action('admin_notices', 'current_pagehook');

/***** 定数の定義 *****/
//WordPress標準のプライマリボタンと似たスタイルにする場合のCSSクラス
//haup-dashboard-widget-button

// プラグインのベースディレクトリへのパス
if ( ! defined( 'HAUP_PLUGIN_PATH' ) ) {
	define( 'HAUP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
}

// キャッシュを保存するディレクトリ（uploads内に推奨）のパス
if ( ! defined( 'HAUP_PLUGIN_CACHE_DIR' ) ) {
	define( 'HAUP_PLUGIN_CACHE_DIR', WP_CONTENT_DIR . '/uploads/haup-plugin-style-cache/' );
}

/* 定数値 */
// PWCNサイトのトップページ
define('HAUP_PLUGIN_DOMAIN', 'https://habone.biz');
// マニュアルページ（階層まで）
define('HAUP_MANUAL_DIR', 'https://habone.biz/description_of_hau');
/* 関数値 */
//マニュアルリンクのリンク文字列
function haup_manual_text(){
	$text = __('Learn more about this feature','hima-art-utility');
	return $text;
}


/* マニュアルリンクのhtml例 */
/*詳細設定項目用
 <div style="text-align:right;margin-top:1rem;"><a href="<?php echo esc_url(HAUP_MANUAL_DIR); ?>/ページスラグ" target="_blank"><?php echo esc_html(haup_manual_text()); ?></a></div>
*/
/*タブ説明文用
echo '<div style="text-align:right;margin-top:1rem;"><a href="'.esc_url(HAUP_MANUAL_DIR).'/ページスラグ" target="_blank">'.esc_html(haup_manual_text()).'</a></div>';
*/

/*** 現在のURLを取得する（構造化データの出力で使用） ***/
/* バージョン6.9でプログラムを書き換えたので不要かも（String Locater使った限りではどこにも使われていない） */
/* https://ultimateblocks.com/how-to-get-the-current-page-url-in-wordpress/ */
/*
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound
function wp_get_current_url() {
	if (isset($_SERVER['REQUEST_URI'])) {
		$request_uri = sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI']));
	} else {
		$request_uri = '';
	}

	return home_url($request_uri);
}
*/


/***** スクリプトの読み込み *****/
	require_once (__DIR__ .'/js/register-scripts.php');

/***** 画像アップローダー *****/
	require_once (__DIR__ .'/libs/image-uploader/image-uploader.php');

/***** 設定メニュー（新） *****/
	require_once (__DIR__ .'/setting-panels/main-menu.php');

/***** 設定画面内共通の解説事項の読み込み *****/
/*** 各種フィルターの使い方解説 ***/
	require_once (__DIR__ .'/setting-panels/common-message/filter-usage.php');

/***** 独自アイコンスタイルシートの登録 *****/
function haup_original_icon_style_init(){
	//基本アイコンの登録
	wp_register_style(
		'haup-basic-icon-font',
		plugin_dir_url( __FILE__ ) .'icons/basic/style.css',
		array(),
		haup_plugin_version(),
		'all'
	);

	//拡張アイコンの登録
	wp_register_style(
		'haup-icon-font',
		plugin_dir_url( __FILE__ ) .'icons/expansion/style.css',
		array(),
		haup_plugin_version(),
		'all'
	);
}
add_action('init','haup_original_icon_style_init');

/***** 設定画面用スタイルの読み込み *****/
/* 独自アイコンの追加（スイッチにより拡張アイコンを読み込み） */
/* 20230831 ブロックエディター画面を除外するよう変更 */
function haup_enqueue_plugin_admin_style($hook){
$rand = wp_rand( 1, 99999999999 );

	if(isset( GetOP09_addcontent()['expansion-hau-icons'] ) && GetOP09_addcontent()['expansion-hau-icons'] == 1 ){
		wp_enqueue_style('haup-icon-font');
	}else{
		wp_enqueue_style('haup-basic-icon-font');
	}
}
add_action('admin_enqueue_scripts','haup_enqueue_plugin_admin_style');
add_action( 'enqueue_block_assets', 'haup_enqueue_plugin_admin_style' );

/***** ログイン画面用スタイルの登録と読み込み *****/
function haup_enqueue_plugin_login_style($hook){
//スタイルシートの登録
	wp_register_style(
		'haup-login-style',
		plugin_dir_url( __FILE__ ) .'init-style/css/login-style.css',
		array(),
		haup_plugin_version(),
		'all'
	);

	wp_enqueue_style('haup-login-style');
}
add_action('login_enqueue_scripts','haup_enqueue_plugin_login_style' , 10);


/***** フロントエンドとブロック用スタイルの読み込み *****/
/* 20230831 wp_enqueue_scriptsからenqueue_block_assetsへ変更 */
function haup_enqueue_plugin_frontend_style(){
	//旧HABONE HAUPのカラーパレット色をパレット表示なしで適用
	wp_register_style(
		'haup-old-palette-style',
		plugin_dir_url( __FILE__ ) .'libs/old-color.css',
		array(),
		haup_plugin_version(),
		'all'
	);

	//スタイルシートの読み込み
		if(isset( GetOP09_addcontent()['expansion-hau-icons'] ) && GetOP09_addcontent()['expansion-hau-icons'] == 1 ){
			wp_enqueue_style('haup-icon-font');
		}else{
			wp_enqueue_style('haup-basic-icon-font');
		}
		wp_enqueue_style('haup-old-palette-style');
}
add_action('enqueue_block_assets','haup_enqueue_plugin_frontend_style');

/***** スタイルの読み込み（新） *****/
/* 2025/12/14に新設 */
require_once (__DIR__ .'/init-style/functions/front-and-blocks.php');
require_once (__DIR__ .'/init-style/functions/front-only.php');
require_once (__DIR__ .'/init-style/functions/admin-only.php');

/***** カスタムフィールドの登録 *****/
require_once (__DIR__ .'/customfields.php');

/***** アイコンピッカー *****/
	require_once (__DIR__ .'/libs/icon-picker/functions.php');

/***** 独自関数などの読み込み *****/
require_once (__DIR__ .'/libs/common-functions/activate.php');

/***** カスタムCSS変数 *****/
	require_once (__DIR__ .'/libs/css-custom-properties/functions.php');

/********** 各機能の有効化 **********/
/***** ブロックオプション *****/
	require_once (__DIR__ .'/inc/block-option/activation.php');
/***** セキュリティ関連の機能（security） *****/
	require_once (__DIR__ .'/inc/security/activation.php');
/***** 追加コンテンツの機能（content-add） *****/
	require_once (__DIR__ .'/inc/content-add/activation.php');
/***** 便利機能（Utility） *****/
	require_once (__DIR__ .'/inc/utility/activation.php');
/***** メディア（Media） *****/
	require_once (__DIR__ .'/inc/media/activation.php');
/***** サイトの最適化機能（Site Optimize） *****/
	require_once (__DIR__ .'/inc/site-optimize/activation.php');
/***** Google Analytics & Adsense *****/
	require_once (__DIR__ .'/inc/ga-adsense/activation.php');
/***** ブロックテーマ向け *****/
	require_once (__DIR__ .'/inc/for-tt2/activation.php');

/***** 翻訳ファイルの適用 *****/
/* プラグインの読み込み時に翻訳ファイルを確認して更新 */
/* アップロード更新の場合に「upgrader_process_complete」フックは効かないためにこの措置にした */
/* プラグインディレクトリ側のファイルと、本体の翻訳ディレクトリ側のファイルの日付を比較して更新 */
function haup_update_languages_files() {
	$lang_dir = WP_LANG_DIR . '/plugins/';
	$locales = [
		'ja' => ['hima-art-utility-ja.mo', 'hima-art-utility-ja.po', 'hima-art-utility-ja.l10n.php'],
		//ロケールが追加されたらここにファイルの配列を追加
	];
	$source_dir = plugin_dir_path(__FILE__) . 'languages/';

	foreach ($locales as $locale => $files) {
		foreach ($files as $file_name) {
			$source_file = $source_dir . $file_name;
			$target_file = $lang_dir . $file_name;

			if (file_exists($source_file)) {
				// ターゲットファイルが存在する場合、日付を比較
				if (file_exists($target_file)) {
					if (filemtime($source_file) > filemtime($target_file)) {
						// プラグイン内のファイルが新しい場合はコピー
						copy($source_file, $target_file);
					}
				} else {
					// ターゲットファイルが存在しない場合はコピー
					copy($source_file, $target_file);
				}
			}
		}
	}
}
add_action('plugins_loaded', 'haup_update_languages_files');

/* プラグイン無効化時に翻訳ファイルを削除 */
/* 20241003現在無効化時（停止時）に削除するように設定 */
function haup_delete_languages_files() {
	$lang_dir = WP_LANG_DIR . '/plugins/';
	$locales = [
		'ja' => ['hima-art-utility-ja.mo', 'hima-art-utility-ja.po', 'hima-art-utility-ja.l10n.php'],
		// ロケールが追加されたらここにファイルの配列を追加
	];

	foreach ($locales as $locale => $files) {
		foreach ($files as $file_name) {
			$file_path = $lang_dir . $file_name;

			if (file_exists($file_path)) {
				wp_delete_file($file_path);
			}
		}
	}
}
register_deactivation_hook(__FILE__, 'haup_delete_languages_files');//停止時

/***** ダッシュボードへ更新情報ウィジェットを表示 *****/
	require_once (__DIR__ .'/info-widget.php');

/***** 初期状態でメタボックスを閉じておく *****/
/* SEO設定・ショートコードの使い方・追加JSCSS */
/* https://hacknote.jp/archives/15303/ */
function haup_default_metabox_set_closed()
{ ?>
	<script type="text/javascript">
		jQuery(function ($) {
			$('#seo_setting').addClass('closed');
			$('#haup_short_code_usage_meta_box').addClass('closed');
			$('#post_js_css_meta_box').addClass('closed');
		
		});
	</script>
<?php
}
add_action('admin_footer-post-new.php', 'haup_default_metabox_set_closed');
add_action('admin_footer-post.php', 'haup_default_metabox_set_closed');

/***** PC Mobileでそれぞれbodyclassを付与 *****/
/* https://www.isitwp.com/add-custom-body_class-using-wp_is_mobile/ */
function haup_pc_mobile_body_class( $classes ) {
    if ( haup_is_mobile() ) {
        $classes[] = 'is-mobile';
    }else{
		$classes[] = 'is-pc';
	}
    return $classes;
}
add_filter( 'body_class', 'haup_pc_mobile_body_class' );

/*** プラグインのバージョンを取得 ***/
function haup_plugin_version() {
    // get_file_data()関数が利用可能かチェック
    if ( ! function_exists( 'get_file_data' ) ) {
        // 利用可能でなければ、ファイルを読み込む
        require_once( ABSPATH . 'wp-admin/includes/file.php' );
    }

    // プラグインヘッダーからバージョン情報を取得
    $plugin_data = get_file_data( __FILE__, ['Version' => 'Version'], 'plugin' );

    // バージョン情報が存在すれば返す
    if ( ! empty( $plugin_data['Version'] ) ) {
        return $plugin_data['Version'];
    }

    // エラー時のフォールバック
    return '1.0.0'; 
}

// プラグインのバージョンをヘッダーから取得して定義
define('HAUP_VERSION', haup_plugin_version());

/***** 初期値の登録（optionsテーブル） *****/
require_once plugin_dir_path(__FILE__) . 'activation.php';

/*** ログイン試行回数制限用のテーブルを追加・削除 ***/
/* 不明な攻撃によってoptionsテーブルに大量のデータの書き込みが試行されるのを防ぐため仕様変更 */
/* テーブルを作成する関数 (有効化時に一度だけ実行される) */
function haup_create_login_table_on_activate() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'haup_failed_logins';

	$charset_collate = $wpdb->get_charset_collate();
	$sql = "CREATE TABLE $table_name (
		id BIGINT(20) NOT NULL AUTO_INCREMENT,
		ip_address VARCHAR(45) NOT NULL,
		username VARCHAR(255) DEFAULT '',
		attempts INT(11) DEFAULT 1,
		first_attempt DATETIME NOT NULL,
		last_attempt DATETIME NOT NULL,
		lockout_until DATETIME DEFAULT NULL,
		PRIMARY KEY (id),
		UNIQUE KEY ip_username (ip_address, username),
		KEY ip_address (ip_address),
		KEY lockout_until (lockout_until)
	) $charset_collate;";

	require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
	dbDelta( $sql );
}
register_activation_hook( __FILE__, 'haup_create_login_table_on_activate' );

/* プラグイン無効化時にテーブルを削除する関数 */
function haup_limit_login_uninstall_table() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'haup_failed_logins';
	$sql = "DROP TABLE IF EXISTS $table_name;";

	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery ,  WordPress.DB.DirectDatabaseQuery.NoCaching , WordPress.DB.PreparedSQL.NotPrepared , PluginCheck.Security.DirectDB.UnescapedDBParameter
	$wpdb->query($sql);
}
register_deactivation_hook( __FILE__, 'haup_limit_login_uninstall_table' );

/* テーブルが存在しない場合に管理画面に通知を表示する */
function haup_admin_notice_if_table_not_exist() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'haup_failed_logins';

	// phpcs:ignore 
	$table_exists = $wpdb->get_var("SHOW TABLES LIKE '$table_name'");
    
	if ( $table_exists !== $table_name ) {
		// ボタンをクリックしたときに実行されるURLを作成
		$button_url = add_query_arg(
			array(
				'action' => 'haup_fix_plugin_page', // カスタムアクション用のページ名
				'_wpnonce' => wp_create_nonce('haup_fix_table_nonce') // セキュリティのためのNonce
			),

			admin_url('admin.php')
		);

		$message = __('Your database needs to be updated to take advantage of the latest features of Hima Art Utility Plugin. Please deactivate and reactivate the plugin.','hima-art-utility');

		$button_text = __('Update now', 'hima-art-utility');

		printf('<div class="notice notice-warning is-dismissible"><p>%s <a href="%s" class="haup-dashboard-widget-button">%s</a></p></div>',esc_html($message),esc_url($button_url),esc_html($button_text));
	}
}
add_action('admin_notices', 'haup_admin_notice_if_table_not_exist');

/* 管理画面のボタンクリックを処理する */
/* プラグインを無効化→有効化し、テーブルを自動作成する */
function haup_handle_admin_action() {
	// 適切なアクションかどうかをチェック
	if ( !isset($_GET['action']) || $_GET['action'] !== 'haup_fix_plugin_page' ) {
		return;
	}

	// セキュリティNonceの検証
	if ( !isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_wpnonce'])), 'haup_fix_table_nonce') ) {
		wp_die(esc_html__('Nonce verification failed.', 'hima-art-utility'));
	}

	// ユーザーにプラグイン管理権限があるかチェック
	if ( !current_user_can('activate_plugins') ) {
		wp_die(esc_html__('You do not have permission.', 'hima-art-utility'));
	}

	// プラグインのベースファイル名を取得
	$plugin_file = plugin_basename(__FILE__);

	// プラグインを無効化
	deactivate_plugins($plugin_file);
    
	// プラグインを有効化
	activate_plugin($plugin_file);

	// 成功メッセージをトランジェントに保存
set_transient( 'haup_success_notice', '1', 60 ); // 60秒後に有効期限切れ
    
	// 参照元URL（元のページ）を取得。安全なリダイレクト先を確保するため、wp_get_referer()を使用
	$redirect_url = wp_get_referer();

	if ( !$redirect_url ) {
		// 参照元URLが取得できない場合は、デフォルトとしてプラグインページにリダイレクト
		$redirect_url = admin_url('plugins.php');
	}
    
	// リダイレクト先に成功メッセージのパラメータを追加
	$redirect_url = add_query_arg('haup_success', '1', $redirect_url);
    
	// 安全にリダイレクトを実行
	wp_safe_redirect( $redirect_url );

	exit;
}
add_action('admin_action_haup_fix_plugin_page', 'haup_handle_admin_action');

/* リダイレクト後の成功メッセージを表示 */
function haup_show_success_notice() {
	// トランジェントから情報を取得し、取得後すぐに削除
	if ( get_transient( 'haup_success_notice' ) == '1' ) {
		delete_transient( 'haup_success_notice' );
		printf( '<div class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html__('Hima Art Utility plugin: Database updated.', 'hima-art-utility') );
	}
}
add_action('admin_notices', 'haup_show_success_notice');

/***** テーマファイル変更ログ保存用テーブルの作成 *****/
/*** カスタムログテーブルの作成と更新 ***/
/* dbDeltaにより、テーブルが存在しない場合は作成し、存在する場合は構造を更新する */
function haup_create_change_theme_file_log_table() {
	global $wpdb;
	// テーブル名を定義 (例: haup_change_theme_file_log)
	$table_name = $wpdb->prefix . 'haup_change_theme_file_log'; 
	$charset_collate = $wpdb->get_charset_collate();

	// log_entry を LONGTEXT にすることで、大きなデータにも対応
	$sql = "CREATE TABLE $table_name (
		id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
		log_entry longtext NOT NULL,
		log_type longtext NOT NULL,
		log_filename longtext NOT NULL,
		created_at datetime NOT NULL,
		PRIMARY KEY (id),
		KEY created_at (created_at)
	) $charset_collate;";

	require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
	dbDelta($sql);
}
// プラグイン有効化時にテーブルを作成
register_activation_hook(__FILE__, 'haup_create_change_theme_file_log_table');

/*** プラグイン無効化時にカスタムテーブルを削除 ***/
function haup_uninstall_change_theme_file_log_table() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'haup_change_theme_file_log';
	$sql = "DROP TABLE IF EXISTS $table_name;";

	// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared , PluginCheck.Security.DirectDB.UnescapedDBParameter , WordPress.DB.DirectDatabaseQuery.DirectQuery , WordPress.DB.DirectDatabaseQuery.NoCaching
	$wpdb->query($sql);
}
register_deactivation_hook(__FILE__, 'haup_uninstall_change_theme_file_log_table');

/*** テーブルが存在しない場合に管理画面に通知を表示する ***/
function haup_admin_notice_if_change_theme_file_log_table_not_exist() {
	global $wpdb;
	$table_name = $wpdb->prefix . 'haup_change_theme_file_log';

	// テーブルの存在を確認
	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery , WordPress.DB.DirectDatabaseQuery.NoCaching
	$table_exists = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $table_name));
	
	if ( $table_exists !== $table_name ) {
		// テーブル修復アクション用のURLを作成
		$button_url = add_query_arg(
			array(
				'action' => 'haup_fix_change_theme_file_log_table', 
				'_wpnonce' => wp_create_nonce('haup_fix_change_theme_file_log_table_nonce')
			),
			admin_url('admin.php')
		);

		$message = __('The database structure for the Hima Art Utility theme file change log function is out of date. An update is required to enable the function.', 'hima-art-utility');
		$button_text = __('Update the database', 'hima-art-utility');

		printf(
			'<div class="notice notice-error is-dismissible"><p>%s <a href="%s" class="haup-dashboard-widget-button">%s</a></p></div>',
			esc_html($message),
			esc_url($button_url),
			esc_html($button_text)
		);
	}
}
add_action('admin_notices', 'haup_admin_notice_if_change_theme_file_log_table_not_exist');

/*** 管理画面のボタンクリックを処理し、テーブルを修復する (無効化 -> 有効化) ***/
function haup_change_theme_file_log_admin_notice_action() {
	// アクションとNonceの検証
	if ( !isset($_GET['action']) || $_GET['action'] !== 'haup_fix_change_theme_file_log_table' ) {
		return;
	}
	if ( !isset($_GET['_wpnonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_GET['_wpnonce'])), 'haup_fix_change_theme_file_log_table_nonce') ) {
		wp_die(esc_html__('Nonce verification failed.', 'hima-art-utility'));
	}

	// 権限チェック
	if ( !current_user_can('activate_plugins') ) {
		wp_die(esc_html__('You do not have permission.', 'hima-art-utility'));
	}

	$plugin_file = plugin_basename(__FILE__);

	// 無効化 -> 有効化 (dbDeltaが実行される)
	deactivate_plugins($plugin_file);
	activate_plugin($plugin_file);
	
    // 成功通知メッセージをセット
	set_transient( 'haup_change_theme_log_db_success_notice', '1', 60 ); 
    
	// リダイレクト先URLを取得
	$redirect_url = wp_get_referer() ?: admin_url('plugins.php');
	$redirect_url = add_query_arg('haup_success', '1', remove_query_arg(['action', '_wpnonce'], $redirect_url));
	
	wp_safe_redirect( $redirect_url );
	exit;
}
add_action('admin_action_haup_fix_change_theme_file_log_table', 'haup_change_theme_file_log_admin_notice_action');

/*** 成功通知を表示 ***/
function haup_create_change_theme_file_log_success_notice() {
	if (get_transient('haup_change_theme_log_db_success_notice')) {
		printf('<div class="notice notice-success is-dismissible"><p>%s</p></div>', 
			esc_html__('Hima Art Utility plugin: Database updated.', 'hima-art-utility')
		);
		delete_transient('haup_change_theme_log_db_success_notice');
	}
}
add_action('admin_notices', 'haup_create_change_theme_file_log_success_notice');

/*** プラグインチェックで除外するプラグインファイルを指定する ***/
/* /inc/security/plugin-security-check/functions.phpで利用 */
function haup_ignore_plugin_check(){
	$exclusion_list = array(
		'hima-art-utility/hima-art-utility.php', //Hima Art Utility
		'ha-language-overwrite/ha-language-overwrite.php', //HA Language Overwrite
		'ha-force-update-plugin-language/ha-force-update-plugin-language.php', //HA Force Update Plugin Language
		'ha-disable-translation-updates/ha-disable-translation-updates.php', //HA Disable Translation Updates
		'ha-cf-manager/ha-cf-manager.php', //HA Custom Field Manager
	);

	return $exclusion_list;
}

/*** プラグイン停止時に.htaccess から IPによるアクセス拒否設定を削除する ***/
function haup_remove_ip_block_protection_htaccess() {
	$htaccess_file = ABSPATH . '.htaccess';

	if ( file_exists( $htaccess_file ) && is_writable( $htaccess_file ) ) {
		$content = file_get_contents( $htaccess_file );

		// 修正ポイント：最短一致（.*?）を使い、マーカーを厳密に指定
		// 最後の \s* は、ブロック後の余計な空行を整理するために有効です
		$pattern = '/# BEGIN HAUP_IP_BLOCK.*?# END HAUP_IP_BLOCK\s*/s';
        
		// 置換実行
		$new_content = preg_replace( $pattern, '', $content );

		// エラーがなく、かつ内容が変化した場合のみ書き込み
		if ( null !== $new_content && $new_content !== $content ) {
			// 前後の不要な空白を整えつつ、最後に1行だけ改行を入れる
			file_put_contents( $htaccess_file, trim( $new_content ) . "\n" );
		}
	}
}
register_deactivation_hook( __FILE__, 'haup_remove_ip_block_protection_htaccess' );

/*** .htaccessに IPによるアクセス拒否設定があるかをチェックし、必要なら管理画面に通知を出す ***/
function haup_ip_block_sync_check_notice() {
	// 1. オプション値の確認 (配列形式に対応)
	$haup_options = get_option( 'hautility-option-03-security' );
	$is_enabled = isset( $haup_options['use-ip-block'] ) && $haup_options['use-ip-block'] === 'on';

	if ( ! $is_enabled ) {
		return; // 無効なら何もしない
	}

	// 2. .htaccessの中にHAUPのブロックがあるかチェック
	$htaccess_file = ABSPATH . '.htaccess';
	$has_marker = false;
	if ( file_exists( $htaccess_file ) ) {
		$content = file_get_contents( $htaccess_file );
		if ( strpos( $content, '# BEGIN HAUP_IP_BLOCK' ) !== false ) {
			$has_marker = true;
		}
	}

	//文字列変数
	$success_message_text = __('Hima Art Utility: Rewritten IP blocking settings to .htaccess','hima-art-utility');
	$notice_header_text = __('Hima Art Utility Security Notice:','hima-art-utility');
	$notice_text = __('The IP blocking feature is enabled, but it appears that the settings have not been written to the .htaccess file. A reload is required after re-enabling the feature or after editing the file.','hima-art-utility');
	$update_button_text = __('Update the .htaccess file to resume blocking.','hima-art-utility');

	// 3. 設定は有効なのにマーカーがない場合、通知を表示
	if ( current_user_can( 'manage_options' ) && ! $has_marker ) {
		// 更新ボタンが押された時の処理
		if ( isset($_GET['haup_reconstruct_htaccess']) && check_admin_referer('haup_reconstruct_action') ) {
			haup_update_security_ip_block_htaccess();
			echo '<div class="updated"><p>'.esc_html( $success_message_text ).'</p></div>';
			return;
		}

		$reconstruct_url = wp_nonce_url( add_query_arg( 'haup_reconstruct_htaccess', '1' ), 'haup_reconstruct_action' );
        
		echo '<div class="notice notice-warning is-dismissible">';
		echo '<p><strong>'.esc_html( $notice_header_text ).'</strong>'.esc_html( $notice_text ).'</p>';
		echo '<p><a href="' . esc_url( $reconstruct_url ) . '" class="haup-dashboard-widget-button">'.esc_html( $update_button_text ).'</a></p>';
		echo '</div>';
	}
}
add_action( 'admin_notices', 'haup_ip_block_sync_check_notice' );


/*** プラグインの更新通知と自動更新 ***/
/* 更新プログラムの読み込み */
require_once( plugin_dir_path( __FILE__ ) . 'plugin-update.php' );

$ATPU_Plugin = new ATPU_Plugin( 
	'https://habone.biz/ha-updates/hima-art-utility/', // アップデートプログラムのあるディレクトリ
	'hima-art-utility' // プラグインのスラッグ
);

/* 自動更新に対応していないので切り替えリンクを非表示にする */
function haup_hide_auto_update_link(){
?>
<style>
	/* 自動更新列のスイッチやリンクを完全に非表示にする */
	tr[data-slug="hima-art-utility"] td.column-auto-updates * {
		display: none !important;
	}
</style>
<?php
}
add_action('admin_head','haup_hide_auto_update_link');