html.js 25 KB

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