actions.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765
  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. email: $('#change-email').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. }
  241. // execute authorisation
  242. App.Actions.do_authorize = function()
  243. {
  244. $('#auth-error').text('');
  245. $('#auth-form-content').hide();
  246. App.Ajax.request('MAIN.signin', {'login':$('#authorize-login').val(), 'password':$('#authorize-password').val()}, function(reply)
  247. {
  248. if (reply.result == true) {
  249. location.href = '';
  250. }
  251. else {
  252. $('#auth-error').text(reply.data.error_msg);
  253. $('#auth-form-content').show();
  254. $('#auth-error').removeClass('hidden');
  255. }
  256. });
  257. }
  258. App.Actions.delete_entry = function(evt)
  259. {
  260. var confirmed = confirm(App.i18n.getMessage('confirm'));
  261. if (!confirmed) {
  262. return;
  263. }
  264. var elm = $(evt.target);
  265. var elm = elm.hasClass('form') ? elm : elm.parents('.form');
  266. App.Model.remove(App.Env.world, elm);
  267. }
  268. App.Actions.show_subform = function(evt)
  269. {
  270. var elm = $(evt.target);
  271. var ref = elm.hasClass('row') ? elm : elm.parents('.row');
  272. var ref_subform = ref.next('.subform');
  273. if (ref_subform.length > 0) {
  274. ref_subform.remove();
  275. }
  276. if ('undefined' != typeof App.Pages[App.Env.world].showSubform) {
  277. App.Pages[App.Env.world].showSubform(ref);
  278. }
  279. // TODO: probably general way to embed subforms
  280. }
  281. App.Actions.view_template_settings = function(evt)
  282. {
  283. var elm = $(evt.target);
  284. var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
  285. var tpl_name = $(ref).val() || $(ref).text();
  286. App.Helpers.openInnerPopup(elm, App.Env.initialParams.WEB_DOMAIN.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
  287. }
  288. App.Actions.view_dns_template_settings = function(evt)
  289. {
  290. var elm = $(evt.target);
  291. var ref = elm.hasClass('tpl-item') ? elm : elm.prev('.tpl-item');
  292. var tpl_name = $(ref).val() || $(ref).text();
  293. App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, 'Template Settings');
  294. }
  295. /*App.Actions.view_dns_template_settings = function(evt)
  296. {
  297. var elm = $(evt.target);
  298. var ref = elm.prev('.tpl-item');
  299. var tpl_name = $(ref).val() || $(ref).text();
  300. App.Helpers.openInnerPopup(elm, App.Env.initialParams.DNS.TPL[tpl_name].DESCR || tpl_name, '');
  301. }*/
  302. App.Actions.add_subrecord_dns = function(evt)
  303. {
  304. var elm = $(evt.target);
  305. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  306. if (ref.length > 0) {
  307. var tpl = App.HTML.Build.dns_subrecord({});
  308. ref.find('.add-box').after(tpl.finalize());
  309. App.Helpers.updateScreen();
  310. }
  311. }
  312. // do_action_save
  313. App.Actions.save_form = function(evt) {
  314. var elm = $(evt.target);
  315. elm = elm.parents('.b-new-entry');
  316. var elm_id = App.Env.world + '_FORM_ID';
  317. var build_method = App.Env.getWorldName() + '_entry';
  318. if (!App.Validate.form(App.Env.world, elm)) {
  319. return App.Validate.displayFormErrors(App.Env.world, elm);
  320. }
  321. if (elm.attr('id') == App.Constants[elm_id]) { // NEW ITEM
  322. if ($('.b-new-entry').length > 1) {
  323. 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.');
  324. if (!confirmed) {
  325. return true;
  326. }
  327. }
  328. var values = App.Helpers.getFormValues(elm);
  329. if(App.Validate.form(values, $('#'+elm_id))) {
  330. App.Model.add(values, source);
  331. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  332. $('#'+form_id).remove();
  333. }
  334. }
  335. else { // OLD ITEM, UPDATING IT
  336. var source = $(elm).find('.source').val();
  337. var values = App.Helpers.getFormValues(elm);
  338. if(App.Validate.form(values, $('#'+elm_id))) {
  339. App.Model.update(values, source, elm);
  340. }
  341. }
  342. }
  343. // do_action_edit
  344. App.Actions.edit = function(evt)
  345. {
  346. if ('undefined' != typeof App.Pages[App.Env.world].edit) {
  347. App.Pages[App.Env.world].edit(evt);
  348. }
  349. else {
  350. var elm = $(evt.target);
  351. elm = elm.hasClass('row') ? elm : elm.parents('.row');
  352. var options = elm.find('.source').val();
  353. var build_method = App.Env.getWorldName() + '_form';
  354. var tpl = App.HTML.Build[build_method](options);
  355. elm.replaceWith(tpl);
  356. App.Helpers.disableNotEditable();
  357. App.Helpers.updateScreen();
  358. }
  359. }
  360. // do_cancel_form
  361. App.Actions.cancel_form = function(evt, params) {
  362. var elm = $(evt.target);
  363. elm = elm.parents('.b-new-entry');
  364. var form_id = App.Constants[App.Env.world + '_FORM_ID'];
  365. if (elm.attr('id') == form_id) {
  366. $('#' + form_id).remove();
  367. }
  368. else {
  369. fb.warn(elm.find('.source').val());
  370. var options = App.Helpers.evalJSON(elm.find('.source').val());
  371. var entry_name = App.Env.world.toLowerCase() + '_entry';
  372. var tpl = App.HTML.Build[entry_name](options);
  373. elm.replaceWith(tpl);
  374. }
  375. App.Helpers.updateScreen();
  376. }
  377. App.Actions.suspend = function(evt)
  378. {
  379. var confirmed = confirm('Suspend?');
  380. if (!confirmed) {
  381. return ;
  382. }
  383. var elm = $(evt.target);
  384. var row = elm.parents('.row');
  385. var options = row.find('.source').val();
  386. App.Ajax.request(App.Env.world+'.suspend', {spell: options}, function(reply) {
  387. if (reply.result) {
  388. App.Pages.prepareHTML();
  389. App.Helpers.updateScreen();
  390. }
  391. else {
  392. return App.Helpers.alert('Failed to suspend');
  393. }
  394. });
  395. }
  396. App.Actions.unsuspend = function(evt)
  397. {
  398. var confirmed = confirm('Unsuspend?');
  399. if (!confirmed) {
  400. return ;
  401. }
  402. var elm = $(evt.target);
  403. var row = elm.parents('.row');
  404. var options = row.find('.source').val();
  405. App.Ajax.request(App.Env.world+'.unsuspend', {spell: options}, function(reply) {
  406. if (reply.result) {
  407. App.Pages.prepareHTML();
  408. App.Helpers.updateScreen();
  409. }
  410. else {
  411. return App.Helpers.alert('Failed to suspend');
  412. }
  413. });
  414. }
  415. // do_action_form_help
  416. App.Actions.showFormHelp = function(evt) {
  417. var tpl_name = App.Env.world + '_form';
  418. var tpl = App.Templates.get(tpl_name, 'help');
  419. App.View.popup(tpl.finalize());
  420. }
  421. // do_action_entry_help
  422. App.Actions.showEntryHelp = function(evt) {
  423. var tpl_name = App.Env.world + '_entry';
  424. var tpl = App.Templates.get(tpl_name, 'help');
  425. App.View.popup(tpl.finalize());
  426. }
  427. App.Actions.embedSubform = function(evt) {
  428. var tpl = App.Templates.get('subform', App.Env.getWorldName());
  429. }
  430. App.Actions.close_popup = function()
  431. {
  432. App.View.closePopup();
  433. }
  434. App.Actions.close_subform = function(evt, elm)
  435. {
  436. var elm = elm || $(evt.target);
  437. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  438. var parent_ref = ref.prev('.row');
  439. if (parent_ref.length > 0) {
  440. parent_ref.find('.show-records').removeClass('hidden');
  441. }
  442. ref.remove();
  443. }
  444. App.Actions.save_dns_subrecords = function(evt)
  445. {
  446. var elm = $(evt.target);
  447. var ref = elm.hasClass('subform') ? elm : elm.parents('.subform');
  448. var data = [];
  449. $('.subform').find('.subrow').each(function(i, o)
  450. {
  451. data[data.length++] = App.Helpers.getFormValues(o);
  452. });
  453. var parent_row = $(elm).parents('.subform').prev('.dns-details-row');
  454. var dns_json = $(parent_row).find('.source').val();
  455. App.Ajax.request('DNS.changeRecords', {spell: App.Helpers.toJSON(data), dns: dns_json}, function(reply)
  456. {
  457. if (reply.result) {
  458. var emphasize = $('.show-records', parent_row);
  459. App.Actions.close_subform(null, elm);
  460. $(emphasize).effect("highlight", {'color':'#B0D635'}, 3000);
  461. }
  462. else {
  463. App.Helpers.alert('Changes were not applied');
  464. }
  465. });
  466. }
  467. App.Actions.delete_subentry = function(evt)
  468. {
  469. var sure = confirm(App.i18n.getMessage('confirm'));
  470. if (!sure) {
  471. return;
  472. }
  473. var elm = $(evt.target);
  474. var ref = elm.hasClass('subrow') ? elm : elm.parents('.subrow');
  475. $(ref).remove();
  476. }
  477. App.Actions.generate_pass = function(evt)
  478. {
  479. var elm = $(evt.target);
  480. var ref = elm.parents('.form-row');
  481. $('.password', ref).val(App.Helpers.generatePassword());
  482. }
  483. App.Actions.toggle_section = function(evt)
  484. {
  485. var elm = $(evt.target);
  486. var ref = $(elm).parents('.form-options-group:first');
  487. fb.log(ref);
  488. if ($('.sub_section:first', ref).hasClass('hidden')) {
  489. $('.sub_section:first', ref).removeClass('hidden');
  490. $('.group-header:first', ref).removeClass('collapsed').addClass('expanded');
  491. }
  492. else {
  493. $('.sub_section:first', ref).addClass('hidden');
  494. $('.group-header:first', ref).removeClass('expanded').addClass('collapsed');
  495. }
  496. }
  497. App.Actions.close_inner_popup = function(evt)
  498. {
  499. App.Helpers.closeInnerPopup();
  500. }
  501. App.Actions.open_inner_popup = function(evt)
  502. {
  503. var elm = $(evt.target);
  504. App.Helpers.openInnerPopup(elm, $(elm).next('.inner-popup-html').val(), 'Details');
  505. }
  506. App.Actions.add_db_user = function(evt)
  507. {
  508. alert('TODO');
  509. }
  510. App.Actions.backup_db = function(evt)
  511. {
  512. alert('TODO');
  513. }
  514. App.Actions.add_form_ns = function(evt)
  515. {
  516. var elm = $(evt.target);
  517. form = elm.parents('.form:first');
  518. var total_nses = $(form).find('.ns-entry').length;
  519. if (total_nses == App.Settings.NS_MAX) {
  520. return App.Helpers.alert('Maximum number of NS cannot be more than ' + App.Settings.NS_MAX);
  521. }
  522. var tpl = App.Templates.get('NS_INPUT', 'user');
  523. tpl.set(':NAME', '');
  524. tpl.set(':NS_LABEL', 'Name Server');
  525. var ref = $(elm).hasClass('form-row') ? elm : $(elm).parents('.form-row');
  526. $(ref).before(tpl.finalize());
  527. if ((total_nses + 1) == App.Settings.NS_MAX ) { // added last NS
  528. $('.additional-ns-add', form).addClass('hidden');
  529. }
  530. $(form).find('.ns-entry').each(function(i, o)
  531. {
  532. $(o).find('label').text('Name Server #' + (i + 1));
  533. $(o).find('input').attr('name', 'NS' + (i + 1));
  534. });
  535. }
  536. App.Actions.delete_ns = function(evt)
  537. {
  538. var sure = confirm(App.i18n.getMessage('confirm'));
  539. if (!sure) {
  540. return;
  541. }
  542. var elm = $(evt.target);
  543. form = elm.parents('.form:first');
  544. var total_nses = $(form).find('.ns-entry').length;
  545. if (total_nses == App.Settings.NS_MIN) {
  546. return App.Helpers.alert('Minimum number of Name Servers is ' + App.Settings.NS_MIN);
  547. }
  548. var form = elm.parents('.form:first');
  549. $(elm).parents('.form:first').find('.additional-ns-add').removeClass('hidden');
  550. $(elm).parents('.ns-entry').remove();
  551. $(form).find('.ns-entry').each(function(i, o)
  552. {
  553. $(o).find('label').text('Name Server #' + (i + 1));
  554. $(o).find('input').attr('name', 'NS' + (i + 1));
  555. });
  556. }
  557. App.Actions.view_full_ns_list = function(evt)
  558. {
  559. var elm = $(evt.target);
  560. App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html(), 'Name Server list');
  561. }
  562. App.Actions.view_full_web_templates = function(evt)
  563. {
  564. var elm = $(evt.target);
  565. App.Helpers.openInnerPopup(elm, $(elm).parents('.prop-box').find('.ns-full-list:first').html(), 'Web Templates list');
  566. }
  567. App.Actions.view_template_info = function(evt)
  568. {
  569. var elm = $(evt.target);
  570. ref = elm.hasClass('row') ? elm : elm.parents('.row');
  571. var options = ref.find('.source').val();
  572. App.Ajax.request('DNS.getTemplateInfo', {spell: options}, function(reply) {
  573. if (reply.result) {
  574. var html = '';
  575. $.each(reply.data, function(key) {
  576. html += '<li><strong>'+key+':</strong> '+reply.data[key]+'</li>';
  577. });
  578. App.Helpers.openInnerPopup(elm, '<ul>'+html+'</ul>', 'Template Info');
  579. }
  580. });
  581. }
  582. App.Actions.toggle_stats_block = function(evt)
  583. {
  584. var elm = $(evt.target);
  585. if (!!elm.attr('checked')) {
  586. elm.parents('.stats-settings').find('.stats-block').removeClass('hidden');
  587. }
  588. else {
  589. elm.parents('.stats-settings').find('.stats-block').addClass('hidden');
  590. }
  591. }
  592. App.Actions.exec_v_console = function(evt)
  593. {
  594. evt.preventDefault();
  595. App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
  596. }
  597. App.Actions.view_profile_settings = function(evt)
  598. {
  599. evt.preventDefault();
  600. App.Helpers.openInnerPopup(evt.target, 'This functionality will be available in next releases', 'Details');
  601. }
  602. App.Actions.select_all = function(evt)
  603. {
  604. $('.row').addClass('checked-row')
  605. }
  606. App.Actions.deselect_all = function(evt)
  607. {
  608. $('.row').removeClass('checked-row')
  609. }
  610. App.Actions.delete_selected = function(evt)
  611. {
  612. var selected = $('.checked-row');
  613. if (selected.length == 0) {
  614. return App.Helpers.alert('No entry selected. Please select at least one.');
  615. }
  616. var confirmed = confirm('You are about to delete ' + selected.length + ' entrie(s). Are you sure?');
  617. if (!confirmed) {
  618. return;
  619. }
  620. }
  621. App.Actions.loadStats = function(type)
  622. {
  623. var period = '';
  624. switch (type) {
  625. case 'month':
  626. period = 'monthly'
  627. break;
  628. case 'today':
  629. period = 'daily'
  630. break;
  631. case 'week':
  632. period = 'weekly'
  633. break;
  634. case 'year':
  635. period = 'yearly'
  636. break;
  637. default:
  638. period = 'daily';
  639. break;
  640. }
  641. $('#actions-toolbar .sub-active').removeClass('sub-active');
  642. $('#actions-toolbar .'+type).addClass('sub-active');
  643. App.Ajax.request('STATS.getList', {period: period}, function(reply) {
  644. if (!reply.result) {
  645. App.Herlers.alert('Stats list failed to load. Please try again a bit later');
  646. }
  647. App.Ref.CONTENT.html(App.HTML.Build.stats_list(reply.data));
  648. App.Helpers.updateScreen();
  649. });
  650. }
  651. App.Actions.toggle_batch_selector = function()
  652. {
  653. if (App.Tmp[App.Env.world + '_selected_records'] == 0) { // Select all
  654. var rows = $('.row');
  655. rows.each(function(i, row) {
  656. $(row).addClass('checked-row');
  657. });
  658. App.Tmp[App.Env.world + '_selected_records'] = rows.length;
  659. $('#batch-processor .selector-title').html(rows.length + ' SELECTED');
  660. }
  661. else {
  662. var rows = $('.row');
  663. rows.each(function(i, row) {
  664. $(row).removeClass('checked-row');
  665. });
  666. App.Tmp[App.Env.world + '_selected_records'] = 0;
  667. $('#batch-processor .selector-title').html('NONE');
  668. }
  669. }