domain.twig 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. {% extends 'edit.twig' %}
  2. {% block inner_content %}
  3. {% if result %}
  4. <ul class="nav nav-tabs responsive-tabs" role="tablist">
  5. <li class="active"><a data-toggle="tab" href="#dedit">{{ lang.edit.domain }}</a></li>
  6. <li><a data-toggle="tab" href="#dratelimit">{{ lang.edit.ratelimit }}</a></li>
  7. <li><a data-toggle="tab" href="#dspamfilter">{{ lang.edit.spam_filter }}</a></li>
  8. <li><a data-toggle="tab" href="#dqwbcc">{{ lang.edit.quota_warning_bcc }}</a></li>
  9. </ul>
  10. <hr>
  11. <div class="tab-content">
  12. <div id="dedit" class="tab-pane in active">
  13. <form data-id="editdomain" class="form-horizontal" role="form" method="post">
  14. <input type="hidden" value="0" name="active">
  15. <input type="hidden" value="0" name="backupmx">
  16. <input type="hidden" value="0" name="gal">
  17. <input type="hidden" value="0" name="relay_all_recipients">
  18. <input type="hidden" value="0" name="relay_unknown_only">
  19. <div class="form-group" data-acl="{{ acl.domain_desc }}">
  20. <label class="control-label col-sm-2" for="description">{{ lang.edit.description }}</label>
  21. <div class="col-sm-10">
  22. <input type="text" class="form-control" name="description" value="{{ result.description }}">
  23. </div>
  24. </div>
  25. <div class="form-group">
  26. <label class="control-label col-sm-2" for="relayhost">{{ lang.edit.relayhost }}</label>
  27. <div class="col-sm-10">
  28. <select data-acl="{{ acl.domain_relayhost }}" data-live-search="true" id="relayhost" name="relayhost" class="form-control">
  29. {% for rlyhost in rlyhosts %}
  30. <option
  31. style="{% if rlyhost.active != '1' %}background: #ff4136; color: #fff{% endif %}"
  32. {% if result.relayhost == rlyhost.id %} selected{% endif %}
  33. value="{{ rlyhost.id }}">
  34. ID {{ rlyhost.id }}: {{ rlyhost.hostname }} ({{ rlyhost.username }})
  35. </option>
  36. {% endfor %}
  37. <option value=""{% if not result.relayhost %} selected{% endif %}>
  38. {{ lang.edit.none_inherit }}
  39. </option>
  40. </select>
  41. </div>
  42. </div>
  43. {% if mailcow_cc_role == 'admin' %}
  44. <div class="form-group">
  45. <label class="control-label col-sm-2" for="aliases">{{ lang.edit.max_aliases }}</label>
  46. <div class="col-sm-10">
  47. <input type="number" class="form-control" name="aliases" value="{{ result.max_num_aliases_for_domain }}">
  48. </div>
  49. </div>
  50. <div class="form-group">
  51. <label class="control-label col-sm-2" for="mailboxes">{{ lang.edit.max_mailboxes }}</label>
  52. <div class="col-sm-10">
  53. <input type="number" class="form-control" name="mailboxes" value="{{ result.max_num_mboxes_for_domain }}">
  54. </div>
  55. </div>
  56. <div class="form-group">
  57. <label class="control-label col-sm-2" for="defquota">{{ lang.edit.mailbox_quota_def }}</label>
  58. <div class="col-sm-10">
  59. <input type="number" class="form-control" name="defquota" value="{{ (result.def_quota_for_mbox / 1048576) }}">
  60. </div>
  61. </div>
  62. <div class="form-group">
  63. <label class="control-label col-sm-2" for="maxquota">{{ lang.edit.max_quota }}</label>
  64. <div class="col-sm-10">
  65. <input type="number" class="form-control" name="maxquota" value="{{ (result.max_quota_for_mbox / 1048576) }}">
  66. </div>
  67. </div>
  68. <div class="form-group">
  69. <label class="control-label col-sm-2" for="quota">{{ lang.edit.domain_quota }}</label>
  70. <div class="col-sm-10">
  71. <input type="number" class="form-control" name="quota" value="{{ (result.max_quota_for_domain / 1048576) }}">
  72. </div>
  73. </div>
  74. <div class="form-group">
  75. <label class="control-label col-sm-2">{{ lang.edit.backup_mx_options }}</label>
  76. <div class="col-sm-10">
  77. <div class="checkbox">
  78. <label><input type="checkbox" value="1" name="backupmx"{% if result.backupmx == '1' %} checked{% endif %}> {{ lang.edit.relay_domain }}</label>
  79. <br>
  80. <label><input type="checkbox" value="1" name="relay_all_recipients"{% if result.relay_all_recipients == '1' %} checked{% endif %}> {{ lang.edit.relay_all }}</label>
  81. <p>{{ lang.edit.relay_all_info|raw }}</p>
  82. <label><input type="checkbox" value="1" name="relay_unknown_only"{% if result.relay_unknown_only == '1' %} checked{% endif %}> {{ lang.edit.relay_unknown_only }}</label>
  83. <br>
  84. <p>{{ lang.edit.relay_transport_info|raw }}</p>
  85. <hr style="margin:25px 0px 0px 0px">
  86. </div>
  87. </div>
  88. </div>
  89. {% endif %}
  90. <div class="form-group">
  91. <div class="col-sm-offset-2 col-sm-10">
  92. <div class="checkbox">
  93. <label><input type="checkbox" value="1" name="gal"{% if result.gal == '1' %} checked{% endif %}> {{ lang.edit.gal }}</label>
  94. <small class="help-block">{{ lang.edit.gal_info|raw }}</small>
  95. </div>
  96. </div>
  97. </div>
  98. <hr>
  99. <div class="form-group">
  100. <div class="col-sm-offset-2 col-sm-10">
  101. <div class="checkbox">
  102. <label><input type="checkbox" value="1" name="active"{% if result.active == '1' %} checked{% endif %}{% if mailcow_cc_role != 'admin' %} disabled{% endif %}> {{ lang.edit.active }}</label>
  103. </div>
  104. </div>
  105. </div>
  106. <div class="form-group">
  107. <div class="col-sm-offset-2 col-sm-10">
  108. <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="editdomain" data-item="{{ domain }}" data-api-url='edit/domain' data-api-attr='{}' href="#">{{ lang.admin.save }}</button>
  109. </div>
  110. </div>
  111. </form>
  112. {% if dkim %}
  113. <hr>
  114. <div class="row">
  115. <div class="col-xs-12 col-sm-2">
  116. <p>Domain: <strong>{{ result.domain_name }}</strong> ({{ dkim.dkim_selector }}._domainkey)</p>
  117. </div>
  118. <div class="col-xs-12 col-sm-10">
  119. <pre>{{ dkim.dkim_txt }}</pre>
  120. </div>
  121. </div>
  122. {% endif %}
  123. </div>
  124. <div id="dratelimit" class="tab-pane">
  125. <form data-id="domratelimit" class="form-inline well" method="post">
  126. <div class="form-group">
  127. <label class="control-label">{{ lang.edit.ratelimit }}</label>
  128. <input name="rl_value" type="number" value="{{ rl.value }}" autocomplete="off" class="form-control" placeholder="{{ lang.ratelimit.disabled }}">
  129. </div>
  130. <div class="form-group">
  131. <select name="rl_frame" class="form-control">
  132. {% include 'mailbox/rl-frame.twig' %}
  133. </select>
  134. </div>
  135. <div class="form-group">
  136. <button data-acl="{{ acl.ratelimit }}" class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-default" data-action="edit_selected" data-id="domratelimit" data-item="{{ domain }}" data-api-url='edit/rl-domain' data-api-attr='{}' href="#">{{ lang.admin.save }}</button>
  137. </div>
  138. </form>
  139. </div>
  140. <div id="dspamfilter" class="tab-pane">
  141. <div class="row">
  142. <div class="col-sm-6">
  143. <h4>{{ lang.user.spamfilter_wl }}</h4>
  144. <p>{{ lang.user.spamfilter_wl_desc|raw }}</p>
  145. <form class="form-inline space20" data-id="add_wl_policy_domain">
  146. <div class="input-group" data-acl="{{ acl.spam_policy }}">
  147. <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
  148. <span class="input-group-btn">
  149. <button class="btn btn-default" data-action="add_item" data-id="add_wl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"{{ domain }}","object_list":"wl"}' href="#">{{ lang.user.spamfilter_table_add }}</button>
  150. </span>
  151. </div>
  152. </form>
  153. <div class="table-responsive">
  154. <table class="table table-striped table-condensed" id="wl_policy_domain_table"></table>
  155. </div>
  156. <div class="mass-actions-user">
  157. <div class="btn-group" data-acl="{{ acl.spam_policy }}">
  158. <a class="btn btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_wl_domain" href="#"><i class="bi bi-check-all"></i> {{ lang.mailbox.toggle_all }}</a>
  159. <a class="btn btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-sm btn-danger" data-action="delete_selected" data-id="policy_wl_domain" data-api-url='delete/domain-policy' href="#">{{ lang.mailbox.remove }}</a>
  160. <div class="clearfix visible-xs"></div>
  161. </div>
  162. </div>
  163. </div>
  164. <div class="col-sm-6">
  165. <h4>{{ lang.user.spamfilter_bl }}</h4>
  166. <p>{{ lang.user.spamfilter_bl_desc|raw }}</p>
  167. <form class="form-inline space20" data-id="add_bl_policy_domain">
  168. <div class="input-group" data-acl="{{ acl.spam_policy }}">
  169. <input type="text" class="form-control" name="object_from" placeholder="*@example.org" required>
  170. <span class="input-group-btn">
  171. <button class="btn btn-default" data-action="add_item" data-id="add_bl_policy_domain" data-api-url='add/domain-policy' data-api-attr='{"domain":"{{ domain }}","object_list":"bl"}' href="#">{{ lang.user.spamfilter_table_add }}</button>
  172. </span>
  173. </div>
  174. </form>
  175. <div class="table-responsive">
  176. <table class="table table-striped table-condensed" id="bl_policy_domain_table"></table>
  177. </div>
  178. <div class="mass-actions-user">
  179. <div class="btn-group" data-acl="{{ acl.spam_policy }}">
  180. <a class="btn btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-sm btn-default" id="toggle_multi_select_all" data-id="policy_bl_domain" href="#"><i class="bi bi-check-all"></i> {{ lang.mailbox.toggle_all }}</a>
  181. <a class="btn btn-xs-half visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-sm btn-danger" data-action="delete_selected" data-id="policy_bl_domain" data-api-url='delete/domain-policy' href="#">{{ lang.mailbox.remove }}</a></li>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. <div id="dqwbcc" class="tab-pane">
  188. <div class="row">
  189. <div class="col-sm-12">
  190. <h4>{{ lang.edit.quota_warning_bcc }}</h4>
  191. <p>{{ lang.edit.quota_warning_bcc_info|raw }}</p>
  192. <form class="form-horizontal" data-id="quota_bcc">
  193. <input type="hidden" value="0" name="active">
  194. <div class="form-group">
  195. <label class="control-label col-sm-2" for="script_data">{{ lang.edit.target_address|raw }}:</label>
  196. <div class="col-sm-10">
  197. <textarea spellcheck="false" autocorrect="off" autocapitalize="none" class="form-control" rows="10" id="bcc_rcpt" name="bcc_rcpt">{{ quota_notification_bcc.bcc_rcpts|join("\n") }}</textarea>
  198. </div>
  199. </div>
  200. <div class="form-group">
  201. <div class="col-sm-offset-2 col-sm-10">
  202. <div class="checkbox">
  203. <label><input type="checkbox" value="1" name="active"{% if quota_notification_bcc.active == '1' %} checked{% endif %}> {{ lang.edit.active }}</label>
  204. </div>
  205. </div>
  206. </div>
  207. <div class="form-group">
  208. <div class="col-sm-offset-2 col-sm-10">
  209. <button class="btn btn-xs-lg visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline btn-success" data-action="edit_selected" data-id="quota_bcc" data-item="quota_bcc" data-api-url='edit/quota_notification_bcc' data-api-attr='{"domain":"{{ domain }}"}' href="#">{{ lang.edit.save }}</button>
  210. </div>
  211. </div>
  212. </form>
  213. </div>
  214. </div>
  215. </div>
  216. </div>
  217. {% else %}
  218. {{ parent() }}
  219. {% endif %}
  220. {% endblock %}