Exemplo n.º 1
0
 def _initObjChildren(self, obj_attr, REQUEST):
     id = obj_attr['id']
     ids = []
     for ob in self.getChildNodes(REQUEST):
         if ob.id[:len(id)] == id:
             ids.append(ob.id)
     mandatory = obj_attr.get('mandatory', 0) == 1
     if mandatory:
         if len(ids) == 0:
             default = obj_attr.get('custom')
             if default:
                 _fileutil.import_zexp(self, default, obj_attr['id'],
                                       obj_attr['id'])
             else:
                 if obj_attr['type'] == '*' and type(
                         obj_attr['keys']) is list and len(
                             obj_attr['keys']) > 0:
                     obj_attr['type'] = obj_attr['keys'][0]
                 self.initObjChild(obj_attr['id'], 0, obj_attr['type'],
                                   REQUEST)
     repetitive = obj_attr.get('repetitive', 0) == 1
     if repetitive:
         if id in ids:
             new_id = self.getNewId(id)
             _globals.writeLog(
                 self, "[_initObjChildren]: Rename %s to %s" % (id, new_id))
             if new_id not in self.objectIds():
                 self.manage_renameObject(id=id, new_id=new_id)
     else:
         if not id in ids and len(ids) > 0:
             old_id = ids[0]
             _globals.writeLog(
                 self, "[_initObjChildren]: Rename %s to %s" % (old_id, id))
             if id not in self.objectIds():
                 self.manage_renameObject(id=old_id, new_id=id)
Exemplo n.º 2
0
 def exportExternalResources(self, obj, html, path, REQUEST):
     domains = []
     for domain in self.getConfProperty('ZMS.export.domains',
                                        '').split(','):
         domain = domain.strip()
         if len(domain) > 0:
             domains.append(domain)
     if len(domains) == 0:
         return html
     for http_prefix in ['http:']:
         i = html.find(http_prefix)
         while i > 0:
             d = rfindDelimiter(html[:i])  # search delimiter ' or "
             k = rfindDelimiter(
                 html[:d], '=')  # search equal-sign between attribute name
             t = rfindDelimiter(html[:k], '<')  # search start of tag
             # <img src="url">
             # <a href='url'">
             if (html[ t + 1: t + 4].lower() == 'img' and html[ k - 3: k].lower() == 'src') \
                 or (html[ t + 1].lower() == 'a' and html[ k - 4: k].lower() == 'href'):
                 l = findDelimiter(html[d + 1:])
                 url = html[d + 1:d + l + 1]
                 for domain in domains:
                     if domain in url:
                         try:
                             _globals.writeLog(
                                 self,
                                 '[exportExternalResources]: url=%s' % url)
                             s_new = s_old = url
                             for repl in ':/%&?;=':
                                 s_new = s_new.replace(repl, '_')
                             # test if extension is a real extension at the end ?
                             # http://host:port/uri.gif?a=x&b=k => http___host_port_uri.gif_a_x_b_k.gif
                             # http://host:port/uri.gif => http__host_port_uri.gif
                             # http://host:port/draw/ID/png => http__host_port_draw_ID_png.png
                             # http://host:port/draw/ID?fmt=pdf&scale=2 => http__host_port_draw_ID_fmt_pdf_scale_2.pdf
                             for ext in [
                                     'gif', 'jpg', 'png', 'pdf', 'csv',
                                     'xls', 'doc', 'ppt'
                             ]:
                                 if ext in url:
                                     if s_new[-len(ext) -
                                              1:] != '.%s' % ext:
                                         s_new = "%s.%s" % (s_new, ext)
                                     break
                             ext_path = '%s/%s' % (path, s_new)
                             if not os.path.exists(ext_path):
                                 data = self.http_import(url)
                                 f = open(ext_path, 'w')
                                 f.write(data)
                                 f.close()
                             html = html.replace(s_old, s_new)
                         except:
                             _globals.writeError(
                                 self,
                                 '[exportExternalResources]: url=%s' % url)
                         break
             i = html.find(http_prefix, i + len(http_prefix))
     return html
Exemplo n.º 3
0
 def registerRefObj(self, ob, REQUEST):
   ref = self.getRefObjPath(ob)
   _globals.writeLog( self, "[registerRefObj]: %s(%s) - add %s"%(ob.id,ob.meta_type,ref))
   ref_by = self.getRefByObjs(REQUEST)
   if not ref in ref_by:
     ref_by.append(ref)
   ##### Set Attribute ####
   setattr(self,'ref_by',ref_by)
Exemplo n.º 4
0
 def initObjChildren(self, REQUEST):
     _globals.writeLog(self, "[initObjChildren]")
     self.getObjProperty('initObjChildren', REQUEST)
     metaObj = self.getMetaobj(self.meta_id)
     metaObjIds = self.getMetaobjIds(sort=0) + ['*']
     for metaObjAttrId in self.getMetaobjAttrIds(self.meta_id):
         metaObjAttr = self.getMetaobjAttr(self.meta_id, metaObjAttrId)
         if metaObjAttr['type'] in metaObjIds:
             self._initObjChildren(metaObjAttr, REQUEST)
