actions.js 17 KB

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