参加申請のウィキのソースコード

EM SSRが2026/10/27 15:01に最終更新

最終更新者を表示しない
EM SSR 1.1 1 {{velocity}}
2 #set ($ooc = $xwiki.parseGroovyFromPage('OOC.Lib').init($xcontext.context, $services))
3 #set ($error = '')
4 #set ($done = false)
5 #if ($request.getParameter('ooc_apply') == '1' && $request.getMethod() == 'POST')
6 ## ---- CSRF, anti-bot (honeypot + minimum fill time + CAPTCHA) ----
7 #set ($nowMs = $datetool.getSystemTime())
8 #set ($formTs = $numbertool.toNumber($!request.getParameter('ts')))
9 #if (!$formTs)
10 #set ($formTs = $nowMs)
11 #else
12 #set ($formTs = $formTs.longValue())
13 #end
14 #if (!$services.csrf.isTokenValid($request.getParameter('form_token')))
15 #set ($error = 'フォームの有効期限が切れました。もう一度送信してください。')
16 #elseif ($request.getParameter('website') != '')
17 #set ($error = '送信できませんでした。')
18 #elseif ($nowMs - $formTs < 4000)
19 #set ($error = '入力が速すぎます。少し待ってからもう一度送信してください。')
20 #elseif ($request.getParameter('agree') != '1')
21 #set ($error = '利用上の注意に同意してください。')
22 #elseif (!$services.captcha.default.isValid())
23 #set ($error = '画像の文字が正しくありません。')
24 #else
25 #set ($ip = $request.getRemoteAddr())
26 #set ($params = {
27 'username': $request.getParameter('username'),
28 'displayName': $request.getParameter('displayName'),
29 'email': $request.getParameter('email'),
30 'password': $request.getParameter('password'),
31 'password2': $request.getParameter('password2'),
32 'message': $request.getParameter('message')
33 })
34 #set ($res = $ooc.submitRequest($params, $ip))
35 #if ($res.ok)
36 $response.sendRedirect($xwiki.getURL('OOC.ApplyStatus', 'view', "id=$escapetool.url($res.id)&t=$escapetool.url($res.token)"))
37 #set ($done = true)
38 #else
39 #set ($error = $res.error)
40 #end
41 #end
42 #end
43 #if (!$done)
EM SSR 2.1 44 #set ($vUser = "$!request.getParameter('username')")
45 #set ($vDisplay = "$!request.getParameter('displayName')")
46 #set ($vEmail = "$!request.getParameter('email')")
47 #set ($vMsg = "$!request.getParameter('message')")
EM SSR 1.1 48
49 Out of Context の Wiki と掲示板(Matrix / Element)は **管理者の承認制** です。
50 下のフォームから申請すると、管理者が内容を確認して承認します。承認後は、ここで設定したユーザー名とパスワードで Wiki にログインでき、同じアカウントで掲示板にもそのまま入れます。
51
52 {{info}}
53 * パスワードは申請時に暗号化(ハッシュ)して保管し、承認後に Wiki のアカウントへ引き継ぎます。管理者にも平文は見えません。
54 * 承認・却下の結果はメールでもお知らせします(メール送信が有効な場合)。申請後に表示される「状況確認ページ」の URL を控えておくと、いつでも結果を確認できます。
55 {{/info}}
56
57 #if ($error != '')
58 {{error}}$error{{/error}}
59 #end
60
61 {{html clean="false" wiki="false"}}
62 <form method="post" action="$xwiki.relativeRequestURL" class="xform" id="ooc-apply" autocomplete="off">
63 <input type="hidden" name="ooc_apply" value="1" />
64 <input type="hidden" name="form_token" value="$escapetool.xml($services.csrf.getToken())" />
65 <input type="hidden" name="ts" value="$datetool.getSystemTime()" />
66 <div style="position:absolute;left:-9999px;top:-9999px;" aria-hidden="true">
67 <label>Website <input type="text" name="website" value="" tabindex="-1" autocomplete="off" /></label>
68 </div>
69 <dl>
70 <dt><label for="ooc-username">ユーザー名 <span class="xRequired">必須</span></label>
71 <span class="xHint">半角英小文字で始まり、英小文字・数字・_ ・ - のみ、3〜24文字。掲示板のIDにもなります(例: @taro:out-of-context.blog)。</span></dt>
EM SSR 2.1 72 <dd><input type="text" id="ooc-username" name="username" value="$escapetool.xml($vUser)" required pattern="[a-z][a-z0-9_\-]{2,23}" maxlength="24" /></dd>
EM SSR 1.1 73 <dt><label for="ooc-display">表示名 <span class="xRequired">必須</span></label>
74 <span class="xHint">サイト・掲示板に表示される名前(日本語可)。</span></dt>
EM SSR 2.1 75 <dd><input type="text" id="ooc-display" name="displayName" value="$escapetool.xml($vDisplay)" required maxlength="40" /></dd>
EM SSR 1.1 76 <dt><label for="ooc-email">メールアドレス <span class="xRequired">必須</span></label>
EM SSR 4.1 77 <span class="xHint">運営しか見ません。承認結果の連絡とパスワード再設定に利用します。</span></dt>
EM SSR 2.1 78 <dd><input type="email" id="ooc-email" name="email" value="$escapetool.xml($vEmail)" required maxlength="254" /></dd>
EM SSR 1.1 79 <dt><label for="ooc-pw">パスワード <span class="xRequired">必須</span></label>
EM SSR 4.1 80 <span class="xHint">10文字以上。乱数パスワードを使うと嬉しい。</span></dt>
EM SSR 1.1 81 <dd><input type="password" id="ooc-pw" name="password" required minlength="10" maxlength="200" autocomplete="new-password" /></dd>
82 <dt><label for="ooc-pw2">パスワード(確認) <span class="xRequired">必須</span></label></dt>
83 <dd><input type="password" id="ooc-pw2" name="password2" required minlength="10" maxlength="200" autocomplete="new-password" /></dd>
84 <dt><label for="ooc-msg">自己紹介・参加の理由(任意)</label>
EM SSR 4.1 85 <span class="xHint">管理者が承認の判断に使います。1000文字まで。書かなくても連絡さえしてくれれば通します。</span></dt>
EM SSR 2.1 86 <dd><textarea id="ooc-msg" name="message" rows="4" cols="60" maxlength="1000">$escapetool.xml($vMsg)</textarea></dd>
EM SSR 1.1 87 <dt><label>確認 <span class="xRequired">必須</span></label>
88 <span class="xHint">$escapetool.xml($services.localization.render('core.captcha.instruction'))</span></dt>
89 <dd>$!{services.captcha.default.display()}</dd>
90 </dl>
91 <p><label><input type="checkbox" name="agree" value="1" required /> <a href="$xwiki.getURL('Main.免責事項')" target="_blank" rel="noopener">利用上の注意</a>を読み、同意します。</label></p>
92 <p class="buttons"><span class="buttonwrapper"><input type="submit" class="button" value="申請する" /></span></p>
93 </form>
94 {{/html}}
95 #end
96 {{/velocity}}