Пример #1
0
 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)
Пример #2
0
 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
Пример #3
0
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
Пример #4
0
 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
Пример #5
0
 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
Пример #6
0
 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
Пример #7
0
 def getLinkHtml(self, url, html='<a href="%s">&raquo;</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
Пример #8
0
    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])
Пример #9
0
    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])
Пример #10
0
 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
Пример #11
0
 def nvl(self, a1, a2, n=None):
     warn(self, 'nvl', 'Products.zms.standard.nvl')
     return standard.nvl(a1, a2, n)
Пример #12
0
    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']]))
Пример #13
0
 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)