Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

241 rader
14 KiB

  1. {# templates/account/index.html.twig #}
  2. {% extends 'base.html.twig' %}
  3. {% block title %}
  4. {% if tab == 'account' %}{{ 'app.account.page_title_account'|trans }}{% else %}{{ 'app.account.page_title_user'|trans }}{% endif %}
  5. {% endblock %}
  6. {% block body %}
  7. <script>
  8. window.ACCOUNT = {
  9. tab: '{{ tab }}',
  10. isSuperAdmin: {{ isSuperAdmin ? 'true' : 'false' }},
  11. theme: '{{ user.theme|default('standard') }}',
  12. i18n: {
  13. invalidHex: {{ 'app.account.invalid_hex'|trans|json_encode|raw }},
  14. saved: {{ 'app.account.saved'|trans|json_encode|raw }},
  15. savedReloading: {{ 'app.account.saved_reloading'|trans|json_encode|raw }},
  16. ownerChanged: {{ 'app.account.owner_changed'|trans|json_encode|raw }},
  17. ownerConfirm: {{ 'app.account.owner_confirm'|trans|json_encode|raw }},
  18. themeChanged: {{ 'app.account.theme_changed'|trans|json_encode|raw }},
  19. passwordMismatch: {{ 'app.account.password_mismatch'|trans|json_encode|raw }},
  20. changeLabel: {{ 'app.account.change_label'|trans|json_encode|raw }},
  21. cancelLabel: {{ 'app.account.cancel_label'|trans|json_encode|raw }},
  22. errorGeneric: {{ 'app.account.error_generic'|trans|json_encode|raw }},
  23. },
  24. };
  25. </script>
  26. <div class="account-page">
  27. <div class="account-header">
  28. <h1 class="account-header__title">
  29. {% if tab == 'account' %}{{ 'app.account.page_title_account'|trans }}{% else %}{{ 'app.account.page_title_user'|trans }}{% endif %}
  30. </h1>
  31. {% if isAdmin %}
  32. <nav class="account-tabs">
  33. <a href="{{ path('account_index', {tab: 'account'}) }}"
  34. class="account-tab{% if tab == 'account' %} account-tab--active{% endif %}">
  35. {{ 'app.account.tab_account'|trans }}
  36. </a>
  37. <a href="{{ path('account_index', {tab: 'user'}) }}"
  38. class="account-tab{% if tab == 'user' %} account-tab--active{% endif %}">
  39. {{ 'app.account.tab_user'|trans }}
  40. </a>
  41. </nav>
  42. {% endif %}
  43. </div>
  44. <div class="account-content">
  45. <div class="account-card">
  46. {# ── Account-Tab (nur Admin) ────────────────────────────────────────── #}
  47. {% if tab == 'account' and isAdmin %}
  48. <div class="account-form__grid" id="account-form">
  49. <label class="account-form__label" for="account-name">{{ 'app.account.label_company_name'|trans }}</label>
  50. <div class="account-form__field">
  51. <input type="text" id="account-name" class="input"
  52. value="{{ account.name|e('html_attr') }}" />
  53. <span class="account-form__hint">
  54. {{ 'app.account.hint_subdomain'|trans({'%subdomain%': account.slug ~ '.' ~ (app.request.host|split('.')|slice(1)|join('.'))}) }}
  55. </span>
  56. </div>
  57. <label class="account-form__label" for="account-interval">{{ 'app.account.label_interval'|trans }}</label>
  58. <div class="account-form__field">
  59. <select id="account-interval" class="select">
  60. {% for value, label in intervalOptions %}
  61. <option value="{{ value }}"{% if account.trackingInterval == value %} selected{% endif %}>
  62. {{ label }}
  63. </option>
  64. {% endfor %}
  65. </select>
  66. <span class="account-form__hint">{{ 'app.account.hint_interval'|trans }}</span>
  67. </div>
  68. {% if isSuperAdmin %}
  69. <label class="account-form__label" for="account-color">{{ 'app.account.label_color'|trans }}</label>
  70. <div class="account-form__field">
  71. <div class="account-color-field">
  72. <input type="color" id="account-color-picker"
  73. value="{{ account.primaryColor ?? '#3a7bbf' }}"
  74. class="account-color-field__swatch" />
  75. <input type="text" id="account-color"
  76. value="{{ account.primaryColor ?? '#3a7bbf' }}"
  77. class="input account-color-field__hex"
  78. maxlength="7" placeholder="#3a7bbf" autocomplete="off" />
  79. </div>
  80. <span class="account-form__hint">{{ 'app.account.hint_color'|trans }}</span>
  81. </div>
  82. {% endif %}
  83. <div class="account-form__divider-row">
  84. <hr class="account-form__divider">
  85. </div>
  86. <label class="account-form__label">{{ 'app.account.label_lexoffice_key'|trans }}</label>
  87. <div class="account-form__field">
  88. {% if account.hasLexofficeApiKey() %}
  89. <span class="account-form__key-status" id="lexoffice-key-status">
  90. <span class="account-form__key-mask">••••••••</span>
  91. <a href="#" class="account-form__link" id="btn-lexoffice-key-change">{{ 'app.account.change_label'|trans }}</a>
  92. </span>
  93. {% endif %}
  94. <input type="text" id="account-lexoffice-key" class="input"
  95. {{ account.hasLexofficeApiKey() ? 'hidden' : '' }}
  96. placeholder="{{ 'app.account.placeholder_lexoffice_key'|trans }}"
  97. autocomplete="off" data-1p-ignore data-lpignore="true" />
  98. <span class="account-form__hint">{{ 'app.account.hint_lexoffice_key'|trans }}</span>
  99. </div>
  100. <div class="account-form__actions">
  101. <button type="button" class="btn btn-primary" id="btn-account-save">{{ 'app.entry.btn_save'|trans }}</button>
  102. <a href="{{ path('account_index', {tab: 'account'}) }}" class="btn btn-secondary">{{ 'app.entry.btn_cancel'|trans }}</a>
  103. </div>
  104. </div>
  105. {# ── Benutzer-Tab ──────────────────────────────────────────────────── #}
  106. {% else %}
  107. <div class="account-form__grid" id="user-form">
  108. <label class="account-form__label" for="user-firstname">{{ 'app.account.label_first_name'|trans }}</label>
  109. <div class="account-form__field">
  110. <input type="text" id="user-firstname" class="input"
  111. value="{{ user.firstName|e('html_attr') }}" />
  112. </div>
  113. <label class="account-form__label" for="user-lastname">{{ 'app.account.label_last_name'|trans }}</label>
  114. <div class="account-form__field">
  115. <input type="text" id="user-lastname" class="input"
  116. value="{{ user.lastName|e('html_attr') }}" />
  117. </div>
  118. <label class="account-form__label" for="user-email">{{ 'app.account.label_email'|trans }}</label>
  119. <div class="account-form__field">
  120. <input type="email" id="user-email" class="input"
  121. value="{{ user.email|e('html_attr') }}" />
  122. </div>
  123. <label class="account-form__label">{{ 'app.account.label_password'|trans }}</label>
  124. <div class="account-form__field">
  125. <a href="#" class="account-form__link" id="btn-pw-toggle">{{ 'app.account.change_label'|trans }}</a>
  126. </div>
  127. <div class="account-form__pw-section" id="pw-section" hidden>
  128. <label class="account-form__label" for="user-pw-current">{{ 'app.account.label_current_password'|trans }}</label>
  129. <div class="account-form__field">
  130. <input type="password" id="user-pw-current" class="input" autocomplete="current-password" />
  131. </div>
  132. <label class="account-form__label" for="user-pw-new">{{ 'app.account.label_new_password'|trans }}</label>
  133. <div class="account-form__field">
  134. <input type="password" id="user-pw-new" class="input" autocomplete="new-password" minlength="8" />
  135. </div>
  136. <label class="account-form__label" for="user-pw-repeat">{{ 'app.account.label_password_repeat'|trans }}</label>
  137. <div class="account-form__field">
  138. <input type="password" id="user-pw-repeat" class="input" autocomplete="new-password" />
  139. </div>
  140. </div>
  141. <div class="account-form__actions">
  142. <button type="button" class="btn btn-primary" id="btn-user-save">{{ 'app.entry.btn_save'|trans }}</button>
  143. <a href="{{ path('account_index', {tab: 'user'}) }}" class="btn btn-secondary">{{ 'app.entry.btn_cancel'|trans }}</a>
  144. </div>
  145. </div>
  146. {# ── Darstellung ───────────────────────────────────────────────────── #}
  147. <div class="account-form__grid account-form__grid--appearance" id="appearance-form">
  148. <div class="account-form__divider-row">
  149. <hr class="account-form__divider">
  150. </div>
  151. <label class="account-form__label">{{ 'app.account.label_appearance'|trans }}</label>
  152. <div class="account-form__field">
  153. <div class="theme-picker" id="theme-picker">
  154. <label class="theme-option{% if user.theme|default('standard') == 'standard' %} theme-option--active{% endif %}" data-theme="standard">
  155. <input type="radio" name="theme" value="standard"{% if user.theme|default('standard') == 'standard' %} checked{% endif %}>
  156. <span class="theme-option__label">{{ 'app.account.theme_standard'|trans }}</span>
  157. <span class="theme-option__desc">{{ 'app.account.theme_standard_desc'|trans }}</span>
  158. </label>
  159. <label class="theme-option{% if user.theme|default('standard') == 'minimal' %} theme-option--active{% endif %}" data-theme="minimal">
  160. <input type="radio" name="theme" value="minimal"{% if user.theme|default('standard') == 'minimal' %} checked{% endif %}>
  161. <span class="theme-option__label">{{ 'app.account.theme_minimal'|trans }}</span>
  162. <span class="theme-option__desc">{{ 'app.account.theme_minimal_desc'|trans }}</span>
  163. </label>
  164. </div>
  165. </div>
  166. </div>
  167. {% endif %}
  168. </div>
  169. {# ── Besitzer des Accounts (nur Admin, Account-Tab) ─────────────────── #}
  170. {% if tab == 'account' and isAdmin %}
  171. <div class="account-card account-card--owner">
  172. <div class="account-form__grid">
  173. <label class="account-form__label" for="superadmin-select">{{ 'app.account.label_owner'|trans }}</label>
  174. <div class="account-form__field">
  175. <select id="superadmin-select" class="select"
  176. {% if superAdminUserId != user.id %}disabled{% endif %}>
  177. {% for admin in adminUsers %}
  178. <option value="{{ admin.id }}"{% if admin.id == superAdminUserId %} selected{% endif %}>
  179. {{ admin.name }}
  180. </option>
  181. {% endfor %}
  182. </select>
  183. <p class="account-form__hint account-form__hint--owner">
  184. {{ 'app.account.hint_owner'|trans }}
  185. </p>
  186. </div>
  187. </div>
  188. </div>
  189. {% endif %}
  190. </div>
  191. </div>
  192. <div class="account-toast" id="account-toast"></div>
  193. {% endblock %}
  194. {% block javascripts %}
  195. {{ parent() }}
  196. {{ encore_entry_script_tags('account') }}
  197. {% endblock %}