差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| 48th_8j1ham_rs [2026/08/25 20:55] – Tana JH1HST | 48th_8j1ham_rs [2026/08/27 03:54] (現在) – Tana JH1HST | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ~~NOCACHE~~ | ||
| + | |||
| ====== 8J1HAM 会場公開運用 当選確認 ====== | ====== 8J1HAM 会場公開運用 当選確認 ====== | ||
| + | |||
| + | 第48回アマチュア無線フェスティバル ハムフェア2026 | ||
| 特別記念局 **8J1HAM 会場公開運用**へ多数のお申し込みをいただき、ありがとうございました。 | 特別記念局 **8J1HAM 会場公開運用**へ多数のお申し込みをいただき、ありがとうございました。 | ||
| - | 下の入力欄に、**お申し込み時に登録したコールサインまたはメールアドレス**を入力して、選考結果をご確認ください。 | + | 下の入力欄に、**お申し込み時に登録したコールサインまたはメールアドレス**を入力して、抽選結果をご確認ください。 |
| 体験運用でお申し込みの方など、コールサインを登録していない場合は、**お申し込み時のメールアドレス**を入力してください。 | 体験運用でお申し込みの方など、コールサインを登録していない場合は、**お申し込み時のメールアドレス**を入力してください。 | ||
| 行 34: | 行 38: | ||
| max-width: 760px; | max-width: 760px; | ||
| margin: 20px 0; | margin: 20px 0; | ||
| - | padding: 0 0 0 12px; | + | padding: 0 0 0 16px; |
| box-sizing: border-box; | box-sizing: border-box; | ||
| clear: both; | clear: both; | ||
| 行 45: | 行 49: | ||
| border: 1px solid #d8dce2; | border: 1px solid #d8dce2; | ||
| border-radius: | border-radius: | ||
| - | padding: 20px; | + | padding: 20px 20px 20px 24px; |
| margin: 20px 0; | margin: 20px 0; | ||
| } | } | ||
| - | /* DokuWiki側のフォーム装飾を強制解除 */ | ||
| # | # | ||
| display: block !important; | display: block !important; | ||
| 行 70: | 行 73: | ||
| # | # | ||
| display: block !important; | display: block !important; | ||
| - | margin: 0 0 8px 4px !important; | + | margin: 0 0 8px 6px !important; |
| padding: 0 !important; | padding: 0 !important; | ||
| font-weight: | font-weight: | ||
| 行 77: | 行 80: | ||
| # | # | ||
| display: block !important; | display: block !important; | ||
| - | width: calc(100% - 8px) !important; | + | width: calc(100% - 12px) !important; |
| - | max-width: calc(100% - 8px) !important; | + | max-width: calc(100% - 12px) !important; |
| height: auto !important; | height: auto !important; | ||
| box-sizing: border-box !important; | box-sizing: border-box !important; | ||
| - | margin: 0 4px 12px 4px !important; | + | margin: 0 6px 12px 6px !important; |
| padding: 11px 12px !important; | padding: 11px 12px !important; | ||
| border: 1px solid #999 !important; | border: 1px solid #999 !important; | ||
| 行 92: | 行 95: | ||
| display: inline-block !important; | display: inline-block !important; | ||
| width: auto !important; | width: auto !important; | ||
| - | margin: 0 0 0 4px !important; | + | margin: 0 0 0 6px !important; |
| padding: 11px 20px !important; | padding: 11px 20px !important; | ||
| border: 0 !important; | border: 0 !important; | ||
| 行 109: | 行 112: | ||
| # | # | ||
| display: block !important; | display: block !important; | ||
| - | margin: 10px 4px 0 4px !important; | + | margin: 10px 6px 0 6px !important; |
| padding: 0 !important; | padding: 0 !important; | ||
| color: #666 !important; | color: #666 !important; | ||
| 行 180: | 行 183: | ||
| color: #555; | color: #555; | ||
| font-size: 1.15em; | font-size: 1.15em; | ||
| + | font-weight: | ||
| + | margin-bottom: | ||
| + | } | ||
| + | |||
| + | .hf-cancelled { | ||
| + | width: 100%; | ||
| + | box-sizing: border-box; | ||
| + | margin: 24px 0; | ||
| + | padding: 22px; | ||
| + | background: #fff4e5; | ||
| + | border: 2px solid #e0a24a; | ||
| + | border-radius: | ||
| + | } | ||
| + | |||
| + | .hf-cancelled-title { | ||
| + | color: #b06000; | ||
| + | font-size: 1.25em; | ||
| font-weight: | font-weight: | ||
| margin-bottom: | margin-bottom: | ||
| 行 188: | 行 208: | ||
| box-sizing: border-box; | box-sizing: border-box; | ||
| margin: 24px 0; | margin: 24px 0; | ||
| - | padding: 18px 18px 18px 22px; | + | padding: 18px 18px 18px 24px; |
| background: #fff8df; | background: #fff8df; | ||
| border-left: | border-left: | ||
| 行 197: | 行 217: | ||
| box-sizing: border-box; | box-sizing: border-box; | ||
| margin: 24px 0; | margin: 24px 0; | ||
| - | padding: 18px 18px 18px 22px; | + | padding: 18px 18px 18px 24px; |
| background: #fff0f0; | background: #fff0f0; | ||
| border-left: | border-left: | ||
| 行 205: | 行 225: | ||
| # | # | ||
| - | padding-left: | + | padding-left: |
| } | } | ||
| # | # | ||
| .hf-winner, | .hf-winner, | ||
| - | .hf-not-selected { | + | .hf-not-selected, |
| + | .hf-cancelled | ||
| padding: 16px; | padding: 16px; | ||
| } | } | ||
| 行 216: | 行 237: | ||
| # | # | ||
| display: block !important; | display: block !important; | ||
| - | width: calc(100% - 8px) !important; | + | width: calc(100% - 12px) !important; |
| - | margin: 0 4px !important; | + | margin: 0 6px !important; |
| } | } | ||
| 行 265: | 行 286: | ||
| </ | </ | ||
| - | | + | < |
| + | document.addEventListener(" | ||
| + | |||
| + | var input = document.getElementById(" | ||
| + | |||
| + | if (!input) { | ||
| + | return; | ||
| + | } | ||
| + | |||
| + | input.addEventListener(" | ||
| + | |||
| + | this.value = this.value.normalize(" | ||
| + | |||
| + | }); | ||
| + | |||
| + | }); | ||
| + | | ||
| '; | '; | ||
| 行 274: | 行 311: | ||
| : ''; | : ''; | ||
| - | | + | if (function_exists(' |
| - | * 許可する文字: | + | $input = mb_convert_kana($input, |
| - | * 半角英数字 | + | } |
| - | * @ . _ % + - / | + | |
| - | */ | + | $input = strtr( |
| - | | + | |
| - | $input | + | |
| - | | + | ' |
| - | | + | ' |
| - | ) { | + | ' |
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | | ||
| + | | ||
| + | |||
| + | if ($input === '' | ||
| echo ' | echo ' | ||
| <div class=" | <div class=" | ||
| - | | + | コールサインまたはメールアドレスを入力してください。 |
| - | | + | |
| - | 使用できる記号は | + | |
| - | < | + | |
| - | です。 | + | |
| </ | </ | ||
| '; | '; | ||
| - | } elseif ($input === '' | + | } elseif (preg_match('/ |
| echo ' | echo ' | ||
| <div class=" | <div class=" | ||
| - | コールサインまたはメールアドレスを入力してください。 | + | |
| + | | ||
| </ | </ | ||
| '; | '; | ||
| 行 307: | 行 350: | ||
| echo ' | echo ' | ||
| <div class=" | <div class=" | ||
| - | 現在、選考結果データを読み込むことができません。 | + | 現在、抽選結果データを読み込むことができません。 |
| しばらくしてから再度お試しください。 | しばらくしてから再度お試しください。 | ||
| </ | </ | ||
| 行 326: | 行 369: | ||
| ); | ); | ||
| - | /* | ||
| - | * コールサインは大文字小文字を区別しない。 | ||
| - | * メールアドレスも大文字小文字を区別しない。 | ||
| - | * どちらも完全一致。 | ||
| - | */ | ||
| $callsign_norm = strtoupper($input); | $callsign_norm = strtoupper($input); | ||
| $email_norm | $email_norm | ||
| - | /* | ||
| - | * まず申込情報が存在するか確認。 | ||
| - | */ | ||
| $stmt = $pdo-> | $stmt = $pdo-> | ||
| ' | ' | ||
| 行 344: | 行 379: | ||
| ); | ); | ||
| - | $stmt-> | + | $stmt-> |
| - | ': | + | |
| - | ': | + | ': |
| - | )); | + | ': |
| + | ) | ||
| + | | ||
| $applicants = $stmt-> | $applicants = $stmt-> | ||
| 行 368: | 行 405: | ||
| } | } | ||
| - | /* | ||
| - | * 一致した申込情報の中から当選結果を検索。 | ||
| - | * 同じメールアドレスで複数申込がある場合にも対応。 | ||
| - | */ | ||
| $placeholders = implode( | $placeholders = implode( | ||
| ',', | ',', | ||
| 行 387: | 行 420: | ||
| band, | band, | ||
| operation_type, | operation_type, | ||
| - | slot_type | + | slot_type, |
| + | status | ||
| FROM results | FROM results | ||
| WHERE applicant_id IN (' . $placeholders . ') | WHERE applicant_id IN (' . $placeholders . ') | ||
| 行 400: | 行 434: | ||
| foreach ($results as $result) { | foreach ($results as $result) { | ||
| + | |||
| + | /* | ||
| + | * キャンセル済み | ||
| + | */ | ||
| + | if ( | ||
| + | isset($result[' | ||
| + | && $result[' | ||
| + | ) { | ||
| + | |||
| + | $date_text = hf_date_jp($result[' | ||
| + | |||
| + | $time_text = | ||
| + | $result[' | ||
| + | . ' | ||
| + | . $result[' | ||
| + | |||
| + | echo ' | ||
| + | <div class=" | ||
| + | |||
| + | <div class=" | ||
| + | この運用枠はキャンセル済みです。 | ||
| + | </ | ||
| + | |||
| + | <table class=" | ||
| + | |||
| + | <tr> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </tr> | ||
| + | |||
| + | <tr> | ||
| + | |||
| + | < | ||
| + | . hf_h($date_text) | ||
| + | . '</ | ||
| + | |||
| + | < | ||
| + | . hf_h($time_text) | ||
| + | . '</ | ||
| + | |||
| + | <td> | ||
| + | < | ||
| + | . hf_h($result[' | ||
| + | . '</ | ||
| + | </td> | ||
| + | |||
| + | <td> | ||
| + | < | ||
| + | </td> | ||
| + | |||
| + | </tr> | ||
| + | |||
| + | </ | ||
| + | |||
| + | <p> | ||
| + | キャンセルとして受け付けています。 | ||
| + | </p> | ||
| + | |||
| + | </ | ||
| + | '; | ||
| + | |||
| + | continue; | ||
| + | } | ||
| $date_text = hf_date_jp($result[' | $date_text = hf_date_jp($result[' | ||
| 行 412: | 行 511: | ||
| <div class=" | <div class=" | ||
| - | おめでとうございます。選考の結果、当選しました。 | + | おめでとうございます。抽選の結果、当選しました。 |
| </ | </ | ||
| <table class=" | <table class=" | ||
| + | |||
| <tr> | <tr> | ||
| < | < | ||
| 行 424: | 行 524: | ||
| <tr> | <tr> | ||
| + | |||
| < | < | ||
| . hf_h($date_text) | . hf_h($date_text) | ||
| 行 441: | 行 542: | ||
| 当選 | 当選 | ||
| </td> | </td> | ||
| + | |||
| </tr> | </tr> | ||
| + | |||
| </ | </ | ||
| '; | '; | ||
| - | /* | ||
| - | * 通常運用者はコールサインを表示。 | ||
| - | */ | ||
| if (!empty($result[' | if (!empty($result[' | ||
| 行 461: | 行 561: | ||
| } else { | } else { | ||
| - | | + | |
| - | * 体験運用などコールサインがない場合。 | + | |
| - | | + | |
| - | | + | |
| + | if (count($parts) === 2) { | ||
| + | |||
| + | $local | ||
| + | $domain = $parts[1]; | ||
| + | |||
| + | if ($local !== '' | ||
| + | $masked = | ||
| + | substr($local, | ||
| + | . '***@' | ||
| + | . $domain; | ||
| + | } else { | ||
| + | $masked = '***@' . $domain; | ||
| + | } | ||
| + | |||
| + | } else { | ||
| + | |||
| + | $masked = $email; | ||
| + | } | ||
| echo ' | echo ' | ||
| <p> | <p> | ||
| - | | + | |
| + | < | ||
| + | . hf_h($masked) | ||
| + | . '</ | ||
| </p> | </p> | ||
| '; | '; | ||
| } | } | ||
| - | /* | ||
| - | * 体験運用扱いの場合だけ表示。 | ||
| - | */ | ||
| if ( | if ( | ||
| $result[' | $result[' | ||
| 行 491: | 行 610: | ||
| echo ' | echo ' | ||
| <div class=" | <div class=" | ||
| + | |||
| < | < | ||
| 当選された方は、当日までに必ず以下のガイドをご確認ください。 | 当選された方は、当日までに必ず以下のガイドをご確認ください。 | ||
| 行 504: | 行 624: | ||
| 8J1HAM 会場公開運用 当選者向けガイド | 8J1HAM 会場公開運用 当選者向けガイド | ||
| </a> | </a> | ||
| + | |||
| </ | </ | ||
| 行 516: | 行 637: | ||
| <div class=" | <div class=" | ||
| - | 厳正なる選考の結果、今回は残念ながら運用枠をご用意することができませんでした。 | + | 厳正なる抽選の結果、今回は残念ながら運用枠をご用意することができませんでした。 |
| </ | </ | ||
| 行 530: | 行 651: | ||
| } catch (Exception $e) { | } catch (Exception $e) { | ||
| - | /* | ||
| - | * DB内部の情報は公開画面には表示しない。 | ||
| - | */ | ||
| echo ' | echo ' | ||
| <div class=" | <div class=" | ||
| - | 選考結果の確認中にエラーが発生しました。 | + | |
| しばらくしてから再度お試しください。 | しばらくしてから再度お試しください。 | ||
| </ | </ | ||