Created
November 2, 2012 13:19
-
-
Save krismas/4001336 to your computer and use it in GitHub Desktop.
"Refresh Cache" an extension for MODX Batcher
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 02/06/12 - Gildas - g.noel@ackwa.fr | |
// - assets/components/batcher/js/widgets/resource.grid.js patch to Add "Refresh Cache" Option | |
// 05/11/12 - Gildas - g.noel@ackwa.fr | |
// - Add custom log | |
// - Force timeout to 30s for each request | |
Batcher.grid.Resources = function(config) { | |
config = config || {}; | |
this.sm = new Ext.grid.CheckboxSelectionModel(); | |
Ext.applyIf(config,{ | |
url: Batcher.config.connector_url | |
,baseParams: { | |
action: 'mgr/resource/getList' | |
,thread: config.thread | |
} | |
,fields: ['id','pagetitle','template','templatename','alias','deleted','published','createdon','editedon','hidemenu'] | |
,paging: true | |
,autosave: false | |
,remoteSort: true | |
,autoExpandColumn: 'pagetitle' | |
,cls: 'batcher-grid' | |
,sm: this.sm | |
,columns: [this.sm,{ | |
header: _('id') | |
,dataIndex: 'id' | |
,sortable: true | |
,width: 60 | |
},{ | |
header: _('pagetitle') | |
,dataIndex: 'pagetitle' | |
,sortable: true | |
,width: 100 | |
},{ | |
header: _('alias') | |
,dataIndex: 'alias' | |
,sortable: true | |
,width: 100 | |
},{ | |
header: _('batcher.template') | |
,dataIndex: 'templatename' | |
,sortable: true | |
,width: 120 | |
},{ | |
header: _('batcher.published') | |
,dataIndex: 'published' | |
,sortable: true | |
,editor: { xtype: 'combo-boolean' ,renderer: 'boolean' } | |
,width: 80 | |
},{ | |
header: _('batcher.hidemenu') | |
,dataIndex: 'hidemenu' | |
,sortable: true | |
,editor: { xtype: 'combo-boolean' ,renderer: 'boolean' } | |
,width: 80 | |
}] | |
,viewConfig: { | |
forceFit:true, | |
enableRowBody:true, | |
showPreview:true, | |
getRowClass : function(rec, ri, p){ | |
var cls = 'batcher-row'; | |
if (!rec.data.published) cls += ' batcher-unpublished'; | |
if (rec.data.deleted) cls += ' batcher-deleted'; | |
if (rec.data.hidemenu) cls += ' batcher-hidemenu'; | |
if(this.showPreview){ | |
//p.body = '<div class="batcher-resource-body">'+rec.data.content+'</div>'; | |
return cls+' batcher-resource-expanded'; | |
} | |
return cls+' batcher-resource-collapsed'; | |
} | |
} | |
,tbar: [{ | |
text: _('batcher.bulk_actions') | |
,menu: this.getBatchMenu() | |
},'->',{ | |
xtype: 'modx-combo-template' | |
,name: 'template' | |
,id: 'batcher-template' | |
,emptyText: _('batcher.filter_by_template') | |
,listeners: { | |
'select': {fn:this.filterTemplate,scope:this} | |
} | |
},{ | |
xtype: 'textfield' | |
,name: 'search' | |
,id: 'batcher-search' | |
,emptyText: _('search') | |
,listeners: { | |
'change': {fn:this.search,scope:this} | |
,'render': {fn:function(tf) { | |
tf.getEl().addKeyListener(Ext.EventObject.ENTER,function() { | |
this.search(tf); | |
},this); | |
},scope:this} | |
} | |
},{ | |
xtype: 'button' | |
,id: 'batcher-filter-clear' | |
,text: _('filter_clear') | |
,listeners: { | |
'click': {fn: this.clearFilter, scope: this} | |
} | |
}] | |
}); | |
Batcher.grid.Resources.superclass.constructor.call(this,config) | |
}; | |
Ext.extend(Batcher.grid.Resources,MODx.grid.Grid,{ | |
search: function(tf,nv,ov) { | |
this.getStore().setBaseParam('search',tf.getValue()); | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
} | |
,filterTemplate: function(cb,nv,ov) { | |
this.getStore().setBaseParam('template',cb.getValue()); | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
} | |
,clearFilter: function() { | |
this.getStore().baseParams = { | |
action: 'mgr/resource/getList' | |
}; | |
Ext.getCmp('batcher-search').reset(); | |
Ext.getCmp('batcher-template').reset(); | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
} | |
,_renderUrl: function(v,md,rec) { | |
return '<a href="'+rec.data.url+'" target="_blank">'+rec.data.pagetitle+'</a>'; | |
} | |
,_showMenu: function(g,ri,e) { | |
e.stopEvent(); | |
e.preventDefault(); | |
this.menu.record = this.getStore().getAt(ri).data; | |
if (!this.getSelectionModel().isSelected(ri)) { | |
this.getSelectionModel().selectRow(ri); | |
} | |
this.menu.removeAll(); | |
var m = []; | |
if (this.menu.record.menu) { | |
m = this.menu.record.menu; | |
if (m.length > 0) { | |
this.addContextMenuItem(m); | |
this.menu.show(e.target); | |
} | |
} else { | |
var z = this.getBatchMenu(); | |
for (var zz=0;zz < z.length;zz++) { | |
this.menu.add(z[zz]); | |
} | |
this.menu.show(e.target); | |
} | |
} | |
,getSelectedAsList: function() { | |
var sels = this.getSelectionModel().getSelections(); | |
if (sels.length <= 0) return false; | |
var cs = ''; | |
for (var i=0;i<sels.length;i++) { | |
cs += ','+sels[i].data.id; | |
} | |
cs = cs.substr(1); | |
return cs; | |
} | |
,batchAction: function(act,btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
MODx.Ajax.request({ | |
url: this.config.url | |
,params: { | |
action: 'mgr/resource/batch' | |
,resources: cs | |
,batch: act | |
} | |
,listeners: { | |
'success': {fn:function(r) { | |
this.getSelectionModel().clearSelections(true); | |
this.refresh(); | |
var t = Ext.getCmp('modx-resource-tree'); | |
if (t) { t.refresh(); } | |
},scope:this} | |
} | |
}); | |
return true; | |
} | |
,refreshCache: function(btn,e) { | |
// 02/06/12 - Gildas - g.noel@ackwa.fr | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
// remove MODx Exception handler for 404 | |
Ext.Ajax.un('requestexception', MODx.onAjaxException, MODx); | |
Ext.Ajax.on('beforeRequest' , beforeRefresh , this); | |
// Take care of "request_controller", "friendly_urls_strict" | |
var sURL = this.config.url.replace('/assets/components/batcher/connector.php', '') + '/index.php'; | |
var lIDs = cs.split(','); | |
var oBox = Ext.MessageBox.wait('Refresh Cache... 0/'+lIDs.length, 'Please wait'); | |
var oStart = new Date(); | |
var iCnt = 0; | |
var iFail = 0; | |
// Extend Ajax Timeout | |
var iTimeout = lIDs.length * 5000; | |
Ext.Ajax.timeout = iTimeout; | |
for (var i = 0; i < lIDs.length; i++) { | |
Ext.Ajax.request({ | |
url: sURL | |
,method: 'GET' | |
,params: { | |
id: lIDs[i] | |
} | |
,headers: { | |
'Pragma': 'no-cache' | |
} | |
,callback: function () { | |
} | |
,success: function (r) { | |
iCnt++; | |
checkRefresh(); | |
} | |
,failure: function (r) { | |
iFail++; | |
checkRefresh(); | |
} | |
}); | |
//if (!(i%5)) wait(100); | |
} | |
return true; | |
function beforeRefresh () { | |
} | |
function checkRefresh () { | |
oBox.updateText('Refresh Cache... '+(iCnt + iFail)+'/'+lIDs.length); | |
if ((iCnt + iFail) >= lIDs.length) { | |
var oEnd = new Date(); | |
oBox.hide() | |
if (console && console.log) console.log('Refresh... Try : '+(iCnt + iFail)+' Done : '+iCnt+', Fail : '+iFail+' in '+(oEnd - oStart)+' ms / '+iTimeout+' ms'); | |
Ext.Ajax.on('requestexception', MODx.onAjaxException, MODx); | |
} | |
} | |
function wait(d) { | |
var dt = new Date(); | |
dt.setTime(dt.getTime() + d); | |
while (new Date().getTime() < dt.getTime()); | |
console.log('wait'); | |
} | |
} | |
,changeParent: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
var r = {resources: cs}; | |
if (!this.changeParentWindow) { | |
this.changeParentWindow = MODx.load({ | |
xtype: 'batcher-window-change-parent' | |
,record: r | |
,listeners: { | |
'success': {fn:function(r) { | |
this.refresh(); | |
var t = Ext.getCmp('modx-resource-tree'); | |
if (t) { t.refresh(); } | |
},scope:this} | |
} | |
}); | |
} | |
this.changeParentWindow.setValues(r); | |
this.changeParentWindow.show(e.target); | |
return true; | |
} | |
,changeTemplate: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
var r = {resources: cs}; | |
if (!this.changeTemplateWindow) { | |
this.changeTemplateWindow = MODx.load({ | |
xtype: 'batcher-window-change-template' | |
,record: r | |
,listeners: { | |
'success': {fn:function(r) { | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
} | |
this.changeTemplateWindow.setValues(r); | |
this.changeTemplateWindow.show(e.target); | |
return true; | |
} | |
,changeAuthors: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
var r = {resources: cs}; | |
if (!this.changeAuthorsWindow) { | |
this.changeAuthorsWindow = MODx.load({ | |
xtype: 'batcher-window-change-authors' | |
,record: r | |
,listeners: { | |
'success': {fn:function(r) { | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
} | |
this.changeAuthorsWindow.setValues(r); | |
this.changeAuthorsWindow.show(e.target); | |
return true; | |
} | |
,changeDates: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
var r = {resources: cs}; | |
if (!this.changeDatesWindow) { | |
this.changeDatesWindow = MODx.load({ | |
xtype: 'batcher-window-change-dates' | |
,record: r | |
,listeners: { | |
'success': {fn:function(r) { | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
} | |
this.changeDatesWindow.setValues(r); | |
this.changeDatesWindow.show(e.target); | |
return true; | |
} | |
,getBatchMenu: function() { | |
var bm = []; | |
bm.push({ | |
text: _('batcher.toggle') | |
,menu: { | |
items: [{ | |
text: _('batcher.published') | |
,handler: function(btn,e) { | |
this.batchAction('publish',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.unpublished') | |
,handler: function(btn,e) { | |
this.batchAction('unpublish',btn,e); | |
} | |
,scope: this | |
},'-',{ | |
text: _('batcher.hidemenu') | |
,handler: function(btn,e) { | |
this.batchAction('hidemenu',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.unhidemenu') | |
,handler: function(btn,e) { | |
this.batchAction('unhidemenu',btn,e); | |
} | |
,scope: this | |
},'-',{ | |
text: _('batcher.cacheable') | |
,handler: function(btn,e) { | |
this.batchAction('cacheable',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.uncacheable') | |
,handler: function(btn,e) { | |
this.batchAction('cacheable',btn,e); | |
} | |
,scope: this | |
},'-',{ | |
text: _('batcher.searchable') | |
,handler: function(btn,e) { | |
this.batchAction('searchable',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.unsearchable') | |
,handler: function(btn,e) { | |
this.batchAction('unsearchable',btn,e); | |
} | |
,scope: this | |
},'-',{ | |
text: _('batcher.richtext') | |
,handler: function(btn,e) { | |
this.batchAction('richtext',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.unrichtext') | |
,handler: function(btn,e) { | |
this.batchAction('unrichtext',btn,e); | |
} | |
,scope: this | |
},'-',{ | |
text: _('batcher.deleted') | |
,handler: function(btn,e) { | |
this.batchAction('delete',btn,e); | |
} | |
,scope: this | |
},{ | |
text: _('batcher.undeleted') | |
,handler: function(btn,e) { | |
this.batchAction('undelete',btn,e); | |
} | |
,scope: this | |
}] | |
} | |
},{ | |
text: _('batcher.refresh_cache') || 'Refresh Cache' | |
,handler: this.refreshCache | |
,scope: this | |
},{ | |
text: _('batcher.change_parent') | |
,handler: this.changeParent | |
,scope: this | |
},{ | |
text: _('batcher.change_template') | |
,handler: this.changeTemplate | |
,scope: this | |
},{ | |
text: _('batcher.change_dates') | |
,handler: this.changeDates | |
,scope: this | |
},{ | |
text: _('batcher.change_authors') | |
,handler: this.changeAuthors | |
,scope: this | |
}); | |
return bm; | |
} | |
}); | |
Ext.reg('batcher-grid-resource',Batcher.grid.Resources); | |
Batcher.window.ChangeParent = function(config) { | |
config = config || {}; | |
Ext.applyIf(config,{ | |
title: _('batcher.change_parent') | |
,url: Batcher.config.connector_url | |
,baseParams: { | |
action: 'mgr/resource/changeparent' | |
} | |
,width: 400 | |
,fields: [{ | |
xtype: 'hidden' | |
,name: 'resources' | |
},{ | |
xtype: 'textfield' | |
,fieldLabel: _('batcher.parent') | |
,name: 'parent' | |
,anchor: '90%' | |
}] | |
}); | |
Batcher.window.ChangeParent.superclass.constructor.call(this,config); | |
}; | |
Ext.extend(Batcher.window.ChangeParent,MODx.Window); | |
Ext.reg('batcher-window-change-parent',Batcher.window.ChangeParent); | |
Batcher.window.ChangeTemplate = function(config) { | |
config = config || {}; | |
Ext.applyIf(config,{ | |
title: _('batcher.change_template') | |
,url: Batcher.config.connector_url | |
,baseParams: { | |
action: 'mgr/resource/changetemplate' | |
} | |
,width: 400 | |
,fields: [{ | |
xtype: 'hidden' | |
,name: 'resources' | |
},{ | |
xtype: 'modx-combo-template' | |
,fieldLabel: _('batcher.template') | |
,name: 'template' | |
,hiddenName: 'template' | |
,anchor: '90%' | |
}] | |
}); | |
Batcher.window.ChangeTemplate.superclass.constructor.call(this,config); | |
}; | |
Ext.extend(Batcher.window.ChangeTemplate,MODx.Window); | |
Ext.reg('batcher-window-change-template',Batcher.window.ChangeTemplate); | |
Batcher.window.ChangeAuthors = function(config) { | |
config = config || {}; | |
Ext.applyIf(config,{ | |
title: _('batcher.change_authors') | |
,url: Batcher.config.connector_url | |
,baseParams: { | |
action: 'mgr/resource/changeauthors' | |
} | |
,width: 400 | |
,fields: [{ | |
xtype: 'hidden' | |
,name: 'resources' | |
},{ | |
xtype: 'modx-combo-user' | |
,fieldLabel: _('batcher.createdby') | |
,name: 'createdby' | |
,hiddenName: 'createdby' | |
,anchor: '90%' | |
},{ | |
xtype: 'modx-combo-user' | |
,fieldLabel: _('batcher.editedby') | |
,name: 'editedby' | |
,hiddenName: 'editedby' | |
,anchor: '90%' | |
},{ | |
xtype: 'modx-combo-user' | |
,fieldLabel: _('batcher.publishedby') | |
,name: 'publishedby' | |
,hiddenName: 'publishedby' | |
,anchor: '90%' | |
}] | |
}); | |
Batcher.window.ChangeAuthors.superclass.constructor.call(this,config); | |
}; | |
Ext.extend(Batcher.window.ChangeAuthors,MODx.Window); | |
Ext.reg('batcher-window-change-authors',Batcher.window.ChangeAuthors); | |
Batcher.window.ChangeDates = function(config) { | |
config = config || {}; | |
Ext.applyIf(config,{ | |
title: _('batcher.change_dates') | |
,url: Batcher.config.connector_url | |
,baseParams: { | |
action: 'mgr/resource/changedates' | |
} | |
,width: 500 | |
,fields: [{ | |
xtype: 'hidden' | |
,name: 'resources' | |
},{ | |
xtype: 'xdatetime' | |
,fieldLabel: _('batcher.createdon') | |
,name: 'createdon' | |
,hiddenName: 'createdon' | |
,anchor: '90%' | |
,allowBlank: true | |
,dateFormat: MODx.config.manager_date_format | |
,timeFormat: MODx.config.manager_time_format | |
,dateWidth: 120 | |
,timeWidth: 120 | |
},{ | |
xtype: 'xdatetime' | |
,fieldLabel: _('batcher.editedon') | |
,name: 'editedon' | |
,hiddenName: 'editedon' | |
,anchor: '90%' | |
,allowBlank: true | |
,dateFormat: MODx.config.manager_date_format | |
,timeFormat: MODx.config.manager_time_format | |
,dateWidth: 120 | |
,timeWidth: 120 | |
},{ | |
xtype: 'xdatetime' | |
,fieldLabel: _('batcher.pub_date') | |
,name: 'pub_date' | |
,hiddenName: 'pub_date' | |
,anchor: '90%' | |
,allowBlank: true | |
,dateFormat: MODx.config.manager_date_format | |
,timeFormat: MODx.config.manager_time_format | |
,dateWidth: 120 | |
,timeWidth: 120 | |
},{ | |
xtype: 'xdatetime' | |
,fieldLabel: _('batcher.unpub_date') | |
,name: 'unpub_date' | |
,hiddenName: 'unpub_date' | |
,anchor: '90%' | |
,allowBlank: true | |
,dateFormat: MODx.config.manager_date_format | |
,dateWidth: 120 | |
,timeWidth: 120 | |
}] | |
}); | |
Batcher.window.ChangeDates.superclass.constructor.call(this,config); | |
}; | |
Ext.extend(Batcher.window.ChangeDates,MODx.Window); | |
Ext.reg('batcher-window-change-dates',Batcher.window.ChangeDates); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment