actions.js 18 KB

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