let AdminTools = function (config) { config = config || {}; AdminTools.superclass.constructor.call(this, config); }; Ext.extend(AdminTools, Ext.Component, { page: {}, window: {}, grid: {}, tree: {}, panel: {}, combo: {}, config: {}, view: {}, utils: {}, toolbar: {}, lock: function () { MODx.Ajax.request({ url: adminToolsSettings.config.connector_url, params: { action: 'mgr/system/lock' }, listeners: { success: { fn: function(response) { document.location.reload(); }, scope: this } } }); }, setTimeout: function (time) { return setTimeout(function () { AdminTools.lock(); }, time) }, syncMessageCounter: function () { if (AdminTools.messageCounterEl === undefined) { AdminTools.messageCounterEl = document.getElementById('message-counter'); } let counter = this.getMessageCounter(); AdminTools.messageCounterEl.innerText = (counter == 0) ? '' : counter; }, getMessageCounter: function () { return adminToolsSettings.config.messages; }, increaseMessageCounter: function () { adminToolsSettings.config.messages++; this.syncMessageCounter(); return adminToolsSettings.config.messages; }, decreaseMessageCounter: function () { adminToolsSettings.config.messages--; if (adminToolsSettings.config.messages < 0) { adminToolsSettings.config.messages = 0; } this.syncMessageCounter(); return adminToolsSettings.config.messages; }, }); Ext.reg('admintools', AdminTools); AdminTools = new AdminTools(); AdminTools.utils.renderBoolean = function (value, props, row) { return value ? String.format('{0}', _('yes')) : String.format('{0}', _('no')); }; AdminTools.utils.renderPrincipalType = function (value, props, row) { let output; switch (value) { case 'grp': output = ''; break; case 'usr': output = ''; break; default: output = ''; break; } return output; }; AdminTools.utils.getMenu = function (actions, grid, selected) { let menu = []; let cls, icon, title, action = ''; for (let i in actions) { if (!actions.hasOwnProperty(i)) { continue; } let a = actions[i]; if (!a['menu']) { if (a == '-') { menu.push('-'); } continue; } else if (menu.length > 0 && /^remove/i.test(a['action'])) { menu.push('-'); } if (selected.length > 1) { if (!a['multiple']) { continue; } else if (typeof(a['multiple']) == 'string') { a['title'] = a['multiple']; } } cls = a['cls'] ? a['cls'] : ''; icon = a['icon'] ? a['icon'] : ''; title = a['title'] ? a['title'] : a['title']; action = a['action'] ? grid[a['action']] : ''; menu.push({ handler: action, text: String.format( '{2}', cls, icon, title ), }); } return menu; }; AdminTools.utils.renderActions = function (value, props, row) { let res = []; let cls, icon, title, action, item = ''; for (let i in row.data.actions) { if (!row.data.actions.hasOwnProperty(i)) { continue; } let a = row.data.actions[i]; if (!a['button']) { continue; } cls = a['cls'] ? a['cls'] : ''; icon = a['icon'] ? a['icon'] : ''; action = a['action'] ? a['action'] : ''; title = a['title'] ? a['title'] : ''; item = String.format( '
  • ', cls, icon, action, title ); res.push(item); } return String.format( '', res.join('') ); }; // Status AdminTools.combo.SearchTypes = function(config) { config = config || {}; Ext.applyIf(config,{ triggerAction: 'all', typeAhead: true, mode: 'local', hideMode: 'offsets', autoScroll: true, maxHeight: 200, store: [[1,_('admintools_search_everywhere')],[2,_('admintools_search_in_titles')],[3,_('admintools_search_in_text')],[4,_('admintools_search_in_tags')]], hiddenName: 'wheresearch', editable: true }); AdminTools.combo.SearchTypes.superclass.constructor.call(this,config); }; Ext.extend(AdminTools.combo.SearchTypes,MODx.combo.ComboBox); Ext.reg('admintools-combo-wheresearch',AdminTools.combo.SearchTypes); Ext.onReady(function () { let theme = '', region = ''; //let adminToolsSettings = adminToolsSettings || {config:{theme:'', region:'west'}}; if (adminToolsSettings) { theme = adminToolsSettings.config.theme; region = adminToolsSettings.config.region; } if (theme) Ext.getBody().addClass(theme); if (region == 'east') { Ext.getBody().addClass('right-side-tree'); let contentNode = Ext.get('modx-content'), actionButtonsNode = Ext.get('modx-action-buttons-container'); if (actionButtonsNode) actionButtonsNode.appendTo(contentNode); } let Items = Ext.query('ul.modx-subsubnav'); for (let i = 0; Items.length > i; i++) { Items[i].parentNode.classList.add('has-subnav'); } // Lock if (adminToolsSettings.config.show_lockmenu > 0) { let userMenuList = document.querySelector('#limenu-user ul.modx-subnav'); let newLi = document.createElement('li'); newLi.id = 'admintools-lock'; newLi.innerHTML = '' + _('admintools_lock') + ' ' + _('admintools_lock_desc') + ''; setTimeout(function () { if (userMenuList) userMenuList.insertBefore(newLi, userMenuList.lastChild); }, 300); } if (adminToolsSettings.config.lock_timeout > 0) { let lockTimeout = AdminTools.setTimeout(adminToolsSettings.config.lock_timeout); ['mousemove','keydown','wheel','click','contextmenu'].forEach(function(event) { Ext.select('body').on(event, function(e) { clearTimeout(lockTimeout); lockTimeout = AdminTools.setTimeout(adminToolsSettings.config.lock_timeout); }); }); } // Messages if (adminToolsSettings.config.messages >= 0) { Ext.ComponentMgr.onAvailable('modx-grid-message', function () { this.getStore().on("update", function (g, p, o) { if (o == 'commit') { if (p.data.read) { AdminTools.decreaseMessageCounter(); } else { AdminTools.increaseMessageCounter(); } } }, this); this.on('afterRemoveRow', function (r) { AdminTools.decreaseMessageCounter(); }) }); let userMenu = document.querySelector('#limenu-user > a'); let newSpan = document.createElement('span'); newSpan.id = 'message-counter'; newSpan.className = 'badge'; newSpan.innerText = AdminTools.getMessageCounter() ? AdminTools.getMessageCounter() : ''; setTimeout(function () { if (userMenu) userMenu.appendChild(newSpan); }, 300); } // Package actions if (MODx.grid.Package) { Ext.override(MODx.grid.Package, { onClick: function (e) { let t = e.getTarget(); let classes = t.className.split(' '); if (classes[0] == 'controlBtn') { let action = classes[1]; let record = this.getSelectionModel().getSelected(); let packageOptions = adminToolsPackageActions[record.data.name] || adminToolsPackageActions[record.data.name] || false; this.menu.record = record.data; if (packageOptions) { let message; [action, 'all'].every(function (item, i) { if (packageOptions[item] !== undefined) { if (Ext.isString(packageOptions[item])) { message = packageOptions[item]; } else if (!packageOptions[item]) { message = packageOptions['message'] ? packageOptions['message'] : _('permission_denied'); } else if (packageOptions[item]) { return false; } } if (message !== undefined) { Ext.MessageBox.alert(_('warning'), message); action = ''; return false; } return true; }); } switch (action) { 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; } } } }); } });