最終更新者を表示しない
| author | version | line-number | content |
|---|---|---|---|
| |
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) | ||
| |
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')") | ||
| |
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> | ||
| |
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> |
| |
1.1 | 73 | <dt><label for="ooc-display">表示名 <span class="xRequired">必須</span></label> |
| 74 | <span class="xHint">サイト・掲示板に表示される名前(日本語可)。</span></dt> | ||
| |
2.1 | 75 | <dd><input type="text" id="ooc-display" name="displayName" value="$escapetool.xml($vDisplay)" required maxlength="40" /></dd> |
| |
1.1 | 76 | <dt><label for="ooc-email">メールアドレス <span class="xRequired">必須</span></label> |
| 77 | <span class="xHint">公開されません。承認結果の連絡とパスワード再設定に使います。</span></dt> | ||
| |
2.1 | 78 | <dd><input type="email" id="ooc-email" name="email" value="$escapetool.xml($vEmail)" required maxlength="254" /></dd> |
| |
1.1 | 79 | <dt><label for="ooc-pw">パスワード <span class="xRequired">必須</span></label> |
| 80 | <span class="xHint">10文字以上。</span></dt> | ||
| 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> | ||
| 85 | <span class="xHint">管理者が承認の判断に使います。1000文字まで。</span></dt> | ||
| |
2.1 | 86 | <dd><textarea id="ooc-msg" name="message" rows="4" cols="60" maxlength="1000">$escapetool.xml($vMsg)</textarea></dd> |
| |
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}} | ||
| 97 |