actions.js 22 KB

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