Exemplo n.º 5
0
 def OnCharacterData(self, data):
     """ Builder.OnCharacterData """
     _globals.writeLog( self, "[Builder.OnCharacterData]")
     
     # do we have a current node?
     if self.oCurrNode==None:
        raise ParseError("Unexpected character data found")
        
     # notify current node
     self.oCurrNode.xmlOnCharacterData(data, self.bInCData)
Exemplo n.º 6
0
 def manage_cutObjects(self, ids=None, REQUEST=None):
     """Put a reference to the objects named in ids in the clip board"""
     _globals.writeLog(self, "[manage_pasteObjs]")
     super(self.__class__, self).manage_cutObjects(ids, REQUEST)
     # Return with message.
     if REQUEST is not None:
         message = ''
         REQUEST.RESPONSE.redirect(
             'manage_main?lang=%s&manage_tabs_message=%s' %
             (REQUEST['lang'], urllib.quote(message)))
Exemplo n.º 7
0
    def _set_sort_ids(self, ids, op, REQUEST):
        _globals.writeLog(self, "[_set_sort_ids]: %s" % self.absolute_url())

        copy_of_prefix = 'copy_of_'
        sort_id = REQUEST.get('_sort_id', 0) + 1
        for ob in self.getChildNodes():
            id = absattr(ob.id)
            if id in ids or (op == 1 and copy_of_prefix + id in ids):
                setattr(ob, 'sort_id', _globals.format_sort_id(sort_id))
                sort_id = sort_id + 1
Exemplo n.º 8
0
 def onCopyRefObj(self, REQUEST, deep=0):
   _globals.writeLog( self, "[onCopyRefObj]")
   
   ##### Register copy in references TO other objects ####
   for ref in self.getRefToObjs(REQUEST):
     ob = self.getLinkObj(ref)
     if ob is not None:
       ob.registerRefObj(self,REQUEST)
   
   ##### Clear references FROM other objects ####
   self.clearRegisteredRefObjs(REQUEST)
Exemplo n.º 9
0
    def _normalize_ids_after_move(self, ids=[], forced=0, REQUEST=None):
        _globals.writeLog(
            self, "[_normalize_ids_after_move]: %s" % self.absolute_url())

        copy_of_prefix = 'copy_of_'
        id_prefix = REQUEST.get('id_prefix')
        REQUEST.set('id_prefix', None)
        ob_ids = copy.copy(self.objectIds(self.dGlobalAttrs.keys()))
        for ob in self.objectValues(self.dGlobalAttrs.keys()):
            id = absattr(ob.id)
            if forced or (id in ids and not copy_of_prefix + id in ob_ids) or (
                    copy_of_prefix + id in ids):
                _globals.writeBlock(
                    self,
                    '[_normalize_ids_after_move]: %s(%s)' % (id, ob.meta_id))

                if id_prefix:
                    id_prefix = _globals.id_prefix(id_prefix)
                    if id_prefix != _globals.id_prefix(id):
                        new_id = self.getNewId(id_prefix)
                        _globals.writeBlock(
                            self,
                            '[_normalize_ids_after_move]: Rename %s(%s) to %s'
                            % (id, ob.meta_id, new_id))
                        self.manage_renameObject(id=id, new_id=new_id)
                        self.initObjChildren(REQUEST)
                        id = new_id

                # Re-Assign old id.
                if id.find(copy_of_prefix) == 0:
                    try:
                        new_id = id[len(copy_of_prefix):]
                        self.manage_renameObject(id=id, new_id=new_id)
                        self.initObjChildren(REQUEST)
                    except:
                        pass

                bk_lang = REQUEST.get('lang')
                for lang in self.getLangIds():
                    REQUEST.set('lang', lang)
                    if forced == 0:
                        # Object-State and Version-Manager.
                        if not ob.getAutocommit():
                            ob.setObjStateModified(REQUEST)
                            ob.onChangeObj(REQUEST)
                    # Process referential integrity.
                    ob.onMoveRefObj(REQUEST)

                REQUEST.set('lang', bk_lang)

                # Process tree.
                ob._normalize_ids_after_move(ids=ids,
                                             forced=1,
                                             REQUEST=REQUEST)
Exemplo n.º 10
0
 def synchronizeRefToObjs(self):
   _globals.writeLog( self, '[synchronizeRefToObjs]')
   for key in self.getObjAttrs().keys():
     obj_attr = self.getObjAttr(key)
     datatype = obj_attr['datatype_key']
     if datatype == _globals.DT_URL:
       for lang in self.getLangIds():
         req = { 'lang':lang, 'preview':'preview'}
         ref = self.getObjProperty(key,req)
         ref_obj = self.getLinkObj(ref)
         if ref_obj is not None:
           ref_obj.refreshRefObj(self,req)
