def manage_upload(self,file='',REQUEST=None): """ overrides Image.manage_upload to trigger Zoomify metadata generation whenever file data is uploaded to Zope (covers add and edit methods) """ self._v_imageFilename = file.filename Image.manage_upload(self, file=file, REQUEST=REQUEST) if REQUEST: message=""" The image has been saved, and Zoomify metadata is now being generated on the server. It will take time for the process to complete, and for the image data to be available for the Zoomify viewer. """ return self.aq_parent.manage_main(self,REQUEST,manage_tabs_message=message)
class ConfManager( _multilangmanager.MultiLanguageManager, _metacmdmanager.MetacmdManager, _filtermanager.FilterManager, ): zope.interface.implements(IZMSMetamodelProvider.IZMSMetamodelProvider, IZMSFormatProvider.IZMSFormatProvider) # Create a SecurityInfo for this class. We will use this # in the rest of our class definition to make security # assertions. security = ClassSecurityInfo() # Management Interface. # --------------------- addZMSCustomForm = ConfDict.template('addzmscustomform') addZMSLinkElementForm = ConfDict.template('addzmslinkelementform') addZMSSqlDbForm = ConfDict.template('addzmssqldbform') manage_customize = HTMLFile('dtml/ZMS/manage_customize', globals()) manage_customizeLanguagesForm = HTMLFile( 'dtml/ZMS/manage_customizelanguagesform', globals()) manage_customizeMetacmdForm = HTMLFile('dtml/metacmd/manage_customizeform', globals()) manage_customizeFilterForm = HTMLFile( 'dtml/ZMS/manage_customizefilterform', globals()) manage_customizeDesignForm = HTMLFile( 'dtml/ZMS/manage_customizedesignform', globals()) manage_editorForm = HTMLFile('dtml/ZMS/manage_editorform', globals()) # -------------------------------------------------------------------------- # ConfManager.importConfPackage: # -------------------------------------------------------------------------- def importConfPackage(self, file, REQUEST, createIfNotExists=0): if type(file) is str: if file.startswith('http://'): file = StringIO(self.http_import(file)) else: file = open(_fileutil.getOSPath(file), 'rb') files = _fileutil.getZipArchive(file) for f in files: if not f.get('isdir'): self.importConf(f, REQUEST, createIfNotExists) self.synchronizeObjAttrs() # -------------------------------------------------------------------------- # ConfManager.getConfXmlFile: # -------------------------------------------------------------------------- def getConfXmlFile(self, file): if type(file) is dict: filename = file['filename'] xmlfile = StringIO(file['data']) elif type(file) is str and file.startswith('http://'): filename = _fileutil.extractFilename(file) xmlfile = StringIO(self.http_import(file)) else: filename = _fileutil.extractFilename(file) xmlfile = open(_fileutil.getOSPath(file), 'rb') return filename, xmlfile # -------------------------------------------------------------------------- # ConfManager.importConf: # -------------------------------------------------------------------------- def importConf(self, file, REQUEST, createIfNotExists=0): message = '' filename, xmlfile = self.getConfXmlFile(file) zms_system = 1 if filename.find('.charfmt.') > 0: self.format_manager.importCharformatXml(xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.filter.') > 0: _filtermanager.importXml(self, xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.metadict.') > 0: self.metaobj_manager.importMetadictXml(xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.metaobj.') > 0: self.metaobj_manager.importMetaobjXml(xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.metacmd.') > 0: _metacmdmanager.importXml(self, xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.langdict.') > 0: _multilangmanager.importXml(self, xmlfile, REQUEST, zms_system, createIfNotExists) elif filename.find('.textfmt.') > 0: self.format_manager.importTextformatXml(xmlfile, REQUEST, zms_system, createIfNotExists) xmlfile.close() return message # -------------------------------------------------------------------------- # ConfManager.getConfFiles: # # Returns configuration-files from $ZMS_HOME/import-Folder # -------------------------------------------------------------------------- def getConfFiles(self, pattern=None, REQUEST=None, RESPONSE=None): """ ConfManager.getConfFiles """ filenames = {} filepaths = [ self.Control_Panel.getINSTANCE_HOME() + '/etc/zms/import/', package_home(globals()) + '/import/', ] try: conf = open(filepaths[0] + 'configure.zcml', 'r') _globals.writeBlock( self, "[getConfFiles]: Read from " + filepaths[0] + "configure.zcml") except: conf = open(filepaths[1] + 'configure.zcml', 'r') _globals.writeBlock( self, "[getConfFiles]: Read from " + filepaths[0] + "configure.zcml") conf_xml = self.xmlParse(conf) for source in self.xmlNodeSet(conf_xml, 'source'): location = source['attrs']['location'] if location.startswith('http://'): try: remote_conf = self.http_import(location + 'configure.zcml') remote_conf_xml = self.xmlParse(remote_conf) for remote_file in self.xmlNodeSet(remote_conf_xml, 'file'): filename = remote_file['attrs']['id'] if filename not in filenames.keys(): filenames[ location + filename] = filename + ' (' + remote_file[ 'attrs']['title'] + ')' except: _globals.writeError( self, "[getConfFiles]: can't get conf-files from remote URL=%s" % location) else: for filepath in filepaths: if os.path.exists(filepath): for filename in os.listdir(filepath + location): path = filepath + filename mode = os.stat(path)[stat.ST_MODE] if not stat.S_ISDIR(mode): if filename not in filenames: filenames[path] = filename conf.close() # Filter. if pattern is not None: for k in filenames.keys(): if k.find(pattern) < 0: del filenames[k] else: v = filenames[k] i = v.find(' ') if i < 0: i = len(v) v = v[:v.find(pattern)] + v[i:] filenames[k] = v # Return. if REQUEST is not None and \ RESPONSE is not None: RESPONSE = REQUEST.RESPONSE content_type = 'text/xml; charset=utf-8' filename = 'getConfFiles.xml' RESPONSE.setHeader('Content-Type', content_type) RESPONSE.setHeader('Content-Disposition', 'inline;filename="%s"' % filename) RESPONSE.setHeader('Cache-Control', 'no-cache') RESPONSE.setHeader('Pragma', 'no-cache') return self.getXmlHeader() + self.toXmlString(filenames) else: return filenames """ ############################################################################ ### ### Configuration-Properties Getters ### ############################################################################ """ # -------------------------------------------------------------------------- # ConfManager.getSequence: # # Returns sequence. # -------------------------------------------------------------------------- def getSequence(self): id = 'acl_sequence' exists = id in self.objectIds(['Sequence']) portalMaster = self.getPortalMaster() if portalMaster is not None: startvalue = 0 if exists: ob = getattr(self, id) startvalue = ob.value self.manage_delObjects(ids=[id]) ob = portalMaster.getSequence() if ob.value < startvalue: ob.value = startvalue else: if not exists: sequence = _sequence.Sequence() self._setObject(sequence.id, sequence) ob = getattr(self, id) return ob # -------------------------------------------------------------------------- # ConfManager.getMediaDb: # # Returns mediadb. # -------------------------------------------------------------------------- def getMediaDb(self): for ob in self.getDocumentElement().objectValues(['MediaDb']): return ob return None # -------------------------------------------------------------------------- # ConfManager.getResourceFolders: # # Returns list of resource-folders. # -------------------------------------------------------------------------- def getResourceFolders(self): obs = [] ids = self.getConfProperty('ZMS.resourceFolders', 'instance,common').split(',') if '*' in ids: ids.extend( map( lambda x: x.id, filter(lambda x: x.id not in ids, self.getHome().objectValues(['Folder'])))) for id in ids: if id == '*': obs.append(self.getHome()) else: container = getattr(self, id, None) if container is not None and len( container.objectValues(['ZMS'])) == 0: obs.append(container) return obs # -------------------------------------------------------------------------- # ConfManager.getStylesheet: # # Returns stylesheet. # -------------------------------------------------------------------------- def getStylesheet(self, id=None): stylesheets = self.getStylesheets() if id is None: return stylesheets[0] else: for css in stylesheets: if absattr(css.id) == id: return css # -------------------------------------------------------------------------- # ConfManager.getStylesheets: # # Returns list of stylesheets. # -------------------------------------------------------------------------- def getStylesheets(self): ids = [] obs = [] for container in self.getResourceFolders(): for folder in [getattr(container, 'css', None), container]: if folder is not None: for ob in folder.objectValues( ['DTML Method', 'DTML Document', 'File']): id = absattr(ob.id) path = ob.getPhysicalPath() if len(filter(lambda x: x.endswith('css'), path)) > 0 and id not in ids: ids.append(id) if id == self.getConfProperty( 'ZMS.stylesheet', 'style.css'): obs.insert(0, ob) else: obs.append(ob) return obs """ ############################################################################ ### ### Configuration-Tab Options ### ############################################################################ """ # -------------------------------------------------------------------------- # ConfManager.customize_manage_options: # -------------------------------------------------------------------------- customize_manage_options__roles__ = None def customize_manage_options(self): l = [] l.append({'label': 'TAB_SYSTEM', 'action': 'manage_customize'}) l.append({ 'label': 'TAB_LANGUAGES', 'action': 'manage_customizeLanguagesForm' }) for ob in self.objectValues(): if IZMSConfigurationProvider in list( zope.interface.providedBy(ob)): for d in ob.manage_sub_options(): l.append( self.operator_setitem(d.copy(), 'action', ob.id + '/' + d['action'])) l.append({ 'label': 'TAB_METACMD', 'action': 'manage_customizeMetacmdForm' }) l.append({ 'label': 'TAB_FILTER', 'action': 'manage_customizeFilterForm' }) l.append({ 'label': 'TAB_DESIGN', 'action': 'manage_customizeDesignForm' }) return l ############################################################################ ### ### Configuration-Properties ### ############################################################################ """ Returns configuration-manager. """ def getConfManager(self): return self """ Returns property from configuration. @rtype: C{dict} """ def getConfProperties(self): return getattr(self, '__attr_conf_dict__', {}) """ Removes property from configuration. @param key: The key. @type key: C{string} @return None """ security.declareProtected('ZMS Administrator', 'delConfProperty') def delConfProperty(self, key): self.setConfProperty(key, None) """ Returns property from configuration. @param key: The key. @type key: C{string} @param default: The default-value. @type default: C{any} @rtype: C{any} """ def getConfProperty(self, key, default=None, REQUEST=None): """ ConfManager.getConfProperty """ if REQUEST is not None: authorized = REQUEST['AUTHENTICATED_USER'].has_role( 'Authenticated') if not authorized: raise zExceptions.Unauthorized if OFS.misc_.misc_.zms['confdict'].has_key(key): default = OFS.misc_.misc_.zms['confdict'].get(key) return self.getConfProperties().get(key, default) """ Sets property into configuration. @param key: The key. @type key: C{string} @param value: The value. @type value: C{any} @return None """ security.declareProtected('ZMS Administrator', 'setConfProperty') def setConfProperty(self, key, value): d = self.getConfProperties() if value is None: if d.has_key(key): del d[key] else: d[key] = value self.__attr_conf_dict__ = d self.__attr_conf_dict__ = self.__attr_conf_dict__.copy() """ ############################################################################ ### ### Configuration-System ### ############################################################################ """ ############################################################################ # ConfManager.manage_customizeSystem: # # Customize system properties. ############################################################################ def manage_customizeSystem(self, btn, key, lang, REQUEST, RESPONSE=None): """ ConfManager.manage_customizeSystem """ message = '' params = [] ##### Import #### if key == 'Import': if btn == 'Import': f = REQUEST['file'] createIfNotExists = 1 if f: filename = f.filename self.importConfPackage(f, REQUEST, createIfNotExists) else: filename = REQUEST['init'] self.importConfPackage(filename, REQUEST, createIfNotExists) message = self.getZMILangStr('MSG_IMPORTED') % ('<i>%s</i>' % filename) ##### History #### elif key == 'History': old_active = self.getConfProperty('ZMS.Version.active', 0) new_active = REQUEST.get('active', 0) old_nodes = self.getConfProperty('ZMS.Version.nodes', ['{$}']) new_nodes = self.string_list(REQUEST.get('nodes', '')) self.setConfProperty('ZMS.Version.active', new_active) self.setConfProperty('ZMS.Version.nodes', new_nodes) nodes = [] if old_active == 1 and new_active == 0: nodes = old_nodes if old_active == 1 and new_active == 1: nodes = self.difference_list( old_nodes, self.getConfProperty('ZMS.Version.nodes', ['{$}'])) for node in nodes: ob = self.getLinkObj(node) if ob is not None: message += '[%s: %i]' % (node, ob.packHistory()) message = self.getZMILangStr('MSG_CHANGED') + message ##### Clients #### elif key == 'Clients': if btn == 'Change': s = REQUEST.get('portal_master', '').strip() if s != self.getHome().id: self.setConfProperty('Portal.Master', s) l = [] for s in REQUEST.get('portal_clients', '').split('\n'): s = s.strip() if s in self.getHome().objectIds(['Folder']): l.append(s) self.setConfProperty('Portal.Clients', l) message = self.getZMILangStr('MSG_CHANGED') ##### MediaDb #### elif key == 'MediaDb': if btn == 'Create': location = REQUEST['mediadb_location'].strip() _mediadb.manage_addMediaDb(self, location) message = self.getZMILangStr('MSG_CHANGED') elif btn == 'Pack': message = _mediadb.manage_packMediaDb(self) elif btn == 'Remove': message = _mediadb.manage_delMediaDb(self) ##### Custom #### elif key == 'Custom': k = REQUEST.get('conf_key', '') if btn == 'Change': v = REQUEST.get('conf_value', '') self.setConfProperty(k, v) if REQUEST.get('portal_clients'): for portalClient in self.getPortalClients(): portalClient.setConfProperty(k, v) params.append('conf_key') message = self.getZMILangStr('MSG_CHANGED') elif btn == 'Delete': self.delConfProperty(k) if REQUEST.get('portal_clients'): for portalClient in self.getPortalClients(): portalClient.delConfProperty(k) message = self.getZMILangStr('MSG_DELETED') % int(1) ##### InstalledProducts #### elif key == 'InstalledProducts': if btn == 'Change': self.setConfProperty('InstalledProducts.pil.thumbnail.max', REQUEST.get('pil_thumbnail_max', 100)) self.setConfProperty( 'InstalledProducts.pil.hires.thumbnail.max', REQUEST.get('pil_hires_thumbnail_max', 600)) message = self.getZMILangStr('MSG_CHANGED') ##### Manager #### elif key == 'Manager': if btn == 'Add': meta_type = REQUEST.get('meta_type', '') if meta_type == 'Sequence': obj = _sequence.Sequence() self._setObject(obj.id, obj) message = 'Added ' + meta_type elif meta_type == 'ZMSLog': obj = zmslog.ZMSLog() self._setObject(obj.id, obj) message = 'Added ' + meta_type elif meta_type in [ 'ZMSWorkflowProvider', 'ZMSWorkflowProviderAcquired' ]: obj = ConfDict.get_constructor(meta_type)() self._setObject(obj.id, obj) message = 'Added ' + meta_type elif btn == 'Remove': ids = REQUEST.get('ids', []) if ids: message = 'Removed ' + ', '.join(ids) self.manage_delObjects(ids=ids) # Return with message. if RESPONSE: d = {'lang': lang, 'manage_tabs_message': message} for param in params: d[param] = REQUEST.get(param, '') return RESPONSE.redirect( self.url_append_params('manage_customize', d) + '#%s' % key) return message """ ############################################################################ ### ### Configuration-Design ### ############################################################################ """ ############################################################################ # ConfManager.manage_customizeDesign: # # Customize design properties. ############################################################################ def manage_customizeDesign(self, btn, lang, REQUEST, RESPONSE): """ ConfManager.manage_customizeDesign """ message = '' cssId = REQUEST.get('cssId', '') # Ex-/Import. # ----------- if btn in [ self.getZMILangStr('BTN_EXPORT'), self.getZMILangStr('BTN_IMPORT') ]: #-- Theme. home = self.getHome() home_id = home.id temp_folder = self.temp_folder # Init exclude-ids. excl_ids = [] # Add clients-folders to exclude-ids. for folder in home.objectValues(['Folder']): if len(folder.objectValues(['ZMS'])) > 0: excl_ids.append(absattr(folder.id)) # Add content-object artefacts to exclude-ids. for metaObjId in self.getMetaobjIds(): for metaObjAttrId in self.getMetaobjAttrIds(metaObjId): metaObjAttr = self.getMetaobjAttr(metaObjId, metaObjAttrId) if metaObjAttr[ 'type'] in self.metaobj_manager.valid_zopetypes: excl_ids.append(metaObjAttrId) # Filter ids. ids = filter(lambda x: x not in excl_ids, home.objectIds(self.metaobj_manager.valid_zopetypes)) if btn == self.getZMILangStr('BTN_EXPORT'): if home_id in temp_folder.objectIds(): temp_folder.manage_delObjects(ids=[home_id]) temp_folder.manage_addFolder(id=home_id, title=home.title_or_id()) folder = getattr(temp_folder, home_id) home.manage_copyObjects(ids, REQUEST) folder.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST) return RESPONSE.redirect( self.url_append_params( '%s/manage_exportObject' % temp_folder.absolute_url(), { 'id': home_id, 'download:int': 1 })) if btn == self.getZMILangStr('BTN_IMPORT'): v = REQUEST['theme'] temp_filename = _fileutil.extractFilename(v.filename) temp_id = temp_filename[:temp_filename.rfind('.')] filepath = INSTANCE_HOME + '/import/' + temp_filename _fileutil.exportObj(v, filepath) if temp_id in temp_folder.objectIds(): temp_folder.manage_delObjects(ids=[temp_id]) temp_folder.manage_importObject(temp_filename) folder = getattr(temp_folder, temp_id) home.manage_delObjects(ids=ids) folder.manage_copyObjects(folder.objectIds(), REQUEST) home.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST) _fileutil.remove(filepath) temp_folder.manage_delObjects(ids=[temp_id]) # Save. # ----- if btn == self.getZMILangStr('BTN_SAVE'): #-- Stylesheet. if REQUEST.has_key('cssId'): if REQUEST.get('default'): self.setConfProperty('ZMS.stylesheet', REQUEST.get('cssId')) css = self.getStylesheet(REQUEST.get('cssId')) data = REQUEST.get('stylesheet') title = css.title css.manage_edit(data, title) message = self.getZMILangStr('MSG_CHANGED') #-- Sitemap. if REQUEST.has_key('attr_layoutsitemap'): if len(REQUEST['attr_layoutsitemap']) > 0: self.attr_layoutsitemap = int( REQUEST['attr_layoutsitemap']) elif hasattr(self, 'attr_layoutsitemap'): delattr(self, 'attr_layoutsitemap') message = self.getZMILangStr('MSG_CHANGED') # Upload. # ------- elif btn == self.getZMILangStr('BTN_UPLOAD'): #-- ZMI Logo. self.zmi_logo = Image(id='logo', title='', file='') self.zmi_logo.manage_upload(REQUEST['file'], REQUEST) message = self.getZMILangStr('MSG_CHANGED') # Return with message. message = urllib.quote(message) return RESPONSE.redirect( 'manage_customizeDesignForm?lang=%s&manage_tabs_message=%s&cssId=%s' % (lang, message, cssId)) ############################################################################ ### ### Interface IZMSWorkflowProvider: delegate to workflow_manager ### ############################################################################ def getWfActivities(self): workflow_manager = getattr(self, 'workflow_manager', None) if workflow_manager is None: return [] return workflow_manager.getActivities() def getWfActivitiesIds(self): workflow_manager = getattr(self, 'workflow_manager', None) if workflow_manager is None: return [] return workflow_manager.getActivityIds() def getWfActivity(self, id): workflow_manager = getattr(self, 'workflow_manager', None) if workflow_manager is None: return None return workflow_manager.getActivity(id) def getWfTransitions(self): workflow_manager = getattr(self, 'workflow_manager', None) if workflow_manager is None: return [] return workflow_manager.getTransitions() def getWfTransition(self, id): workflow_manager = getattr(self, 'workflow_manager', None) if workflow_manager is None: return None return workflow_manager.getTransition(id) ############################################################################ ### ### Interface IZMSMetamodelProvider: delegate ### ############################################################################ def getMetaobjManager(self): return self.metaobj_manager def getMetaobjId(self, name): return self.getMetaobjManager().getMetaobjId(name) def getMetaobjIds(self, sort=1, excl_ids=[]): return self.getMetaobjManager().getMetaobjIds(sort, excl_ids) def getMetaobj(self, id): return self.getMetaobjManager().getMetaobj(id) def getMetaobjAttrIds(self, meta_id, types=[]): return self.getMetaobjManager().getMetaobjAttrIds(meta_id, types) def getMetaobjAttrs(self, meta_id, types=[]): return self.getMetaobjManager().getMetaobjAttrs(meta_id) def getMetaobjAttr(self, id, attr_id, syncTypes=['resource']): return self.getMetaobjManager().getMetaobjAttr(id, attr_id, syncTypes) def getMetaobjAttrIdentifierId(self, meta_id): return self.getMetaobjManager().getMetaobjAttrIdentifierId(meta_id) def notifyMetaobjAttrAboutValue(self, meta_id, key, value): return self.getMetaobjManager().notifyMetaobjAttrAboutValue( meta_id, key, value) ############################################################################ ### ### Interface IZMSFormatProvider: delegate ### ############################################################################ def getFormatManager(self): return self.format_manager def getTextFormatDefault(self): return self.getFormatManager().getTextFormatDefault() def getTextFormat(self, id, REQUEST): return self.getFormatManager().getTextFormat(id, REQUEST) def getTextFormats(self, REQUEST): return self.getFormatManager().getTextFormats(REQUEST) def getCharFormats(self): return self.getFormatManager().getCharFormats() ############################################################################ ### ### Interface IZMSLocale: delegate ### ############################################################################ def getLocale(self): return self """