您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

211 行
11 KiB

  1. {# templates/account/index.html.twig #}
  2. {% extends 'base.html.twig' %}
  3. {% block title %}
  4. {% if tab == 'account' %}Account{% else %}Mein Benutzer{% 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. };
  13. </script>
  14. <div class="account-page">
  15. <div class="account-header">
  16. <h1 class="account-header__title">
  17. {% if tab == 'account' %}Account{% else %}Mein Benutzer{% endif %}
  18. </h1>
  19. {% if isAdmin %}
  20. <nav class="account-tabs">
  21. <a href="{{ path('account_index', {tab: 'account'}) }}"
  22. class="account-tab{% if tab == 'account' %} account-tab--active{% endif %}">
  23. Account
  24. </a>
  25. <a href="{{ path('account_index', {tab: 'user'}) }}"
  26. class="account-tab{% if tab == 'user' %} account-tab--active{% endif %}">
  27. Mein Benutzer
  28. </a>
  29. </nav>
  30. {% endif %}
  31. </div>
  32. <div class="account-content">
  33. <div class="account-card">
  34. {# ── Account-Tab (nur Admin) ────────────────────────────────────────── #}
  35. {% if tab == 'account' and isAdmin %}
  36. <div class="account-form__grid" id="account-form">
  37. <label class="account-form__label" for="account-name">Firmenname</label>
  38. <div class="account-form__field">
  39. <input type="text" id="account-name" class="input"
  40. value="{{ account.name|e('html_attr') }}" />
  41. <span class="account-form__hint">
  42. Subdomain: <strong>{{ account.slug }}.{{ app.request.host|split('.')|slice(1)|join('.') }}</strong> — ändert sich nicht.
  43. </span>
  44. </div>
  45. <label class="account-form__label" for="account-interval">Zeitintervall</label>
  46. <div class="account-form__field">
  47. <select id="account-interval" class="select">
  48. {% for value, label in intervalOptions %}
  49. <option value="{{ value }}"{% if account.trackingInterval == value %} selected{% endif %}>
  50. {{ label }}
  51. </option>
  52. {% endfor %}
  53. </select>
  54. <span class="account-form__hint">Auf welche Einheit werden erfasste Zeiten aufgerundet.</span>
  55. </div>
  56. {% if isSuperAdmin %}
  57. <label class="account-form__label" for="account-color">Hauptfarbe</label>
  58. <div class="account-form__field">
  59. <div class="account-color-field">
  60. <input type="color" id="account-color-picker"
  61. value="{{ account.primaryColor ?? '#3a7bbf' }}"
  62. class="account-color-field__swatch" />
  63. <input type="text" id="account-color"
  64. value="{{ account.primaryColor ?? '#3a7bbf' }}"
  65. class="input account-color-field__hex"
  66. maxlength="7" placeholder="#3a7bbf" autocomplete="off" />
  67. </div>
  68. <span class="account-form__hint">Hex-Farbe für das Standard-Theme aller Benutzer. Standard: #3a7bbf</span>
  69. </div>
  70. {% endif %}
  71. <div class="account-form__actions">
  72. <button type="button" class="btn btn-primary" id="btn-account-save">Sichern</button>
  73. <a href="{{ path('account_index', {tab: 'account'}) }}" class="btn btn-secondary">Abbrechen</a>
  74. </div>
  75. </div>
  76. {# ── Benutzer-Tab ──────────────────────────────────────────────────── #}
  77. {% else %}
  78. <div class="account-form__grid" id="user-form">
  79. <label class="account-form__label" for="user-firstname">Vorname</label>
  80. <div class="account-form__field">
  81. <input type="text" id="user-firstname" class="input"
  82. value="{{ user.firstName|e('html_attr') }}" />
  83. </div>
  84. <label class="account-form__label" for="user-lastname">Nachname</label>
  85. <div class="account-form__field">
  86. <input type="text" id="user-lastname" class="input"
  87. value="{{ user.lastName|e('html_attr') }}" />
  88. </div>
  89. <label class="account-form__label" for="user-email">E-Mail</label>
  90. <div class="account-form__field">
  91. <input type="email" id="user-email" class="input"
  92. value="{{ user.email|e('html_attr') }}" />
  93. </div>
  94. <label class="account-form__label">Passwort</label>
  95. <div class="account-form__field">
  96. <a href="#" class="account-form__link" id="btn-pw-toggle">ändern</a>
  97. </div>
  98. <div class="account-form__pw-section" id="pw-section" hidden>
  99. <label class="account-form__label" for="user-pw-current">Aktuelles Passwort</label>
  100. <div class="account-form__field">
  101. <input type="password" id="user-pw-current" class="input" autocomplete="current-password" />
  102. </div>
  103. <label class="account-form__label" for="user-pw-new">Neues Passwort</label>
  104. <div class="account-form__field">
  105. <input type="password" id="user-pw-new" class="input" autocomplete="new-password" minlength="8" />
  106. </div>
  107. <label class="account-form__label" for="user-pw-repeat">Wiederholen</label>
  108. <div class="account-form__field">
  109. <input type="password" id="user-pw-repeat" class="input" autocomplete="new-password" />
  110. </div>
  111. </div>
  112. <div class="account-form__actions">
  113. <button type="button" class="btn btn-primary" id="btn-user-save">Sichern</button>
  114. <a href="{{ path('account_index', {tab: 'user'}) }}" class="btn btn-secondary">Abbrechen</a>
  115. </div>
  116. </div>
  117. {# ── Darstellung ───────────────────────────────────────────────────── #}
  118. <div class="account-form__grid account-form__grid--appearance" id="appearance-form">
  119. <div class="account-form__divider-row">
  120. <hr class="account-form__divider">
  121. </div>
  122. <label class="account-form__label">Darstellung</label>
  123. <div class="account-form__field">
  124. <div class="theme-picker" id="theme-picker">
  125. <label class="theme-option{% if user.theme|default('standard') == 'standard' %} theme-option--active{% endif %}" data-theme="standard">
  126. <input type="radio" name="theme" value="standard"{% if user.theme|default('standard') == 'standard' %} checked{% endif %}>
  127. <span class="theme-option__label">Standard</span>
  128. <span class="theme-option__desc">Volle Navigation, alle Felder sichtbar</span>
  129. </label>
  130. <label class="theme-option{% if user.theme|default('standard') == 'minimal' %} theme-option--active{% endif %}" data-theme="minimal">
  131. <input type="radio" name="theme" value="minimal"{% if user.theme|default('standard') == 'minimal' %} checked{% endif %}>
  132. <span class="theme-option__label">Minimal</span>
  133. <span class="theme-option__desc">Ablenkungsfreie Ansicht, Hamburger-Menü</span>
  134. </label>
  135. </div>
  136. </div>
  137. </div>
  138. {% endif %}
  139. </div>
  140. {# ── Besitzer des Accounts (nur Admin, Account-Tab) ─────────────────── #}
  141. {% if tab == 'account' and isAdmin %}
  142. <div class="account-card account-card--owner">
  143. <div class="account-form__grid">
  144. <label class="account-form__label" for="superadmin-select">Besitzer des Accounts</label>
  145. <div class="account-form__field">
  146. <select id="superadmin-select" class="select"
  147. {% if superAdminUserId != user.id %}disabled{% endif %}>
  148. {% for admin in adminUsers %}
  149. <option value="{{ admin.id }}"{% if admin.id == superAdminUserId %} selected{% endif %}>
  150. {{ admin.name }}
  151. </option>
  152. {% endfor %}
  153. </select>
  154. <p class="account-form__hint account-form__hint--owner">
  155. Der Besitzer des Accounts ist für die Verwaltung der Zahlungsdaten zuständig.
  156. Nur er kann den Account kündigen.
  157. </p>
  158. </div>
  159. </div>
  160. </div>
  161. {% endif %}
  162. </div>
  163. </div>
  164. <div class="account-toast" id="account-toast"></div>
  165. {% endblock %}
  166. {% block javascripts %}
  167. {{ parent() }}
  168. {{ encore_entry_script_tags('account') }}
  169. {% endblock %}