Exemplo n.º 11
0
    def _normalize_ids_after_copy(self, ids=[], forced=0, REQUEST=None):
        _globals.writeLog(
            self, "[_normalize_ids_after_copy]: %s" % self.absolute_url())

        copy_of_prefix = 'copy_of_'
        id_prefix = REQUEST.get('id_prefix')
        REQUEST.set('id_prefix', None)
        ob_ids = copy.copy(self.objectIds(self.dGlobalAttrs.keys()))
        for ob in self.objectValues(self.dGlobalAttrs.keys()):
            id = absattr(ob.id)
            if forced or id in ids:
                _globals.writeBlock(
                    self,
                    '[_normalize_ids_after_copy]: %s(%s)' % (id, ob.meta_id))

                if id_prefix:
                    id_prefix = _globals.id_prefix(id_prefix)
                    if id_prefix != _globals.id_prefix(id):
                        new_id = self.getNewId(id_prefix)
                        _globals.writeBlock(
                            self,
                            '[_normalize_ids_after_copy]: Rename %s(%s) to %s'
                            % (id, ob.meta_id, new_id))
                        self.manage_renameObject(id=id, new_id=new_id)
                        self.initObjChildren(REQUEST)
                        id = new_id

                # Assign new id.
                prefix = _globals.id_prefix(id)
                if prefix.find(copy_of_prefix) == 0:
                    prefix = prefix[len(copy_of_prefix):]
                if prefix != id:
                    new_id = self.getNewId(prefix)
                    self.manage_renameObject(id=id, new_id=new_id)
                    self.initObjChildren(REQUEST)

                bk_lang = REQUEST.get('lang')
                for lang in self.getLangIds():
                    REQUEST.set('lang', lang)
                    if forced == 0:
                        # Object-State and Version-Manager.
                        if not ob.getAutocommit():
                            ob.setObjStateNew(REQUEST, reset=0)
                            ob.onChangeObj(REQUEST)
                    # Process referential integrity.
                    ob.onCopyRefObj(REQUEST)

                REQUEST.set('lang', bk_lang)

                # Process tree.
                ob._normalize_ids_after_copy(ids=ids,
                                             forced=1,
                                             REQUEST=REQUEST)
Exemplo n.º 12
0
def moveFilterProcess(self, id, pid, pos):
  _globals.writeLog( self, '[moveFilterProcess]:id=%s; pid=%s; dir=%s'%(id,str(pid),str(dir)))
  # Set.
  obs = getRawFilters(self)
  pobs = obs[id].get('processes',[])
  ob = pobs[pid]
  pobs.remove(ob)
  pobs.insert(pos,ob)
  obs[id]['processes'] = pobs
  # Set attribute.
  self.setConfProperty('ZMS.filter.filters',obs.copy())
  # Return with new id.
  return pos
Exemplo n.º 13
0
def processFile(self, processId, filename, trans=None):
  _globals.writeLog( self, '[processFile]: processId=%s'%processId)
  folder = _fileutil.getFilePath(filename)
  processOb = self.getProcess(processId)
  command = processOb.get('command')
  # Save transformation to file.
  if trans is not None and trans != '':
    transfilename = '%s/%s'%( folder, trans.getFilename())
    command = command.replace( '{trans}', transfilename)
  # Execute command.
  filename = processCommand(self, filename, command)
  # Return filename.
  return filename
Exemplo n.º 14
0
 def parse(self, input, root=None, bInRootTag=0):
     """ Builder.parse """
     
     # prepare builder
     self._unknownTagName  = None
     self.oRoot            = root
     self.oRootNode        = None
     self.oCurrNode        = None
     self.bInRootTag       = bInRootTag
     self.bInCData         = False
     if bInRootTag:
       self.oCurrNode = root
     
     # create parser object
     p = pyexpat.ParserCreate()
     
     # connect parser object with handler methods
     p.StartElementHandler = self.OnStartElement
     p.EndElementHandler = self.OnEndElement
     p.CharacterDataHandler = self.OnCharacterData
     p.StartCdataSectionHandler = self.OnStartCData
     p.EndCdataSectionHandler = self.OnEndCData
     p.ProcessingInstructionHandler = self.OnProcessingInstruction
     p.CommentHandler = self.OnComment
     p.StartNamespaceDeclHandler = self.OnStartNamespaceDecl
     p.EndNamespaceDeclHandler = self.OnEndNamespaceDecl
     
     #### parsing ####
     _globals.writeLog( self, "#### parsing ####")
     if type(input) is str:
       # input is a string!
       rv = p.Parse(input, 1)
     else:
       # input is a file object!
       while True:
         
         v=input.read(self.iBufferSize)
         if v=="":
           rv = 1
           break
         
         rv = p.Parse(v, 0)
         if not rv:
           break 
     
     # raise parser exception
     if not rv:
         raise ParseError('%s at line %s' % (pyexpat.ErrorString(p.ErrorCode), p.ErrorLineNumber))
     ####
     
     return self.oRootNode
Exemplo n.º 15
0
 def refreshRefToObj(self, dest_obj, REQUEST):
   _globals.writeLog( self, '[refreshRefToObj]: %s -> dest_obj=%s(%s)'%(self.id,dest_obj.absolute_url(),dest_obj.meta_type))
   ref_to =  []
   for key in self.getObjAttrs().keys():
     obj_attr = self.getObjAttr(key)
     datatype = obj_attr['datatype_key']
     if datatype == _globals.DT_URL:
       ref = self.getObjProperty(key,REQUEST)
       ref_obj = self.getLinkObj(ref)
       if ref_obj is not None:
         if dest_obj.id == ref_obj.id:
           ##### Set Property ####
           dest_obj_path = self.getRefObjPath(dest_obj)
           self.setObjProperty(key,dest_obj_path,REQUEST['lang'],1)
