forms.grid.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. FormIt.grid.Forms = function(config) {
  2. config = config || {};
  3. config.tbar = [{
  4. text : _('bulk_actions'),
  5. menu : [{
  6. text : '<i class="x-menu-item-icon icon icon-history"></i>' + _('formit.forms_clean'),
  7. handler : this.cleanForms,
  8. scope : this
  9. }, {
  10. text : '<i class="x-menu-item-icon icon icon-download"></i>' + _('formit.forms_export'),
  11. handler : this.exportForms,
  12. scope : this
  13. },'-', {
  14. text : '<i class="x-menu-item-icon icon icon-times"></i>' + _('formit.forms_remove'),
  15. handler : this.removeSelectedForms,
  16. scope : this
  17. }]
  18. }, '->', {
  19. xtype : 'datefield',
  20. name : 'formit-filter-forms-start-date',
  21. id : 'formit-filter-forms-start-date',
  22. dateFormat : MODx.config.manager_date_format,
  23. startDay : parseInt(MODx.config.manager_week_start),
  24. width : 200,
  25. emptyText : _('formit.filter_start_date'),
  26. listeners : {
  27. 'change' : {
  28. fn : this.filterStartDate,
  29. scope : this
  30. }
  31. }
  32. }, {
  33. xtype : 'datefield',
  34. name : 'formit-filter-forms-end-date',
  35. id : 'formit-filter-forms-end-date',
  36. dateFormat : MODx.config.manager_date_format,
  37. startDay : parseInt(MODx.config.manager_week_start),
  38. width : 200,
  39. emptyText : _('formit.filter_end_date'),
  40. listeners : {
  41. 'change' : {
  42. fn : this.filterEndDate,
  43. scope : this
  44. }
  45. }
  46. }, {
  47. xtype : 'formit-combo-forms',
  48. name : 'formit-filter-forms-form',
  49. id : 'formit-filter-forms-form',
  50. width : 200,
  51. emptyText : _('formit.filter_form'),
  52. listeners : {
  53. 'change' : {
  54. fn : this.filterForm,
  55. scope : this
  56. }
  57. }
  58. }, {
  59. xtype : 'textfield',
  60. name : 'formit-filter-forms-search',
  61. id : 'formit-filter-forms-search',
  62. emptyText : _('search') + '...',
  63. value : decodeURIComponent(MODx.request.form || ''),
  64. listeners : {
  65. 'change' : {
  66. fn : this.filterSearch,
  67. scope : this
  68. },
  69. 'render' : {
  70. fn : function(cmp) {
  71. new Ext.KeyMap(cmp.getEl(), {
  72. key : Ext.EventObject.ENTER,
  73. fn : this.blur,
  74. scope : cmp
  75. });
  76. },
  77. scope : this
  78. }
  79. }
  80. }, {
  81. xtype : 'button',
  82. cls : 'x-form-filter-clear',
  83. id : 'formit-filter-forms-clear',
  84. text : _('filter_clear'),
  85. listeners : {
  86. 'click' : {
  87. fn : this.clearFilter,
  88. scope : this
  89. }
  90. }
  91. }];
  92. var selection = new Ext.grid.CheckboxSelectionModel();
  93. var columns = [selection, {
  94. header : _('formit.label_form_name'),
  95. dataIndex : 'form',
  96. sortable : true,
  97. editable : false,
  98. width : 200,
  99. fixed : true
  100. }, {
  101. header : _('formit.label_form_values'),
  102. dataIndex : 'values',
  103. sortable : true,
  104. editable : false,
  105. width : 125,
  106. renderer : this.renderValues
  107. }, {
  108. header : _('formit.label_form_ip'),
  109. dataIndex : 'ip',
  110. sortable : true,
  111. editable : true,
  112. width : 125,
  113. fixed : true
  114. }, {
  115. header : _('formit.label_form_encrypted'),
  116. dataIndex : 'encrypted',
  117. sortable : true,
  118. editable : true,
  119. width : 125,
  120. fixed : true,
  121. renderer : this.renderBoolean
  122. }, {
  123. header : _('formit.label_form_date'),
  124. dataIndex : 'date',
  125. sortable : true,
  126. editable : false,
  127. fixed : true,
  128. width : 200,
  129. renderer : this.renderDate
  130. }];
  131. Ext.applyIf(config, {
  132. sm : selection,
  133. columns : columns,
  134. id : 'formit-grid-forms',
  135. url : FormIt.config.connector_url,
  136. baseParams : {
  137. action : 'mgr/forms/getlist',
  138. query : decodeURIComponent(MODx.request.form || '')
  139. },
  140. fields :['id','form','values', 'ip', 'date', 'encrypted'],
  141. paging : true,
  142. pageSize : MODx.config.default_per_page > 30 ? MODx.config.default_per_page : 30,
  143. remoteSort : true
  144. });
  145. FormIt.grid.Forms.superclass.constructor.call(this, config);
  146. };
  147. Ext.extend(FormIt.grid.Forms, MODx.grid.Grid, {
  148. filterSearch: function(tf, nv, ov) {
  149. this.getStore().baseParams.query = tf.getValue();
  150. this.getBottomToolbar().changePage(1);
  151. },
  152. filterForm: function(tf, nv, ov) {
  153. this.getStore().baseParams.form = tf.getValue();
  154. this.getBottomToolbar().changePage(1);
  155. },
  156. filterStartDate: function(tf, nv, ov) {
  157. this.getStore().baseParams.start_date = tf.getValue();
  158. this.getBottomToolbar().changePage(1);
  159. },
  160. filterEndDate: function(tf, nv, ov) {
  161. this.getStore().baseParams.end_date = tf.getValue();
  162. this.getBottomToolbar().changePage(1);
  163. },
  164. clearFilter: function() {
  165. this.getStore().baseParams.query = '';
  166. this.getStore().baseParams.form = '';
  167. this.getStore().baseParams.start_date = '';
  168. this.getStore().baseParams.end_date = '';
  169. Ext.getCmp('formit-filter-forms-search').reset();
  170. Ext.getCmp('formit-filter-forms-form').reset();
  171. Ext.getCmp('formit-filter-forms-start-date').reset();
  172. Ext.getCmp('formit-filter-forms-end-date').reset();
  173. this.getBottomToolbar().changePage(1);
  174. },
  175. getMenu: function() {
  176. return [{
  177. text : '<i class="x-menu-item-icon icon icon-search"></i>' + _('formit.form_view'),
  178. handler : this.viewForm
  179. }, {
  180. text : '<i class="x-menu-item-icon icon icon-question-circle"></i>' + _('formit.view_ip'),
  181. handler : this.viewFormIP
  182. }, '-', {
  183. text : '<i class="x-menu-item-icon icon icon-times"></i>' + _('formit.form_remove'),
  184. handler : this.removeForm
  185. }];
  186. },
  187. viewForm: function(btn, e) {
  188. if (this.viewFormWindow) {
  189. this.viewFormWindow.destroy();
  190. }
  191. this.viewFormWindow = MODx.load({
  192. xtype : 'formit-window-form-view',
  193. record : this.menu.record,
  194. closeAction : 'close',
  195. buttons : [{
  196. text : _('ok'),
  197. cls : 'primary-button',
  198. handler : function() {
  199. this.viewFormWindow.close();
  200. },
  201. scope : this
  202. }]
  203. });
  204. this.viewFormWindow.show(e.target);
  205. },
  206. removeForm: function(btn, e) {
  207. MODx.msg.confirm({
  208. title : _('formit.form_remove'),
  209. text : _('formit.form_remove_confirm'),
  210. url : this.config.url,
  211. params : {
  212. action : 'mgr/forms/remove',
  213. id : this.menu.record.id
  214. },
  215. listeners : {
  216. 'success' : {
  217. fn : this.refresh,
  218. scope : this
  219. }
  220. }
  221. });
  222. },
  223. viewFormIP: function(btn, e) {
  224. this.getStore().baseParams.query = this.menu.record.ip;
  225. this.getStore().baseParams.form = '';
  226. Ext.getCmp('formit-filter-forms-search').setValue(this.menu.record.ip);
  227. Ext.getCmp('formit-filter-forms-form').reset();
  228. this.getBottomToolbar().changePage(1);
  229. },
  230. removeSelectedForms: function(btn, e) {
  231. MODx.msg.confirm({
  232. title : _('formit.forms_remove'),
  233. text : _('formit.forms_remove_confirm'),
  234. url : this.config.url,
  235. params : {
  236. action : 'mgr/forms/removeselected',
  237. ids : this.getSelectedAsList()
  238. },
  239. listeners : {
  240. 'success' : {
  241. fn : this.refresh,
  242. scope : this
  243. }
  244. }
  245. });
  246. },
  247. cleanForms: function(btn, e) {
  248. if (this.cleanFormsWindow) {
  249. this.cleanFormsWindow.destroy();
  250. }
  251. this.cleanFormsWindow = MODx.load({
  252. xtype : 'formit-window-forms-clean',
  253. closeAction : 'close',
  254. listeners : {
  255. 'success' : {
  256. fn : function(record) {
  257. MODx.msg.status({
  258. title : _('success'),
  259. message : record.a.result.message,
  260. delay : 4
  261. });
  262. this.refresh();
  263. },
  264. scope : this
  265. }
  266. }
  267. });
  268. this.cleanFormsWindow.show(e.target);
  269. },
  270. exportForms: function(btn, e) {
  271. if (this.exportFormsWindow) {
  272. this.exportFormsWindow.destroy();
  273. }
  274. this.exportFormsWindow = MODx.load({
  275. xtype : 'formit-window-forms-export',
  276. record : {
  277. form : this.getStore().baseParams.form || '',
  278. start_date : this.getStore().baseParams.start_date || '',
  279. end_date : this.getStore().baseParams.end_date || ''
  280. },
  281. closeAction :'close',
  282. listeners : {
  283. 'success' : {
  284. fn : function() {
  285. location.href = FormIt.config.connector_url + '?action=' + this.exportFormsWindow.baseParams.action + '&download=1&HTTP_MODAUTH=' + MODx.siteId;
  286. },
  287. scope : this
  288. },
  289. 'failure' : {
  290. fn : function(response) {
  291. MODx.msg.alert(_('failure'), response.message);
  292. },
  293. scope : this
  294. }
  295. }
  296. });
  297. this.exportFormsWindow.setValues({
  298. form : this.getStore().baseParams.form || '',
  299. start_date : this.getStore().baseParams.start_date || '',
  300. end_date : this.getStore().baseParams.end_date || ''
  301. });
  302. this.exportFormsWindow.show(e.target);
  303. },
  304. renderBoolean: function(d, c) {
  305. c.css = parseInt(d) === 1|| d ? 'green' : 'red';
  306. return parseInt(d) === 1 || d ? _('yes') : _('no');
  307. },
  308. renderValues: function(d) {
  309. var output = [];
  310. for (var key in d) {
  311. output.push(String.format('<strong>{0}</strong>: {1}', key, d[key]));
  312. }
  313. return output.join(', ');
  314. },
  315. renderDate: function(a) {
  316. if (Ext.isEmpty(a)) {
  317. return '—';
  318. }
  319. return a;
  320. }
  321. });
  322. Ext.reg('formit-grid-forms', FormIt.grid.Forms);
  323. FormIt.window.ViewForm = function(config) {
  324. config = config || {};
  325. Ext.applyIf(config, {
  326. height : 500,
  327. width : 600,
  328. title : _('formit.form_view'),
  329. labelAlign : 'left',
  330. labelWidth : 150,
  331. cls : 'x-window-formit',
  332. fields : [{
  333. xtype : 'statictextfield',
  334. fieldLabel : _('formit.label_form_name'),
  335. name : 'form',
  336. anchor : '100%'
  337. }, {
  338. xtype : 'statictextfield',
  339. fieldLabel : _('formit.label_form_ip'),
  340. name : 'ip',
  341. anchor : '100%'
  342. }, {
  343. xtype : 'statictextfield',
  344. fieldLabel : _('formit.label_form_date'),
  345. name : 'date',
  346. anchor : '100%'
  347. }, {
  348. html : '<hr />'
  349. }, this.getValues(config.record.values)]
  350. });
  351. FormIt.window.ViewForm.superclass.constructor.call(this, config);
  352. };
  353. Ext.extend(FormIt.window.ViewForm, MODx.Window, {
  354. getValues: function(values) {
  355. var output = [];
  356. for (var key in values) {
  357. if (values[key].length >= FormIt.config['max_chars']) {
  358. output.push({
  359. xtype : 'textarea',
  360. fieldLabel : key,
  361. name : 'date',
  362. anchor : '100%',
  363. value : values[key],
  364. height : 125,
  365. readOnly : true
  366. });
  367. } else {
  368. output.push({
  369. xtype : 'textfield',
  370. fieldLabel : key,
  371. name : 'date',
  372. anchor : '100%',
  373. value : values[key],
  374. readOnly : true
  375. });
  376. }
  377. }
  378. return output;
  379. }
  380. });
  381. Ext.reg('formit-window-form-view', FormIt.window.ViewForm);
  382. FormIt.window.CleanForms = function(config) {
  383. config = config || {};
  384. Ext.applyIf(config, {
  385. autoHeight : true,
  386. width : 500,
  387. title : _('formit.forms_clean'),
  388. cls : 'x-window-formit',
  389. url : FormIt.config.connector_url,
  390. baseParams : {
  391. action : 'mgr/forms/clean'
  392. },
  393. items : [{
  394. html : '<p>' + _('formit.forms_clean_desc') + '</p>',
  395. cls : 'panel-desc',
  396. }, {
  397. xtype : 'modx-panel',
  398. items : [{
  399. xtype : 'label',
  400. html : _('formit.label_clean_label')
  401. }, {
  402. xtype : 'numberfield',
  403. name : 'days',
  404. minValue : 1,
  405. maxValue : 9999999999,
  406. value : MODx.config['formit.cleanform.days'],
  407. width : 75,
  408. allowBlank : false,
  409. style : 'margin: 0 10px;'
  410. }, {
  411. xtype : 'label',
  412. html : _('formit.label_clean_desc'),
  413. }]
  414. }],
  415. keys : [],
  416. saveBtnText : _('formit.forms_clean'),
  417. waitMsg : _('formit.forms_clean_executing')
  418. });
  419. FormIt.window.CleanForms.superclass.constructor.call(this, config);
  420. };
  421. Ext.extend(FormIt.window.CleanForms, MODx.Window);
  422. Ext.reg('formit-window-forms-clean', FormIt.window.CleanForms);
  423. FormIt.window.ExportForms = function(config) {
  424. config = config || {};
  425. Ext.applyIf(config, {
  426. autoHeight : true,
  427. title : _('formit.forms_export'),
  428. url : FormIt.config.connector_url,
  429. baseParams : {
  430. action : 'mgr/forms/export'
  431. },
  432. fields : [{
  433. xtype : 'formit-combo-forms',
  434. fieldLabel : _('formit.label_export_form'),
  435. description : MODx.expandHelp ? '' : _('formit.label_export_form_desc'),
  436. name : 'form',
  437. anchor : '100%',
  438. allowBlank : false
  439. }, {
  440. xtype : MODx.expandHelp ? 'label' : 'hidden',
  441. html : _('formit.label_export_form_desc'),
  442. cls : 'desc-under'
  443. }, {
  444. xtype : 'datefield',
  445. fieldLabel : _('formit.label_export_start_date'),
  446. description : MODx.expandHelp ? '' : _('formit.label_export_start_date_desc'),
  447. name : 'start_date',
  448. dateFormat : MODx.config.manager_date_format,
  449. startDay : parseInt(MODx.config.manager_week_start),
  450. anchor : '100%'
  451. }, {
  452. xtype : MODx.expandHelp ? 'label' : 'hidden',
  453. html : _('formit.label_export_start_date_desc'),
  454. cls : 'desc-under'
  455. }, {
  456. xtype : 'datefield',
  457. fieldLabel : _('formit.label_export_end_date'),
  458. description : MODx.expandHelp ? '' : _('formit.label_export_end_date_desc'),
  459. name : 'end_date',
  460. dateFormat : MODx.config.manager_date_format,
  461. startDay : parseInt(MODx.config.manager_week_start),
  462. anchor : '100%'
  463. }, {
  464. xtype : MODx.expandHelp ? 'label' : 'hidden',
  465. html : _('formit.label_export_end_date_desc'),
  466. cls : 'desc-under'
  467. }, {
  468. xtype : 'textfield',
  469. fieldLabel : _('formit.label_export_delimiter'),
  470. description : MODx.expandHelp ? '' : _('formit.label_export_delimiter_desc'),
  471. name : 'delimiter',
  472. anchor : '100%',
  473. allowBlank : false,
  474. value : ';'
  475. }, {
  476. xtype : MODx.expandHelp ? 'label' : 'hidden',
  477. html : _('formit.label_export_delimiter_desc'),
  478. cls : 'desc-under'
  479. }],
  480. saveBtnText : _('export')
  481. });
  482. FormIt.window.ExportForms.superclass.constructor.call(this, config);
  483. };
  484. Ext.extend(FormIt.window.ExportForms, MODx.Window);
  485. Ext.reg('formit-window-forms-export', FormIt.window.ExportForms);
  486. FormIt.combo.Forms = function(config) {
  487. config = config || {};
  488. Ext.applyIf(config, {
  489. url : FormIt.config.connector_url,
  490. baseParams : {
  491. action : 'mgr/forms/getforms'
  492. },
  493. fields : ['form'],
  494. hiddenName : 'form',
  495. valueField : 'form',
  496. displayField : 'form'
  497. });
  498. FormIt.combo.Forms.superclass.constructor.call(this, config);
  499. };
  500. Ext.extend(FormIt.combo.Forms, MODx.combo.ComboBox);
  501. Ext.reg('formit-combo-forms', FormIt.combo.Forms);