def getCheckbox(self, fmName, elName, elId=None, value=None, enabled=True, hidden=True, css='', btn=False, options=[0, 1]): lang = self.REQUEST.get('lang', self.getPrimaryLanguage()) if elId==None: elId = elName if elId.endswith('_%s'%lang): elId = elId[:-len('_%s'%lang)] html = [] if value in [True, False]: value = options[int(value)] checked = str(value) == str(options[1]) html.append('<input ') html.append(' type="hidden"') html.append(' name="%s"'%elName) html.append(' value="%s"'%str(standard.nvl(value, options[0]))) html.append(' />') if btn: html.append('<span class="btn btn-secondary">') html.append('<input ') if isinstance(elId, str) and elId!='': html.append(' id="%s"'%elId) html.append(' class="%s"'%' '.join([elId in [None,''] and elName or elId, css, lang])) html.append(' type="checkbox"') if not enabled: html.append(' disabled="disabled"') if checked: html.append(' checked="checked"') html.append(' onclick="if(this.checked){$(this)%s.prev().val(\'%s\')}else{$(this)%s.prev().val(\'%s\')}"'%(['', '.parent()'][btn], options[1], ['', '.parent()'][btn], options[0])) html.append(' />') if btn: html.append('</span>') return ''.join(html)
def getNextPage(self, REQUEST, incResource=False, root=None): """ Returns the next page of this node from root (or document-element if root is not given). @param REQUEST: the triggering request @type REQUEST: C{ZPublisher.HTTPRequest} @return: the next page @rtype: C{zmsobject.ZMSObject} """ ob = None root = standard.nvl(root, self.getDocumentElement()) while True: children = self.filteredChildNodes(REQUEST, self.PAGES) if len(children) > 0: ob = children[0] else: current = self while ob is None and current is not None: ob = getNextSibling(current, REQUEST, incResource) current = current.getParentNode() if not ob is None and not ob.isMetaType(self.PAGES, REQUEST): ob = ob.getNextPage(REQUEST, incResource, root) if ob is None or ob.isMetaType(self.PAGES, REQUEST): break return ob
def zmi_actions(container, context, attr_id='e'): """ Returns list of actions. """ actions = [] REQUEST = container.REQUEST objAttr = standard.nvl( container.getMetaobjAttr(container.meta_id, attr_id), {}) objChildren = len(container.getObjChildren(attr_id, REQUEST)) objPath = '' if context is not None and context != container: objPath = context.id + '/' #-- Action: Separator. actions.append( ('----- %s -----' % container.getZMILangStr('ACTION_SELECT') % container.getZMILangStr('ATTR_ACTION'), 'select-action')) actions.extend( zmi_basic_actions(container, context, objAttr, objChildren, objPath)) actions.extend( zmi_insert_actions(container, context, objAttr, objChildren, objPath)) # Return action list. return actions
def getPrevPage(self, REQUEST, incResource=False, root=None): """ Returns the previous page of this node from root (or document-element if root is not given). @param REQUEST: the triggering request @type REQUEST: C{ZPublisher.HTTPRequest} @return: the previous page @rtype: C{zmsobject.ZMSObject} """ ob = None root = standard.nvl(root, self.getDocumentElement()) while True: ob = getPrevSibling(self, REQUEST, incResource) if ob is None: parent = self.getParentNode() if parent is not None: if self.getHref2IndexHtml( REQUEST) == parent.getHref2IndexHtml(REQUEST): ob = parent.getPrevPage(REQUEST, incResource, parent) else: ob = parent else: ob = ob.getLastPage(REQUEST, incResource, ob) if not ob is None and not ob.isMetaType(self.PAGES, REQUEST): ob = ob.getPrevPage(REQUEST, incResource, root) if ob is None or ob.isMetaType(self.PAGES, REQUEST): break return ob
def getObjChildrenAttr(self, key, meta_type=None): meta_type = standard.nvl(meta_type, self.meta_id) ##### Meta-Objects #### if meta_type in self.getMetaobjIds() and key in self.getMetaobjAttrIds( meta_type): obj_attr = self.getMetaobjAttr(meta_type, key) ##### Default #### else: obj_attr = {'id': key, 'repetitive': 1, 'mandatory': 0} return obj_attr
def getFirstPage(self, REQUEST, incResource=False, root=None): """ Returns the first page of the tree from root (or document-element if root is not given). @param REQUEST: the triggering request @type REQUEST: C{ZPublisher.HTTPRequest} @return: the first page @rtype: C{zmsobject.ZMSObject} """ root = standard.nvl(root, self.getDocumentElement()) return root
def getLinkHtml(self, url, html='<a href="%s">»</a>', REQUEST=None): warn(self, 'getLinkHtml', '@deprecated: use own implementation!') REQUEST = standard.nvl(REQUEST, self.REQUEST) s = '' ob = self while ob is not None: if html in ob.getMetaobjIds( ) and 'getLinkHtml' in ob.getMetaobjAttrIds(html): REQUEST.set('ref_id', url) return ob.evalMetaobjAttr('%s.getLinkHtml' % html, ref_id=url) ob = ob.getPortalMaster() ob = self.getLinkObj(url) if ob is not None: if ob.isVisible(REQUEST): url = ob.getHref2IndexHtml(REQUEST) s = html % url return s
def reindex_all(self): result = [] zcm = self.getCatalogAdapter() request = self.REQUEST container = self.getDocumentElement() for lang in container.getLangIds(): request.set('lang', lang) # Recreate catalog. result.append(recreateCatalog(container, self.aq_parent, lang)) # Reindex items to catalog. def cb(node, d): self._update(node, d) for root in [container] + self.getPortalClients(): rcm = standard.nvl(root.getCatalogAdapter(), zcm) result.append(rcm.get_sitemap(cb, root, recursive=True)) result = [x for x in result if x] return ', '.join([x for x in result])
def reindex_self(self, uid): result = [] zcm = self.getCatalogAdapter() request = self.REQUEST request.set('btn', 'Reindex') # backwards-compatibility (UzK) container = self.getLinkObj(uid) home_id = container.getHome().id try: for lang in container.getLangIds(): request.set('lang', lang) lresult = [] lresult.append('language: %s' % lang) # Clear catalog. zcatalog = getZCatalog(self, lang) if zcatalog is None: lresult.append( recreateCatalog(container, self.aq_parent, lang)) else: qr = zcatalog({'zcat_index_home_id': home_id}) lresult.append('%i objects removed from catalog' % len(qr)) for item in qr: data_record_id = item.data_record_id_ path = zcatalog.getpath(data_record_id) zcatalog.uncatalog_object(path) # Reindex items to catalog. def cb(node, d): self._update(node, d) rcm = standard.nvl(container.getCatalogAdapter(), zcm) lresult.append(rcm.get_sitemap(cb, container, recursive=True)) lresult = [x for x in lresult if x] result.extend(lresult) # Log changes. zcatalog = getZCatalog(self, lang) writeChangesLog( zcatalog, '[reindex_self]: ' + '\n'.join([x for x in lresult])) except: result.append(standard.writeError(self, 'can\'t reindex_self')) return ', '.join([x for x in result if x])
def getLastPage(self, REQUEST, incResource=False, root=None): """ Returns the last page of the tree from root (or document-element if root is not given). @param REQUEST: the triggering request @type REQUEST: C{ZPublisher.HTTPRequest} @return: the last page @rtype: C{zmsobject.ZMSObject} """ ob = None root = standard.nvl(root, self.getDocumentElement()) children = [root] while len(children) > 0: i = len(children) - 1 while i >= 0: if (incResource or not children[i].isResource(REQUEST)): ob = children[i] i = 0 i = i - 1 if ob == self: break children = ob.filteredChildNodes(REQUEST, self.PAGES) return ob
def nvl(self, a1, a2, n=None): warn(self, 'nvl', 'Products.zms.standard.nvl') return standard.nvl(a1, a2, n)
def __bobo_traverse__(self, TraversalRequest, name): # If this is the first time this __bob_traverse__ method has been called # in handling this traversal request, store the path_to_handle request = self.REQUEST url = request.get('URL', '') zmi = url.find('/manage') >= 0 if 'path_to_handle' not in TraversalRequest: # Make a reversed copy of the TraversalRequestNameStack TraversalRequestNameStackReversed = copy.copy( TraversalRequest['TraversalRequestNameStack']) TraversalRequestNameStackReversed.reverse() # Set path_to_handle in the TraversalRequest. TraversalRequest['path_to_handle'] = [ name ] + TraversalRequestNameStackReversed # Set path_to_handle for VirtualHosts. if '/' in TraversalRequest['path_to_handle']: path_physical = request.get( 'path_physical', list(self.getDocumentElement().getPhysicalPath())[1:]) if len(path_physical) > 1: b = TraversalRequest['path_to_handle'].index('/') TraversalRequest['path_to_handle'] = TraversalRequest[ 'path_to_handle'][b + 1:] for i in range(1, len(path_physical)): TraversalRequest['path_to_handle'].insert( i - 1, path_physical[i]) # Set language. lang = request.get('lang') if lang is None: lang = self.getLanguageFromName( TraversalRequest['path_to_handle'][-1]) if lang is not None: request.set('lang', lang) # If the name is in the list of attributes, call it. ob = getattr(self, name, None) if ob is None or getattr(ob, 'meta_type', None) == 'Folder': obContext = filterId(self, name, request) if obContext is not None: ob = obContext if ob is not None: if not zmi and TraversalRequest['path_to_handle'][-1] == name: lang = request.get('lang') if lang is None: lang = self.getHttpAcceptLanguage(request) if lang is not None: request.set('lang', lang) return ob # otherwise do some 'magic' else: standard.writeLog(self, '[__bobo_traverse__]: otherwise do some magic') if request.get('lang') is None: lang = self.getPrimaryLanguage() request.set('lang', lang) # Package-Home. if name == '$ZMS_HOME': i = TraversalRequest['path_to_handle'].index(name) filepath = standard.getPRODUCT_HOME() + '/' + '/'.join( TraversalRequest['path_to_handle'][i + 1:]) data, mt, enc, size = _fileutil.readFile(filepath) filename = TraversalRequest['path_to_handle'][-1] f = self.FileFromData(data, filename, mt) f.aq_parent = self f.key = name f.lang = request['lang'] return f # Pathhandler-Hook. if 'pathhandler' in self.getMetaobjAttrIds(self.meta_id, types=['method', 'py']): if name == TraversalRequest['path_to_handle'][-1]: request.set('path_', '/'.join(request.get('path_', []) + [name])) return self.attr('pathhandler') else: request.set('path_', request.get('path_', []) + [name]) return self if not zmi or request.get('ZMS_PATH_HANDLER', False): # Recursive inclusions. thisOb = standard.nvl(filterId(self, name, request), self) if thisOb.meta_type == 'ZMSLinkElement': recursive = thisOb.isEmbeddedRecursive(request) if recursive: ob = thisOb.getRefObj() proxy = thisOb.initProxy(thisOb.aq_parent, thisOb.absolute_url(), ob, recursive) c = 0 l = TraversalRequest['path_to_handle'] i = 0 if thisOb.id in l: i = l.index(thisOb.id) + 1 elif thisOb.getDeclId(request) in l: i = l.index(thisOb.getDeclId(request)) + 1 for k in range(i, len(l)): newOb = None obs = ob.getChildNodes(request) filtered_obs = [ x for x in obs if x.id == l[k] or x.getDeclId(request) == l[k] ] if len(filtered_obs) == 1: newOb = filtered_obs[0] try: if newOb.meta_type not in self.dGlobalAttrs: newOb = None except: pass if newOb is None: break ob = newOb proxy = thisOb.initProxy( proxy, proxy.absolute_url() + '/' + ob.id, ob, recursive) c += 1 if c > 0: request.set('ZMS_PROXY_%s' % self.id, proxy) if request.get('ZMS_PROXY_%s' % self.id) and request.get( 'ZMS_PROXY_%s' % self.id ).id != TraversalRequest['path_to_handle'][-1]: v = handleBlobAttrs( request.get('ZMS_PROXY_%s' % self.id).proxy, TraversalRequest['path_to_handle'][-1], request) if v is not None: return v return thisOb # Declarative Urls. ob = self.pathob([name], request) if ob is not None: return ob # UID. if name.startswith('{$') and name.endswith('}'): ob = self.getLinkObj(name) if ob is not None: return ob # If the object is record-set and has blob-fields find by filename and # display data. if name.find('@') == 0: if self.getType() == 'ZMSRecordSet': try: i = int(name[1:]) r = self.getObjProperty( self.getMetaobj(self.meta_id)['attrs'][0]['id'], request) d = r[i] for key in d: value = d[key] if isinstance(value, _blobfields.MyImage) or isinstance( value, _blobfields.MyFile): value = value._getCopy() value.aq_parent = self value.key = key value.lang = request['lang'] langfilename = value.getHref(request).split( '/')[-1] if langfilename.find('?') > 0: langfilename = langfilename[:langfilename. find('?')] if langfilename == TraversalRequest[ 'path_to_handle'][-1]: return value except: standard.writeError(self, '[__bobo_traverse__]') else: try: i = int(name[1:]) obj_attrs = self.getObjAttrs() for key in self.getObjAttrs(): obj_attr = obj_attrs[key] if obj_attr['datatype_key'] == _globals.DT_LIST and \ obj_attr['repetitive']: lp = [request.get('preview')] if lp[0] != 'preview': lp.append('preview') for ip in lp: try: request.set('preview', ip) r = self.attr(key) value = r[i] value = value._getCopy() value.aq_parent = self value.key = key value.lang = request['lang'] langfilename = value.getHref( request).split('/')[-1] if langfilename.find('?') > 0: langfilename = langfilename[: langfilename .find( '?' )] if langfilename == TraversalRequest[ 'path_to_handle'][-1]: return value except: standard.writeError( self, '[__bobo_traverse__]: ip=%s' % str(ip)) request.set('preview', lp[0]) except: standard.writeError(self, '[__bobo_traverse__]') # If the object has blob-fields find by filename and display data. v = handleBlobAttrs(self, name, request) if v is not None: return v # If the object has executable-fields find by name and display data. pattern = self.getConfProperty( 'ZMS.metaobj.attr.publicExecutablePattern', 'public(.*?)') if re.compile(pattern).match( name) and name in self.getMetaobjAttrIds( self.meta_id, types=['method', 'py', 'zpt']): try: v = self.attr(name) except: v = standard.writeError( self, '[__bobo_traverse__]: name=%s' % name) if v is not None: if isinstance(v, str): v = self.FileFromData( v, content_type='text/plain;charset=utf-8') v.aq_parent = self v.key = name v.lang = request['lang'] return v # Skins if name == TraversalRequest['path_to_handle'][-1]: l = name i = l.rfind('_') j = l.rfind('.') if i > 0 and j > 0: lang = l[i + 1:j] if lang in self.getLangIds(): zms_skin = l[:i] zms_ext = l[j + 1:] if zms_skin in [x.strip() for x in self.getConfProperty('ZMS.skins', 'index').split(',')] and \ zms_ext == self.getPageExt(request)[1:]: request.set('ZMS_SKIN', zms_skin) request.set('ZMS_EXT', zms_ext) request.set('lang', lang) return self # If there's no more names left to handle, return the path handling # method to the traversal machinery so it gets called next standard.raiseError( 'NotFound', ''.join([x + '/' for x in TraversalRequest['path_to_handle']]))
def __init__(self, id='', sort_id=0, meta_id=None): """ ZMSCustom.__init__ """ zmscontainerobject.ZMSContainerObject.__init__(self, id, sort_id) self.meta_id = standard.nvl(meta_id, self.meta_type)