Exemplo n.º 16
0
 def onMoveRefObj(self, REQUEST, deep=0):
   _globals.writeLog( self, "[onMoveRefObj]")
   
   ##### Update references TO other objects ####
   for ref in self.getRefToObjs(REQUEST):
     ob = self.getLinkObj(ref)
     if ob is not None:
       ob.refreshRefObj(self,REQUEST)
   
   ##### Update references FROM other objects ####
   for ref in self.getRefByObjs(REQUEST):
     ob = self.getLinkObj(ref)
     if ob is not None:
       ob.refreshRefToObj(self,REQUEST)
Exemplo n.º 17
0
def processCommand(self, filename, command):
  _globals.writeLog( self, '[processCommand]: infilename=%s'%filename)
  infilename = _fileutil.getOSPath( filename)
  outfilename = _fileutil.getOSPath( filename)
  mZmsHome = '{zms_home}'
  mCurDir = '{cur_dir}'
  mIn = '{in}'
  mOut = '{out}'
  i = command.find(mOut[:-1])
  if i >= 0:
    j = command.find('}',i)
    mExt = command[i+len(mOut[:-1]):j]
    mOut = command[i:j+1]
    if len(mExt) > 0:
      outfilename = outfilename[:outfilename.rfind('.')] + mExt
    else:
      outfilename += '.tmp'
  tmpoutfilename = outfilename + '~'
  instance_home = INSTANCE_HOME
  software_home = os.path.join(SOFTWARE_HOME, '..%s..' % os.sep)
  software_home = os.path.normpath(software_home)  
  command = command.replace( '{software_home}', software_home)
  command = command.replace( '{instance_home}', instance_home)
  command = command.replace( mZmsHome,_fileutil.getOSPath(package_home(globals())))
  command = command.replace( mCurDir,_fileutil.getFilePath(infilename))
  command = command.replace( mIn,infilename)
  command = command.replace( mOut,tmpoutfilename)
  path = _fileutil.getFilePath(filename)
  _globals.writeLog( self, '[processCommand]: path=%s'%path)
  os.chdir(path)
  _globals.writeLog( self, '[processCommand]: command=%s'%command)
  os.system(command)
  # Check if output file exists.
  try: 
    os.stat( _fileutil.getOSPath( tmpoutfilename)) 
    _globals.writeLog( self, '[processCommand]: rename %s to %s'%( tmpoutfilename, outfilename))
    try:
      os.remove( outfilename)
    except OSError:
      pass
    os.rename( tmpoutfilename, outfilename)
  except OSError:
    outfilename = infilename
  # Remove input file if it is the result of a transformation of output file.
  if outfilename != infilename:
    os.remove( infilename)
  # Return filename.
  _globals.writeLog( self, '[processCommand]: outfilename=%s'%( outfilename))
  return outfilename
Exemplo n.º 18
0
def processMethod(self, processId, filename, trans, REQUEST):
  _globals.writeLog( self, '[processMethod]: processId=%s'%processId)
  infilename = filename
  outfilename = filename
  REQUEST.set( 'ZMS_FILTER_IN', infilename)
  REQUEST.set( 'ZMS_FILTER_OUT', outfilename)
  REQUEST.set( 'ZMS_FILTER_TRANS', trans)
  REQUEST.set( 'ZMS_FILTER_CUR_DIR', _fileutil.getFilePath(infilename))
  try:
    value = getattr( self, processId)( self, REQUEST)
  except:
    value = _globals.writeError( self, '[processMethod]: processId=%s'%processId)
  outfilename = REQUEST.get( 'ZMS_FILTER_OUT')
  # Return filename.
  return outfilename
Exemplo n.º 19
0
def thumbnailImage(self, hiresKey, loresKey, maxdim, lang, REQUEST):
    message = ''
    try:
        if hiresKey in self.getObjAttrs().keys():
            req = {'lang': lang, 'preview': 'preview', 'fetchReqBuff': False}
            hiresImg = self.getObjProperty(hiresKey, req)
            if hiresImg is not None and REQUEST.get(
                    'generate_preview_%s_%s' % (hiresKey, lang), 0) == 1:
                _globals.writeLog(
                    self, '[thumbnailImage]: Create >%s< from >%s<...' %
                    (loresKey, hiresKey))
                thumb = self.pilutil().thumbnail(hiresImg, maxdim)
                self.setObjProperty(loresKey, thumb, lang)
    except:
        _globals.writeError(self, '[thumbnailImage]')
    return message
Exemplo n.º 20
0
 def synchronizeSearch(self, REQUEST, forced=0):
   if self.getConfProperty('ZMS.CatalogAwareness.active',1) or forced:
     _globals.writeLog( self, '[synchronizeSearch]')
     for ref_by in self.getRefByObjs(REQUEST):
       ref_ob = self.getLinkObj(ref_by,REQUEST)
       if ref_ob is not None and \
          ref_ob. meta_type == 'ZMSLinkElement' and \
          ref_ob.isEmbedded( REQUEST) and not \
          ref_ob.isEmbeddedRecursive( REQUEST):
         if not forced or ref_ob.getHome().id != self.getHome().id:
           ref_ob.synchronizeSearch( REQUEST=REQUEST, forced=forced)
     lang = REQUEST.get( 'lang', self.getPrimaryLanguage())
     # Reindex object.
     ob = self.getCatalogItem()
     if ob is not None:
       ob.default_catalog = 'catalog_%s'%lang
       ob.reindex_object()
