コード例 #1
0
 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
コード例 #2
0
 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))