| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- fred.grid.Elements = function (config) {
- config = config || {};
- config.permission = config.permission || {};
-
- if (config.permission.fred_element_save) {
- config.ddGroup = 'FredElementsDDGroup';
- config.enableDragDrop = true;
- config.save_action = 'mgr/elements/updatefromgrid';
- config.autosave = true;
- }
-
- if (!config.permission.fred_element_save && !config.permission.fred_element_delete) {
- config.showGear = false;
- }
-
- Ext.applyIf(config, {
- url: fred.config.connectorUrl,
- baseParams: {
- action: 'mgr/elements/getlist',
- sort: 'rank',
- dir: 'asc'
- },
- preventSaveRefresh: false,
- fields: ['id', 'name', 'description', 'image', 'category', 'rank', 'category_name', 'option_set', 'content', 'has_override', 'option_set_name', 'theme_id', 'theme_name', 'theme_theme_folder'],
- paging: true,
- remoteSort: true,
- emptyText: _('fred.elements.none'),
- columns: [
- {
- header: _('id'),
- dataIndex: 'id',
- sortable: true,
- hidden: true
- },
- {
- header: _('fred.elements.image'),
- dataIndex: 'image',
- sortable: false,
- width: 80,
- renderer: function (value, metaData, record, rowIndex, colIndex, store) {
- if (value) {
- value = fred.prependBaseUrl(value, record.data.theme_theme_folder);
-
- metaData.attr = 'ext:qtip=\'<img src=\"' + value + '\">\'';
- return '<img src="' + value + '" style="max-width:200px;max-height:150px;">';
- }
- return value;
- }
- },
- {
- header: _('fred.elements.name'),
- dataIndex: 'name',
- sortable: true,
- width: 80,
- editor: this.getEditor(config, {xtype: 'textfield'})
- },
- {
- header: _('fred.elements.description'),
- dataIndex: 'description',
- width: 120,
- editor: {xtype: 'textfield'},
- hidden: document.body.clientWidth < 1550
- },
- {
- header: _('fred.elements.theme'),
- dataIndex: 'theme_name',
- sortable: true,
- width: 60
- },
- {
- header: _('fred.elements.category'),
- dataIndex: 'category_name',
- sortable: true,
- width: 60
- },
- {
- header: _('fred.elements.option_set'),
- dataIndex: 'option_set_name',
- width: 60,
- hidden: document.body.clientWidth < 1550
- },
- {
- header: _('fred.elements.has_override'),
- dataIndex: 'has_override',
- renderer: this.rendYesNo,
- width: 60,
- hidden: document.body.clientWidth < 1550
- },
- {
- header: _('fred.elements.rank'),
- dataIndex: 'rank',
- sortable: true,
- width: 40,
- editor: this.getEditor(config, {xtype: 'numberfield'})
- }
- ],
- tbar: this.getTbar(config)
- });
- fred.grid.Elements.superclass.constructor.call(this, config);
- this.on('render', this.registerGridDropTarget, this);
- this.on('beforedestroy', this.destroyScrollManager, this);
-
- fred.globalEvents.on('delete-element-category', function(category) {
- var categoryFilter = Ext.getCmp('fred-element-filter-category');
-
- if (categoryFilter.getValue() === category.id) {
- var record = categoryFilter.findRecord('id',0);
- categoryFilter.setValue(0);
- categoryFilter.fireEvent('select', categoryFilter, record);
- } else {
- this.getBottomToolbar().changePage(1);
- }
- }, this);
- fred.globalEvents.on('delete-theme', function(theme) {
- var themeFilter = Ext.getCmp('fred-element-filter-theme');
-
- if (themeFilter.getValue() !== theme.id) return;
-
- var record = themeFilter.findRecord('id',0);
- themeFilter.setValue(0);
- themeFilter.fireEvent('select', themeFilter, record);
- var categoryFilter = Ext.getCmp('fred-element-filter-category');
- var recordCategory = categoryFilter.findRecord('id',0);
- categoryFilter.setValue(0);
- categoryFilter.fireEvent('select', categoryFilter, recordCategory);
- }, this);
- };
- Ext.extend(fred.grid.Elements, fred.grid.GearGrid, {
- getMenu: function () {
- var m = [];
- if (this.config.permission.fred_element_save) {
- m.push({
- text: _('fred.elements.quick_update'),
- handler: this.quickUpdateElement
- });
- m.push({
- text: _('fred.elements.update'),
- handler: this.updateElement
- });
- m.push('-');
- m.push({
- text: _('fred.elements.duplicate'),
- handler: this.duplicateElement
- });
- }
-
- if (this.config.permission.fred_element_delete) {
- if (m.length > 0) {
- m.push('-');
- }
-
- m.push({
- text: _('fred.elements.remove')
- , handler: this.removeElement
- });
- }
- return m;
- },
-
- getTbar: function(config) {
- var output = [];
-
- if (config.permission.fred_element_save) {
- output.push({
- text: _('fred.elements.create'),
- handler: this.newElement
- });
- }
-
- output.push([[
- '->',
- {
- xtype: 'textfield',
- emptyText: _('fred.elements.search_name'),
- listeners: {
- 'change': {
- fn: this.search,
- scope: this
- },
- 'render': {
- fn: function (cmp) {
- new Ext.KeyMap(cmp.getEl(), {
- key: Ext.EventObject.ENTER,
- fn: function () {
- this.blur();
- return true;
- },
- scope: cmp
- });
- },
- scope: this
- }
- }
- },
- {
- id: 'fred-element-filter-category',
- xtype: 'fred-combo-element-categories',
- emptyText: _('fred.element_cateogries.all'),
- addAll: 1,
- filterName: 'category',
- listeners: {
- select: this.filterCombo,
- scope: this
- }
- },
- {
- id: 'fred-element-filter-theme',
- xtype: 'fred-combo-themes',
- emptyText: _('fred.themes.all'),
- addAll: 1,
- isUpdate: true,
- filterName: 'theme',
- syncFilter: function(combo, record) {
- var categoryFilter = Ext.getCmp('fred-element-filter-category');
- var s = this.getStore();
- if (record.data[combo.valueField] !== 0) {
- s.baseParams.category = 0;
- categoryFilter.setValue(0);
- }
- categoryFilter.baseParams.theme = record.data[combo.valueField];
- categoryFilter.store.load();
- combo.setValue(record.data[combo.valueField]);
- s.baseParams[combo.filterName] = record.data[combo.valueField];
- this.getBottomToolbar().changePage(1);
- }.bind(this),
- listeners: {
- select: this.filterCombo,
- scope: this
- }
- }
- ]]);
-
- return output;
- },
- removeElement: function (btn, e) {
- if (!this.menu.record) return false;
- MODx.msg.confirm({
- title: _('fred.elements.remove'),
- text: _('fred.elements.remove_confirm', {name: this.menu.record.name}),
- url: this.config.url,
- params: {
- action: 'mgr/elements/remove',
- id: this.menu.record.id
- },
- listeners: {
- 'success': {
- fn: function (r) {
- this.refresh();
- }, scope: this
- }
- }
- });
- return true;
- },
- filterCombo: function (combo, record) {
- var s = this.getStore();
- s.baseParams[combo.filterName] = record.data[combo.valueField];
-
- if (combo.filterName === 'theme') {
- var categoryFilter = Ext.getCmp('fred-element-filter-category');
-
- if (record.data[combo.valueField] !== 0) {
- s.baseParams.category = 0;
- categoryFilter.setValue();
- }
-
- categoryFilter.baseParams.theme = record.data[combo.valueField];
- categoryFilter.store.load();
-
- var ids = ['fred-element-filter-theme', 'fred-rte-config-filter-theme', 'fred-option-set-filter-theme', 'fred-element-category-filter-theme', 'fred-blueprint-filter-theme', 'fred-blueprint-category-filter-theme'];
-
- ids.forEach(function(id){
- if (id === combo.id) return true;
-
- var remoteCombo = Ext.getCmp(id);
- if (remoteCombo) {
- remoteCombo.syncFilter(remoteCombo, record);
- }
- });
- }
- this.getBottomToolbar().changePage(1);
- },
- search: function (field, value) {
- var s = this.getStore();
- s.baseParams.search = value;
- this.getBottomToolbar().changePage(1);
- },
- newElement: function(btn, e) {
- var options = {};
- var s = this.getStore();
- if (s.baseParams.theme) {
- options.theme = s.baseParams.theme;
- if (s.baseParams.category) {
- options.category = s.baseParams.category;
- }
- }
-
- fred.loadPage('element/create', options);
- },
- quickUpdateElement: function (btn, e) {
- var updateElement = MODx.load({
- xtype: 'fred-window-element',
- record: this.menu.record,
- isUpdate: true,
- listeners: {
- success: {
- fn: function () {
- this.refresh();
- },
- scope: this
- }
- }
- });
- var category = updateElement.find('name', 'category');
- if (category[0]) {
- category = category[0];
- category.baseParams.theme = this.menu.record.theme_id;
- }
-
- var optionSet = updateElement.find('name', 'option_set');
- if (optionSet[0]) {
- optionSet = optionSet[0];
- optionSet.baseParams.theme = this.menu.record.theme_id;
- }
- updateElement.fp.getForm().reset();
- updateElement.fp.getForm().setValues(this.menu.record);
- updateElement.show(e.target);
- return true;
- },
- duplicateElement: function (btn, e) {
- var duplicateElement = MODx.load({
- xtype: 'fred-window-element-duplicate',
- record: this.menu.record,
- isUpdate: true,
- listeners: {
- success: {
- fn: function () {
- this.refresh();
- },
- scope: this
- }
- }
- });
- var category = duplicateElement.find('name', 'category');
- if (category[0]) {
- category = category[0];
- category.baseParams.theme = this.menu.record.theme_id;
- }
- duplicateElement.fp.getForm().reset();
- duplicateElement.fp.getForm().setValues(this.menu.record);
- duplicateElement.show(e.target);
- return true;
- },
- updateElement: function (btn, e) {
- fred.loadPage('element/update', {id: this.menu.record.id});
- },
- isGridFiltered: function () {
- var search = this.getStore().baseParams.search;
- if (search && search != '') {
- return true;
- }
- var publicFilter = this.getStore().baseParams.public;
- if ((publicFilter !== undefined) && (publicFilter !== null) && (publicFilter !== '')) {
- return true;
- }
- var completeFilter = this.getStore().baseParams.complete;
- if ((completeFilter !== undefined) && (completeFilter !== null) && (completeFilter !== '')) {
- return true;
- }
- var categoryFilter = this.getStore().baseParams.category;
- if (!((categoryFilter !== undefined) && (categoryFilter !== null) && (categoryFilter !== '') && (categoryFilter !== 0))) {
- return true;
- }
- return false;
- },
- getDragDropText: function () {
- if (this.store.sortInfo && this.store.sortInfo.field != 'rank') {
- return _('fred.err.bad_sort_column', {column: 'rank'});
- }
- var categoryFilter = this.getStore().baseParams.category;
- if (!((categoryFilter !== undefined) && (categoryFilter !== null) && (categoryFilter !== '') && (categoryFilter !== 0))) {
- return _('fred.err.required_filter', {filter: 'category'});
- }
- if (this.isGridFiltered()) {
- return _('fred.err.clear_filter');
- }
- return _('fred.global.change_order', {name: this.selModel.selections.items[0].data.name});
- },
- registerGridDropTarget: function () {
- var ddrow = new Ext.ux.dd.GridReorderDropTarget(this, {
- copy: false,
- sortCol: 'rank',
- isGridFiltered: this.isGridFiltered.bind(this),
- listeners: {
- 'beforerowmove': function (objThis, oldIndex, newIndex, records) {
- },
- 'afterrowmove': function (objThis, oldIndex, newIndex, records) {
- var currentElement = records.pop();
- MODx.Ajax.request({
- url: fred.config.connectorUrl,
- params: {
- action: 'mgr/elements/ddreorder',
- elementId: currentElement.id,
- categoryId: currentElement.data.category,
- oldIndex: oldIndex,
- newIndex: newIndex
- },
- listeners: {
- success: {
- fn: function (r) {
- this.target.grid.refresh();
- },
- scope: this
- }
- }
- });
- },
- 'beforerowcopy': function (objThis, oldIndex, newIndex, records) {
- },
- 'afterrowcopy': function (objThis, oldIndex, newIndex, records) {
- }
- }
- });
- Ext.dd.ScrollManager.register(this.getView().getEditorParent());
- },
- destroyScrollManager: function () {
- Ext.dd.ScrollManager.unregister(this.getView().getEditorParent());
- },
-
- getEditor: function(config, editor) {
- if (config.permission.fred_element_save) return editor;
-
- return false;
- }
- });
- Ext.reg('fred-grid-elements', fred.grid.Elements);
|