| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580 |
- /**
- * Loads a grid of Packages.
- *
- * @class MODx.grid.Package
- * @extends MODx.grid.Grid
- * @param {Object} config An object of options.
- * @xtype modx-package-grid
- */
- MODx.grid.Package = function(config) {
- config = config || {};
- this.exp = new Ext.grid.RowExpander({
- tpl : new Ext.XTemplate(
- '<p class="package-readme"><i>{readme}</i></p>'
- )
- });
- /* Package name + action button renderer */
- this.mainColumnTpl = new Ext.XTemplate('<tpl for=".">'
- +'<h3 class="main-column{state:defaultValue("")}">{name}</h3>'
- +'<tpl if="actions !== null">'
- +'<ul class="actions">'
- +'<tpl for="actions">'
- +'<li><button type="button" class="controlBtn {className}">{text}</button></li>'
- +'</tpl>'
- +'</ul>'
- +'</tpl>'
- +'<tpl if="message !== null">'
- +'<tpl for="message">'
- +'<div class="{className}">{text}</div>'
- +'</tpl>'
- +'</tpl>'
- +'</tpl>', {
- compiled: true
- });
- var cols = [];
- cols.push(this.exp);
- cols.push({ header: _('name') ,dataIndex: 'name', id:'main',renderer: { fn: this.mainColumnRenderer, scope: this } });
- cols.push({ header: _('version') ,dataIndex: 'version', id: 'meta-col', fixed:true, width:120, renderer: function (v, md, record) { return v + '-' + record.data.release;} });
- cols.push({ header: _('installed') ,dataIndex: 'installed', id: 'info-col', fixed:true, width: 160 ,renderer: this.dateColumnRenderer });
- cols.push({ header: _('provider') ,dataIndex: 'provider_name', id: 'text-col', fixed:true, width:120 });
- var dlbtn;
- if (MODx.curlEnabled) {
- dlbtn = {
- text: _('download_extras')
- ,xtype: 'splitbutton'
- ,cls:'primary-button'
- ,handler: this.onDownloadMoreExtra
- ,menu: {
- items:[{
- text: _('provider_select')
- ,handler: this.changeProvider
- ,scope: this
- },{
- text: _('package_search_local_title')
- ,handler: this.searchLocal
- ,scope: this
- },{
- text: _('transport_package_upload')
- ,handler: this.uploadTransportPackage
- ,scope: this
- }]
- }
- };
- } else {
- dlbtn = {
- text: _('package_search_local_title')
- ,xtype: 'splitbutton'
- ,handler: this.searchLocal
- ,scope: this
- ,menu: {
- items: [{
- text: _('transport_package_upload')
- ,handler: this.uploadTransportPackage
- ,scope: this
- }]
- }
- };
- }
- Ext.applyIf(config,{
- title: _('packages')
- ,id: 'modx-package-grid'
- ,url: MODx.config.connector_url
- ,action: 'workspace/packages/getlist'
- ,fields: ['signature','name','version','release','created','updated','installed','state','workspace'
- ,'provider','provider_name','disabled','source','attributes','readme','menu'
- ,'install','textaction','iconaction','updateable']
- ,plugins: [this.exp]
- ,pageSize: Math.min(parseInt(MODx.config.default_per_page), 25)
- ,columns: cols
- ,primaryKey: 'signature'
- ,paging: true
- ,autosave: true
- ,tbar: [dlbtn, {
- text: _('packages_purge')
- ,handler: this.purgePackages
- },'->',{
- xtype: 'textfield'
- ,name: 'search'
- ,id: 'modx-package-search'
- ,cls: 'x-form-filter'
- ,emptyText: _('search_ellipsis')
- ,listeners: {
- 'change': {fn: this.search, scope: this}
- ,'render': {fn: function(pnl) {
- new Ext.KeyMap(pnl.getEl(), {
- key: Ext.EventObject.ENTER
- ,fn: this.blur
- ,scope: pnl
- });
- },scope:this}
- }
- },{
- xtype: 'button'
- ,id: 'modx-package-filter-clear'
- ,cls: 'x-form-filter-clear'
- ,text: _('filter_clear')
- ,listeners: {
- 'click': {fn: this.clearFilter, scope: this},
- 'mouseout': { fn: function(evt){
- this.removeClass('x-btn-focus');
- }
- }
- }
- }]
- });
- MODx.grid.Package.superclass.constructor.call(this,config);
- this.on('render',function() {
- this.getView().mainBody.update('<div class="x-grid-empty">' + _('loading') + '</div>');
- },this);
- this.on('click', this.onClick, this);
- };
- Ext.extend(MODx.grid.Package,MODx.grid.Grid,{
- console: null
- ,activate: function() {
- var west = Ext.getCmp('modx-leftbar-tabs')
- ,stateId = 'modx-leftbar-tabs';
- if (west && west.stateId) {
- stateId = west.stateId;
- }
- var state = Ext.state.Manager.get(stateId);
- if (state && state.collapsed === false) {
- // Panel was not collapsed before, lets restore it
- Ext.getCmp('modx-layout').showLeftbar();
- }
- Ext.getCmp('modx-panel-packages').getLayout().setActiveItem(this.id);
- this.updateBreadcrumbs(_('packages_desc'));
- }
- ,updateBreadcrumbs: function(msg, highlight){
- msg = Ext.getCmp('packages-breadcrumbs').desc;
- if(highlight){
- msg.text = msg;
- msg.className = 'highlight';
- }
- Ext.getCmp('packages-breadcrumbs').reset(msg);
- }
- ,search: function(tf,newValue,oldValue) {
- var nv = newValue || tf;
- this.getStore().baseParams.search = Ext.isEmpty(nv) || Ext.isObject(nv) ? '' : nv;
- this.getBottomToolbar().changePage(1);
- //this.refresh();
- return true;
- }
- ,clearFilter: function() {
- this.getStore().baseParams = {
- action: 'workspace/packages/getList'
- };
- Ext.getCmp('modx-package-search').reset();
- this.getBottomToolbar().changePage(1);
- //this.refresh();
- }
- /* Main column renderer */
- ,mainColumnRenderer:function (value, metaData, record, rowIndex, colIndex, store){
- var rec = record.data;
- var state = (rec.installed !== null) ? ' installed' : ' not-installed';
- var values = { name: value, state: state, actions: null, message: null };
- var h = [];
- if(rec.installed !== null) {
- h.push({ className:'uninstall', text: rec.textaction });
- h.push({ className:'reinstall', text: _('package_reinstall_action_button') });
- } else {
- h.push({ className:'install primary-button', text: rec.textaction });
- }
- if (rec.updateable) {
- h.push({ className:'update orange', text: _('package_update_action_button') });
- } else {
- if( rec.provider != 0 ){
- h.push({ className:'checkupdate', text: _('package_check_for_updates') });
- }
- }
- h.push({ className:'remove', text: _('package_remove_action_button') });
- h.push({ className:'details', text: _('view_details') });
- values.actions = h;
- return this.mainColumnTpl.apply(values);
- }
- ,dateColumnRenderer: function(d,c) {
- switch(d) {
- case '':
- case null:
- c.css = 'not-installed';
- return _('not_installed');
- default:
- c.css = '';
- return _('installed_on',{'time':d});
- }
- }
- ,onClick: function(e){
- var t = e.getTarget();
- var elm = t.className.split(' ')[0];
- if(elm == 'controlBtn'){
- var act = t.className.split(' ')[1];
- var record = this.getSelectionModel().getSelected();
- this.menu.record = record.data;
- switch (act) {
- case 'remove':
- this.remove(record, e);
- break;
- case 'install':
- case 'reinstall':
- this.install(record);
- break;
- case 'uninstall':
- this.uninstall(record, e);
- break;
- case 'update':
- case 'checkupdate':
- this.update(record, e);
- break;
- case 'details':
- this.viewPackage(record, e);
- break;
- default:
- break;
- }
- }
- }
- /* Install a package */
- ,install: function( record ){
- Ext.Ajax.request({
- url : MODx.config.connector_url
- ,params : {
- action : 'workspace/packages/getAttribute'
- ,attributes: 'license,readme,changelog,setup-options,requires'
- ,signature: record.data.signature
- }
- ,method: 'GET'
- ,scope: this
- ,success: function ( result, request ) {
- this.processResult( result.responseText, record );
- }
- ,failure: function ( result, request) {
- Ext.MessageBox.alert(_('failed'), result.responseText);
- }
- });
- }
- /* Go through the install process */
- ,processResult: function( response, record ){
- var data = Ext.util.JSON.decode( response );
- if ( data.object.license !== null && data.object.readme !== null && data.object.changelog !== null ){
- /* Show license/changelog panel */
- p = Ext.getCmp('modx-package-beforeinstall');
- p.activate();
- p.updatePanel( data.object, record );
- }
- else if ( data.object['setup-options'] !== null ) {
- /* No license/changelog, show setup-options */
- Ext.getCmp('package-show-setupoptions-btn').signature = record.data.signature;
- Ext.getCmp('modx-panel-packages').onSetupOptions();
- } else {
- /* No license/changelog, no setup-options, install directly */
- Ext.getCmp('package-install-btn').signature = record.data.signature;
- Ext.getCmp('modx-panel-packages').install();
- }
- }
- /* Launch Package Browser */
- ,onDownloadMoreExtra: function(btn,e){
- MODx.provider = MODx.defaultProvider;
- Ext.getCmp('modx-panel-packages-browser').activate();
- }
- ,changeProvider: function(btn, e){
- this.loadWindow(btn,e,{
- xtype: 'modx-package-changeprovider'
- });
- }
- /**
- * Open a window allowing user to upload a transport package directly
- */
- ,uploadTransportPackage: function(btn,e){
- if (!this.uploader) {
- this.uploader = new MODx.util.MultiUploadDialog.Dialog({
- url: MODx.config.connector_url
- ,base_params: {
- action: 'workspace/packages/upload'
- ,wctx: MODx.ctx || ''
- ,source: MODx.config.default_media_source
- ,path: MODx.config.core_path+'packages/'
- }
- ,permitted_extensions: ['zip']
- ,cls: 'ext-ux-uploaddialog-dialog modx-upload-window'
- });
- this.uploader.on('hide',function(){
- this.searchLocalWithoutPrompt();
- },this);
- this.uploader.on('close',function(){
- this.searchLocalWithoutPrompt();
- },this);
- }
- this.uploader.base_params.source = 1;
- this.uploader.show(btn);
- }
- ,searchLocal: function() {
- MODx.msg.confirm({
- title: _('package_search_local_title')
- ,text: _('package_search_local_confirm')
- ,url: MODx.config.connector_url
- ,params: {
- action: 'workspace/packages/scanLocal'
- }
- ,listeners: {
- 'success':{fn:function(r) {
- this.getStore().reload();
- },scope:this}
- }
- });
- }
- /**
- * Scan for new packages, without the pointless & annoying confirmation box
- */
- ,searchLocalWithoutPrompt: function(){
- MODx.Ajax.request({
- url: MODx.config.connector_url
- ,params: {
- action: 'workspace/packages/scanLocal'
- }
- ,listeners: {
- 'success':{fn:function(r) {
- this.getStore().reload();
- },scope:this}
- }
- })
- }
- /* Go to package details @TODO : Stay on the same page */
- ,viewPackage: function(btn,e) {
- MODx.loadPage('workspaces/package/view', 'signature='+this.menu.record.signature+'&package_name='+this.menu.record.name);
- }
- /* Search for a package update - only for installed package */
- ,update: function(btn,e) {
- if (this.windows['modx-window-package-update']) {
- this.windows['modx-window-package-update'].destroy();
- }
- MODx.Ajax.request({
- url: this.config.url
- ,params: {
- action: 'workspace/packages/update-remote'
- ,signature: this.menu.record.signature
- }
- ,listeners: {
- 'success': {fn:function(r) {
- this.loadWindow(btn,e,{
- xtype: 'modx-window-package-update'
- ,cls: 'modx-alert'
- ,packages: r.object
- ,record: this.menu.record
- ,force: true
- ,listeners: {
- 'success': {fn: function(o) {
- this.refresh();
- this.menu.record = {data:o.a.result.object};
- this.install(this.menu.record);
- },scope:this}
- }
- });
- },scope:this}
- ,'failure': {fn: function(r) {
- MODx.msg.alert(_('package_update'),r.message);
- return false;
- },scope:this}
- }
- });
- }
- /* Uninstall a package */
- ,uninstall: function(btn,e) {
- this.loadWindow(btn,e,{
- xtype: 'modx-window-package-uninstall'
- ,listeners: {
- success: {
- fn: function(va) {
- this._uninstall(this.menu.record,va,btn);
- }
- ,scope: this
- }
- }
- });
- }
- ,_uninstall: function(r,va,btn) {
- r = this.menu.record;
- va = va || {};
- var topic = '/workspace/package/uninstall/'+r.signature+'/';
- this.loadConsole(btn,topic);
- Ext.apply(va,{
- action: 'workspace/packages/uninstall'
- ,signature: r.signature
- ,register: 'mgr'
- ,topic: topic
- });
- MODx.Ajax.request({
- url: this.config.url
- ,params: va
- ,listeners: {
- 'success': {fn:function(r) {
- Ext.Msg.hide();
- this.refresh();
- Ext.getCmp('modx-layout').refreshTrees();
- },scope:this}
- ,'failure': {fn:function(r) {
- Ext.Msg.hide();
- this.refresh();
- },scope:this}
- }
- });
- }
- /* Remove a package entirely */
- ,remove: function(btn,e) {
- if (this.destroying) {
- return MODx.grid.Package.superclass.remove.apply(this, arguments);
- }
- var r = this.menu.record;
- var topic = '/workspace/package/remove/'+r.signature+'/';
- this.loadWindow(btn,e,{
- xtype: 'modx-window-package-remove'
- ,record: {
- signature: r.signature
- ,topic: topic
- ,register: 'mgr'
- }
- });
- }
- /* Purge old packages */
- ,purgePackages: function(btn,e) {
- var topic = '/workspace/packages/purge/';
- this.loadWindow(btn,e,{
- xtype: 'modx-window-packages-purge'
- ,record: {
- packagename: '*'
- ,topic: topic
- ,register: 'mgr'
- }
- ,listeners: {
- success: {fn: function(o) {
- this.refresh();
- },scope:this}
- }
- });
- }
- /* Load the console */
- ,loadConsole: function(btn,topic) {
- this.console = MODx.load({
- xtype: 'modx-console'
- ,register: 'mgr'
- ,topic: topic
- });
- this.console.show(btn);
- }
- ,getConsole: function() {
- return this.console;
- }
- });
- Ext.reg('modx-package-grid',MODx.grid.Package);
- MODx.window.PackageUpdate = function(config) {
- config = config || {};
- Ext.applyIf(config,{
- title: _('package_update')
- ,url: MODx.config.connector_url
- ,action: 'workspace/packages/rest/download'
- // ,height: 400
- // ,width: 400
- ,id: 'modx-window-package-update'
- ,saveBtnText: _('update')
- ,fields: this.setupOptions(config.packages,config.record)
- });
- MODx.window.PackageUpdate.superclass.constructor.call(this,config);
- this.on('hide',function() { this.destroy(); },this);
- };
- Ext.extend(MODx.window.PackageUpdate,MODx.Window,{
- setupOptions: function(ps,rec) {
- var items = [{
- html: _('package_update_to_version')
- ,border: false
- },{
- xtype: 'hidden'
- ,name: 'provider'
- ,value: Ext.isDefined(rec.provider) ? rec.provider : MODx.provider
- }];
- for (var i=0;i<ps.length;i=i+1) {
- var pkg = ps[i]
- ,label = pkg.signature;
- if (pkg.changelog) {
- // We have a changelog string, allow users to view it
- label += '<a href="javascript:;" class="changelog">'+ _('changelog') +'</a>';
- }
- items.push({
- xtype: 'radio'
- ,name: 'info'
- ,boxLabel: label
- ,itemCls: 'radio-version'
- ,hideLabel: true
- ,description: pkg.description
- ,inputValue: pkg.info
- ,labelSeparator: ''
- ,checked: i === 0
- ,listeners: {
- afterrender: {
- fn: function (radio) {
- var changelog = radio.container.query('.changelog')[0];
- if (!changelog) {
- return;
- }
- // When the changelog link is clicked, display the changelog in a window
- Ext.get(changelog).on('click', function(elem) {
- var win = MODx.load({
- xtype: 'modx-window'
- ,title: _('changelog')
- ,cls: 'modx-alert'
- ,width: 520
- ,style: 'white-space: pre-wrap'
- ,fields: [{
- xtype: 'box'
- ,html: pkg.changelog
- }]
- ,buttons: [{
- text: _('close')
- ,handler: function() {
- win.close();
- }
- }]
- });
- win.show();
- });
- }
- }
- }
- });
- }
- return items;
- }
- });
- Ext.reg('modx-window-package-update',MODx.window.PackageUpdate);
|