@charset "UTF-8";
/*
    Template: swell
    Theme Name: SWELL CHILD
    Theme URI: https://swell-theme.com/
    Description: SWELLの子テーマ
    Version: 1.0.0
    Author: LOOS WEB STUDIO
    Author URI: https://loos-web-studio.com/

    License: GNU General Public License
    License URI: http://www.gnu.org/licenses/gpl.html
*/


function generate_temporary_link($email) {
    $expiry_time = time() + (24 * 60 * 60); // 24時間の有効期限
    $key = hash_hmac('sha256', $email . $expiry_time, AUTH_KEY); // メールアドレスと有効期限を使ってキーを生成
    $link = add_query_arg(array(
        'email' => urlencode($email), // メールアドレスをエンコードして渡す
        'key' => $key,
        'expires' => $expiry_time
    ), site_url('entry')); // リンクに登録ページのURLを指定
    return $link;
}

add_filter( 'wpforms_process_validate_email', 'custom_wpforms_check_existing_user_email', 10, 3 );
function custom_wpforms_check_existing_user_email( $field_id, $field_submit, $form_data ) {
    // フォームIDが2341であるかどうかを確認
    if ( $form_data['id'] == 2341 ) {
        // メールアドレスが既に存在するかチェック
        if( email_exists( $field_submit ) ) {
            // エラーメッセージを設定
            wpforms()->process->errors[ $form_data['id'] ][ $field_id ] = 'このメールアドレスは既に登録されています。別のメールアドレスを使用してください。';
        }
    }
}

add_action('wpforms_process_complete', 'send_custom_registration_email', 10, 4);

function send_custom_registration_email($fields, $entry, $form_data, $entry_id) {
    $user_email = '';

    foreach ($fields as $field) {
        if ($field['name'] == 'Email') {
            $user_email = sanitize_email($field['value']);
        }
    }

    // カスタムリンクを生成（メールアドレスを使う）
    $temporary_link = generate_temporary_link($user_email);

    // メールの件名と本文を作成
    $subject = 'Membership Registration Confirmation';
    $message = "こんにちは、\n\n以下のリンクをクリックして、会員登録を完了してください。リンクは24時間のみ有効です。\n" . $temporary_link . "\n\nよろしくお願いします。";

    // メールを送信
    wp_mail($user_email, $subject, $message);
}

function verify_temporary_link($email, $key, $expires) {
    if (time() > $expires) {
        return false; // 有効期限が過ぎている
    }

    // 正しいハッシュかどうか確認
    $generated_key = hash_hmac('sha256', $email . $expires, AUTH_KEY);

    if (hash_equals($generated_key, $key)) {
        return true; // 正しいキー
    } else {
        return false; // 改ざんされたキー
    }
}

add_action('template_redirect', 'check_temporary_link');
function check_temporary_link() {
    if (is_page('entry')) {
        $email = isset($_GET['email']) ? sanitize_email(urldecode($_GET['email'])) : '';
        $key = isset($_GET['key']) ? sanitize_text_field($_GET['key']) : '';
        $expires = isset($_GET['expires']) ? intval($_GET['expires']) : 0;

        if (!$email || !$key || !$expires || !verify_temporary_link($email, $key, $expires)) {
            wp_die('リンクが無効です。または有効期限が切れています。');
        }

        // リンクが有効であれば通常の処理を継続
    }
}

add_filter( 'wpmem_restricted_msg', 'disable_wpmem_restricted_msg' );
function disable_wpmem_restricted_msg() {
    return '';  // 空にすることでメッセージを非表示に
}

function wpuf_custom_upload_limit( $size ) {
    return 64 * 1024 * 1024; // 64MBに設定
}
add_filter( 'wpuf_file_upload_max_size', 'wpuf_custom_upload_limit' );

function wpuf_custom_dashboard_query_args( $args ) {
    // 投稿を取得するためのクエリにステータスフィルターを追加
    $args['post_status'] = ['draft', 'publish', 'pending']; // 表示するステータスを指定
    return $args;
}
add_filter( 'wpuf_dashboard_query', 'wpuf_custom_dashboard_query_args' );

function wpuf_disable_delete_for_published_posts( $actions, $post ) {
    // 投稿が「公開済み」（publish）かどうかをチェック
    if ( $post->post_status == 'publish' ) {
        // 削除リンクを非表示にする
        unset( $actions['delete'] );
    }
    return $actions;
}
add_filter( 'wpuf_dashboard_post_actions', 'wpuf_disable_delete_for_published_posts', 10, 2 );

