register.ftl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <#import "template.ftl" as layout>
  2. <@layout.registrationLayout; section>
  3. <#if section = "header">
  4. ${msg("registerTitle")}
  5. <#elseif section = "form">
  6. <form id="kc-register-form" class="${properties.kcFormClass!}" action="${url.registrationAction}" method="post">
  7. <style>
  8. .modern-error-text {
  9. color: #c9190b;
  10. font-size: 0.875rem;
  11. margin-top: 0.35rem;
  12. display: block;
  13. font-weight: 500;
  14. }
  15. .modern-input-error {
  16. border-bottom-color: #c9190b !important;
  17. box-shadow: inset 0 -1px 0 0 #c9190b !important;
  18. }
  19. /* Styl dla czerwonej gwiazdki */
  20. .required {
  21. color: #c9190b;
  22. margin-left: 3px;
  23. font-weight: bold;
  24. }
  25. /* --- Nowe style dla wyboru typu konta --- */
  26. .account-type-wrapper {
  27. display: flex;
  28. gap: 1rem;
  29. margin-top: 0.5rem;
  30. }
  31. .account-type-card {
  32. flex: 1;
  33. cursor: pointer;
  34. position: relative;
  35. }
  36. .account-type-card input[type="radio"] {
  37. position: absolute;
  38. opacity: 0;
  39. width: 0;
  40. height: 0;
  41. }
  42. .account-type-card .card-content {
  43. border: 2px solid #4f4f4f; /* Ciemniejsza ramka dopasowana do Twojego tła */
  44. border-radius: 8px;
  45. padding: 0.8rem 1rem;
  46. text-align: center;
  47. transition: all 0.2s ease;
  48. color: #d2d2d2; /* Jasny tekst dla ciemnego motywu */
  49. font-weight: 600;
  50. background-color: transparent;
  51. }
  52. .account-type-card:hover .card-content {
  53. border-color: #0066cc;
  54. }
  55. .account-type-card input[type="radio"]:checked + .card-content {
  56. border-color: #0066cc;
  57. background-color: #fff;
  58. color: #0066cc;
  59. }
  60. .account-type-error .card-content {
  61. border-color: #c9190b !important;
  62. }
  63. .form-action-spacer {
  64. margin-bottom: 1.5rem;
  65. margin-top: 1rem;
  66. }
  67. .form-action-spacer a {
  68. color: #0066cc;
  69. text-decoration: none;
  70. font-size: 1rem;
  71. transition: color 0.2s;
  72. font-weight: bold;
  73. }
  74. .form-action-spacer a:hover {
  75. color: #004c99;
  76. text-decoration: underline;
  77. }
  78. </style>
  79. <#-- 1. LOGIN -->
  80. <#if !realm.registrationEmailAsUsername>
  81. <div class="${properties.kcFormGroupClass!}">
  82. <div class="${properties.kcLabelWrapperClass!}">
  83. <label for="username" class="${properties.kcLabelClass!}">${msg("username")}<span class="required">*</span></label>
  84. </div>
  85. <div class="${properties.kcInputWrapperClass!}">
  86. <input type="text" id="username" class="${properties.kcInputClass!} <#if messagesPerField.existsError('username')>modern-input-error</#if>" name="username" value="${(register.formData.username!'')}" autocomplete="username" />
  87. <#if messagesPerField.existsError('username')>
  88. <span class="modern-error-text">${kcSanitize(messagesPerField.get('username'))?no_esc}</span>
  89. </#if>
  90. </div>
  91. </div>
  92. </#if>
  93. <#-- 2. E-MAIL -->
  94. <div class="${properties.kcFormGroupClass!}">
  95. <div class="${properties.kcLabelWrapperClass!}">
  96. <label for="email" class="${properties.kcLabelClass!}">${msg("email")}<span class="required">*</span></label>
  97. </div>
  98. <div class="${properties.kcInputWrapperClass!}">
  99. <input type="email" id="email" class="${properties.kcInputClass!} <#if messagesPerField.existsError('email')>modern-input-error</#if>" name="email" value="${(register.formData.email!'')}" autocomplete="email" />
  100. <#if messagesPerField.existsError('email')>
  101. <span class="modern-error-text">${kcSanitize(messagesPerField.get('email'))?no_esc}</span>
  102. </#if>
  103. </div>
  104. </div>
  105. <#-- 3. IMIĘ -->
  106. <div class="${properties.kcFormGroupClass!}">
  107. <div class="${properties.kcLabelWrapperClass!}">
  108. <label for="firstName" class="${properties.kcLabelClass!}">${msg("firstName")}<span class="required">*</span></label>
  109. </div>
  110. <div class="${properties.kcInputWrapperClass!}">
  111. <input type="text" id="firstName" class="${properties.kcInputClass!} <#if messagesPerField.existsError('firstName')>modern-input-error</#if>" name="firstName" value="${(register.formData.firstName!'')}" />
  112. <#if messagesPerField.existsError('firstName')>
  113. <span class="modern-error-text">${kcSanitize(messagesPerField.get('firstName'))?no_esc}</span>
  114. </#if>
  115. </div>
  116. </div>
  117. <#-- 4. NAZWISKO -->
  118. <div class="${properties.kcFormGroupClass!}">
  119. <div class="${properties.kcLabelWrapperClass!}">
  120. <label for="lastName" class="${properties.kcLabelClass!}">${msg("lastName")}<span class="required">*</span></label>
  121. </div>
  122. <div class="${properties.kcInputWrapperClass!}">
  123. <input type="text" id="lastName" class="${properties.kcInputClass!} <#if messagesPerField.existsError('lastName')>modern-input-error</#if>" name="lastName" value="${(register.formData.lastName!'')}" />
  124. <#if messagesPerField.existsError('lastName')>
  125. <span class="modern-error-text">${kcSanitize(messagesPerField.get('lastName'))?no_esc}</span>
  126. </#if>
  127. </div>
  128. </div>
  129. <#-- 5. NUMER TELEFONU -->
  130. <div class="${properties.kcFormGroupClass!}">
  131. <div class="${properties.kcLabelWrapperClass!}">
  132. <label for="user.attributes.phoneNumber" class="${properties.kcLabelClass!}">${msg("phoneNumber")}<span class="required">*</span></label>
  133. </div>
  134. <div class="${properties.kcInputWrapperClass!}">
  135. <#assign hasError = messagesPerField.existsError('user.attributes.phoneNumber', 'phoneNumber')>
  136. <input type="tel" id="user.attributes.phoneNumber"
  137. class="${properties.kcInputClass!} <#if hasError>modern-input-error</#if>"
  138. name="user.attributes.phoneNumber"
  139. value="${(register.formData['user.attributes.phoneNumber']!'')}" />
  140. <#if hasError>
  141. <span class="modern-error-text">
  142. ${kcSanitize(messagesPerField.getFirstError('user.attributes.phoneNumber', 'phoneNumber'))?no_esc}
  143. </span>
  144. </#if>
  145. </div>
  146. </div>
  147. <#-- 6. HASŁA -->
  148. <#if passwordRequired>
  149. <div class="${properties.kcFormGroupClass!}">
  150. <div class="${properties.kcLabelWrapperClass!}">
  151. <label for="password" class="${properties.kcLabelClass!}">${msg("password")}<span class="required">*</span></label>
  152. </div>
  153. <div class="${properties.kcInputWrapperClass!}">
  154. <input type="password" id="password" class="${properties.kcInputClass!} <#if messagesPerField.existsError('password')>modern-input-error</#if>" name="password" autocomplete="new-password"/>
  155. <#if messagesPerField.existsError('password')>
  156. <span class="modern-error-text">${kcSanitize(messagesPerField.get('password'))?no_esc}</span>
  157. </#if>
  158. </div>
  159. </div>
  160. <div class="${properties.kcFormGroupClass!}">
  161. <div class="${properties.kcLabelWrapperClass!}">
  162. <label for="password-confirm" class="${properties.kcLabelClass!}">${msg("passwordConfirm")}<span class="required">*</span></label>
  163. </div>
  164. <div class="${properties.kcInputWrapperClass!}">
  165. <input type="password" id="password-confirm" class="${properties.kcInputClass!} <#if messagesPerField.existsError('password-confirm')>modern-input-error</#if>" name="password-confirm" />
  166. <#if messagesPerField.existsError('password-confirm')>
  167. <span class="modern-error-text">${kcSanitize(messagesPerField.get('password-confirm'))?no_esc}</span>
  168. </#if>
  169. </div>
  170. </div>
  171. </#if>
  172. <#-- 7. WYBÓR KONTA -->
  173. <div class="${properties.kcFormGroupClass!}">
  174. <div class="${properties.kcLabelWrapperClass!}">
  175. <label class="${properties.kcLabelClass!}">${msg("accountType")}<span class="required">*</span></label>
  176. </div>
  177. <div class="${properties.kcInputWrapperClass!}">
  178. <#assign selectedType = (register.formData['user.attributes.ACCOUNT_TYPE']!'CUSTOMER')>
  179. <#assign typeHasError = messagesPerField.existsError('user.attributes.ACCOUNT_TYPE')>
  180. <div class="account-type-wrapper">
  181. <label class="account-type-card <#if typeHasError>account-type-error</#if>">
  182. <input type="radio" name="user.attributes.ACCOUNT_TYPE" value="CUSTOMER" <#if selectedType == 'CUSTOMER'>checked</#if> required>
  183. <div class="card-content">
  184. ${msg("accountTypeCustomer")}
  185. </div>
  186. </label>
  187. <label class="account-type-card <#if typeHasError>account-type-error</#if>">
  188. <input type="radio" name="user.attributes.ACCOUNT_TYPE" value="COURIER" <#if selectedType == 'COURIER'>checked</#if> required>
  189. <div class="card-content">
  190. ${msg("accountTypeCourier")}
  191. </div>
  192. </label>
  193. </div>
  194. <#if typeHasError>
  195. <span class="modern-error-text">${kcSanitize(messagesPerField.get('user.attributes.ACCOUNT_TYPE'))?no_esc}</span>
  196. </#if>
  197. </div>
  198. </div>
  199. <#-- SEKCJA PRZYCISKÓW -->
  200. <div class="${properties.kcFormGroupClass!}">
  201. <#-- Zmiana: Dodana klasa form-action-spacer do kontroli odstępu -->
  202. <div id="kc-form-options" class="${properties.kcFormOptionsClass!} form-action-spacer">
  203. <div class="${properties.kcFormOptionsWrapperClass!}">
  204. <span><a href="${url.loginUrl}">${kcSanitize(msg("backToLogin"))?no_esc}</a></span>
  205. </div>
  206. </div>
  207. <div id="kc-form-buttons" class="${properties.kcFormButtonsClass!}">
  208. <input class="${properties.kcButtonClass!} ${properties.kcButtonPrimaryClass!} ${properties.kcButtonBlockClass!} ${properties.kcButtonLargeClass!}" type="submit" value="${msg("doRegister")}"/>
  209. </div>
  210. </div>
  211. </form>
  212. </#if>
  213. </@layout.registrationLayout>