Exemplo n.º 21
0
    def xmlOnStartElement(self, sTagName, dTagAttrs, oParentNode, oRoot):
        """
      Handler for XML-Builder (_builder.py)
      """
        _globals.writeLog(self, "[xmlOnStartElement]: sTagName=%s" % sTagName)

        # remove all ZMS-objects.
        self.manage_delObjects(self.objectIds(self.dGlobalAttrs.keys()))
        # remove all languages.
        for s_lang in self.getLangIds():
            self.delLanguage(s_lang)

        self.dTagStack = _globals.MyStack()
        self.dValueStack = _globals.MyStack()

        # WORKAROUND! The member variable "aq_parent" does not contain the right
        # parent object at this stage of the creation process (it will later on!).
        # Therefore, we introduce a special attribute containing the parent
        # object, which will be used by xmlGetParent() (see below).
        self.oParent = None
Exemplo n.º 22
0
def manage_packMediaDb(self, REQUEST=None, RESPONSE=None):
    """ manage_packMediaDb """
    message = ''
    c = 0
    t = 0
    mediadb = self.getMediaDb()
    path = mediadb.location
    filenames = mediadb.valid_filenames()
    for filename in os.listdir(path):
        if filename not in filenames:
            filepath = path + os.sep + filename
            if os.path.isfile(filepath):
                os.remove(filepath)
                c += 1
        t += 1

    # Debug.
    _globals.writeLog(
        self, "[manage_packMediaDb]: files deleted %s" % str(filenames))

    # Return with message.
    message = 'Packed Media-Folder: %i files (total %i) deleted.' % (c, t)
    return message
Exemplo n.º 23
0
def exportFilter(self, id, REQUEST):
  # Set local variables.
  ob_filter = self.getFilter(id)
  tempfolder, outfilename = self.initExportFilter( id, REQUEST)
  # Process filter.
  outfilename = processFilter(self, ob_filter, tempfolder, outfilename, REQUEST)
  # Return values.
  content_type = ob_filter.get('content_type','content/unknown')
  filename = 'exportFilter.%s'%content_type[content_type.find('/')+1:]
  # Zip File.
  if content_type == 'application/zip':
    data = _fileutil.buildZipArchive( outfilename, get_data=True)
  # Read File.
  else:
    _globals.writeLog( self, '[exportFilter]: Read %s'%outfilename)
    f = open(outfilename, 'rb')
    data = f.read()
    f.close()
  # Remove temporary folder.
  if not _globals.debug( self):
    _fileutil.remove( tempfolder, deep=1)
  # Return.
  return filename, data, content_type
Exemplo n.º 24
0
 def OnEndElement(self, name):
     """ Builder.OnEndElement """
     _globals.writeLog( self, "[Builder.OnEndElement(" + str(name) + ")]")
     
     # do we have a current node?
     if self.oCurrNode==None:
         raise ParseError("Unmatching end tag (" + name + ")")
     
     # is this the right tag name?
     if name==self.oCurrNode.xmlGetTagName() or name==self.oCurrNode.meta_type:
       
       ##### VersionManager ####
       self.oCurrNode.resetObjStates()
       
       # notify current node
       self.oCurrNode.xmlOnEndElement()
       
       parent = self.oCurrNode.xmlGetParent()
       
       # set parent node as current node
       self.oCurrNode = parent
       
     
     else:
         if self.dGlobalAttrs.has_key(name) and \
            self.dGlobalAttrs[name]['obj_class'] is not None:
             if self.dGlobalAttrs.has_key(self.oCurrNode.xmlGetTagName()) and \
                self.dGlobalAttrs[self.oCurrNode.xmlGetTagName()]['obj_class'] is not None:
                 # tag name is known, but not valid at this place!
                 raise ParseError("Unmatching end tag (/" + name + "), expected(/" + self.oCurrNode.xmlGetTagName() + ")")
         
         else:
             # tag name is unknown -> offer it to current object
             if not self.oCurrNode.xmlOnUnknownEndTag(name):
                 if name == self._unknownTagName:
                   self._unknownTagName = None
                 _globals.writeLog( self, "[Builder.OnEndElement]: Unknown end-tag (/" + name + ")")  # current object did not accept tag!
Exemplo n.º 25
0
 def toXhtml(self, REQUEST, deep=True):
     _globals.writeLog(self, '[toXhtml]')
     level = 0
     html = ''
     if REQUEST.has_key('ZMS_PAGE_HTML_HEADER'):
         html += getattr(self, REQUEST.get('ZMS_PAGE_HTML_HEADER'))(self,
                                                                    REQUEST)
     else:
         html += '<html>\n'
         html += '<head>\n'
         html += self.f_headMeta_Locale(self, REQUEST)
         html += '<title>%s</title>\n' % self.getTitle(REQUEST)
         html += '</head>\n'
         html += '<body>\n'
     html += self.printHtml(level, _globals.MySectionizer(), REQUEST, deep)
     if REQUEST.has_key('ZMS_PAGE_HTML_FOOTER'):
         html += getattr(self, REQUEST.get('ZMS_PAGE_HTML_FOOTER'))(self,
                                                                    REQUEST)
     else:
         html += '</body>\n'
         html += '</html>\n'
     html = localHtml(self, html)
     html = localIndexHtml(self, self, level, html, xhtml=True)
     return html
