Created
May 6, 2014 09:06
-
-
Save pepebe/11556718 to your computer and use it in GitHub Desktop.
Modified version of collections. Adds created on to the grid. 2do: add font awesome icons to each resource for each class_key
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
/*assets/components/collections/js/mgr/widgets/category/collections.grid.resources.js*/ | |
Collections.grid.ContainerCollections = function(config) { | |
config = config || {}; | |
this.sm = new Ext.grid.CheckboxSelectionModel(); | |
Ext.applyIf(config,{ | |
id: 'collections-grid-container-collections' | |
,title: _('collections.collections') | |
,url: Collections.connectorUrl | |
,autosave: true | |
,stateful: true | |
,save_action: 'mgr/resource/updatefromgrid' | |
,ddGroup: 'collectionChildDDGroup' | |
,enableDragDrop: true | |
,baseParams: { | |
action: 'mgr/resource/getList' | |
,'parent': MODx.request.id | |
} | |
,saveParams: { | |
resource: MODx.request.id | |
} | |
,fields: ['id' | |
,'pagetitle' | |
,'alias' | |
,'class_key' | |
,'publishedon' | |
,'publishedon_date' | |
,'publishedon_time' | |
,'unpublishedon' | |
,'unpublishedon_date' | |
,'unpublishedon_time' | |
,'createdon' | |
,'createdon_date' | |
,'createdon_time' | |
,'uri' | |
,'uri_override' | |
,'preview_url' | |
,'actions' | |
,'action_edit' | |
,'menuindex' | |
,'menutitle' | |
,'hidemenu' | |
,'template' | |
, | |
] | |
,paging: true | |
,remoteSort: true | |
,cls: 'collections-grid' | |
,bodyCssClass: 'grid-with-buttons' | |
,sm: this.sm | |
,emptyText: _('collections.children.none') | |
,columns: [this.sm,{ | |
header: _('pagetitle') | |
,dataIndex: 'pagetitle' | |
,id: 'main' | |
,width: 200 | |
,sortable: true | |
,renderer: {fn:this._renderPageTitle,scope:this} | |
},{ | |
header: _('collections.children.menuindex') | |
,dataIndex: 'menuindex' | |
,width: 50 | |
,sortable: true | |
,editor: { | |
xtype: 'numberfield' | |
,allowDecimals: false | |
,allowNegative: false | |
} | |
},{ | |
header: _('alias') | |
,dataIndex: 'alias' | |
,width: 75 | |
,sortable: true | |
},{ | |
header: _('resource_menutitle') | |
,dataIndex: 'menutitle' | |
,width: 75 | |
,sortable: true | |
,hidden: true | |
},{ | |
header: _('resource_hide_from_menus') | |
,dataIndex: 'hidemenu' | |
,width: 75 | |
,renderer: this.rendYesNo | |
,sortable: true | |
,hidden: true | |
},{ | |
header: _('template') | |
,dataIndex: 'template' | |
,width: 75 | |
,sortable: true | |
,editor: { | |
xtype: 'modx-combo-template' | |
,renderer: true | |
} | |
,hidden: true | |
},{ | |
header: _('resource_unpublishdate') | |
,dataIndex: 'unpublishedon' | |
,width: 60 | |
,sortable: true | |
,renderer: {fn:this._renderUnpublished,scope:this} | |
,hidden: true | |
},{ | |
header: 'Erstellt am' | |
,dataIndex: 'createdon' | |
,width: 60 | |
,sortable: true | |
,renderer: {fn:this._renderCreated,scope:this} | |
,hidden: true | |
},{ | |
header: _('publishedon') | |
,dataIndex: 'publishedon' | |
,width: 60 | |
,sortable: true | |
,renderer: {fn:this._renderPublished,scope:this} | |
}] | |
,tbar: [{ | |
text: _('collections.children.create') | |
,handler: this.createChild | |
,scope: this | |
},{ | |
text: _('bulk_actions') | |
,menu: [{ | |
text: _('collections.children.publish_multiple') | |
,handler: this.publishSelected | |
,scope: this | |
},{ | |
text: _('collections.children.unpublish_multiple') | |
,handler: this.unpublishSelected | |
,scope: this | |
},'-',{ | |
text: _('collections.children.delete_multiple') | |
,handler: this.deleteSelected | |
,scope: this | |
},{ | |
text: _('collections.children.undelete_multiple') | |
,handler: this.undeleteSelected | |
,scope: this | |
}] | |
},'->',{ | |
xtype: 'collections-combo-filter-status' | |
,id: 'collections-grid-filter-status' | |
,value: '' | |
,listeners: { | |
'select': {fn:this.filterStatus,scope:this} | |
} | |
},{ | |
xtype: 'textfield' | |
,name: 'search' | |
,id: 'collections-child-search' | |
,emptyText: _('search_ellipsis') | |
,listeners: { | |
'change': {fn: this.search, scope: this} | |
,'render': {fn: function(cmp) { | |
new Ext.KeyMap(cmp.getEl(), { | |
key: Ext.EventObject.ENTER | |
,fn: function() { | |
this.fireEvent('change',this.getValue()); | |
this.blur(); | |
return true;} | |
,scope: cmp | |
}); | |
},scope:this} | |
} | |
},{ | |
xtype: 'button' | |
,id: 'modx-filter-clear' | |
,text: _('filter_clear') | |
,listeners: { | |
'click': {fn: this.clearFilter, scope: this} | |
} | |
}] | |
}); | |
Collections.grid.ContainerCollections.superclass.constructor.call(this,config); | |
this._makeTemplates(); | |
this.on('rowclick',MODx.fireResourceFormChange); | |
this.on('click', this.handleButtons, this); | |
this.on('render', this.registerGridDropTarget, this); | |
this.on('beforedestroy', this.destroyScrollManager, this); | |
}; | |
Ext.extend(Collections.grid.ContainerCollections,MODx.grid.Grid,{ | |
getMenu: function() { | |
var r = this.getSelectionModel().getSelected(); | |
var p = r.data.perm; | |
var m = []; | |
m.push({ | |
text: _('collections.children.update') | |
,handler: this.editChild | |
}); | |
m.push({ | |
text: _('collections.children.delete') | |
,handler: this.deleteChild | |
}); | |
return m; | |
} | |
,filterStatus: function(cb,nv,ov) { | |
this.getStore().baseParams.filter = Ext.isEmpty(nv) || Ext.isObject(nv) ? cb.getValue() : nv; | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
return true; | |
} | |
,search: function(tf,newValue,oldValue) { | |
var nv = newValue || tf; | |
this.getStore().baseParams.query = Ext.isEmpty(nv) || Ext.isObject(nv) ? '' : nv; | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
return true; | |
} | |
,clearFilter: function() { | |
this.getStore().baseParams = { | |
action: 'mgr/resource/getList' | |
,'parent': MODx.request.id | |
}; | |
Ext.getCmp('collections-child-search').reset(); | |
Ext.getCmp('collections-grid-filter-status').reset(); | |
this.getBottomToolbar().changePage(1); | |
this.refresh(); | |
} | |
,_makeTemplates: function() { | |
this.tplPublished = new Ext.XTemplate('<tpl for=".">' | |
+'<div class="collections-grid-date">{publishedon_date}<span class="collections-grid-time">{publishedon_time}</span></div>' | |
+'</tpl>',{ | |
compiled: true | |
}); | |
this.tplCreated = new Ext.XTemplate('<tpl for=".">' | |
+'<div class="collections-grid-date">{createdon_date}<span class="collections-grid-time">{createdon_time}</span></div>' | |
+'</tpl>',{ | |
compiled: true | |
}); | |
this.tplUnpublished = new Ext.XTemplate('<tpl for=".">' | |
+'<div class="collections-grid-date">{unpublishedon_date}<span class="collections-grid-time">{unpublishedon_time}</span></div>' | |
+'</tpl>',{ | |
compiled: true | |
}); | |
this.tplComments = new Ext.XTemplate('<tpl for=".">' | |
+'<div class="collections-grid-comments"><span>{comments}</span></div>' | |
+'</tpl>',{ | |
compiled: true | |
}); | |
this.tplPageTitle = new Ext.XTemplate('<tpl for="."><div class="collections-title-column">' | |
+'<h3 class="main-column">' | |
+' <a href="{action_edit}" title="Edit {pagetitle}">' | |
+' {pagetitle}' | |
+' <tpl if="class_key == \'modStaticResource\'"><span style="color:silver; font-weight:normal;">(static)</span></tpl>' | |
+' </a>' | |
+'<span class="collections-id">({id})</span>' | |
+'</h3>' | |
+'<tpl if="actions">' | |
+'<ul class="actions">' | |
+'<tpl for="actions">' | |
+'<li><a href="#" class="controlBtn {className}">{text}</a></li>' | |
+'</tpl>' | |
+'</ul>' | |
+'</tpl>' | |
+'</div></tpl>',{ | |
compiled: true | |
}); | |
} | |
,_renderCreated:function(v,md,rec) { | |
return this.tplCreated.apply(rec.data); | |
} | |
,_renderPublished:function(v,md,rec) { | |
return this.tplPublished.apply(rec.data); | |
} | |
,_renderUnpublished:function(v,md,rec) { | |
return this.tplUnpublished.apply(rec.data); | |
} | |
,_renderPageTitle:function(v,md,rec) { | |
return this.tplPageTitle.apply(rec.data); | |
} | |
,editChild: function(btn,e) { | |
MODx.loadPage(MODx.request.a, 'id='+this.menu.record.id); | |
} | |
,createChild: function(btn,e) { | |
MODx.loadPage(MODx.action['resource/create'], 'parent='+MODx.request.id+'&context_key='+MODx.ctx); | |
} | |
,viewChild: function(btn,e) { | |
window.open(this.menu.record.data.preview_url); | |
return false; | |
} | |
,duplicateChild: function(btn,e) { | |
var r = { | |
resource: this.menu.record.id | |
,is_folder: false | |
,name: _('duplicate_of',{name: this.menu.record.data.pagetitle}) | |
}; | |
var w = MODx.load({ | |
xtype: 'modx-window-resource-duplicate' | |
,resource: this.menu.record.id | |
,hasChildren: false | |
,listeners: { | |
'success': {fn:function() {this.refresh();},scope:this} | |
} | |
}); | |
w.config.hasChildren = false; | |
w.setValues(r); | |
w.show(); | |
return false; | |
} | |
,deleteChild: function(btn,e) { | |
MODx.msg.confirm({ | |
title: _('collections.children.delete') | |
,text: _('collections.children.delete_confirm') | |
,url: MODx.config.connectors_url+'resource/index.php' | |
,params: { | |
action: 'delete' | |
,id: this.menu.record.id | |
} | |
,listeners: { | |
'success':{fn:this.refresh,scope:this} | |
} | |
}); | |
} | |
,deleteSelected: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
MODx.msg.confirm({ | |
title: _('collections.children.delete_multiple') | |
,text: _('collections.children.delete_multiple_confirm') | |
,url: this.config.url | |
,params: { | |
action: 'mgr/resource/deletemultiple' | |
,ids: cs | |
} | |
,listeners: { | |
'success': {fn:function(r) { | |
this.getSelectionModel().clearSelections(true); | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
return true; | |
} | |
,undeleteSelected: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
MODx.Ajax.request({ | |
url: this.config.url | |
,params: { | |
action: 'mgr/resource/undeletemultiple' | |
,ids: cs | |
} | |
,listeners: { | |
'success': {fn:function(r) { | |
this.getSelectionModel().clearSelections(true); | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
return true; | |
} | |
,undeleteChild: function(btn,e) { | |
MODx.Ajax.request({ | |
url: MODx.config.connectors_url+'resource/index.php' | |
,params: { | |
action: 'undelete' | |
,id: this.menu.record.id | |
} | |
,listeners: { | |
'success':{fn:this.refresh,scope:this} | |
} | |
}); | |
} | |
,publishSelected: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
MODx.Ajax.request({ | |
url: this.config.url | |
,params: { | |
action: 'mgr/resource/publishmultiple' | |
,ids: cs | |
} | |
,listeners: { | |
'success': {fn:function(r) { | |
this.getSelectionModel().clearSelections(true); | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
return true; | |
} | |
,unpublishSelected: function(btn,e) { | |
var cs = this.getSelectedAsList(); | |
if (cs === false) return false; | |
MODx.Ajax.request({ | |
url: this.config.url | |
,params: { | |
action: 'mgr/resource/unpublishmultiple' | |
,ids: cs | |
} | |
,listeners: { | |
'success': {fn:function(r) { | |
this.getSelectionModel().clearSelections(true); | |
this.refresh(); | |
},scope:this} | |
} | |
}); | |
return true; | |
} | |
,publishChild: function(btn,e) { | |
MODx.Ajax.request({ | |
url: MODx.config.connectors_url+'resource/index.php' | |
,params: { | |
action: 'publish' | |
,id: this.menu.record.id | |
} | |
,listeners: { | |
'success':{fn:this.refresh,scope:this} | |
} | |
}); | |
} | |
,unpublishChild: function(btn,e) { | |
MODx.Ajax.request({ | |
url: MODx.config.connectors_url+'resource/index.php' | |
,params: { | |
action: 'unpublish' | |
,id: this.menu.record.id | |
} | |
,listeners: { | |
'success':{fn:this.refresh,scope:this} | |
} | |
}); | |
} | |
,handleButtons: function(e){ | |
var t = e.getTarget(); | |
var elm = t.className.split(' ')[0]; | |
if(elm == 'controlBtn') { | |
var action = t.className.split(' ')[1]; | |
var record = this.getSelectionModel().getSelected(); | |
this.menu.record = record; | |
switch (action) { | |
case 'delete': | |
this.deleteChild(); | |
break; | |
case 'undelete': | |
this.undeleteChild(); | |
break; | |
case 'edit': | |
this.editChild(); | |
break; | |
case 'duplicate': | |
this.duplicateChild(); | |
break; | |
case 'publish': | |
this.publishChild(); | |
break; | |
case 'unpublish': | |
this.unpublishChild(); | |
break; | |
case 'view': | |
this.viewChild(); | |
break; | |
default: | |
window.location = record.data.edit_action; | |
break; | |
} | |
} | |
} | |
,getDragDropText: function(){ | |
if (this.store.sortInfo == undefined || this.store.sortInfo.field != 'menuindex') { | |
return _('collections.err.bad_sort_column', {column: 'menuindex'}); | |
} | |
var search = Ext.getCmp('collections-child-search'); | |
var filter = Ext.getCmp('collections-grid-filter-status'); | |
if (search.getValue() != '' || filter.getValue() != '') { | |
return _('collections.err.clear_filter'); | |
} | |
return this.selModel.selections.items[0].data.pagetitle; | |
} | |
,registerGridDropTarget: function() { | |
var ddrow = new Ext.ux.dd.GridReorderDropTarget(this, { | |
copy: false | |
,sortCol: 'menuindex' | |
,listeners: { | |
'beforerowmove': function(objThis, oldIndex, newIndex, records) { | |
} | |
,'afterrowmove': function(objThis, oldIndex, newIndex, records) { | |
MODx.Ajax.request({ | |
url: Collections.connectorUrl | |
,params: { | |
action: 'mgr/resource/ddreorder' | |
,idItem: records.pop().id | |
,oldIndex: oldIndex | |
,newIndex: newIndex | |
,parent: MODx.request.id | |
} | |
,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()); | |
} | |
}); | |
Ext.reg('collections-grid-children',Collections.grid.ContainerCollections); |
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
<?php | |
/* core/components/collections/processors/mgr/resource/getlist.class.php */ | |
/** | |
* Get list of Children | |
* | |
* @package collections | |
* @subpackage processors.resource | |
*/ | |
class CollectionsResourceGetListProcessor extends modObjectGetListProcessor { | |
public $classKey = 'modResource'; | |
public $defaultSortField = 'createdon'; | |
public $defaultSortDirection = 'DESC'; | |
public $checkListPermission = true; | |
public $languageTopics = array('resource','collections:default'); | |
/** @var modAction $editAction */ | |
public $editAction; | |
/** @var boolean $commentsEnabled */ | |
public $commentsEnabled = false; | |
public function initialize() { | |
$this->editAction = $this->modx->getObject('modAction',array( | |
'namespace' => 'core', | |
'controller' => 'resource/update', | |
)); | |
$sortBy = $this->getProperty('sort'); | |
if ($sortBy == 'unpublishedon') { | |
$this->setProperty('sort', 'unpub_date'); | |
} | |
return parent::initialize(); | |
} | |
public function prepareQueryBeforeCount(xPDOQuery $c) { | |
$parent = $this->getProperty('parent',null); | |
if (!empty($parent)) { | |
$c->where(array( | |
'parent' => $parent, | |
)); | |
} | |
$query = $this->getProperty('query',null); | |
if (!empty($query)) { | |
$c->leftJoin('modUserProfile', 'CreatedByProfile', array('CreatedByProfile.internalKey = modResource.createdby')); | |
$c->leftJoin('modUser', 'CreatedBy'); | |
$queryWhere = array( | |
'pagetitle:LIKE' => '%'.$query.'%', | |
'OR:description:LIKE' => '%'.$query.'%', | |
'OR:introtext:LIKE' => '%'.$query.'%', | |
'OR:CreatedByProfile.fullname:LIKE' => '%'.$query.'%', | |
'OR:CreatedBy.username:LIKE' => '%'.$query.'%', | |
); | |
$c->where($queryWhere); | |
} | |
$filter = $this->getProperty('filter',''); | |
switch ($filter) { | |
case 'published': | |
$c->where(array( | |
'published' => 1, | |
'deleted' => 0, | |
)); | |
break; | |
case 'unpublished': | |
$c->where(array( | |
'published' => 0, | |
'deleted' => 0, | |
)); | |
break; | |
case 'deleted': | |
$c->where(array( | |
'deleted' => 1, | |
)); | |
break; | |
default: | |
$c->where(array( | |
'deleted' => 0, | |
)); | |
break; | |
} | |
$c->where(array( | |
'class_key:!=' => 'CollectionContainer', | |
"NOT EXISTS (SELECT 1 FROM {$this->modx->getTableName('modResource')} r WHERE r.parent = modResource.id)" | |
)); | |
return $c; | |
} | |
/** | |
* @param xPDOObject $object | |
* @return array | |
*/ | |
public function prepareRow(xPDOObject $object) { | |
$resourceArray = parent::prepareRow($object); | |
if (!empty($resourceArray['createdon'])) { | |
$createdon = strtotime($resourceArray['createdon']); | |
$resourceArray['createdon_date'] = strftime($this->modx->getOption('collections.mgr_date_format',null,'%b %d'),$createdon); | |
$resourceArray['createdon_time'] = strftime($this->modx->getOption('collections.mgr_time_format',null,'%H:%M %p'),$createdon); | |
$resourceArray['createdon'] = strftime('%b %d, %Y %H:%I %p',$createdon); | |
} | |
if (!empty($resourceArray['publishedon']) || !empty($resourceArray['pub_date'])) { | |
$publishedon = strtotime($resourceArray['publishedon']) == '' ? strtotime($resourceArray['pub_date']) : strtotime($resourceArray['publishedon']); | |
$resourceArray['publishedon_date'] = strftime($this->modx->getOption('collections.mgr_date_format',null,'%b %d'),$publishedon); | |
$resourceArray['publishedon_time'] = strftime($this->modx->getOption('collections.mgr_time_format',null,'%H:%M %p'),$publishedon); | |
$resourceArray['publishedon'] = strftime('%b %d, %Y %H:%I %p',$publishedon); | |
} | |
if (!empty($resourceArray['unpub_date'])) { | |
$unpublishon = strtotime($resourceArray['unpub_date']); | |
$resourceArray['unpublishedon_date'] = strftime($this->modx->getOption('collections.mgr_date_format',null,'%b %d'),$unpublishon); | |
$resourceArray['unpublishedon_time'] = strftime($this->modx->getOption('collections.mgr_time_format',null,'%H:%M %p'),$unpublishon); | |
$resourceArray['unpublishedon'] = strftime('%b %d, %Y %H:%I %p',$unpublishon); | |
} | |
$resourceArray['action_edit'] = '?a='.$this->editAction->get('id').'&action=post/update&id='.$resourceArray['id']; | |
$this->modx->getContext($resourceArray['context_key']); | |
$resourceArray['preview_url'] = $this->modx->makeUrl($resourceArray['id'],$resourceArray['context_key']); | |
$resourceArray['actions'] = array(); | |
$resourceArray['actions'][] = array( | |
'className' => 'edit', | |
'text' => $this->modx->lexicon('edit'), | |
); | |
$resourceArray['actions'][] = array( | |
'className' => 'duplicate', | |
'text' => $this->modx->lexicon('duplicate'), | |
); | |
$resourceArray['actions'][] = array( | |
'className' => 'view', | |
'text' => $this->modx->lexicon('view'), | |
); | |
if (!empty($resourceArray['deleted'])) { | |
$resourceArray['actions'][] = array( | |
'className' => 'undelete', | |
'text' => $this->modx->lexicon('undelete'), | |
); | |
} else { | |
$resourceArray['actions'][] = array( | |
'className' => 'delete', | |
'text' => $this->modx->lexicon('delete'), | |
); | |
} | |
if (!empty($resourceArray['published'])) { | |
$resourceArray['actions'][] = array( | |
'className' => 'unpublish', | |
'text' => $this->modx->lexicon('unpublish'), | |
); | |
} else { | |
$resourceArray['actions'][] = array( | |
'className' => 'publish orange', | |
'text' => $this->modx->lexicon('publish'), | |
); | |
} | |
return $resourceArray; | |
} | |
} | |
return 'CollectionsResourceGetListProcessor'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment