def getMetaCmd(self, id): obs = self.getMetaCmds(sort=False) # Filter by id. obs = [x for x in obs if x['id'] == id] # Not found! if len(obs) == 0: return None # Refresh Object. metaCmd = obs[0] if metaCmd.get('home',None)==None: return None if 'exec' in metaCmd: metaCmd['execution'] = metaCmd['exec'] del metaCmd['exec'] container = self.aq_parent src = zopeutil.getObject(metaCmd['home'], metaCmd['id']) newData = zopeutil.readObject(metaCmd['home'], metaCmd['id'], '') data = zopeutil.readObject(container, metaCmd['id'], '') acquiredExternalMethod = metaCmd.get('acquired',0) and src.meta_type=='External Method' if src is not None and (newData != data or acquiredExternalMethod): newId = metaCmd['id'] newMethod = src.meta_type newTitle = '*** DO NOT DELETE OR MODIFY ***' zopeutil.removeObject(container, newId, removeFile=False) zopeutil.addObject(container, newMethod, ['',metaCmd['home'].getHome().getId()+'.'][acquiredExternalMethod]+newId, newTitle, newData) ob = zopeutil.getObject(container, metaCmd['id']) if ob is not None: metaCmd['meta_type'] = ob.meta_type metaCmd['data'] = zopeutil.readObject(container, metaCmd['id'], '') metaCmd['bobobase_modification_time'] = DateTime(ob._p_mtime) return metaCmd
def manage_changeMetacmds(self, btn, lang, REQUEST, RESPONSE): """ ZMSMetacmdProvider.manage_changeMetacmds """ message = '' id = REQUEST.get('id', '') # Acquire. # -------- if btn == 'BTN_ACQUIRE': aq_ids = REQUEST.get('aq_ids', []) for newId in aq_ids: newAcquired = 1 self.setMetacmd(None, newId, newAcquired) message = self.getZMILangStr('MSG_INSERTED')%str(len(aq_ids)) # Change. # ------- elif btn == 'BTN_SAVE': id = REQUEST['id'] newId = REQUEST['el_id'].strip() newAcquired = 0 newPackage = REQUEST.get('el_package', '').strip() newRevision = REQUEST.get('el_revision', '').strip() newName = REQUEST.get('el_name', '').strip() newTitle = REQUEST.get('el_title', '').strip() newMethod = REQUEST.get('el_method') newData = REQUEST.get('el_data', '').strip() newExecution = REQUEST.get('el_execution', 0) newDescription = REQUEST.get('el_description', '').strip() newIconClazz = REQUEST.get('el_icon_clazz', '') newMetaTypes = REQUEST.get('el_meta_types', []) newRoles = REQUEST.get('el_roles', []) newNodes = REQUEST.get('el_nodes', '') id = self.setMetacmd(id, newId, newAcquired, newPackage, newRevision, newName, \ newTitle, newMethod, newData, newExecution, newDescription, newIconClazz, \ newMetaTypes, newRoles, newNodes) message = self.getZMILangStr('MSG_CHANGED') # Copy. # ----- elif btn == 'BTN_COPY': metaOb = self.getMetaCmd(id) if metaOb.get('acquired', 0) == 1: portalMaster = self.getPortalMaster() if portalMaster is not None: REQUEST.set('ids', [id]) xml = portalMaster.manage_changeMetacmds('BTN_EXPORT', lang, REQUEST, RESPONSE) self.importXml(xml=xml) message = self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%id) # Delete. # ------- elif btn == 'BTN_DELETE': if id: ids = [id] else: ids = REQUEST.get('ids', []) for id in ids: self.delMetacmd(id) id = '' message = self.getZMILangStr('MSG_DELETED')%len(ids) # Export. # ------- elif btn == 'BTN_EXPORT': revision = '0.0.0' value = [] ids = REQUEST.get('ids', []) for id in self.getMetaCmdIds(): if id in ids or len(ids) == 0: metaCmd = self.getMetaCmd(id) revision = metaCmd.get('revision', '0.0.0') el_id = metaCmd['id'] el_name = metaCmd['name'] el_title = metaCmd.get('title', '') el_meta_type = metaCmd['meta_type'] el_description = metaCmd['description'] el_icon_clazz = metaCmd.get('icon_clazz', '') el_meta_types = metaCmd['meta_types'] el_roles = metaCmd['roles'] el_execution = metaCmd['execution'] el_data = zopeutil.readObject(metaCmd['home'], metaCmd['id']) # Value. value.append({'id':el_id,'revision':revision,'name':el_name,'title':el_title,'description':el_description,'meta_types':el_meta_types,'roles':el_roles,'execution':el_execution,'icon_clazz':el_icon_clazz,'meta_type':el_meta_type,'data':el_data}) # XML. if len(ids)==1: filename = '%s-%s.metacmd.xml'%(ids[0], revision) else: filename = 'export.metacmd.xml' content_type = 'text/xml; charset=utf-8' export = self.getXmlHeader() + self.toXmlString(value, 1) RESPONSE.setHeader('Content-Type', content_type) RESPONSE.setHeader('Content-Disposition', 'attachment;filename="%s"'%filename) return export # Import. # ------- elif btn == 'BTN_IMPORT': f = REQUEST['file'] if f: filename = f.filename self.importXml(xml=f) else: filename = REQUEST['init'] self.importConf(filename) message = self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%f.filename) # Insert. # ------- elif btn == 'BTN_INSERT': newId = REQUEST.get('_id').strip() newAcquired = 0 newPackage = REQUEST.get('_package', '').strip() newRevision = REQUEST.get('_revision', '0.0.0').strip() newName = REQUEST.get('_name').strip() newTitle = REQUEST.get('_title').strip() newMethod = REQUEST.get('_type', 'DTML Method') newData = None newExecution = REQUEST.get('_execution', 0) newIconClazz = REQUEST.get('_icon_clazz', '') id = self.setMetacmd(None, newId, newAcquired, newPackage, newRevision, newName, newTitle, newMethod, newData, newExecution, newIconClazz=newIconClazz) message = self.getZMILangStr('MSG_INSERTED')%id # Sync with repository. self.getRepositoryManager().exec_auto_commit(self, id) # Return with message. message = standard.url_quote(message) return RESPONSE.redirect('manage_main?lang=%s&manage_tabs_message=%s&id=%s'%(lang, message, id))