fred.grid.Blueprints = function (config) {
config = config || {};
config.permission = config.permission || {};
if (config.permission.fred_blueprints_save) {
config.save_action = 'mgr/blueprints/updatefromgrid';
config.autosave = true;
config.ddGroup = 'FredBlueprintsDDGroup';
config.enableDragDrop = true;
}
if (!config.permission.fred_blueprints_save && !config.permission.fred_blueprints_delete) {
config.showGear = false;
}
Ext.applyIf(config, {
url: fred.config.connectorUrl,
baseParams: {
action: 'mgr/blueprints/getlist',
sort: 'rank',
dir: 'asc'
},
preventSaveRefresh: false,
fields: ['id', 'name', 'description', 'image', 'category', 'rank', 'complete', 'public', 'createdBy', 'category_name', 'user_profile_fullname', 'theme_id', 'theme_name', 'theme_theme_folder'],
paging: true,
remoteSort: true,
emptyText: _('fred.blueprints.none'),
columns: [
{
header: _('id'),
dataIndex: 'id',
sortable: true,
hidden: true
},
{
header: _('fred.blueprints.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=\'
\'';
return '
';
}
return value;
}
},
{
header: _('fred.blueprints.name'),
dataIndex: 'name',
sortable: true,
width: 70,
editor: this.getEditor(config, {xtype: 'textfield'})
},
{
header: _('fred.blueprints.description'),
dataIndex: 'description',
width: 100,
hidden: document.body.clientWidth < 1550
},
{
header: _('fred.blueprints.theme'),
dataIndex: 'theme_name',
sortable: true,
width: 50
},
{
header: _('fred.blueprints.category'),
dataIndex: 'category_name',
sortable: true,
width: 50
},
{
header: _('fred.blueprints.complete'),
dataIndex: 'complete',
sortable: true,
width: 40,
renderer: this.rendYesNo
},
{
header: _('fred.blueprints.public'),
dataIndex: 'public',
sortable: true,
width: 40,
editor: this.getPublicEditor(config, {
xtype: 'modx-combo-boolean',
renderer: this.rendYesNo
}),
renderer: this.rendYesNo
},
{
header: _('fred.blueprints.created_by'),
dataIndex: 'user_profile_fullname',
sortable: true,
width: 40,
hidden: document.body.clientWidth < 1550
},
{
header: _('fred.blueprints.rank'),
dataIndex: 'rank',
sortable: true,
width: 30,
editor: this.getEditor(config, {xtype: 'numberfield'})
}
],
tbar: this.getTbar(config)
});
fred.grid.Blueprints.superclass.constructor.call(this, config);
this.on('render', this.registerGridDropTarget, this);
this.on('beforedestroy', this.destroyScrollManager, this);
fred.globalEvents.on('delete-blueprint-category', function(category) {
var categoryFilter = Ext.getCmp('fred-blueprint-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 categoryFilter = Ext.getCmp('fred-blueprint-filter-category');
var recordCategory = categoryFilter.findRecord('id',0);
categoryFilter.setValue(0);
categoryFilter.fireEvent('select', categoryFilter, recordCategory);
}, this);
};
Ext.extend(fred.grid.Blueprints, fred.grid.GearGrid, {
getMenu: function () {
var m = [];
if (this.config.permission.fred_blueprints_save) {
m.push({
text: _('fred.blueprints.quick_update'),
handler: this.quickUpdateBlueprint
});
m.push({
text: _('fred.blueprints.update'),
handler: this.updateBlueprint
});
}
if (this.config.permission.fred_blueprints_delete) {
if (m.length > 0) {
m.push('-');
}
m.push({
text: _('fred.blueprints.remove')
, handler: this.removeBlueprint
});
}
return m;
},
getTbar: function(config) {
return [
'->',
{
xtype: 'textfield',
emptyText: _('fred.blueprints.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
}
}
},
{
xtype: 'fred-combo-extended-boolean',
dataLabel: _('fred.blueprints.public'),
emptyText: _('fred.blueprints.public'),
filterName: 'public',
useInt: true,
listeners: {
select: this.filterCombo,
scope: this
}
},
{
xtype: 'fred-combo-extended-boolean',
dataLabel: _('fred.blueprints.complete'),
emptyText: _('fred.blueprints.complete'),
filterName: 'complete',
useInt: true,
listeners: {
select: this.filterCombo,
scope: this
}
},
{
id: 'fred-blueprint-filter-category',
xtype: 'fred-combo-blueprint-categories',
emptyText: _('fred.blueprint_cateogries.all'),
addAll: 1,
filterName: 'category',
listeners: {
select: this.filterCombo,
scope: this
}
},
{
id: 'fred-blueprint-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-blueprint-filter-category');
var s = this.getStore();
if (record.data[combo.valueField] !== 0) {
s.baseParams.category = 0;
categoryFilter.setValue();
}
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
}
}
];
},
removeBlueprint: function (btn, e) {
if (!this.menu.record) return false;
MODx.msg.confirm({
title: _('fred.blueprints.remove'),
text: _('fred.blueprints.remove_confirm', {name: this.menu.record.name}),
url: this.config.url,
params: {
action: 'mgr/blueprints/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-blueprint-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);
},
quickUpdateBlueprint: function (btn, e) {
var quickUpdateBlueprint = MODx.load({
xtype: 'fred-window-blueprint',
record: this.menu.record,
canPublic: this.config.permission.fred_blueprints_create_public,
isUpdate: true,
listeners: {
success: {
fn: function () {
this.refresh();
},
scope: this
}
}
});
quickUpdateBlueprint.fp.getForm().reset();
quickUpdateBlueprint.fp.getForm().setValues(this.menu.record);
quickUpdateBlueprint.show(e.target);
return true;
},
updateBlueprint: function (btn, e) {
fred.loadPage('blueprint/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 currentBlueprint = records.pop();
MODx.Ajax.request({
url: fred.config.connectorUrl,
params: {
action: 'mgr/blueprints/ddreorder',
blueprintId: currentBlueprint.id,
categoryId: currentBlueprint.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_blueprints_save) return editor;
return false;
},
getPublicEditor: function(config, editor) {
if (!config.permission.fred_blueprints_save) return false;
if (!config.permission.fred_blueprints_create_public) return false;
return editor;
}
});
Ext.reg('fred-grid-blueprints', fred.grid.Blueprints);