Exemplo n.º 26
0
 def submitCatalogQuery(self, search_query, search_order_by, search_meta_types, search_clients, REQUEST):
   
   #-- Initialize local variables.
   rtn = []
   if search_query == '':
     return rtn
   
   #-- Process clients.
   if self.getConfProperty('ZCatalog.portalClients',1) == 1 and search_clients == 1:
     for portalClient in self.getPortalClients():
       rtn.extend(portalClient.submitCatalogQuery( search_query, search_order_by, search_meta_types, search_clients, REQUEST))
   
   #-- Search catalog.
   lang = REQUEST['lang']
   zcatalog = getCatalog(self,lang)
   if zcatalog is None:
     return rtn
   items = []
   for zcindex in zcatalog.indexes():
     if zcindex.find('zcat_')==0:
       d = {}
       d['meta_type'] = zcat_meta_types
       if zcindex.find('zcat_data')==0:
         d[zcindex] = search_query
       else:
         d[zcindex] = self.search_encode( search_query)
       _globals.writeLog( self, "[searchCatalog]: %s=%s"%(zcindex,d[zcindex]))
       qr = zcatalog(d)
       _globals.writeLog( self, "[searchCatalog]: qr=%i"%len( qr))
       items.extend( qr)
   
   #-- Sort order.
   if int(search_order_by)==1:
     order_by = 'score'
   else:
     order_by = 'time'
   
   #-- Process results.
   results = []
   for item in items:
     data_record_id = item.data_record_id_
     path = zcatalog.getpath(data_record_id)
     # Append to valid results.
     if (len(search_meta_types) == 0 or item.meta_id in search_meta_types) and \
        (len(filter(lambda x: x[1]['path']==path, results)) == 0):
       result = {}
       result['score'] = intValue(item.data_record_score_)
       result['normscore'] = intValue(item.data_record_normalized_score_)
       result['time'] = getattr(item,'zcat_date',None)
       result['path'] = path
       if REQUEST.get('search_ob',True):
         ob = self.getCatalogPathObject( path)
         append = ob is not None
         if append:
           for o in ob.breadcrumbs_obj_path():
             append = append and o.isActive(REQUEST)
         if append:
           result['ob'] = ob
           result['url'] = ob.getDeclUrl(REQUEST) + '/' + ob.zcat_url(lang)
           results.append((result[order_by],result))
       else:
         result['title'] = getattr(item,'zcat_title','')
         result['summary'] = getattr(item,'zcat_summary','')
         result['zcat_url'] = getattr(item,'zcat_url','')
         result['url'] = (path + '/' + getattr(item,'zcat_url','')).replace('//','/')
         results.append((result[order_by],result))
   
   #-- Sort objects.
   results.sort()
   results.reverse()
   
   #-- Append objects.
   rtn.extend(map(lambda ob: ob[1],results))
   
   #-- Return objects in correct sort-order.
   return rtn
