package-edit.tpl 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. <div class="modal fade modal-lg modal-tabed" id="edit-set-modal">
  2. <div class="modal-dialog">
  3. <div class="modal-content">
  4. <div class="modal-header">
  5. <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">{$MGLANG->T('close')}</span></button>
  6. <h4 class="modal-title text-left">{if $edit}{$MGLANG->T('edit_package')}{else}{$MGLANG->T('add_package')}{/if}</h4>
  7. <ul class="nav nav-tabs text-right" role="tablist">
  8. <li class="active"><a href="#general-tab" role="tab" data-toggle="tab">{$MGLANG->T('general')}</a></li>
  9. <li><a href="#items-tab" role="tab" data-toggle="tab">{$MGLANG->T('items')}</a></li>
  10. <li><a href="#server-tab" role="tab" data-toggle="tab">{$MGLANG->T('servers')}</a></li>
  11. <li><a href="#records-tab" role="tab" data-toggle="tab">{$MGLANG->T('Records')}</a></li>
  12. <li><a href="#registrars-tab" role="tab" data-toggle="tab">{$MGLANG->T('registrars')}</a></li>
  13. <li><a href="#notifications-tab" role="tab" data-toggle="tab">{$MGLANG->T('notifications')}</a></li>
  14. <li><a href="#allowed-ips-tab" role="tab" data-toggle="tab">{$MGLANG->T('allowed-ips')}</a></li>
  15. <li><a href="#ip-blacklist-tab" role="tab" data-toggle="tab">{$MGLANG->T('ip-blacklist')}</a></li>
  16. </ul>
  17. </div>
  18. <div class="modal-body">
  19. <form class="form-horizontal">
  20. {if $edit}<input type="hidden" name="packageid" value="{$package.id}" />{/if}
  21. <div class="tab-content">
  22. <!-- ========================================== GENERAL ====================================== -->
  23. <div class="tab-pane active" id="general-tab">
  24. <div class="form-group">
  25. <label for="fi1" class="col-sm-3 control-label">{$MGLANG->T('name')}</label>
  26. <div class="col-sm-9">
  27. <input type="text" class="form-control" id="fi1" name="name" value="{$package.name}" required pattern="{$patterns.no_white_chars_at_beginning}">
  28. </div>
  29. </div>
  30. <div class="form-group">
  31. <label for="fis1" class="col-sm-3 control-label">{$MGLANG->T('own_zones_per_item')}</label>
  32. <div class="col-sm-9">
  33. <input type="number" class="form-control" id="fis1" name="settings[own_zones_per_item]" value="{$package.setting.own_zones_per_item}" min="1" required/>
  34. </div>
  35. </div>
  36. {*<div class="form-group">
  37. <label for="fis2" class="col-sm-3 control-label">{$MGLANG->T('enable_rdns')}</label>
  38. <div class="col-sm-9 checkbox">
  39. <input type="checkbox" id="fis2" name="settings[enable_rdns]" {if $package.setting.enable_rdns eq 'on'}checked=""{/if}/>
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <label for="fs3" class="col-sm-3 control-label">{$MGLANG->T('allow_multiple_ptr')}</label>
  44. <div class="col-sm-9 checkbox">
  45. <input type="checkbox" id="fs3" name="settings[allow_multiple_ptr]" {if $package.setting.allow_multiple_ptr eq 'on'}checked=""{/if}/>
  46. </div>
  47. </div>*}
  48. <div class="form-group">
  49. <div class="col-sm-12">
  50. <h3>{$MGLANG->T('zone_creation_automation')}</h3>
  51. </div>
  52. </div>
  53. <div class="form-group">
  54. <label for="fs4" class="col-sm-3 control-label">{$MGLANG->T('new_item')}</label>
  55. <div class="col-sm-9 checkbox">
  56. <input type="checkbox" id="fs4" name="settings[zone_automation_new_item]" {if $package.setting.zone_automation_new_item eq 'on'}checked=""{/if}/>
  57. </div>
  58. </div>
  59. <div class="form-group">
  60. <label for="fs5" class="col-sm-3 control-label">{$MGLANG->T('pending_transfer_domain')}</label>
  61. <div class="col-sm-1 checkbox">
  62. <input type="checkbox" id="fs5" name="settings[zone_automation_pending_transfer_domain]" {if $package.setting.zone_automation_pending_transfer_domain eq 'on'}checked=""{/if}/>
  63. </div>
  64. <div class="col-sm-2" id="si1" {if $package.setting.zone_automation_pending_transfer_domain neq 'on'} style="display:none"{/if}>
  65. <select class="select2" name="settings[zone_automation_pending_transfer_domain_time]">
  66. {if $package.setting.zone_automation_pending_transfer_domain_time}
  67. <option value="{$package.setting.zone_automation_pending_transfer_domain_time}" selected>{$package.setting.zone_automation_pending_transfer_domain_time}</option>
  68. {if $package.setting.zone_automation_pending_transfer_domain_time eq 'Pre'}
  69. <option value="After">After</option>
  70. {else}
  71. <option value="Pre">Pre</option>
  72. {/if}
  73. {else}
  74. <option value="Pre">Pre</option>
  75. <option value="After">After</option>
  76. {/if}
  77. </select>
  78. </div>
  79. </div>
  80. <div class="form-group">
  81. <label for="fs5" class="col-sm-3 control-label">{$MGLANG->T('pending_registration_domain')}</label>
  82. <div class="col-sm-1 checkbox">
  83. <input type="checkbox" id="fs6" name="settings[zone_automation_pending_registration_domain]" {if $package.setting.zone_automation_pending_registration_domain eq 'on'}checked=""{/if}/>
  84. </div>
  85. <div class="col-sm-2" id="si2" {if $package.setting.zone_automation_pending_registration_domain neq 'on'} style="display:none"{/if}>
  86. <select class="select2" name="settings[zone_automation_pending_registration_domain_time]">
  87. {if $package.setting.zone_automation_pending_registration_domain_time}
  88. <option value="{$package.setting.zone_automation_pending_registration_domain_time}" selected>{$package.setting.zone_automation_pending_registration_domain_time}</option>
  89. {if $package.setting.zone_automation_pending_registration_domain_time eq 'Pre'}
  90. <option value="After">After</option>
  91. {else}
  92. <option value="Pre">Pre</option>
  93. {/if}
  94. {else}
  95. <option value="Pre">Pre</option>
  96. <option value="After">After</option>
  97. {/if}
  98. </select>
  99. </div>
  100. </div>
  101. <div class="form-group">
  102. <label for="fs7" class="col-sm-3 control-label">{$MGLANG->T('domain_with_dns_management')}</label>
  103. <div class="col-sm-9 checkbox">
  104. <input type="checkbox" id="fs7" name="settings[zone_automation_domain_with_dns_management]" {if $package.setting.zone_automation_domain_with_dns_management eq 'on'}checked=""{/if}/>
  105. </div>
  106. </div>
  107. <div class="form-group">
  108. <label for="fs8" class="col-sm-3 control-label">{$MGLANG->T('update_existed_zone')}</label>
  109. <div class="col-sm-9 checkbox">
  110. <input type="checkbox" id="fs8" name="settings[update_existed_zone]" {if $package.setting.update_existed_zone eq 'on'}checked=""{/if}/>
  111. </div>
  112. </div>
  113. </div>
  114. <!-- ========================================== ITEMS ====================================== -->
  115. <div class="tab-pane" id="items-tab">
  116. <div class="row">
  117. <div class="col-md-12">
  118. <div class="col-md-12">
  119. <h3 class="diblock">{$MGLANG->T('domains')}</h3>
  120. <span class="btn btn-primary btn-inverse btn-xs select-all">{$MGLANG->T('select_all')}</span>
  121. </div>
  122. <table class="table table-striped">
  123. <tbody>
  124. {foreach from=$domains item="four_domains"}
  125. <tr>
  126. {foreach from=$four_domains item="domain"}
  127. <td>
  128. {if $domain neq ''}
  129. {*<label class="checkbox checkbox-inline" {if !in_array($domain.extension, $package_domains) && $domain.packageid neq ''}title="{$MGLANG->T('already_in_package')}{$domain.packagename}" style="cursor: not-allowed;"{/if}><input class="allowedDomain" type="checkbox" name="domains[{$domain.encodedExtension}]" {if in_array($domain.extension, $package_domains)}checked=""{elseif $domain.packageid neq ''}disabled="" data-let-it-go{else}data-let-it-go{/if} /> {$domain.extension}</label>*}
  130. <label class="checkbox checkbox-inline" {if $domain.packageid neq '' && !in_array($domain.id, $package_domains)}title="{$MGLANG->T('already_in_package')}{$domain.packagename}" style="cursor: not-allowed;"{/if}><input class="allowedDomain" type="checkbox" name="domains[{$domain.id}]" {if is_array($package_domains) && in_array($domain.id, $package_domains)}checked=""{elseif $domain.packageid neq ''}disabled="" data-let-it-go{else}data-let-it-go{/if} /> {$domain.extension}</label>
  131. {/if}
  132. </td>
  133. {/foreach}
  134. </tr>
  135. {foreachelse}
  136. <tr><td>{$MGLANG->T('there_is_no_domain_configured_yet')}</td></tr>
  137. {/foreach}
  138. </tbody>
  139. </table>
  140. </div>
  141. </div>
  142. <div class="row">
  143. <div class="col-md-12">
  144. <div class="col-md-12">
  145. <h3 class="diblock">{$MGLANG->T('products')}</h3>
  146. <span class="btn btn-primary btn-inverse btn-xs select-all">{$MGLANG->T('select_all')}</span>
  147. </div>
  148. <table class="table table-striped">
  149. <tbody>
  150. {foreach from=$products item="two_products"}
  151. <tr>
  152. {foreach from=$two_products item="product"}
  153. <td style="width: 50%;">
  154. {if $product neq ''}
  155. <label class="checkbox checkbox-inline" {if $product.packageid neq '' && !in_array($product.id, $package_products)}title="{$MGLANG->T('already_in_package')}{$product.packagename}" style="cursor: not-allowed;"{/if}><input type="checkbox" name="products[{$product.id}]" {if is_array($package_products) && in_array($product.id, $package_products)}checked=""{elseif $product.packageid neq ''}disabled="" data-let-it-go{else}data-let-it-go{/if}/> {$product.name}</label>
  156. {/if}
  157. </td>
  158. {/foreach}
  159. </tr>
  160. {foreachelse}
  161. <tr><td>{$MGLANG->T('there_is_no_product_configured_yet')}</td></tr>
  162. {/foreach}
  163. </tbody>
  164. </table>
  165. </div>
  166. </div>
  167. <div class="row">
  168. <div class="col-md-12">
  169. <div class="col-md-12">
  170. <h3 class="diblock">{$MGLANG->T('products_addons')}</h3>
  171. <span class="btn btn-primary btn-inverse btn-xs select-all">{$MGLANG->T('select_all')}</span>
  172. </div>
  173. <table class="table table-striped">
  174. <tbody>
  175. {foreach from=$addons item="two_addons"}
  176. <tr>
  177. {foreach from=$two_addons item="addon"}
  178. <td style="width: 50%;">
  179. {if $addon neq ''}
  180. <label class="checkbox checkbox-inline" {if $addon.packageid neq '' && !in_array($addon.id, $package_addons)}title="{$MGLANG->T('already_in_package')}{$addon.packagename}" style="cursor: not-allowed;"{/if}><input type="checkbox" name="addons[{$addon.id}]" {if is_array($package_addons) && in_array($addon.id, $package_addons)}checked=""{elseif $addon.packageid neq ''}disabled="" data-let-it-go{else}data-let-it-go{/if}/> {$addon.name}</label>
  181. {/if}
  182. </td>
  183. {/foreach}
  184. </tr>
  185. {foreachelse}
  186. <tr><td>{$MGLANG->T('there_is_no_product_addon_configured_yet')}</td></tr>
  187. {/foreach}
  188. </tbody>
  189. </table>
  190. </div>
  191. </div>
  192. <div class="row">
  193. <div class="col-md-12">
  194. <div class="col-md-12">
  195. <h3 class="diblock">{$MGLANG->T('other')}</h3>
  196. </div>
  197. <table class="table table-striped">
  198. <tbody>
  199. <tr>
  200. <td><label class="checkbox checkbox-inline checkbox-other" {if !empty($others) neq '' && $others.packageid neq $package.id}title="{$MGLANG->T('already_in_package')}{$others.packagename}" style="cursor: not-allowed;"{/if}><input type="checkbox" name="other[0]" {if $others.packageid eq $package.id && !empty($others)}checked=""{elseif !empty($others)}disabled="" data-let-it-go{else}data-let-it-go{/if} /> {$MGLANG->T('allow_to_create_own_zones')}</label></td>
  201. </tr>
  202. </tbody>
  203. </table>
  204. </div>
  205. </div>
  206. </div>
  207. <!-- ========================================== SERVER ====================================== -->
  208. <div class="tab-pane" id="server-tab">
  209. <div class="row">
  210. <div class="col-md-12">
  211. <table class="table table-striped package-servers-table">
  212. <thead>
  213. <tr>
  214. <th>{$MGLANG->T('name')}</th>
  215. <th>{$MGLANG->T('type')}</th>
  216. <th>{$MGLANG->T('packages')}</th>
  217. <th>{$MGLANG->T('rdns')}</th>
  218. <th>{$MGLANG->T('multiple_ptr')}</th>
  219. <th>{$MGLANG->T('status')}</th>
  220. <th>{$MGLANG->T('masterServer')}</th>
  221. <th></th>
  222. </tr>
  223. </thead>
  224. <tbody>
  225. <tr class="nobody-is-here" {if count($package.servers)}style="display: none;"{/if}>
  226. <td colspan="7" class="text-center">{$MGLANG->T('there_is_no_server_added_to_this_package')}</td>
  227. </tr>
  228. {foreach from=$package.servers item="ps" key="k"}
  229. {assign var="server" value=$ps->getServer()}
  230. <tr>
  231. <td>{$server->name}</td>
  232. <td>{$server->module}</td>
  233. <td>{$server_packages[$k]}</td>
  234. <td>{if $server->getSettings('allow_rdns') eq 'on'}<span class="label label-success">{$MGLANG->T('enabled')}</span>{else}<span class="label label-danger">{$MGLANG->T('disabled')}</span>{/if}</td>
  235. <td>{if $server->getSettings('allow_multiple_ptr') eq 'on'}<span class="label label-success">{$MGLANG->T('enabled')}</span>{else}<span class="label label-danger">{$MGLANG->T('disabled')}</span>{/if}</td>
  236. <td>{if $server->status eq 1}<span class="label label-success">{$MGLANG->T('enabled')}</span>{else}<span class="label label-danger">{$MGLANG->T('disabled')}</span>{/if}</td>
  237. <td>
  238. <div class="radio">
  239. <label>
  240. <input type="radio" {if $ps->isMaster == true}checked="checked"{/if} name="isMaster" id="isMaster" value="{$server->id}"/>
  241. </label>
  242. </div>
  243. </td>
  244. <td>
  245. <input type="hidden" name="servers[]" value="{$server->id}" />
  246. <a class="btn btn-danger btn-inverse" onclick="$(this).parents('.tab-pane').first().append('<input type=\'hidden\' name=\'servers_delete[]\' value=\'{$server->id}\' />'); removeServerRow($(this), {$server->id});" title="{$MGLANG->T('remove')}"><span class="glyphicon glyphicon-remove"></span></a>
  247. </td>
  248. </tr>
  249. {/foreach}
  250. </tbody>
  251. </table>
  252. </div>
  253. </div>
  254. <div class="row">
  255. <div class="col-md-5 col-xs-9">
  256. <select class="select2" name="add_server">
  257. {foreach from=$servers item="server"}
  258. <option value="{$server->id}" {if in_array($server->id, $package.servers_keys)}disabled{/if} >{$server->name}</option>
  259. {/foreach}
  260. </select>
  261. </div>
  262. <div class="col-md-7 col-xs-3">
  263. <a class="btn btn-success btn-inverse" data-act="addPackageServer" data-formid="server-tab" data-do-not-close-the-modal="" title="{$MGLANG->T('add_server')}"><span class="glyphicon glyphicon-plus"></span></a>
  264. </div>
  265. </div>
  266. </div>
  267. <!-- ========================================== RECORDS ====================================== -->
  268. <div class="tab-pane" id="records-tab">
  269. <div class="form-group">
  270. <div class="col-sm-12">
  271. <h3>{$MGLANG->T('restrictions')}</h3>
  272. </div>
  273. </div>
  274. <div class="form-group">
  275. <label for="fs8" class="col-sm-3 control-label">{$MGLANG->T('allow_record_types')}</label>
  276. <div class="col-sm-9">
  277. <select name="allowed_record_types[]" id="allowedRecordTypes" multiple="" class="select2" id="fs8">
  278. {foreach from=$available_record_types item="record"}
  279. <option value="{$record}" {if in_array($record, $package.setting.allowed_record_types_keys) == true}selected=""{/if}>{$record}</option>
  280. {/foreach}
  281. </select>
  282. <ul class="list-group" id="DNSRecordValidationAlert" style="word-wrap:break-word;">
  283. </ul>
  284. </div>
  285. </div>
  286. <div class="form-group">
  287. <div class="col-sm-12">
  288. <h3>{$MGLANG->T('records_limit')}</h3>
  289. </div>
  290. </div>
  291. <div class="form-group">
  292. <label for="fs9" class="col-sm-3 control-label">{$MGLANG->T('total')}</label>
  293. <div class="col-sm-9">
  294. <input type="number" class="form-control" id="fs9" name="record_limit" value="{$record_limit}" min="1" required/>
  295. </div>
  296. </div>
  297. <div class="row reords-limit">
  298. <div class="template hidden">
  299. <div class="col-sm-4 col-xs-6 record-:record_name:">
  300. <div class="form-group">
  301. <label for="rl:number:" class="col-md-5 col-xs-3 control-label">:record_name:</label>
  302. <div class="col-md-7 col-xs-9">
  303. <input type="number" class="form-control" id="rl:number:" name=":name:" min="-1" value="1">
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. {foreach from=$package.setting.allowed_record_types item="record_limit" key="record_name" name="rfor"}
  309. <div class="col-md-4 record-{$record_name}">
  310. <div class="form-group">
  311. <label for="rl{$smarty.foreach.rfor.index}" class="col-md-5 col-sm-3 control-label">{$record_name}</label>
  312. <div class="col-md-7 col-sm-9">
  313. <input type="number" class="form-control" id="rl{$smarty.foreach.rfor.index}" name="settings[allowed_record_types][{$record_name}]" min="-1" value="{$record_limit}">
  314. </div>
  315. </div>
  316. </div>
  317. {/foreach}
  318. </div>
  319. <div class="form-group">
  320. <div class="col-sm-12">
  321. <h3>{$MGLANG->T('default_ttl')}</h3>
  322. </div>
  323. </div>
  324. <div class="row reords-limit-default-ttl">
  325. <div class="template hidden">
  326. <div class="col-sm-4 col-xs-6 record-:record_name:">
  327. <div class="form-group">
  328. <label class="col-md-5 col-xs-3 control-label">:record_name:</label>
  329. <div class="col-md-7 col-xs-9">
  330. <input type="number" class="form-control" name=":name:" min="-1" value="14440">
  331. </div>
  332. </div>
  333. </div>
  334. </div>
  335. {foreach from=$package.setting.default_ttl item="default_ttl" key="record_name" name="rfor"}
  336. <div class="col-md-4 record-{$record_name}">
  337. <div class="form-group">
  338. <label class="col-md-5 col-sm-3 control-label">{$record_name}</label>
  339. <div class="col-md-7 col-sm-9">
  340. <input type="number" class="form-control" name="settings[default_ttl][{$record_name}]" min="-1" value="{$default_ttl}">
  341. </div>
  342. </div>
  343. </div>
  344. {/foreach}
  345. </div>
  346. <div class="form-group">
  347. <div class="col-sm-12">
  348. <h3>{$MGLANG->T('dns_record_sets')}</h3>
  349. </div>
  350. </div>
  351. <div class="form-group">
  352. <label for="fs10" class="col-sm-3 control-label">{$MGLANG->T('default_dns_record_set')}</label>
  353. <div class="col-sm-9">
  354. <select name="default_dns_record_set" class="select2" id="fs10">
  355. <option value="">{$MGLANG->T('none')}</option>
  356. {foreach from=$sets item="set"}
  357. <option value="{$set->id}" {if $set->id eq $package.defaultset}selected=""{/if}>{$set->name}</option>
  358. {/foreach}
  359. </select>
  360. </div>
  361. </div>
  362. <div class="form-group">
  363. <label for="fs11" class="col-sm-3 control-label">{$MGLANG->T('dns_record_sets')}</label>
  364. <div class="col-sm-9">
  365. <select name="settings[dns_record_set][]" class="select2" id="fs11" multiple="">
  366. {foreach from=$sets item="set"}
  367. <option value="{$set->id}" {if in_array($set->id, $package.setting.dns_record_set)}selected=""{/if}>{$set->name}</option>
  368. {/foreach}
  369. </select>
  370. </div>
  371. </div>
  372. <div class="form-group" style="display: none;">
  373. <label for="fs12" class="col-sm-3 control-label">{$MGLANG->T('client_can_use_sets')}</label>
  374. <div class="col-sm-9 checkbox">
  375. <input type="checkbox" id="fs12" name="settings[client_can_use_sets]" {if $package.setting.client_can_use_sets == 'on'}checked=""{/if} onchange="$(this).parents('.tab-pane').first().find('.allowed-sets').toggle($(this).is(':checked'));" />
  376. </div>
  377. </div>
  378. <div class="form-group allowed-sets" style="display: none;" {*{if $package.setting.client_can_use_sets neq 'on'}style="display: none;"{/if}*}>
  379. <label for="fs13" class="col-sm-3 control-label">{$MGLANG->T('allowed_sets')}</label>
  380. <div class="col-sm-9">
  381. <select name="available_dns_record_sets[]" id="fs13" class="select2" multiple="">
  382. {foreach from=$sets item="set"}
  383. <option value="{$set->id}" {if in_array($set->id, $package_sets)}selected=""{/if} >{$set->name}</option>
  384. {/foreach}
  385. </select>
  386. </div>
  387. </div>
  388. </div>
  389. <!-- ========================================== REGISTRARS ====================================== -->
  390. <div class="tab-pane" id="registrars-tab">
  391. <div class="row">
  392. <div class="col-md-12">
  393. <div class="alert alert-info" role="alert">{$MGLANG->T('registrarsDescription')}</div>
  394. {if $mocksNotReadable || $functionsNotWritable}
  395. <ul class="list-group">
  396. <li class="list-group-item list-group-item-danger">
  397. {$MGLANG->T('to_enable_the_feature')}:<br />
  398. {if $mocksNotReadable}
  399. {$MGLANG->T('please_set')} {$mocksPath} {$MGLANG->T('directory_as')} {$MGLANG->T('readable')}<br />
  400. {/if}
  401. {if $functionsNotWritable}
  402. {$MGLANG->T('please_set')} {$functionsPath} {$MGLANG->T('directory_as')} {$MGLANG->T('writable')}<br />
  403. {/if}
  404. </li>
  405. </ul>
  406. {/if}
  407. <div class="col-md-12">
  408. <h3 class="diblock">{$MGLANG->T('registrars')}</h3>
  409. <span class="btn btn-primary btn-xs btn-inverse select-all">{$MGLANG->T('select_all')}</span>
  410. </div>
  411. <table class="table table-striped">
  412. <tbody>
  413. {foreach from=$domains item="four_domains"}
  414. <tr>
  415. {foreach from=$four_domains item="domain"}
  416. <td {if !in_array($domain.extension, $avalibleRegistrarDomains)} class="hidden" {/if}>
  417. {if $domain}
  418. <label class="checkbox checkbox-inline"><input type="checkbox" name="registrarDomain[{$domain.id}]" {if in_array($domain.id, $registrarDomains)} checked {/if} /> {$domain.extension}</label>
  419. {/if}
  420. </td>
  421. {/foreach}
  422. </tr>
  423. {foreachelse}
  424. <tr><td>{$MGLANG->T('there_is_no_domain_configured_yet')}</td></tr>
  425. {/foreach}
  426. </tbody>
  427. </table>
  428. </div>
  429. </div>
  430. </div>
  431. <!-- ========================================== NOTIFICATIONS ====================================== -->
  432. <div class="tab-pane" id="notifications-tab">
  433. <div class="form-group">
  434. <div class="col-sm-12">
  435. <h3>{$MGLANG->T('client_notifications')}</h3>
  436. </div>
  437. </div>
  438. <div class="form-group">
  439. <label for="fs13" class="col-sm-3 control-label">{$MGLANG->T('zone_created')}</label>
  440. <div class="col-sm-9 checkbox">
  441. <input type="checkbox" id="fs13" name="settings[client_notification_zone_created]" {if $package.setting.client_notification_zone_created == 'on'}checked=""{/if}/>
  442. </div>
  443. </div>
  444. <div class="form-group">
  445. <label for="fs14" class="col-sm-3 control-label">{$MGLANG->T('zone_altered')}</label>
  446. <div class="col-sm-9 checkbox">
  447. <input type="checkbox" id="fs14" name="settings[client_notification_zone_altered]" {if $package.setting.client_notification_zone_altered == 'on'}checked=""{/if}/>
  448. </div>
  449. </div>
  450. <div class="form-group">
  451. <label for="fs15" class="col-sm-3 control-label">{$MGLANG->T('zone_removed')}</label>
  452. <div class="col-sm-9 checkbox">
  453. <input type="checkbox" id="fs15" name="settings[client_notification_zone_removed]" {if $package.setting.client_notification_zone_removed == 'on'}checked=""{/if}/>
  454. </div>
  455. </div>
  456. <div class="form-group">
  457. <div class="col-sm-12">
  458. <h3>{$MGLANG->T('admin_notifications')}</h3>
  459. </div>
  460. </div>
  461. <div class="form-group">
  462. <label for="fs16" class="col-sm-3 control-label">{$MGLANG->T('cron_synchronization')}</label>
  463. <div class="col-sm-9 checkbox">
  464. <input type="checkbox" id="fs16" name="settings[admin_notification_cron_synchronizator]" {if $package.setting.admin_notification_cron_synchronizator == 'on'}checked=""{/if}/>
  465. </div>
  466. </div>
  467. <div class="form-group">
  468. <label for="fs17" class="col-sm-3 control-label">{$MGLANG->T('cron_migrator')}</label>
  469. <div class="col-sm-9 checkbox">
  470. <input type="checkbox" id="fs17" name="settings[admin_notification_cron_migrator]" {if $package.setting.admin_notification_cron_migrator == 'on'}checked=""{/if}/>
  471. </div>
  472. </div>
  473. <div class="form-group">
  474. <label for="fs18" class="col-sm-3 control-label">{$MGLANG->T('cron_cleaner')}</label>
  475. <div class="col-sm-9 checkbox">
  476. <input type="checkbox" id="fs18" name="settings[admin_notification_cron_cleaner]" {if $package.setting.admin_notification_cron_cleaner == 'on'}checked=""{/if}/>
  477. </div>
  478. </div>
  479. </div>
  480. <!-- ========================================== ALLOWED IPS ====================================== -->
  481. <div class="tab-pane" id="allowed-ips-tab">
  482. <div class="alert alert-info" role="alert">{$MGLANG->T('allowedIpsDescription')}</div>
  483. <div class="form-group">
  484. <div class="col-sm-12">
  485. <h3>{$MGLANG->T('allowed_ips')}</h3>
  486. </div>
  487. </div>
  488. <div class="form-group">
  489. <div class="w-100 col-sm-12">
  490. <textarea class="form-control" rows="10" id="fs19" name="settings[allowed_ips]" placeholder="192.168.0.1, 192.168.0.2, 192.168.0.3, 10.0.0.0/22">{$package.setting.allowed_ips}</textarea>
  491. </div>
  492. </div>
  493. <div class="form-group">
  494. <label for="allowedIpRecords" class="col-sm-2 control-label" style="text-align: left;">{$MGLANG->T('allowedIpRecords')}</label>
  495. <div class="col-sm-1 checkbox">
  496. <input type="checkbox" id="allowedIpRecords" name="allowedIpRecords" {if $package.setting.records_allowed_ip == 'on'}checked=""{/if}/>
  497. </div>
  498. </div>
  499. </div>
  500. <!-- ========================================== IP BLACKLIST ====================================== -->
  501. <div class="tab-pane" id="ip-blacklist-tab">
  502. <div class="alert alert-info" role="alert">{$MGLANG->T('ipBlacklistDescription')}</div>
  503. <div class="form-group">
  504. <div class="col-sm-12">
  505. <h3>{$MGLANG->T('ip_blacklist')}</h3>
  506. </div>
  507. </div>
  508. <div class="form-group">
  509. <div class="w-100 col-sm-12">
  510. <textarea class="form-control" rows="10" id="fs20" name="settings[ip_blacklist]" placeholder="192.168.0.1, 192.168.0.2, 192.168.0.3, 10.0.0.0/22">{$package.setting.ip_blacklist}</textarea>
  511. </div>
  512. </div>
  513. <div class="form-group">
  514. <label for="blacklistIpRecords" class="col-sm-2 control-label" style="text-align: left;">{$MGLANG->T('blacklistIpRecords')}</label>
  515. <div class="col-sm-1 checkbox">
  516. <input type="checkbox" id="blacklistIpRecords" name="blacklistIpRecords" {if $package.setting.records_blacklist == 'on'}checked=""{/if}/>
  517. </div>
  518. </div>
  519. </div>
  520. </div>
  521. </form>
  522. </div>
  523. <div class="modal-footer" style="text-align: left">
  524. <button type="button" class="btn btn-default" data-dismiss="modal">{$MGLANG->T('close')}</button>
  525. {if $edit}
  526. <button type="button" class="btn btn-primary btn-inverse" data-act="packageSave">{$MGLANG->T('save_changes')}</button>
  527. {else}
  528. <button type="button" class="btn btn-primary btn-inverse" data-act="packageSave">{$MGLANG->T('add')}</button>
  529. {/if}
  530. </div>
  531. </div><!-- /.modal-content -->
  532. </div><!-- /.modal-dialog -->
  533. </div><!-- /.modal -->
  534. {literal}
  535. <script>
  536. allowedRegistarTlds = [ {/literal}{foreach from=$domainsWithoutNativeDnsSupport item='tld'}'{$tld}', {/foreach}{literal} ];
  537. </script>
  538. <style type="text/css">
  539. .diblock {
  540. display: inline-block;
  541. }
  542. .mg-wrapper span.select-all {
  543. display: inline-block;
  544. margin-bottom: 4px;
  545. }
  546. </style>
  547. <script data-cfasync="false" type="text/javascript">
  548. (function($) {
  549. $(document).ready( function() {
  550. $('.select-all').click(function() {
  551. var chBox = $(this).parents('.row').first().find(':checkbox:not(:disabled):not(:checked)');
  552. if(chBox.length == 0){
  553. $(this).parents('.row').first().find(':checkbox:not(:disabled)').prop('checked', false).iCheck('update');
  554. }else{
  555. $(this).parents('.row').first().find(':checkbox:not(:disabled)').prop('checked', true).iCheck('update');
  556. var changedList = $(this).parents('.row').first().find(':checkbox:not(:disabled)');
  557. var firstName = changedList.first().prop('name');
  558. if(firstName.indexOf('domains') === 0)
  559. {
  560. $.each( changedList, function(key, value){
  561. DNSShowRegistrarTld(value);
  562. });
  563. }
  564. }
  565. });
  566. $('.allowedDomain').on('ifToggled', function() {
  567. DNSShowRegistrarTld(this);
  568. });
  569. DNSStartServerValidation();
  570. $('#allowedRecordTypes').on('change', $('#allowedRecordTypes'), function(){
  571. DNSStartServerValidation();
  572. });
  573. });
  574. })(jQuery);
  575. function DNSGetValuesToArray(list){
  576. var valList = [];
  577. $.each( list, function(key, value){
  578. valList[key] = $(value).val();
  579. });
  580. return valList;
  581. }
  582. function DNSStartServerValidation(){
  583. DNSRemoveServerValidationAllerts();
  584. DNSRemoveRecordValidationAllerts();
  585. var recordTypesList = $('#allowedRecordTypes').val();
  586. var selectedServersList = DNSGetValuesToArray($("input[name='servers[]']"));
  587. if(selectedServersList.length>0 && recordTypesList!==null){
  588. DNSValidateServersBySupportedRecords(recordTypesList, selectedServersList);
  589. }
  590. }
  591. function DNSValidateServersBySupportedRecords(records, servers)
  592. {
  593. JSONParser.request(
  594. 'validateServersByRecords',
  595. [
  596. {name: 'recordsTypes', value: records},
  597. {name: 'servers', value: servers}
  598. ],
  599. function(data){
  600. var validationContent1 = '';
  601. $.each( data, function(key, value){
  602. var row = '';
  603. row += '<li class="list-group-item list-group-item-danger">';
  604. row += '{/literal}{$MGLANG->absoluteT('addonAA', 'settings', 'Server')}{literal} ' + value.serverName +
  605. ' {/literal}{$MGLANG->absoluteT('addonAA', 'settings', 'does not support')}{literal} ';
  606. if(value.unsuportedRecords.length > 1){
  607. row += '{/literal}{$MGLANG->absoluteT('addonAA', 'settings', 'records')}{literal}: ';
  608. }else{
  609. row += '{/literal}{$MGLANG->absoluteT('addonAA', 'settings', 'record')}{literal}: ';
  610. }
  611. row += value.unsuportedRecords;
  612. row += '</li>';
  613. var tableRow = '<tr name="DNSServerRecordValidationRow"><td colspan="7" style="padding: 0px 0px 0px 0px;"><ul class="list-group" style="margin-bottom:0px;">';
  614. tableRow += row;
  615. tableRow += '</ul></td></tr>';
  616. validationContent1 += row;
  617. DNSAddServerValidationAllert(value.serverId, tableRow);
  618. });
  619. $('#DNSRecordValidationAlert').html(validationContent1);
  620. }
  621. );
  622. }
  623. function DNSAddServerValidationAllert(serverId, dataRow){
  624. var list = $("input[name='servers[]']");
  625. $.each( list, function(key, value){
  626. if($(value).val() == serverId){
  627. $(value).parents('tr').after(dataRow);
  628. }
  629. });
  630. }
  631. function DNSRemoveServerValidationAllerts(){
  632. var list = $("tr[name='DNSServerRecordValidationRow']");
  633. $.each( list, function(key, value){
  634. $(value).remove();
  635. });
  636. }
  637. function DNSRemoveRecordValidationAllerts(){
  638. $('#DNSRecordValidationAlert').html('');
  639. }
  640. function DNSShowRegistrarTld(allowItem)
  641. {
  642. var name = jQuery(allowItem).prop('name');
  643. var newName = name.replace('domains','registrarDomain');
  644. var domain = name.substring(8, (name.length -1));
  645. if($.inArray(domain, allowedRegistarTlds) === -1){
  646. return false;
  647. }
  648. var domainReg = $("input[name='"+newName+"']");
  649. if($(allowItem).prop('checked')){
  650. $(domainReg).parent().parent().parent().removeClass('hidden');
  651. }else{
  652. $(domainReg).iCheck('uncheck');
  653. $(domainReg).parent().parent().parent().addClass('hidden');
  654. }
  655. }
  656. jQuery('input[name="settings[zone_automation_pending_transfer_domain]"]').change(function(){
  657. if(this.checked == true)
  658. {
  659. jQuery('#si1').show();
  660. }
  661. else
  662. {
  663. jQuery('#si1').hide();
  664. }
  665. });
  666. jQuery('input[name="settings[zone_automation_pending_registration_domain]"]').change(function(){
  667. if(this.checked == true)
  668. {
  669. jQuery('#si2').show();
  670. }
  671. else
  672. {
  673. jQuery('#si2').hide();
  674. }
  675. });
  676. jQuery('input[name*="settings[allowed_record_types]"]').keyup(function(){
  677. records = jQuery('input[name*="settings[allowed_record_types]"]');
  678. limit = jQuery('input[name="record_limit"]');
  679. count = 0;
  680. records.each(function(key,value){
  681. if(value.value)
  682. {
  683. count = count+parseInt(value.value);
  684. }
  685. });
  686. if(count > limit.val())
  687. {
  688. limit.css('border','1px solid red');
  689. }
  690. else
  691. {
  692. limit.css('border','');
  693. }
  694. });
  695. jQuery('button[data-act="packageSave"]').click(function(ev){
  696. records = jQuery('input[name*="settings[allowed_record_types]"]');
  697. limit = jQuery('input[name="record_limit"]');
  698. name = jQuery('input[name="name"]');
  699. count = 0;
  700. records.each(function(key,value){
  701. if(value.value)
  702. {
  703. count = count+parseInt(value.value);
  704. }
  705. });
  706. if(count > limit.val())
  707. {
  708. $('a[href="#records-tab"]').trigger('click');
  709. ev.stopPropagation();
  710. limit.css('border','1px solid red');
  711. }else if(jQuery('input[name="name"]').val() == ""){
  712. $('a[href="#general-tab"]').trigger('click');
  713. ev.stopPropagation();
  714. jQuery('input[name="name"]').css('border','1px solid red');
  715. }
  716. if(!name.length)
  717. {
  718. console.log('eeerr2');
  719. ev.stopPropagation();
  720. name.css('border','1px solid red');
  721. }
  722. });
  723. </script>
  724. {/literal}