html.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. App.HTML.setTplKeys = function (tpl, o, empty) {
  2. var empty = empty || '';
  3. fb.log(empty);
  4. tpl.set(':source', $.toJSON(o).replace(/'/gi, "\\'"))
  5. $(o).each(function (i, object) {
  6. $.each(o, function (key) {
  7. var val = o[key];
  8. if (empty == true) {
  9. tpl.set(':' + key, val || '');
  10. } else {
  11. tpl.set(':' + key, val || '');
  12. }
  13. });
  14. });
  15. return tpl;
  16. }
  17. //
  18. // BUILD FORMS
  19. //
  20. App.HTML.Build.dns_form = function (options, id) {
  21. if ('undefined' == typeof App.Env.initialParams) {
  22. return alert('Please wait a bit. Some background processes are not yet executed. Thank you for patience.');
  23. }
  24. var tpl = App.Templates.get('FORM', 'dns');
  25. tpl.set(':source', options);
  26. options = App.Helpers.evalJSON(options) || {};
  27. if (App.Helpers.isEmpty(options)) {
  28. tpl.set(':title', 'New dns domain');
  29. tpl.set(':save_button', 'ADD');
  30. tpl.set(':DELETE_ACTION', '');
  31. } else {
  32. tpl.set(':title', 'Edit dns domain');
  33. tpl.set(':save_button', 'SAVE');
  34. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  35. }
  36. tpl.set(':id', id || '');
  37. tpl.set(':DNS_DOMAIN', options.DNS_DOMAIN || '');
  38. tpl.set(':IP', options.IP || '');
  39. tpl.set(':TTL', options.TTL || '');
  40. tpl.set(':SOA', options.SOA || '');
  41. tpl.set(':DATE', options.DATE || '');
  42. tpl = App.HTML.Build.dns_selects(tpl, options);
  43. tpl = App.HTML.toggle_suspended_form(tpl, options);
  44. return tpl.finalize();
  45. }
  46. App.HTML.Build.ip_form = function (options, id) {
  47. if ('undefined' == typeof App.Env.initialParams) {
  48. return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
  49. }
  50. var tpl = App.Templates.get('FORM', 'ip');
  51. tpl.set(':source', options);
  52. options = App.Helpers.evalJSON(options) || {};
  53. if (App.Helpers.isEmpty(options)) {
  54. tpl.set(':title', 'New ip address');
  55. tpl.set(':save_button', 'ADD');
  56. tpl.set(':DELETE_ACTION', '');
  57. } else {
  58. tpl.set(':title', 'Edit ip address');
  59. tpl.set(':save_button', 'SAVE');
  60. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  61. }
  62. tpl.set(':id', id || '');
  63. tpl.set(':IP_ADDRESS', options.IP_ADDRESS || '');
  64. tpl.set(':NETMASK', options.NETMASK || '');
  65. tpl.set(':NAME', options.NAME || '');
  66. tpl = App.HTML.Build.ip_selects(tpl, options);
  67. tpl = App.HTML.toggle_suspended_form(tpl, options);
  68. return tpl.finalize();
  69. }
  70. App.HTML.Build.user_form = function (options, id) {
  71. var in_edit = false;
  72. if (!App.Helpers.isEmpty(options)) {
  73. in_edit = true;
  74. }
  75. if ('undefined' == typeof App.Env.initialParams) {
  76. return alert('Please wait a bit. Some background processes are not yet executed. Thank you for patience.');
  77. }
  78. var tpl = App.Templates.get('FORM', 'user');
  79. tpl.set(':source', options);
  80. tpl.set(':id', id || '');
  81. options = App.Helpers.evalJSON(options) || {};
  82. if (App.Helpers.isEmpty(options)) {
  83. tpl.set(':title', 'New user');
  84. tpl.set(':save_button', 'ADD');
  85. tpl.set(':DELETE_ACTION', '');
  86. } else {
  87. tpl.set(':title', 'Edit user');
  88. tpl.set(':save_button', 'SAVE');
  89. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  90. }
  91. options = !App.Helpers.isEmpty(options) ? options : App.Empty.USER;
  92. if (in_edit == true) {
  93. options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
  94. var ns = [];
  95. $([3, 4, 5, 6, 7, 8]).each(function (i, index) {
  96. if (options['NS' + index].trim() != '') {
  97. var tpl_ns = App.Templates.get('NS_INPUT', 'user');
  98. tpl_ns.set(':NS_LABEL', 'Name Server #' + (index));
  99. tpl_ns.set(':NAME', options['NS' + index]);
  100. ns[ns.length++] = tpl_ns.finalize();
  101. }
  102. });
  103. ns[ns.length++] = App.Templates.get('PLUS_ONE_NS', 'user').finalize();
  104. tpl.set(':NS', ns.done());
  105. } else {
  106. tpl.set(':NS', '');
  107. }
  108. tpl = App.HTML.setTplKeys(tpl, options, true);
  109. tpl = App.HTML.Build.user_selects(tpl, options);
  110. tpl = App.HTML.toggle_suspended_form(tpl, options);
  111. if (options.REPORTS_ENABLED == 'yes') {
  112. tpl.set(':CHECKED', 'checked="checked"');
  113. } else {
  114. tpl.set(':CHECKED', '');
  115. }
  116. if (!in_edit) {
  117. tpl.set(':REPORTS_ENABLED_EDITABLE', 'hidden');
  118. }
  119. return tpl.finalize();
  120. }
  121. App.HTML.Build.web_domain_form = function (options, id) {
  122. if ('undefined' == typeof App.Env.initialParams) {
  123. return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
  124. }
  125. var in_edit = false;
  126. if (!App.Helpers.isEmpty(options)) {
  127. in_edit = true;
  128. }
  129. var tpl = App.Templates.get('FORM', 'web_domain');
  130. tpl.set(':source', options);
  131. tpl.set(':id', id || '');
  132. options = App.Helpers.evalJSON(options) || {};
  133. if (App.Helpers.isEmpty(options)) {
  134. tpl.set(':title', 'New WEB domain');
  135. tpl.set(':save_button', 'ADD');
  136. tpl.set(':DELETE_ACTION', '');
  137. } else {
  138. tpl.set(':title', 'Edit WEB domain');
  139. tpl.set(':save_button', 'SAVE');
  140. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  141. if (options.SSL == 'yes') {
  142. tpl.set(':ssl_checked', 'checked="checked"');
  143. }
  144. else {
  145. tpl.set(':ssl_checked', '');
  146. }
  147. }
  148. options = !App.Helpers.isEmpty(options) ? options : App.Empty.WEB_DOMAIN;
  149. if (in_edit == true) {
  150. options.STATS_PASSWORD = options.STATS_LOGIN.trim() != '' ? App.Settings.PASSWORD_IMMUTE : '';
  151. }
  152. tpl = App.HTML.setTplKeys(tpl, options, true);
  153. tpl = App.HTML.Build.web_domain_selects(tpl, options);
  154. tpl = App.HTML.toggle_suspended_form(tpl, options);
  155. if (options.CGI == 'yes') {
  156. tpl.set(':CHECKED_CGI', 'checked="checked"');
  157. }
  158. if (options.ELOG == 'yes') {
  159. tpl.set(':CHECKED_ELOG', 'checked="checked"');
  160. }
  161. if (options.STATS_LOGIN.trim() != '') {
  162. tpl.set(':STAT_AUTH', 'checked="checked"');
  163. tpl.set(':ACTIVE_LOGIN', '');
  164. tpl.set(':ACTIVE_PASSWORD', '');
  165. tpl.set(':stats_auth_checked', 'checked="checked"');
  166. } else {
  167. tpl.set(':ACTIVE_LOGIN', 'hidden');
  168. tpl.set(':ACTIVE_PASSWORD', 'hidden');
  169. tpl.set(':stats_auth_checked', '');
  170. }
  171. return tpl.finalize();
  172. }
  173. App.HTML.Build.db_form = function (options, id) {
  174. var in_edit = false;
  175. if (!App.Helpers.isEmpty(options)) {
  176. in_edit = true;
  177. }
  178. if ('undefined' == typeof App.Env.initialParams) {
  179. return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
  180. }
  181. var tpl = App.Templates.get('FORM', 'db');
  182. tpl.set(':source', options);
  183. tpl.set(':id', id || '');
  184. options = App.Helpers.evalJSON(options) || {};
  185. if (App.Helpers.isEmpty(options)) {
  186. tpl.set(':title', 'New database');
  187. tpl.set(':save_button', 'ADD');
  188. tpl.set(':DELETE_ACTION', '');
  189. } else {
  190. tpl.set(':title', 'Edit database "' + options.DB + '"');
  191. tpl.set(':save_button', 'SAVE');
  192. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  193. }
  194. options = !App.Helpers.isEmpty(options) ? options : App.Empty.DB;
  195. if (in_edit == true) {
  196. options.PASSWORD = App.Settings.PASSWORD_IMMUTE;
  197. }
  198. tpl = App.HTML.setTplKeys(tpl, options, true);
  199. tpl = App.HTML.Build.db_selects(tpl, options);
  200. tpl = App.HTML.toggle_suspended_form(tpl, options);
  201. return tpl.finalize();
  202. }
  203. App.HTML.Build.cron_form = function (options, id) {
  204. if ('undefined' == typeof App.Env.initialParams) {
  205. return alert('PLease wait a bit. Some background processes are not yet executed. Thank you for patience.');
  206. }
  207. var tpl = App.Templates.get('FORM', 'cron');
  208. tpl.set(':source', options);
  209. tpl.set(':id', id || '');
  210. options = App.Helpers.evalJSON(options) || {};
  211. if (App.Helpers.isEmpty(options)) {
  212. tpl.set(':title', 'New cron job');
  213. tpl.set(':save_button', 'ADD');
  214. tpl.set(':DELETE_ACTION', '');
  215. } else {
  216. tpl.set(':title', 'Edit cron job');
  217. tpl.set(':save_button', 'SAVE');
  218. tpl.set(':DELETE_ACTION', App.Templates.get('DELETE_ACTION', 'general').finalize());
  219. }
  220. options = !App.Helpers.isEmpty(options) ? options : {
  221. DAY: '',
  222. MONTH: '',
  223. WDAY: '',
  224. HOUR: '',
  225. CMD: '',
  226. MIN: ''
  227. };
  228. tpl = App.HTML.setTplKeys(tpl, options);
  229. tpl = App.HTML.toggle_suspended_form(tpl, options);
  230. return tpl.finalize();
  231. }
  232. //
  233. // BUILD ENTRIES
  234. //
  235. App.HTML.Build.ip_entry = function (o) {
  236. var tpl = App.Templates.get('ENTRY', 'ip');
  237. tpl = App.HTML.setTplKeys(tpl, o);
  238. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  239. return tpl.finalize();
  240. }
  241. App.HTML.Build.dns_entry = function (o, is_new) {
  242. var tpl = App.Templates.get('ENTRY', 'dns');
  243. tpl = App.HTML.setTplKeys(tpl, o);
  244. var ip = o.IP.split('.');
  245. tpl.set(':IP', ip.join('<span class="dot">.</span>'));
  246. tpl.set(':CHECKED', '');
  247. if (is_new) {
  248. var now = new Date();
  249. tpl.set(':DATE', now.format("d.mm.yyyy"));
  250. }
  251. tpl.set(':TPL_VAL', o.TPL);
  252. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  253. return tpl.finalize();
  254. }
  255. App.HTML.Build.user_entry = function (o, key) {
  256. var processed_data = {
  257. 'NICKNAME': key,
  258. 'U_DISK_PERCENTAGE': o.U_DISK > 0 ? parseFloat(o.U_DISK / o.DISK_QUOTA * 100).toFixed(2) : 1,
  259. 'U_BANDWIDTH_PERCENTAGE': o.U_BANDWIDTH > 0 ? parseFloat(o.U_BANDWIDTH / o.BANDWIDTH * 100).toFixed(2) : 1,
  260. 'U_DISK': o.U_DISK == 0 ? 1 : App.Helpers.formatNumber(o.U_DISK),
  261. 'U_BANDWIDTH': o.U_BANDWIDTH == 0 ? 1 : App.Helpers.formatNumber(o.U_BANDWIDTH),
  262. 'DISK_QUOTA_MEASURE': App.Helpers.getMbHumanMeasure(o.DISK_QUOTA),
  263. 'BANDWIDTH_MEASURE': App.Helpers.getMbHumanMeasure(o.BANDWIDTH),
  264. 'BANDWIDTH': App.Helpers.getMbHuman(o.BANDWIDTH),
  265. 'DISK_QUOTA': App.Helpers.getMbHuman(o.DISK_QUOTA)
  266. };
  267. var o = $.extend(o, processed_data);
  268. o.U_DISK_PERCENTAGE_2 = o.U_DISK_PERCENTAGE;
  269. o.U_DISK_PERCENTAGE_3 = o.U_DISK_PERCENTAGE;
  270. o.BANDWIDTH_MEASURE_2 = o.BANDWIDTH_MEASURE;
  271. o.DISK_QUOTA_MEASURE_2 = o.DISK_QUOTA_MEASURE;
  272. o.U_BANDWIDTH_PERCENTAGE_2 = o.U_BANDWIDTH_PERCENTAGE;
  273. o.U_BANDWIDTH_PERCENTAGE_3 = o.U_BANDWIDTH_PERCENTAGE;
  274. var tpl = App.Templates.get('ENTRY', 'user');
  275. tpl = App.HTML.setTplKeys(tpl, o);
  276. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  277. var ns = [];
  278. var ns_full = [];
  279. $([1, 2, 3, 4, 5, 6, 7, 8]).each(function (i, index) {
  280. var key = 'NS' + index;
  281. if ('undefined' != typeof o[key]) {
  282. if (o[key].trim() != '') {
  283. var tpl_ns = App.Templates.get('NS_RECORD', 'user');
  284. tpl_ns.set(':NAME', o[key]);
  285. var tpl_finalized = tpl_ns.finalize();
  286. ns_full[ns_full.length++] = tpl_finalized;
  287. if (i < App.Settings.USER_VISIBLE_NS) {
  288. ns[ns.length++] = tpl_finalized;
  289. }
  290. }
  291. }
  292. });
  293. if (ns_full.length <= App.Settings.USER_VISIBLE_NS) {
  294. tpl.set(':NS', ns.done());
  295. }
  296. else {
  297. var ns_custom = App.Templates.get('NS_MINIMIZED', 'user');
  298. ns_custom.set(':NS_MINI', ns.done());
  299. ns_custom.set(':NS_FULL', ns_full.done());
  300. ns_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - ns_full.length));
  301. tpl.set(':NS', ns_custom.finalize());
  302. }
  303. tpl = App.HTML.Build.user_web_tpl(tpl, o);
  304. tpl.set(':REPORTS_ENABLED', o.REPORTS_ENABLED == 'yes' ? 'enabled' : 'DISABLED');
  305. if (o.U_DISK_PERCENTAGE > 100) {
  306. var tpl_over = App.Templates.get('over_bar', 'general');
  307. var difference = parseInt(o.U_DISK_PERCENTAGE, 10) - 100;
  308. tpl_over.set(':OVER_PERCENTS', difference);
  309. tpl_over.set(':OVER_PERCENTS_2', difference);
  310. tpl.set(':OVER_BAR', tpl_over.finalize());
  311. tpl.set(':U_DISK_PERCENTAGE_3', 100);
  312. tpl.set(':OVER_DRAFT_VALUE', 'overdraft');
  313. }
  314. else {
  315. tpl.set(':OVER_BAR', '');
  316. tpl.set(':OVER_DRAFT_VALUE', '');
  317. }
  318. if (o.U_BANDWIDTH_PERCENTAGE > 100) {
  319. var tpl_over = App.Templates.get('over_bar', 'general');
  320. var difference = parseInt(o.U_BANDWIDTH_PERCENTAGE, 10) - 100;
  321. tpl_over.set(':OVER_PERCENTS', difference);
  322. tpl_over.set(':OVER_PERCENTS_2', difference);
  323. tpl.set(':OVER_BAR_2', tpl_over.finalize());
  324. tpl.set(':U_BANDWIDTH_PERCENTAGE_3', 100);
  325. tpl.set(':OVER_DRAFT_VALUE_2', 'overdraft');
  326. }
  327. else {
  328. tpl.set(':OVER_BAR_2', '');
  329. tpl.set(':OVER_DRAFT_VALUE_2', '');
  330. }
  331. return tpl.finalize();
  332. }
  333. App.HTML.Build.web_domain_entry = function (o, key) {
  334. var processed_data = {
  335. DOMAIN: key,
  336. 'U_DISK_PERCENTAGE': o.U_DISK > 0 ? parseFloat(o.U_DISK / App.Env.initialParams.user_data.DISK_QUOTA * 100).toFixed(2) : 1,
  337. 'U_BANDWIDTH_PERCENTAGE': o.U_BANDWIDTH > 0 ? parseFloat(o.U_BANDWIDTH / App.Env.initialParams.user_data.BANDWIDTH * 100).toFixed(2) : 1,
  338. 'U_DISK': o.U_DISK == 0 ? 1 : App.Helpers.formatNumber(o.U_DISK),
  339. 'U_BANDWIDTH': o.U_BANDWIDTH == 0 ? 1 : App.Helpers.formatNumber(o.U_BANDWIDTH),
  340. 'DISK_QUOTA_MEASURE': App.Helpers.getMbHumanMeasure(App.Env.initialParams.user_data.DISK_QUOTA),
  341. 'BANDWIDTH_MEASURE': App.Helpers.getMbHumanMeasure(App.Env.initialParams.user_data.BANDWIDTH),
  342. 'BANDWIDTH': App.Helpers.getMbHuman(App.Env.initialParams.user_data.BANDWIDTH),
  343. 'DISK_QUOTA': App.Helpers.getMbHuman(App.Env.initialParams.user_data.DISK_QUOTA)
  344. };
  345. var o = $.extend(o, processed_data);
  346. o.U_DISK_PERCENTAGE_2 = o.U_DISK_PERCENTAGE;
  347. o.U_DISK_PERCENTAGE_3 = o.U_DISK_PERCENTAGE;
  348. o.BANDWIDTH_MEASURE_2 = o.BANDWIDTH_MEASURE;
  349. o.DISK_QUOTA_MEASURE_2 = o.DISK_QUOTA_MEASURE;
  350. o.U_BANDWIDTH_PERCENTAGE_2 = o.U_BANDWIDTH_PERCENTAGE;
  351. o.U_BANDWIDTH_PERCENTAGE_3 = o.U_BANDWIDTH_PERCENTAGE;
  352. var tpl = App.Templates.get('ENTRY', 'web_domain');
  353. tpl = App.HTML.setTplKeys(tpl, o);
  354. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  355. if (o.STATS_LOGIN.trim() != '') {
  356. tpl.set(':STATS_AUTH', '+auth');
  357. }
  358. else {
  359. tpl.set(':STATS_AUTH', '');
  360. }
  361. tpl.set(':DISK', App.Env.initialParams.PROFILE.BANDWIDTH);
  362. tpl.set(':BANDWIDTH', App.Env.initialParams.PROFILE.DISK);
  363. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  364. return tpl.finalize();
  365. }
  366. App.HTML.Build.mail_entry = function (o, key) {
  367. var processed_data = {
  368. DOMAIN: key
  369. };
  370. var o = $.extend(o, processed_data);
  371. var tpl = App.Templates.get('ENTRY', 'mail');
  372. tpl = App.HTML.setTplKeys(tpl, o);
  373. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  374. return tpl.finalize();
  375. }
  376. App.HTML.Build.db_entry = function (o, key) {
  377. var user_list_html = [];
  378. $(o['USERS']).each(function (i, o) {
  379. var tpl = App.Templates.get('USER_ITEM', 'db');
  380. tpl.set(':NAME', o);
  381. user_list_html.push(tpl.finalize());
  382. });
  383. var wrapper = App.Templates.get('USER_ITEMS_WRAPPER', 'db');
  384. wrapper.set(':CONTENT', user_list_html.done());
  385. var processed_data = {
  386. 'USER_LIST': wrapper.finalize(),
  387. 'USERS': o['USERS'].length || 0,
  388. 'U_DISK_PERCENTAGE': o.U_DISK > 0 ? o.U_DISK / o.DISK * 100 : 0.01,
  389. 'DISK_MEASURE': App.Helpers.getMbHumanMeasure(o.DISK),
  390. 'DISK': App.Helpers.getMbHuman(o.DISK)
  391. };
  392. var o = $.extend(o, processed_data);
  393. var tpl = App.Templates.get('ENTRY', 'db');
  394. tpl = App.HTML.setTplKeys(tpl, o);
  395. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  396. return tpl.finalize();
  397. }
  398. App.HTML.Build.cron_entry = function (o, key) {
  399. var processed_data = {
  400. DOMAIN: key
  401. };
  402. var o = $.extend(o, processed_data);
  403. var tpl = App.Templates.get('ENTRY', 'cron');
  404. tpl = App.HTML.setTplKeys(tpl, o);
  405. tpl = App.HTML.toggle_suspended_entry(tpl, o);
  406. return tpl.finalize();
  407. }
  408. //
  409. // GENERAL METHODS
  410. //
  411. App.HTML.Build.backup_list = function(backups)
  412. {
  413. if (!backups || backups.length == 0) {
  414. return '<br /><br /><center><h1>Backups are not available</h1></center>';
  415. }
  416. var acc = [];
  417. $.each(backups, function(key) {
  418. var bckp = backups[key];
  419. // generated time calc
  420. var generated_time = 1; //min
  421. bckp.RUNTIME > 60 ? generated_time = bckp.RUNTIME / 60 + ' h.' : generated_time += ' m.';
  422. var created_date = new Date(key);
  423. var tpl = App.Templates.get('ENTRY', 'backup');
  424. tpl.set(':CREATED_AT', key);
  425. tpl.set(':CREATED_AT_TIME', bckp.TIME);
  426. tpl.set(':GENERATION_TIME', generated_time);
  427. tpl.set(':OWNER', App.Env.initialParams.auth_user.uid.uid);
  428. tpl.set(':CREATED_AT_WDAY', App.Constants.KEY.WDAYS[created_date.getDay()]);
  429. tpl.set(':SIZE', App.Helpers.getMbHuman(bckp.SIZE) + ' ' + App.Helpers.getMbHuman(bckp.SIZE, true));
  430. acc[acc.length++] = tpl.finalize()
  431. });
  432. var wrap = App.Templates.get('WRAPPER', 'backup');
  433. wrap.set(':CONTENT', acc.done());
  434. return wrap.finalize();
  435. }
  436. App.HTML.Build.stats_list = function(stats)
  437. {
  438. if (!stats || stats.length == 0) {
  439. return '<br /><br /><center><h1>Stats are not available</h1></center>';
  440. }
  441. var acc = [];
  442. $.each(stats, function(key) {
  443. var stat = stats[key];
  444. var tpl = App.Templates.get('ENTRY', 'stats');
  445. tpl.set(':HEADER', stat.TITLE);
  446. tpl.set(':IMG_SRC', stat.SRC);
  447. acc[acc.length++] = tpl.finalize()
  448. });
  449. var wrap = App.Templates.get('WRAPPER', 'backup');
  450. wrap.set(':CONTENT', acc.done());
  451. return wrap.finalize();
  452. }
  453. //
  454. // HANDY METHODS
  455. //
  456. App.HTML.toggle_suspended_form = function(tpl, options)
  457. {
  458. if (App.Constants.SUSPENDED_YES == options.SUSPEND) {
  459. tpl.set(':SUSPENDED_CHECKED', 'checked="checked"');
  460. tpl.set(':FORM_SUSPENDED', 'form-suspended');
  461. tpl.set(':SUSPENDED_VALUE', 'on');
  462. } else {
  463. tpl.set(':SUSPENDED_CHECKED', '');
  464. tpl.set(':FORM_SUSPENDED', '');
  465. tpl.set(':SUSPENDED_VALUE', 'off');
  466. }
  467. return tpl;
  468. }
  469. App.HTML.toggle_suspended_entry = function(tpl, options)
  470. {
  471. if (App.Constants.SUSPENDED_YES == options.SUSPEND) {
  472. var sub_tpl = App.Templates.get('SUSPENDED_TPL_SUSPENDED', 'general');
  473. tpl.set(':SUSPENDED_CLASS', 'inactive-row');
  474. } else {
  475. var sub_tpl = App.Templates.get('SUSPENDED_TPL_NOT_SUSPENDED', 'general');
  476. tpl.set(':SUSPENDED_CLASS', '');
  477. }
  478. tpl.set(':SUSPENDED_TPL', sub_tpl.finalize());
  479. return tpl;
  480. }
  481. App.HTML.makeDatabases = function (databases) {
  482. var acc = [];
  483. $(databases).each(function (i, o) {
  484. var tpl = App.Templates.get('database', 'database');
  485. tpl.set(':name', o.Database);
  486. tpl.set(':db_name', o.Database);
  487. acc[acc.length++] = tpl.finalize();
  488. });
  489. return acc.done();
  490. }
  491. App.HTML.makeDbTableList = function (data) {
  492. var acc = [];
  493. $(data).each(function (i, o) {
  494. var name = App.Helpers.getFirstValue(o);
  495. var tpl = App.Templates.get('database_table', 'database');
  496. tpl.set(':name', name);
  497. tpl.set(':table_name', name);
  498. acc[acc.length++] = tpl.finalize();
  499. });
  500. return acc.done();
  501. }
  502. App.HTML.makeDbFieldsList = function (data) {
  503. var acc = [];
  504. $(data).each(function (i, o) {
  505. var details = [o['Type'], o['Null'], o['Key'], o['Default'], o['Extra']].join(' ');
  506. var tpl = App.Templates.get('database_field', 'database');
  507. tpl.set(':name', o.Field);
  508. tpl.set(':details', details);
  509. acc[acc.length++] = tpl.finalize();
  510. });
  511. return acc.done();
  512. }
  513. App.HTML.Build.options = function (initial, default_value) {
  514. var opts = [];
  515. $.each(initial, function (key) {
  516. var selected = key == default_value ? 'selected="selected"' : '';
  517. opts[opts.length++] = '<option value="' + key + '" ' + selected + '>' + initial[key] + '</options>';
  518. });
  519. return opts.join('');
  520. }
  521. App.HTML.Build.dns_records = function (records) {
  522. var acc = [];
  523. $.each(records, function (i, record) {
  524. var record = records[i];
  525. var tpl = App.HTML.Build.dns_subrecord(record);
  526. acc[acc.length++] = tpl.finalize();
  527. });
  528. return acc.done();
  529. }
  530. App.HTML.Build.dns_subrecord = function (record) {
  531. var tpl = App.Templates.get('SUBENTRY', 'dns');
  532. tpl.set(':RECORD', record.RECORD || '');
  533. tpl.set(':RECORD_VALUE', record.RECORD_VALUE || '');
  534. tpl.set(':RECORD_ID', record.RECORD_ID || '');
  535. tpl.set(':RECORD_TYPE', App.HTML.Build.options(App.Env.initialParams.DNS.record.RECORD_TYPE, (record.RECORD_TYPE || -1)));
  536. return tpl;
  537. }
  538. App.HTML.Build.ssl_key_file = function () {
  539. return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=key" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>';
  540. }
  541. App.HTML.Build.ssl_cert_file = function () {
  542. return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=cert" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>';
  543. }
  544. App.HTML.Build.ssl_ca_file = function () {
  545. return '<iframe src="' + App.Helpers.getUploadUrl() + '?action=show&type=ca" width="500px;" height="53px;" framevorder="0" scroll="no">..</iframe>';
  546. }
  547. App.HTML.Build.user_selects = function (tpl, options) {
  548. var acc = [];
  549. var pkg = App.Env.initialParams.USERS.PACKAGE;
  550. $.each(pkg, function (val) {
  551. var tpl = App.Templates.get('select_option', 'general');
  552. tpl.set(':VALUE', val);
  553. tpl.set(':TEXT', pkg[val]);
  554. tpl.set(':SELECTED', val == options.PACKAGE ? 'selected="selected"' : '');
  555. acc[acc.length++] = tpl.finalize();
  556. });
  557. tpl.set(':PACKAGE_OPTIONS', acc.done());
  558. acc = [];
  559. var shell = App.Env.initialParams.USERS.SHELL;
  560. $.each(shell, function (val) {
  561. var tpl = App.Templates.get('select_option', 'general');
  562. tpl.set(':VALUE', val);
  563. tpl.set(':TEXT', shell[val]);
  564. tpl.set(':SELECTED', val == options.SHELL ? 'selected="selected"' : '');
  565. acc[acc.length++] = tpl.finalize();
  566. });
  567. tpl.set(':SHELL_OPTIONS', acc.done());
  568. return tpl;
  569. }
  570. App.HTML.Build.db_selects = function (tpl, options) {
  571. var acc = [];
  572. var items = App.Env.initialParams.DB.TYPE;
  573. $.each(items, function (val) {
  574. var tpl = App.Templates.get('select_option', 'general');
  575. tpl.set(':VALUE', val);
  576. tpl.set(':TEXT', items[val]);
  577. tpl.set(':SELECTED', val == options.TYPE ? 'selected="selected"' : '');
  578. acc[acc.length++] = tpl.finalize();
  579. });
  580. tpl.set(':TYPE_OPTIONS', acc.done());
  581. acc = [];
  582. var items = App.Env.initialParams.DB.HOST;
  583. $.each(items, function (val) {
  584. var tpl = App.Templates.get('select_option', 'general');
  585. tpl.set(':VALUE', val);
  586. tpl.set(':TEXT', items[val]);
  587. tpl.set(':SELECTED', val == options.HOST ? 'selected="selected"' : '');
  588. acc[acc.length++] = tpl.finalize();
  589. });
  590. tpl.set(':HOST_OPTIONS', acc.done());
  591. acc = [];
  592. var items = App.Env.initialParams.DB.ENCODING;
  593. $.each(items, function (val) {
  594. var tpl = App.Templates.get('select_option', 'general');
  595. tpl.set(':VALUE', val);
  596. tpl.set(':TEXT', items[val]);
  597. tpl.set(':SELECTED', val == options.ENCODING ? 'selected="selected"' : '');
  598. acc[acc.length++] = tpl.finalize();
  599. });
  600. tpl.set(':ENCODING_OPTIONS', acc.done());
  601. return tpl;
  602. }
  603. App.HTML.Build.ip_selects = function (tpl, options) {
  604. var users = App.Env.initialParams.IP.OWNER;
  605. var opts = App.HTML.Build.options(users, options.OWNER);
  606. tpl.set(':owner_options', opts);
  607. var opts = App.HTML.Build.options(App.Env.initialParams.IP.STATUSES, options.STATUS);
  608. tpl.set(':status_options', opts);
  609. var opts = App.HTML.Build.options(App.Env.initialParams.IP.INTERFACES, options.INTERFACE);
  610. tpl.set(':interface_options', opts);
  611. return tpl;
  612. }
  613. App.HTML.Build.dns_selects = function (tpl, options) {
  614. try {
  615. var obj = {};
  616. $.each(App.Env.initialParams.DNS.TPL, function (key) {
  617. obj[key] = key;
  618. });
  619. var opts = App.HTML.Build.options(obj, options.PACKAGE);
  620. tpl.set(':TPL', opts);
  621. tpl.set(':TPL_DEFAULT_VALUE', options.TPL || App.Helpers.getFirstKey(obj));
  622. } catch (e) {
  623. return tpl;
  624. }
  625. return tpl;
  626. }
  627. App.HTML.Build.web_domain_selects = function (tpl, options) {
  628. try {
  629. var obj = App.Env.initialParams.WEB_DOMAIN.IP;
  630. var opts = App.HTML.Build.options(obj, options.IP);
  631. tpl.set(':IP_OPTIONS', opts);
  632. var obj = {};
  633. $.each(App.Env.initialParams.WEB_DOMAIN.TPL, function (key) {
  634. obj[key] = key;
  635. });
  636. var opts = App.HTML.Build.options(obj, options.TPL);
  637. tpl.set(':TPL_OPTIONS', opts);
  638. var obj = App.Env.initialParams.WEB_DOMAIN.STAT;
  639. var opts = App.HTML.Build.options(obj, options.STAT);
  640. tpl.set(':STAT_OPTIONS', opts);
  641. } catch (e) {
  642. return tpl;
  643. }
  644. return tpl;
  645. }
  646. App.HTML.Build.user_web_tpl = function (tpl, o) {
  647. var wt = [];
  648. var wt_full = [];
  649. var templates = o.WEB_TPL;
  650. templates = templates.split(',');
  651. if (templates.length == 0) {
  652. templates = templates.split(' ');
  653. }
  654. $(templates).each(function (i, web_tpl) {
  655. var tpl_wt = App.Templates.get('WEB_TPL', 'user');
  656. tpl_wt.set(':NAME', web_tpl);
  657. var tpl_finalized = tpl_wt.finalize();
  658. wt_full[wt_full.length++] = tpl_finalized;
  659. if (i < App.Settings.USER_VISIBLE_WEB_TPL) {
  660. wt[wt.length++] = tpl_finalized;
  661. }
  662. });
  663. if (templates.length <= App.Settings.USER_VISIBLE_NS) {
  664. tpl.set(':WEB_TPL', wt.done());
  665. } else {
  666. var wt_custom = App.Templates.get('WEB_TPL_MINIMIZED', 'user');
  667. wt_custom.set(':WEB_TPL_MINI', wt.done());
  668. wt_custom.set(':WEB_TPL_FULL', wt_full.done());
  669. wt_custom.set(':MORE_NUMBER', Math.abs(App.Settings.USER_VISIBLE_NS - wt_full.length));
  670. tpl.set(':WEB_TPL', wt_custom.finalize());
  671. }
  672. return tpl;
  673. }