Exemplo n.º 27
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
        req = self.REQUEST
        url = self.REQUEST.get('URL', '')
        zmi = url.find('/manage') >= 0

        if not TraversalRequest.has_key('path_to_handle'):

            # 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 = req.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 = req.get('lang')
        if lang is None:
            lang = self.getLanguageFromName(
                TraversalRequest['path_to_handle'][-1])
        if lang is not None:
            req.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, req)
            if obContext is not None:
                ob = obContext
        if ob is not None:
            meta_type = getattr(ob, 'meta_type', '?')
            if zmi or (meta_type.startswith('ZMS')
                       and meta_type not in self.dGlobalAttrs.keys()):
                _confmanager.set_zmi_theme(self)
                _confmanager.set_zmi_theme(ob)
                try:
                    for child in self.objectValues(self.dGlobalAttrs.keys()):
                        _confmanager.set_zmi_theme(child)
                except:
                    pass
            if not zmi and TraversalRequest['path_to_handle'][-1] == name:
                lang = req.get('lang')
                if lang is None:
                    lang = self.getHttpAcceptLanguage(self.REQUEST)
                if lang is not None:
                    self.REQUEST.set('lang', lang)

            return ob

        # otherwise do some 'magic'
        else:
            _globals.writeLog(self,
                              '[__bobo_traverse__]: otherwise do some magic')

            # Package-Home.
            if name == '$ZMS_HOME':
                i = TraversalRequest['path_to_handle'].index(name)
                filepath = self.localfs_package_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 = 'None'
                f.lang = req.get('lang', self.getPrimaryLanguage())
                return f

            # Pathhandler-Hook.
            if 'pathhandler' in self.getMetaobjAttrIds(self.meta_id,
                                                       types=['method', 'py']):
                if name == TraversalRequest['path_to_handle'][-1]:
                    req.set('path_', '/'.join(req.get('path_', []) + [name]))
                    return self.getObjProperty('pathhandler', req)
                else:
                    req.set('path_', req.get('path_', []) + [name])
                    return self

            if not zmi or req.get('ZMS_PATH_HANDLER', False):

                # Recursive inclusions.
                thisOb = _globals.nvl(filterId(self, name, req), self)
                if thisOb.meta_type == 'ZMSLinkElement':
                    recursive = thisOb.isEmbeddedRecursive(req)
                    if recursive:
                        ob = thisOb.getRefObj()
                        proxy = thisOb.initProxy(thisOb.aq_parent,
                                                 thisOb.absolute_url(), ob,
                                                 recursive)
                        c = 0
                        l = TraversalRequest['path_to_handle']
                        if thisOb.id in l:
                            i = l.index(thisOb.id) + 1
                        elif thisOb.getDeclId(req) in l:
                            i = l.index(thisOb.getDeclId(req)) + 1
                        for k in range(i, len(l)):
                            newOb = None
                            obs = ob.getChildNodes(req)
                            filtered_obs = filter(
                                lambda x:
                                (x.id == l[k] or x.getDeclId(req) == l[k]),
                                obs)
                            if len(filtered_obs) == 1:
                                newOb = filtered_obs[0]
                            try:
                                if newOb.meta_type not in self.dGlobalAttrs.keys(
                                ):
                                    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:
                            req.set('ZMS_PROXY_%s' % self.id, proxy)
                    if req.get('ZMS_PROXY_%s' % self.id) and req.get(
                            'ZMS_PROXY_%s' % self.id
                    ).id != TraversalRequest['path_to_handle'][-1]:
                        v = handleBlobAttrs(
                            req.get('ZMS_PROXY_%s' % self.id).proxy,
                            TraversalRequest['path_to_handle'][-1], req)
                        if v is not None:
                            return v
                    return thisOb

            # Declarative Urls.
            ob = self.pathob([name], self.REQUEST)
            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'],
                            self.REQUEST)
                        d = r[i]
                        for key in d.keys():
                            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 = req.get('lang',
                                                     self.getPrimaryLanguage())
                                langfilename = value.getHref(req).split(
                                    '/')[-1]
                                if langfilename.find('?') > 0:
                                    langfilename = langfilename[:langfilename.
                                                                find('?')]
                                if langfilename == TraversalRequest[
                                        'path_to_handle'][-1]:
                                    return value
                    except:
                        _globals.writeError(self, '[__bobo_traverse__]')
                else:
                    try:
                        i = int(name[1:])
                        obj_attrs = self.getObjAttrs()
                        for key in self.getObjAttrs().keys():
                            obj_attr = obj_attrs[key]
                            if obj_attr['datatype_key'] == _globals.DT_LIST and \
                               obj_attr['repetitive']:
                                lp = [self.REQUEST.get('preview')]
                                if lp[0] != 'preview':
                                    lp.append('preview')
                                par = None
                                for ip in lp:
                                    try:
                                        self.REQUEST.set('preview', ip)
                                        r = self.getObjProperty(
                                            key, self.REQUEST, par)
                                        value = r[i]
                                        value = value._getCopy()
                                        value.aq_parent = self
                                        value.key = key
                                        value.lang = req.get(
                                            'lang', self.getPrimaryLanguage())
                                        langfilename = value.getHref(
                                            req).split('/')[-1]
                                        if langfilename.find('?') > 0:
                                            langfilename = langfilename[:
                                                                        langfilename
                                                                        .find(
                                                                            '?'
                                                                        )]
                                        if langfilename == TraversalRequest[
                                                'path_to_handle'][-1]:
                                            return value
                                    except:
                                        _globals.writeError(
                                            self,
                                            '[__bobo_traverse__]: ip=%s' %
                                            str(ip))
                                    par = {'fetchReqBuff': 0}
                                self.REQUEST.set('preview', lp[0])
                    except:
                        _globals.writeError(self, '[__bobo_traverse__]')

            # If the object has blob-fields find by filename and display data.
            v = handleBlobAttrs(self, name, req)
            if v is not None: 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():
                        auth_user = self.REQUEST.get('AUTHENTICATED_USER')
                        zms_skin = l[:i]
                        zms_ext = l[j + 1:]
                        if zms_skin in map(
                                lambda x: x.strip(),
                                self.getConfProperty(
                                    'ZMS.skins',
                                    'index,sitemap,mobile').split(',')):
                            access = (auth_user is None and self.hasPublicAccess()) or \
                                     (auth_user is not None and auth_user.has_permission( 'View', self) in [ 1, True])
                            if access:
                                self.REQUEST.set('ZMS_SKIN', zms_skin)
                                self.REQUEST.set('ZMS_EXT', zms_ext)
                                self.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
            exc_value = '<h2>Site-Error</h2><b>Sorry, there is no web page matching your request.</b> It is possible you typed the address incorrectly, or that the page no longer exists.<hr><b>Resource<b> <i>' + name + '</i> ' + ''.join(
                map(lambda x: x + '/',
                    TraversalRequest['path_to_handle'])) + ' GET'
            return self.standard_error_message(self,
                                               exc_type='Resource not found',
                                               exc_value=exc_value,
                                               REQUEST=self.REQUEST)