function redirect_if_logged_out_on_logout_page() {
    // 現在のページが特定のスラッグ（ここでは 'log-out'）かどうか確認
    if ( is_page( 'log-out' ) && ! is_user_logged_in() ) {
        // ログインページにリダイレクト
		wp_redirect(home_url('/log-in')); // カスタムのログインURLがある場合は wp_login_url() の代わりに使用
        exit;
    }
}
add_action( 'template_redirect', 'redirect_if_logged_out_on_logout_page' );

function redirect_if_logged_in_on_login_page() {
    // 現在のページが特定のスラッグ（ここでは 'log-in'）かどうか確認
    if ( is_page( 'log-in' ) && is_user_logged_in() ) {
		// ログアウトページにリダイレクト
		wp_redirect(home_url('/log-out')); // カスタムのログアウトURLがある場合は wp_login_url() の代わりに使用
        exit;
    }
}
add_action( 'template_redirect', 'redirect_if_logged_in_on_login_page' );


function display_users_by_role( $role = 'subscriber' ) {
    // ユーザーのクエリを設定（指定した権限）
    $args = array(
        'role'    => $role, // 例: 'subscriber', 'editor', 'administrator' など
        'orderby' => 'user_nicename', // ユーザーネーム順に並べ替え
        'order'   => 'ASC'
    );
    
    // ユーザーを取得
    $user_query = new WP_User_Query( $args );
    
    // 結果を処理
    if ( ! empty( $user_query->get_results() ) ) {
        echo '<ul>'; // ユーザーリストをリスト表示
        foreach ( $user_query->get_results() as $user ) {
            echo '<li>' . esc_html( $user->display_name ) . ' (' . esc_html( $user->user_email ) . ')</li>';
        }
        echo '</ul>';
    } else {
        echo 'No users found with the role of ' . esc_html( $role );
    }
}

// ショートコードとして使用する場合
function users_by_role_shortcode( $atts ) {
    // ショートコードの引数を取得（デフォルトは 'subscriber'）
    $atts = shortcode_atts(
        array(
            'role' => 'subscriber',
        ),
        $atts
    );
    
    // ユーザーリストを表示
    ob_start();
    display_users_by_role( $atts['role'] );
    return ob_get_clean();
}
add_shortcode( 'users_by_role', 'users_by_role_shortcode' );

function display_user_list_by_role( $atts ) {
    // ショートコードの引数を設定（デフォルトは role = 'subscriber'）
    $atts = shortcode_atts(
        array(
            'role' => 'subscriber', // 表示したいユーザー権限
        ),
        $atts
    );

    // ユーザークエリを設定
    $args = array(
        'role'    => $atts['role'], // 指定したユーザーロールのユーザーを取得
        'orderby' => 'user_nicename', // 名前順でソート
        'order'   => 'ASC',
    );
    
    $user_query = new WP_User_Query( $args );

    // 結果がある場合
    if ( ! empty( $user_query->get_results() ) ) {
        $output = '<div class="user-list">';
        
        // 各ユーザーごとにブログカード形式で出力
        foreach ( $user_query->get_results() as $user ) {
            $avatar = get_avatar( $user->ID, 100 ); // アバター画像を取得
            $display_name = esc_html( $user->display_name );
            $user_country = esc_html( get_user_meta( $user->ID, 'country', true ) ); // ユーザーメタデータから国情報を取得
            $user_description = esc_html( get_user_meta( $user->ID, 'description', true ) );

            // カード形式で出力
            $output .= '<div class="user-card">';
            $output .= '<div class="user-avatar">' . $avatar . '</div>';
            $output .= '<h3 class="user-name">' . $display_name . '</h3>';
            if ( $user_country ) { // 国が設定されている場合のみ表示
                $output .= '<p class="user-country">Country: ' . $user_country . '</p>';
            }
            $output .= '<p class="user-description">' . $user_description . '</p>';
            $output .= '</div>';
        }

        $output .= '</div>';
    } else {
        $output = '<p>No users found with the role of ' . esc_html( $atts['role'] ) . '</p>';
    }

    return $output;
}

// ショートコードを追加
add_shortcode( 'user_list', 'display_user_list_by_role' );