actions.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767
  1. App.Actions.toggle_ssl_support = function(evt, elm)
  2. {
  3. if (!elm) {
  4. var elm = $(evt.target);
  5. }
  6. var ref = elm.hasClass('form') ? elm : elm.parents('.form');
  7. fb.log(ref);
  8. if (ref.find('.ssl_support').attr('checked')) {
  9. $('.ssl-crtfct-box', ref).removeClass('hidden');
  10. }
  11. else {
  12. $('.ssl-crtfct-box', ref).addClass('hidden');
  13. }
  14. }
  15. App.Actions.view_nginx_extensions = function(evt)
  16. {
  17. var elm = $(evt.target);
  18. var ref = elm.hasClass('row') ? elm : elm.parents('.row');
  19. var data = App.Helpers.evalJSON(ref.find('.source').val());
  20. var extensions = data['NGINX_EXT'] || '';
  21. var html = extensions.replace(/,/gi, ' ');
  22. App.Helpers.openInnerPopup(elm, html, 'Nginx extensions');
  23. }
  24. App.Actions.login_as = function(evt)
  25. {
  26. var elm = $(evt.target);
  27. var ref = elm.parents('.row');
  28. var source = App.Helpers.evalJSON($(ref).find('.source').val())
  29. App.Ajax.request('USER.loginAs', {'user': source.LOGIN_NAME}, function(reply) {
  30. if (reply.result) {
  31. location.href = "";
  32. }
  33. else {
  34. App.Helpers.alert('You cannot do this action. Please contact support');
  35. }
  36. });
  37. }
  38. App.Actions.toggle_suspend = function(evt)
  39. {
  40. var elm = $(evt.target);
  41. var ref = elm.parents('.form');
  42. ref.removeClass('form-suspended');
  43. fb.warn(ref);
  44. var ref_checkbox = ref.find('input[name="SUSPEND"]');
  45. ref_checkbox.val() == 'on' ? ref_checkbox.val('off') : ref_checkbox.val('on'); // switch state
  46. if (ref_checkbox.val() == 'on') { // set class on new state
  47. ref.addClass('form-suspended');
  48. fb.warn('SUSP');
  49. }
  50. else {
  51. ref.removeClass('form-suspended');
  52. fb.warn('UNSUSP');
  53. }
  54. }
  55. App.Actions.toggle_custom_select = function(evt)
  56. {
  57. var elm = $(evt.target);
  58. elm = elm.hasClass('complex-select') ? elm : elm.parents('.complex-select');
  59. var ref = elm.find('.complex-select-content');
  60. $('.s-c-highlighted').removeClass('s-c-highlighted');
  61. if (ref.hasClass('hidden')) {
  62. ref.removeClass('hidden');
  63. App.Tmp.focusedComplexSelect = elm;
  64. }
  65. else {
  66. ref.addClass('hidden');
  67. }
  68. }
  69. App.Actions.update_cs_value = function(evt)
  70. {
  71. var elm = $(evt.target);
  72. elm = elm.hasClass('cust-sel-option') ? elm : elm.parents('.cust-sel-option');
  73. var val = elm.find('.c-s-value').val();
  74. $('.complex-select-content').addClass('hidden');
  75. if (val.toLowerCase() == 'nothing') {
  76. App.Actions.mass_nothing();
  77. return;
  78. }
  79. if (App.Tmp[App.Env.world + '_selected_records'] > 0) {
  80. var confirm_message_key = App.Tmp[App.Env.world + '_selected_records'] == 1 ? 1 + ' record' : App.Tmp[App.Env.world + '_selected_records'] + ' records';
  81. var confirmed = confirm('This action will ' + val.toLowerCase() + ' ' + confirm_message_key + '. Do you want to proceed?');
  82. if (confirmed) {
  83. fb.log('mass_' + val);
  84. var func_name = val.toLowerCase();
  85. 'function' == typeof App.Actions['mass_' + func_name] ? App.Actions['mass_' + func_name]() : false;
  86. }
  87. }
  88. }
  89. App.Actions.mass_delete = function()
  90. {
  91. App.Actions.mass_action('massiveDelete');
  92. App.Actions.reset_batch();
  93. }
  94. App.Actions.mass_suspend = function()
  95. {
  96. App.Actions.mass_action('massiveSuspend');
  97. App.Actions.reset_batch();
  98. }
  99. App.Actions.mass_unsuspend = function()
  100. {
  101. App.Actions.mass_action('massiveUnsuspend');
  102. App.Actions.reset_batch();
  103. }
  104. App.Actions.mass_nothing = function()
  105. {
  106. $('.complex-select-content').addClass('hidden');
  107. }
  108. App.Actions.mass_action = function(method_name)
  109. {
  110. var rows = $('.checked-row');
  111. if (rows.length > 0) {
  112. var acc = [];
  113. rows.each(function(i, o) {
  114. acc[acc.length++] = App.Helpers.evalJSON($(o).find('.source').val());
  115. });
  116. App.Ajax.request(App.Env.world+'.'+method_name, {'entities': App.Helpers.toJSON(acc)}, function() {
  117. App.Pages.prepareHTML();
  118. });
  119. }
  120. }
  121. App.Actions.reset_batch = function()
  122. {
  123. $('#batch-processor .selector-title').html('NONE');
  124. $('.styled.do_action_toggle_batch_selector.style-applied').attr('checked', false);
  125. $('.checkbox.do_action_toggle_batch_selector').css('background-position', '0 0');
  126. }
  127. App.Actions.do_change_password = function()
  128. {
  129. var params = {
  130. login: $('#change-login').val(),
  131. captcha: $('#captcha').val()
  132. }
  133. App.Ajax.request('MAIN.requestPassword', params, function(reply){
  134. $('#captcha-img').attr('src', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999));
  135. $('#captcha').val('');
  136. if (reply.result) {
  137. $('#change-psw-error').html('');
  138. $('#change-psw-error').addClass('hidden');
  139. $('#change-psw-success').html('Reset link was sent to email box provided by you.');
  140. $('#change-psw-success').removeClass('hidden');
  141. $('.form-row').remove();
  142. }
  143. else {
  144. $('#change-psw-error').html(reply.message);
  145. $('#change-psw-error').removeClass('hidden');
  146. }
  147. });
  148. }
  149. App.Actions.back_to_login = function()
  150. {
  151. $('body').addClass('page-auth');
  152. var tpl = App.Templates.get('login', 'popup');
  153. tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
  154. tpl.set(':YEAR', new Date().getFullYear());
  155. tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
  156. tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
  157. tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
  158. tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
  159. $('body').prepend(tpl.finalize());
  160. $('#change-psw-block').remove();
  161. $('.remember-me').checkBox();
  162. }
  163. App.Actions.change_password = function(evt)
  164. {
  165. evt.preventDefault();
  166. if ($('#change-psw-block').length > 0) {
  167. return $('#change-psw-block').show();
  168. }
  169. var tpl = App.Templates.get('change_psw', 'popup');
  170. tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
  171. tpl.set(':YEAR', new Date().getFullYear());
  172. tpl.set(':CAPTCHA_URL', App.Helpers.generateUrl('captcha.php?')+Math.floor(Math.random() * 9999));
  173. tpl.set(':CAPTCHA_URL_2', App.Helpers.generateUrl('captcha.php'));
  174. tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
  175. tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
  176. tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
  177. tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
  178. $('#auth-block').remove();
  179. $('body').prepend(tpl.finalize());
  180. $('#change-psw-error').html('');
  181. $('#change-psw-error').addClass('hidden');
  182. }
  183. App.Actions.profile_exit = function(evt)
  184. {
  185. evt.preventDefault();
  186. if (App.Env.initialParams.real_user) { // exit "logged in as" state
  187. App.Ajax.request('USER.logoutAs', {}, function(reply) {
  188. if (reply.result) {
  189. location.href = "";
  190. }
  191. else {
  192. App.Helpers.alert('You cannot do this action. Please contact support');
  193. }
  194. });
  195. return;
  196. }
  197. App.Ajax.request('MAIN.logoff', {}, function(reply) {
  198. location.href = '';
  199. });
  200. }
  201. // show auth form
  202. App.Actions.authorize = function()
  203. {
  204. $('#change-psw-block').remove();
  205. if ($('#auth-block').length > 0) {
  206. return;
  207. }
  208. $('#page').addClass('hidden');
  209. $('body').addClass('page-auth');
  210. var tpl = App.Templates.get('login', 'popup');
  211. tpl.set(':LOGO_URL', App.Helpers.generateUrl('images/vesta-logo-2011-12-14.png'));
  212. tpl.set(':YEAR', new Date().getFullYear());
  213. tpl.set(':EMAIL_REAL', App.Settings.VestaAbout.company_email);
  214. tpl.set(':EMAIL', App.Settings.VestaAbout.company_email);
  215. tpl.set(':PRODUCT_NAME', App.Settings.VestaAbout.company_name);
  216. tpl.set(':VERSION', App.Settings.VestaAbout.version_name + ' ' + App.Settings.VestaAbout.version);
  217. $('body').prepend(tpl.finalize());
  218. $(document).ready(function(){
  219. $('.remember-me').checkBox();
  220. });
  221. }
  222. /**
  223. * Embeds new item form
  224. * if exits custom method (App.Pages[ENVIRONMENT_NAME].newForm)
  225. * custom method will be executes instead of default one
  226. */
  227. App.Actions.new_entry = function() {
  228. if ('undefined' != typeof App.Pages[App.Env.world].new_entry) {fb.log(1);
  229. App.Pages[App.Env.world].new_entry();
  230. } else {
  231. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  232. $('#'+form_id).remove();
  233. var build_method = App.Env.getWorldName() + '_form';
  234. var tpl = App.HTML.Build[build_method]({}, form_id);
  235. var box = $('<div>').html(tpl);
  236. $(box).find('.suspended').addClass('hidden');
  237. App.Ref.CONTENT.prepend($(box).html());
  238. App.Helpers.updateScreen();
  239. }
  240. $('.cust-checkbox').checkBox();
  241. }
  242. // execute authorisation
  243. App.Actions.do_authorize = function()
  244. {
  245. $('#auth-error').text('');
  246. $('#auth-form-content').hide();
  247. App.Ajax.request('MAIN.signin', {'login':$('#authorize-login').val(), 'password':$('#authorize-password').val()}, function(reply)
  248. {
  249. if (reply.result == true) {
  250. location.href = '';
  251. }
  252. else {
  253. $('#auth-error').text(reply.data.error_msg);
  254. $('#auth-form-content').show();
  255. $('#auth-error').removeClass('hidden');
  256. }
  257. });
  258. }
  259. App.Actions.delete_entry = function(evt)
  260. {
  261. var confirmed = confirm(App.i18n.getMessage('confirm'));
  262. if (!confirmed) {
  263. return;
  264. }
  265. var elm = $(evt.target);
  266. var elm = elm.hasClass('form') ? elm : elm.parents('.form');
  267. App.Model.remove(App.Env.world, elm);
  268. }
  269. App.Actions.show_subform = function(evt)
  270. {
  271. var elm = $(evt.target);
  272. var ref = elm.hasClass('row') ? elm : elm.parents('.row');
  273. var ref_subform = ref.next('.subform');
  274. if (ref_subform.length > 0) {
  275. ref_subform.remove();
  276. }
  277. if ('undefined' != typeof App.Pages[App.Env.world].showSubform) {
  278. App.Pages[App.Env.world].showSubform(ref);
  279. }
  280. // TODO: probably general way to embed subforms
  281. }
  282. App.Actions.view_template_settings = function(evt)
  283. {
  284. var elm = $(evt.target);
  285. var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
  286. var tpl_name = $(ref).val() || $(ref).text();
  287. App.Helpers.openInnerPopup(elm, App.Env.initialParams.WEB_DOMAIN.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
  288. }
  289. App.Actions.view_dns_template_settings = function(evt)
  290. {
  291. var elm = $(evt.target);
  292. var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
  293. var tpl_name = $(ref).val() || $(ref).text();
  294. App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
  295. }
  296. /*App.Actions.view_dns_template_settings = function(evt)
  297. {
  298. var elm = $(evt.target);
  299. var ref = elm.prev('.tpl-item');
  300. var tpl_name = $(ref).val() || $(ref).text();
  301. App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, '');
  302. }*/
  303. App.Actions.add_subrecord_dns = function(evt)
  304. {
  305. var elm = $(evt.target);
  306. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  307. if (ref.length > 0) {
  308. var tpl = App.HTML.Build.dns_subrecord({});
  309. ref.find('.add-box').after(tpl.finalize());
  310. App.Helpers.updateScreen();
  311. }
  312. }
  313. // do_action_save
  314. App.Actions.save_form = function(evt) {
  315. var elm = $(evt.target);
  316. elm = elm.parents('.b-new-entry');
  317. var elm_id = App.Env.world + '_FORM_ID';
  318. var build_method = App.Env.getWorldName() + '_entry';
  319. if (!App.Validate.form(App.Env.world, elm)) {
  320. return App.Validate.displayFormErrors(App.Env.world, elm);
  321. }
  322. if (elm.attr('id') == App.Constants[elm_id]) { // NEW ITEM
  323. if ($('.b-new-entry').length > 1) {
  324. var confirmed = confirm('You were editing other entries and those changes will be discarded. Click cancel if you want to save updated entries before adding new one.');
  325. if (!confirmed) {
  326. return true;
  327. }
  328. }
  329. var values = App.Helpers.getFormValues(elm);
  330. if(App.Validate.form(values, $('#'+elm_id))) {
  331. App.Model.add(values, source);
  332. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  333. $('#'+form_id).remove();
  334. }
  335. }
  336. else { // OLD ITEM, UPDATING IT
  337. var source = $(elm).find('.source').val();
  338. var values = App.Helpers.getFormValues(elm);
  339. if(App.Validate.form(values, $('#'+elm_id))) {
  340. App.Model.update(values, source, elm);
  341. }
  342. }
  343. }
  344. // do_action_edit
  345. App.Actions.edit = function(evt)
  346. {
  347. if ('undefined' != typeof App.Pages[App.Env.world].edit) {
  348. App.Pages[App.Env.world].edit(evt);
  349. }
  350. else {
  351. var elm = $(evt.target);
  352. elm = elm.hasClass('row') ? elm : elm.parents('.row');
  353. var options = elm.find('.source').val();
  354. var build_method = App.Env.getWorldName() + '_form';
  355. var tpl = App.HTML.Build[build_method](options);
  356. elm.replaceWith(tpl);
  357. App.Helpers.disableNotEditable();
  358. App.Helpers.updateScreen();
  359. }
  360. $('.cust-checkbox').checkBox();
  361. }
  362. // do_cancel_form
  363. App.Actions.cancel_form = function(evt, params) {
  364. var elm = $(evt.target);
  365. elm = elm.parents('.b-new-entry');
  366. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  367. if (elm.attr('id') == form_id) {
  368. $('#' + form_id).remove();
  369. }
  370. else {
  371. fb.warn(elm.find('.source').val());
  372. var options = App.Helpers.evalJSON(elm.find('.source').val());
  373. var entry_name = App.Env.world.toLowerCase() + '_entry';
  374. var tpl = App.HTML.Build[entry_name](options);
  375. elm.replaceWith(tpl);
  376. }
  377. App.Helpers.updateScreen();
  378. }
  379. App.Actions.suspend = function(evt)
  380. {
  381. var confirmed = confirm('Suspend?');
  382. if (!confirmed) {
  383. return ;
  384. }
  385. var elm = $(evt.target);
  386. var row = elm.parents('.row');
  387. var options = row.find('.source').val();
  388. App.Ajax.request(App.Env.world+'.suspend', {spell: options}, function(reply) {
  389. if (reply.result) {
  390. App.Pages.prepareHTML();
  391. App.Helpers.updateScreen();
  392. }
  393. else {
  394. return App.Helpers.alert('Failed to suspend');
  395. }
  396. });
  397. }
  398. App.Actions.unsuspend = function(evt)
  399. {
  400. var confirmed = confirm('Unsuspend?');
  401. if (!confirmed) {
  402. return ;
  403. }
  404. var elm = $(evt.target);
  405. var row = elm.parents('.row');
  406. var options = row.find('.source').val();
  407. App.Ajax.request(App.Env.world+'.unsuspend', {spell: options}, function(reply) {
  408. if (reply.result) {
  409. App.Pages.prepareHTML();
  410. App.Helpers.updateScreen();
  411. }
  412. else {
  413. return App.Helpers.alert('Failed to suspend');
  414. }
  415. });
  416. }
  417. // do_action_form_help
  418. App.Actions.showFormHelp = function(evt) {
  419. var tpl_name = App.Env.world + '_form';
  420. var tpl = App.Templates.get(tpl_name, 'help');
  421. App.View.popup(tpl.finalize());
  422. }
  423. // do_action_entry_help
  424. App.Actions.showEntryHelp = function(evt) {
  425. var tpl_name = App.Env.world + '_entry';
  426. var tpl = App.Templates.get(tpl_name, 'help');
  427. App.View.popup(tpl.finalize());
  428. }
  429. App.Actions.embedSubform = function(evt) {
  430. var tpl = App.Templates.get('subform', App.Env.getWorldName());
  431. }
  432. App.Actions.close_popup = function()
  433. {
  434. App.View.closePopup();
  435. }
  436. App.Actions.close_subform = function(evt, elm)
  437. {
  438. var elm = elm || $(evt.target);
  439. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  440. var parent_ref = ref.prev('.row');
  441. if (parent_ref.length > 0) {
  442. parent_ref.find('.show-records').removeClass('hidden');
  443. }
  444. ref.remove();
  445. }
  446. App.Actions.save_dns_subrecords = function(evt)
  447. {
  448. var elm = $(evt.target);
  449. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  450. var data = [];
  451. $('.subform').find('.subrow').each(function(i, o)
  452. {
  453. data[data.length++] = App.Helpers.getFormValues(o);
  454. });
  455. var parent_row = $(elm).parents('.subform').prev('.dns-details-row');
  456. var dns_json = $(parent_row).find('.source').val();
  457. App.Ajax.request('DNS.changeRecords', {spell: App.Helpers.toJSON(data), dns: dns_json}, function(reply)
  458. {
  459. if (reply.result) {
  460. var emphasize = $('.show-records', parent_row);
  461. App.Actions.close_subform(null, elm);
  462. $(emphasize).effect("highlight", {'color':'#B0D635'}, 3000);
  463. }
  464. else {
  465. App.Helpers.alert('Changes were not applied');
  466. }
  467. });
  468. }
  469. App.Actions.delete_subentry = function(evt)
  470. {
  471. var sure = confirm(App.i18n.getMessage('confirm'));
  472. if (!sure) {
  473. return;
  474. }
  475. var elm = $(evt.target);
  476. var ref = elm.hasClass('subrow') ? elm : elm.parents('.subrow');
  477. $(ref).remove();
  478. }
  479. App.Actions.generate_pass = function(evt)
  480. {
  481. var elm = $(evt.target);
  482. var ref = elm.parents('.form-row');
  483. $('.password', ref).val(App.Helpers.generatePassword());
  484. }
  485. App.Actions.toggle_section = function(evt)
  486. {
  487. var elm = $(evt.target);
  488. var ref = $(elm).parents('.form-options-group:first');
  489. fb.log(ref);
  490. if ($('.sub_section:first', ref).hasClass('hidden')) {
  491. $('.sub_section:first', ref).removeClass('hidden');
  492. $('.group-header:first', ref).removeClass('collapsed').addClass('expanded');
  493. }
  494. else {
  495. $('.sub_section:first', ref).addClass('hidden');
  496. $('.group-header:first', ref).removeClass('expanded').addClass('collapsed');
  497. }
  498. }
  499. App.Actions.close_inner_popup = function(evt)
  500. {
  501. App.Helpers.closeInnerPopup();
  502. }
  503. App.Actions.open_inner_popup = function(evt)
  504. {
  505. var elm = $(evt.target);
  506. App.Helpers.openInnerPopup(elm, $(elm).next('.inner-popup-html').val(), 'Details');
  507. }
  508. App.Actions.add_db_user = function(evt)
  509. {
  510. alert('TODO');
  511. }
  512. App.Actions.backup_db = function(evt)
  513. {
  514. alert('TODO');
  515. }
  516. App.Actions.add_form_ns = function(evt)
  517. {
  518. var elm = $(evt.target);
  519. form = elm.parents('.form:first');
  520. var total_nses = $(form).find('.ns-entry').length;
  521. if (total_nses == App.Settings.NS_MAX) {
  522. return App.Helpers.alert('Maximum number of NS cannot be more than ' + App.Settings.NS_MAX);
  523. }
  524. var tpl = App.Templates.get('NS_INPUT', 'user');
  525. tpl.set(':NAME', '');
  526. tpl.set(':NS_LABEL', 'Name Server');
  527. var ref = $(elm).hasClass('form-row') ? elm : $(elm).parents('.form-row');
  528. $(ref).before(tpl.finalize());
  529. if ((total_nses + 1) == App.Settings.NS_MAX ) { // added last NS
  530. $('.additional-ns-add', form).addClass('hidden');
  531. }
  532. $(form).find('.ns-entry').each(function(i, o)
  533. {
  534. $(o).find('label').text('Name Server #' + (i + 1));
  535. $(o).find('input').attr('name', 'NS' + (i + 1));
  536. });
  537. }
  538. App.Actions.delete_ns = function(evt)
  539. {
  540. var sure = confirm(App.i18n.getMessage('confirm'));
  541. if (!sure) {
  542. return;
  543. }
  544. var elm = $(evt.target);
  545. form = elm.parents('.form:first');
  546. var total_nses = $(form).find('.ns-entry').length;
  547. if (total_nses == App.Settings.NS_MIN) {
  548. return App.Helpers.alert('Minimum number of Name Servers is ' + App.Settings.NS_MIN);
  549. }
  550. var form = elm.parents('.form:first');
  551. $(elm).parents('.form:first').find('.additional-ns-add').removeClass('hidden');
  552. $(elm).parents('.ns-entry').remove();
  553. $(form).find('.ns-entry').each(function(i, o)
  554. {
  555. $(o).find('label').text('Name Server #' + (i + 1));
  556. $(o).find('input').attr('name', 'NS' + (i + 1));
  557. });
  558. }
  559. App.Actions.view_full_ns_list = function(evt)
  560. {
  561. var elm = $(evt.target);
  562. App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html(), 'Name Server list');
  563. }
  564. App.Actions.view_full_web_templates = function(evt)
  565. {
  566. var elm = $(evt.target);
  567. App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html(), 'Web Templates list');
  568. }
  569. App.Actions.view_template_info = function(evt)
  570. {
  571. var elm = $(evt.target);
  572. ref = elm.hasClass('row') ? elm : elm.parents('.row');
  573. var options = ref.find('.source').val();
  574. App.Ajax.request('DNS.getTemplateInfo', {spell: options}, function(reply) {
  575. if (reply.result) {
  576. var html = '';
  577. $.each(reply.data, function(key) {
  578. html += '<li><strong>'+key+':</strong> '+reply.data[key]+'</li>';
  579. });
  580. App.Helpers.openInnerPopup(elm, '<ul>'+html+'</ul>', 'Template Info');
  581. }
  582. });
  583. }
  584. App.Actions.toggle_stats_block = function(evt)
  585. {
  586. var elm = $(evt.target);
  587. if (!!elm.attr('checked')) {
  588. elm.parents('.stats-settings').find('.stats-block').removeClass('hidden');
  589. }
  590. else {
  591. elm.parents('.stats-settings').find('.stats-block').addClass('hidden');
  592. }
  593. }
  594. App.Actions.exec_v_console = function(evt)
  595. {
  596. evt.preventDefault();
  597. App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
  598. }
  599. App.Actions.view_profile_settings = function(evt)
  600. {
  601. evt.preventDefault();
  602. App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
  603. }
  604. App.Actions.select_all = function(evt)
  605. {
  606. $('.row').addClass('checked-row')
  607. }
  608. App.Actions.deselect_all = function(evt)
  609. {
  610. $('.row').removeClass('checked-row')
  611. }
  612. App.Actions.delete_selected = function(evt)
  613. {
  614. var selected = $('.checked-row');
  615. if (selected.length == 0) {
  616. return App.Helpers.alert('No entry selected. Please select at least one.');
  617. }
  618. var confirmed = confirm('You are about to delete ' + selected.length + ' entrie(s). Are you sure?');
  619. if (!confirmed) {
  620. return;
  621. }
  622. }
  623. App.Actions.loadStats = function(type)
  624. {
  625. var period = '';
  626. switch (type) {
  627. case 'month':
  628. period = 'monthly'
  629. break;
  630. case 'today':
  631. period = 'daily'
  632. break;
  633. case 'week':
  634. period = 'weekly'
  635. break;
  636. case 'year':
  637. period = 'yearly'
  638. break;
  639. default:
  640. period = 'daily';
  641. break;
  642. }
  643. $('#actions-toolbar .active').removeClass('active');
  644. $('#actions-toolbar .'+type).addClass('active');
  645. App.Ajax.request('STATS.getList', {period: period}, function(reply) {
  646. if (!reply.result) {
  647. App.Herlers.alert('Stats list failed to load. Please try again a bit later');
  648. }
  649. App.Ref.CONTENT.html(App.HTML.Build.stats_list(reply.data));
  650. App.Helpers.updateScreen();
  651. });
  652. }
  653. App.Actions.toggle_batch_selector = function()
  654. {
  655. if (App.Tmp[App.Env.world + '_selected_records'] == 0) { // Select all
  656. var rows = $('.row');
  657. rows.each(function(i, row) {
  658. $(row).addClass('checked-row');
  659. });
  660. App.Tmp[App.Env.world + '_selected_records'] = rows.length;
  661. $('#batch-processor .selector-title').html(rows.length + ' SELECTED');
  662. }
  663. else {
  664. var rows = $('.row');
  665. rows.each(function(i, row) {
  666. $(row).removeClass('checked-row');
  667. });
  668. App.Tmp[App.Env.world + '_selected_records'] = 0;
  669. $('#batch-processor .selector-title').html('NONE');
  670. }
  671. }