Exemplo n.º 28
0
 def OnStartElement(self, name, attrs):
     """ Builder.OnStartElement """
     _globals.writeLog( self, "[Builder.OnStartElement(" + str(name) + ")]")
     
     name = _globals.unencode( name)
     attrs = _globals.unencode( attrs)
     
     # handle alias
     if name in self.getMetaobjIds(sort=0) and not self.dGlobalAttrs.has_key(name):
       attrs['meta_id'] = name
       name = 'ZMSCustom'
     # handle alias for zms2go
     if name == 'ZMS' and self.oRootNode is not None:
       attrs['meta_id'] = name
       name = 'ZMSCustom'
     
     if self.bInRootTag or \
        self.oRoot == None or \
        (self.oRoot.id == self.getDocumentElement().id and \
         self.dGlobalAttrs.has_key(name) and \
         self.dGlobalAttrs[name]['obj_class'] is not None):
         
         _globals.writeLog( self, "[Builder.OnStartElement]: " + \
             "We are inside the XML root tag OR no root object is set" + \
             "-> instanciate node object in any case")
         
         if self.dGlobalAttrs.has_key(name) and \
            self.dGlobalAttrs[name]['obj_class'] is not None:
             
             # class defined for tag!
             if self.oCurrNode==None and self.oRoot!=None and self.oRoot.id==self.getDocumentElement().id:
               self.oCurrNode = self.oRoot
                 
             # create node instance
             _globals.writeBlock( self, "[Builder.OnStartElement]: create new object <" + str(name) + "> in " + str(self.oCurrNode))
             newNode = None
             if 'id_fix' in attrs.keys():
               id = attrs.get( 'id_fix')
               newNode = getattr(self.oCurrNode,id,None)
             elif 'id_prefix' in attrs.keys():
               prefix = attrs.get( 'id_prefix')
               id = self.oCurrNode.getNewId(prefix)
             elif 'id' in attrs.keys():
               id = attrs.get( 'id')
               prefix = _globals.id_prefix(id)
               id = self.oCurrNode.getNewId(prefix)
             else:
               id = self.oCurrNode.getNewId()
             sort_id = self.oCurrNode.getNewSortId()
             
             ##### Create ####
             if newNode is None:
               newNode = self.dGlobalAttrs[name]['obj_class'](id,sort_id)
               self.oCurrNode._setObject(newNode.id, newNode)
               newNode = getattr(self.oCurrNode,newNode.id)
             
             ##### Identify Content-Object ####
             if newNode.meta_type == 'ZMSCustom':
               meta_id = attrs.get( 'meta_id')
               if meta_id not in self.getMetaobjIds( sort=0):
                 _globals.writeError(newNode,'[_builder.OnStartElement]: no object-definition available ('+str(meta_id)+')!')
               newNode.meta_id = meta_id
             
             ##### Object State ####
             newNode.initializeWorkVersion()
             obj_attrs = newNode.getObjAttrs()
             langs = self.getLangIds()
             for lang in langs:
               req = {'lang':lang,'preview':'preview'}
               ##### Object State ####
               newNode.setObjStateNew(req)
               ##### Init Properties ####
               if 'active' in obj_attrs.keys():
                 newNode.setObjProperty('active',1,lang)
               if len( langs) == 1:
                 newNode.setObjProperty('change_uid','xml',lang)
                 newNode.setObjProperty('change_dt',time.time(),lang)
             
             _globals.writeLog( self, "[Builder.OnStartElement]: object with id " + str(newNode.id) + " of class " + str(newNode.__class__) + " created in " + str(self.oCurrNode.__class__))
             
             if self.oRoot is None:   # root object set?
                 self.oRoot = newNode # -> set root node
             
             # notify new node
             newNode.xmlOnStartElement(name, attrs, self.oCurrNode, self.oRoot)
             
             # set new node as current node
             self.oCurrNode = newNode
         
         else:
             # no class defined for tag 
             # -> offer to current object
             if self.oCurrNode==None:
                 raise ParseError("Unknown tag (" + name + "): no current object available!")  # no current object available!
             
             if not self.oCurrNode.xmlOnUnknownStartTag(name, attrs):
                 if self._unknownTagName == None:
                     self._unknownTagName = name
                 _globals.writeLog( self, "[Builder.OnStartElement]: Unknown start-tag (" + name + "): current object did not accept tag!")  # current object did not accept tag!
                 # raise ParseError("Unknown start-tag (" + name + "): current object did not accept tag!")  # current object did not accept tag!
       
     else:
         _globals.writeLog( self, "[Builder.OnStartElement]: " + 
             "we have encountered the XML root tag and a root object is predefined" + \
             "-> simply notify root object")
         self.oRoot.xmlOnStartElement(name, attrs, None, self.oRoot)
         
         # set root node as current node
         self.oCurrNode = self.oRoot
     
     # we are inside the XML root now!
     self.bInRootTag=1
     if self.oRootNode is None:
       self.oRootNode = self.oCurrNode
Exemplo n.º 29
0
 def refreshRefObj(self, ob, REQUEST):
   _globals.writeLog( self, "[refreshRefObj]: %s(%s) -> %s(%s)"%(self.id,self.meta_type,ob.id,ob.meta_type))
   self.unregisterRefObj(ob,REQUEST)
   self.registerRefObj(ob,REQUEST)
Exemplo n.º 30
0
 def unregisterRefObj(self, ob, REQUEST):
   _globals.writeLog( self, "[unregisterRefObj]: %s(%s)"%(ob.id,ob.meta_type))
   ref_by = self.getRefByObjs(REQUEST)
   ref_by = filter( lambda x: x[2:-1].split('/')[-1]!=ob.id,ref_by)
   ##### Set Attribute ####
   setattr(self,'ref_by',ref_by)