Exemplo n.º 1
0
def localHtml(self, html):
    try:
        default_charset = 'utf-8'
        charset = self.REQUEST.get('ZMS_CHARSET', default_charset)
        if not type(html) is unicode:
            html = unicode(html, default_charset)
        html = html.encode(charset)
    except (UnicodeDecodeError, UnicodeEncodeError):
        _globals.writeError(self, "[localHtml]")
        v = str(sys.exc_value)
        STR_POSITION = ' position '
        i = v.find(STR_POSITION)
        if i > 0:
            v = v[i + len(STR_POSITION):]
            if v.find('-') > 0:
                l = int(v[:v.find('-')])
                h = int(v[v.find('-') + 1:v.find(':')])
            else:
                l = int(v[:v.find(':')])
                h = l
            ln = max(l - 20, 0)
            hn = min(h + 20, len(html))
            print ">>>>>", html[ln:hn]
            print ">>>>>", " " * (l - ln) + "^" * (h - l + 1)
    return html
Exemplo n.º 2
0
def getXmlTypeSaveValue(v, attrs):
    # Strip.
    if type(v) is str:
        while len(v) > 0 and v[0] <= ' ':
            v = v[1:]
        while len(v) > 0 and v[-1] <= ' ':
            v = v[:-1]
    # Type.
    t = attrs.get('type', '?')
    if t == 'float':
        try:
            v = float(v)
        except:
            _globals.writeError(
                self,
                "[_xmllib.getXmlTypeSaveValue]: Conversion to '%s' failed for '%s'!"
                % (t, str(v)))
    elif t == 'int':
        try:
            v = int(v)
        except:
            _globals.writeError(
                self,
                "[_xmllib.getXmlTypeSaveValue]: Conversion to '%s' failed for '%s'!"
                % (t, str(v)))
    elif t == 'datetime':
        new = _globals.parseLangFmtDate(v)
        if new is not None:
            v = new
    # Return value.
    return v
Exemplo n.º 3
0
 def moveObjsToTrashcan(self, ids, REQUEST):
     """
   Move objects to trashcan.
   @param ids: List of object-ids.
   @type ids: C{list}
   @rtype: C{None}
   """
     if self.meta_id == 'ZMSTrashcan':
         return
     trashcan = self.getTrashcan()
     # Move (Cut & Paste).
     try:
         cb_copy_data = self.manage_cutObjects(ids, REQUEST)
         trashcan.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST)
     except:
         if len(ids) > 1:
             except_ids = []
             for id in ids:
                 try:
                     cb_copy_data = self.manage_cutObjects([id], REQUEST)
                     trashcan.manage_pasteObjects(cb_copy_data=None,
                                                  REQUEST=REQUEST)
                 except:
                     except_ids.append(id)
         else:
             except_ids = ids
         if len(except_ids) > 0:
             _globals.writeError(
                 self,
                 '[moveObjsToTrashcan]: Unexpected Exception: ids=%s!' %
                 str(except_ids))
     trashcan.normalizeSortIds()
     # Sort-IDs.
     self.normalizeSortIds()
Exemplo n.º 4
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.º 5
0
 def delUserAttr(self, user):
     user = getUserId(user)
     d = self.getConfProperty('ZMS.security.users', {})
     try:
         del d[user]
         self.setConfProperty('ZMS.security.users', d)
     except:
         _globals.writeError(self,
                             '[delUserAttr]: user=%s not deleted!' % user)
Exemplo n.º 6
0
def writeFile(self, filename, data, mode='w', encoding='utf-8'):
    try:
        f = codecs.open(filename, mode=mode, encoding=encoding)
        f.write(data)
        f.close()
    except:
        _globals.writeError(self, "[writeFile]")
        f = open(filename, mode=mode)
        f.write(data)
        f.close()
Exemplo n.º 7
0
 def getPortalMaster(self):
     """
   Returns portal-master, none if it does not exist.
   """
     v = self.getConfProperty('Portal.Master', '')
     if len(v) > 0:
         try:
             return getattr(self, v).content
         except:
             _globals.writeError(
                 self, '[getPortalMaster]: %s not found!' % str(v))
     return None
Exemplo n.º 8
0
 def getPortalClients(self):
     """
   Returns portal-clients, empty list if none exist.
   """
     docElmnts = []
     v = self.getConfProperty('Portal.Clients', [])
     if len(v) > 0:
         thisHome = self.getHome()
         for id in v:
             try:
                 docElmnts.append(getattr(thisHome, id).content)
             except:
                 _globals.writeError(
                     self, '[getPortalClients]: %s not found!' % str(id))
     return docElmnts
Exemplo n.º 9
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.º 10
0
 def renderShort(self, REQUEST):
   """
   Renders short presentation of link-element.
   """
   rtn = ''
   ref_obj = self.getRefObj()
   ref = self.getObjProperty('attr_ref',REQUEST)
   
   if self.getEmbedType() == 'remote':
     try:
       rtn += self.http_import( ref+'/renderShort')
     except:
       rtn += _globals.writeError(self,'[renderShort]: can\'t embed from remote: ref=%s'%ref)
   
   elif self.isEmbedded(REQUEST):
     if ref_obj is None:
       ref_obj = self.getLinkObj(ref)
     if ref_obj is None or ref_obj.isPage():
       rtn += super(ZMSLinkElement,self).renderShort(REQUEST)
     else:
       rtn += ref_obj.renderShort(REQUEST)
   
   else:
       rtn += self._getBodyContent( REQUEST)
   
   return rtn
Exemplo n.º 11
0
    def manage_user(self, btn, lang, REQUEST, RESPONSE):
        """ AccessManager.manage_user """
        message = ''

        # Change.
        # -------
        if btn == self.getZMILangStr('BTN_SAVE'):
            id = getUserId(REQUEST['AUTHENTICATED_USER'])
            userObj = self.findUser(id)
            password = REQUEST.get('password', '******')
            confirm = REQUEST.get('confirm', '')
            if password != '******' and password == confirm:
                for userFldr in self.getUserFolders():
                    if id in userFldr.getUserNames():
                        try:
                            roles = userObj.getRoles()
                            domains = userObj.getDomains()
                            userFldr.userFolderEditUser(
                                id, password, roles, domains)
                            message += self.getZMILangStr(
                                'ATTR_PASSWORD') + ': '
                        except:
                            message += _globals.writeError(
                                self, '[manage_user]: can\'t change password')
                        break
            self.setUserAttr(userObj, 'email',
                             REQUEST.get('email', '').strip())
            #-- Assemble message.
            message += self.getZMILangStr('MSG_CHANGED')

        #-- Build json.
        RESPONSE.setHeader('Content-Type', 'text/plain; charset=utf-8')
        RESPONSE.setHeader('Cache-Control', 'no-cache')
        RESPONSE.setHeader('Pragma', 'no-cache')
        return self.str_json(message)
Exemplo n.º 12
0
def uploadRessources(self, folder='.', mediadbStorable=True):
    langs = self.getLangIds()
    prim_lang = self.getPrimaryLanguage()
    obj_attrs = self.getObjAttrs()
    for key in obj_attrs.keys():
        obj_attr = self.getObjAttr(key)
        datatype = obj_attr['datatype_key']
        if datatype in _globals.DT_BLOBS:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang:
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = self.getObjVersion(req)
                        blob = self._getObjAttrValue(obj_attr, obj_vers, lang)
                        if blob is not None:
                            filename = _fileutil.getOSPath(
                                '%s/%s' % (folder, blob.filename))
                            _globals.writeBlock(
                                self,
                                '[uploadRessources]: filename=%s' % filename)
                            # Backup properties (otherwise manage_upload sets it).
                            bk = {}
                            for __xml_attr__ in blob.__xml_attrs__:
                                bk[__xml_attr__] = getattr(
                                    blob, __xml_attr__, '')
                            # Read file to ZODB.
                            f = open(filename, 'rb')
                            try:
                                blob = createBlobField(self,
                                                       datatype,
                                                       file={
                                                           'data': f,
                                                           'filename': filename
                                                       })
                            finally:
                                f.close()
                            # Restore properties.
                            for __xml_attr__ in blob.__xml_attrs__:
                                if bk.get(__xml_attr__, '') not in [
                                        '', 'text/x-unknown-content-type'
                                ]:
                                    setattr(blob, __xml_attr__,
                                            bk[__xml_attr__])
                            blob.getFilename()  # Normalize filename
                            self.setObjProperty(key, blob, lang)
                except:
                    _globals.writeError(self, "[uploadRessources]")
Exemplo n.º 13
0
    def updateVersion(self, lang, REQUEST, maintenance=True):
        message = ''
        build = getattr(self, 'build', '000')
        patch = getattr(self, 'patch', '000')
        if build != self.zms_build:
            REQUEST.set('recurse_updateVersionBuild', True)
            _globals.writeBlock(
                self,
                '[ZMS.updateVersion]: Synchronize object-model from build #%s%s to #%s%s...'
                % (build, patch, self.zms_build, self.zms_patch))
            message += recurse_updateVersionBuild(self, self, REQUEST)
            _globals.writeBlock(
                self,
                '[ZMS.updateVersion]: Synchronize object-model from build #%s%s to #%s%s - Finished!'
                % (build, patch, self.zms_build, self.zms_patch))
            setattr(self, 'build', self.zms_build)
            transaction.commit()
            message += 'Synchronized object-model from build #%s%s to #%s%s!<br/>' % (
                build, patch, self.zms_build, self.zms_patch)
        if build != self.zms_build or patch != self.zms_patch:
            REQUEST.set('recurse_updateVersionPatch', True)
            _globals.writeBlock(
                self,
                '[ZMS.updateVersion]: Synchronize object-model from patch #%s%s to #%s%s...'
                % (build, patch, self.zms_build, self.zms_patch))
            message += recurse_updateVersionPatch(self, self, REQUEST)
            _globals.writeBlock(
                self,
                '[ZMS.updateVersion]: Synchronize object-model from patch #%s%s to #%s%s - Finished!'
                % (build, patch, self.zms_build, self.zms_patch))
            setattr(self, 'patch', self.zms_patch)
            transaction.commit()
            message += 'Synchronized object-model from patch #%s%s to #%s%s!<br/>' % (
                build, patch, self.zms_build, self.zms_patch)
        if maintenance:
            try:
                self.getTrashcan().run_garbage_collection()
            except:
                _globals.writeError(
                    self, '[updateVersion]: can\'t run garbage collection')

        # Process clients.
        if message:
            for portalClient in self.getPortalClients():
                message += portalClient.updateVersion(lang, REQUEST, False)

        return message
Exemplo n.º 14
0
 def manage_ajaxDragDrop(self, lang, target, REQUEST, RESPONSE):
     """ ZMSContainerObject.manage_ajaxDragDrop """
     rc = 0
     message = self.getZMILangStr('MSG_PASTED')
     try:
         before = False
         into = False
         if target.startswith('-'):
             before = True
             target = target[1:]
         elif target.endswith('-'):
             target = target[:-1]
         else:
             into = True
         ob = self.getLinkObj(target)
         sort_id = ob.getSortId()
         if into:
             sort_id = 0
         else:
             ob = ob.getParentNode()
             if before:
                 sort_id = sort_id - 1
             else:
                 sort_id = sort_id + 1
         setattr(self, 'sort_id', _globals.format_sort_id(sort_id))
         cb_copy_data = self.getParentNode().manage_cutObjects([self.id])
         ob.manage_pasteObjects(cb_copy_data)
         ob.normalizeSortIds()
     except:
         tp, vl, tb = sys.exc_info()
         rc = -1
         message = str(tp) + ': ' + str(vl)
         _globals.writeError(self, '[manage_ajaxDragDrop]')
     #-- Build xml.
     RESPONSE = REQUEST.RESPONSE
     content_type = 'text/xml; charset=utf-8'
     filename = 'manage_ajaxDragDrop.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')
     self.f_standard_html_request(self, REQUEST)
     xml = self.getXmlHeader()
     xml += '<result code="%i" message="%s">\n' % (rc, message)
     xml += "</result>\n"
     return xml
Exemplo n.º 15
0
    def _get_cb_copy_data(self, cb_copy_data=None, REQUEST=None):
        cp = None
        if cb_copy_data is not None:
            cp = cb_copy_data
        else:
            if REQUEST and REQUEST.has_key('__cp'):
                cp = REQUEST['__cp']
        if cp is None:
            raise CopyError, eNoData

        try:
            cp = _cb_decode(cp)
        except:
            _globals.writeError(self, '[_get_cb_copy_data]: eInvalid')
            raise CopyError, eInvalid

        return cp
Exemplo n.º 16
0
 def renderText(self, format, key, text, REQUEST, id=None, clazz=None):
     # Process format.
     if format is not None:
         textformat = self.getTextFormat(format, REQUEST)
         if textformat is not None and len(text) > 0:
             text = textformat.renderText(text, REQUEST, id, clazz)
     # Custom hook.
     try:
         name = 'renderCustomText'
         if hasattr(self, name):
             text = getattr(self, name)(context=self,
                                        key=key,
                                        text=text,
                                        REQUEST=REQUEST)
     except:
         _globals.writeError(self, '[renderText]: can\'t %s' % name)
     # Return.
     return text
Exemplo n.º 17
0
def _exportZodb2Zip(zf, root, container):
  for ob in container.objectValues():
    if ob.meta_type in ['Folder']:
      _exportZodb2Zip(zf,root,ob)
    elif ob.meta_type in ['Image','File']:
      arcname = ob.absolute_url()[len(root.absolute_url())+1:]
      print "_exportZodb2Zip",arcname
      try:
        bytes = ob.data
        if len(bytes) == 0:
          bytes = ob.getData()
        try:
          bytes = bytes.read()
        except:
          bytes = str(bytes)
        zf.writestr(arcname,bytes)
      except:
        _globals.writeError(root.content,"_exportZodb2Zip")
Exemplo n.º 18
0
 def getRemoteObj(self):
   
   REQUEST = self.REQUEST
   lang = REQUEST['lang']
   #-- [ReqBuff]: Fetch buffered value from Http-Request.
   reqBuffId = 'getRemoteObj'
   try:
     value = self.fetchReqBuff( reqBuffId, REQUEST)
     return value
   except:
     value = None
     ref = self.getRef()
     try:
       value = self.http_import( ref + '/ajaxGetNode?lang=%s'%lang)
       value = self.xmlParse( value)
     except:
       _globals.writeError(self,'[getRemoteObj]: can\'t embed from remote: ref=%s'%ref)
     #-- [ReqBuff]: Returns value and stores it in buffer of Http-Request.
     return self.storeReqBuff( reqBuffId, value, REQUEST)
Exemplo n.º 19
0
 def getData(self, parent=None):
     """
   Returns data.
   """
     data = ''
     mediadbfile = self.getMediadbfile()
     if mediadbfile is not None:
         if parent is None:
             parent = self.aq_parent
         mediadb = parent.getMediaDb()
         if mediadb is not None:
             try:
                 data = mediadb.retrieveFile(mediadbfile)
             except:
                 _globals.writeError(
                     parent,
                     "[getData]: can't retrieve file from mediadb: %s" %
                     str(mediadbfile))
     else:
         data = str(getattr(self, 'data', ''))
     return data
Exemplo n.º 20
0
    def _get_obs(self, cp):

        try:
            cp = _cb_decode(cp)
        except:
            _globals.writeError(self, '[_get_obs]: eInvalid')
            raise CopyError, eInvalid

        oblist = []
        op = cp[0]
        app = self.getPhysicalRoot()

        for mdata in cp[1]:
            m = Moniker.loadMoniker(mdata)
            try:
                ob = m.bind(app)
            except:
                _globals.writeError(self, '[_get_obs]: eNotFound')
                raise CopyError, eNotFound
            self._verifyObjectPaste(ob)
            oblist.append(ob)

        return oblist
Exemplo n.º 21
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.º 22
0
def _importXml(self, item, zms_system=0, createIfNotExists=1):
  itemType = item.get('type')
  itemOb = item.get('value')
  if itemType == 'filter':
    newId = itemOb.get('id')
    newAcquired = 0
    newName = itemOb.get('name')
    newFormat = itemOb.get('format')
    newContentType = itemOb.get('content_type')
    newDescription = itemOb.get('description','')
    newRoles = itemOb.get('roles',[])
    newMetaTypes = itemOb.get('meta_types',[])
    filters = getRawFilters(self)
    ids = filters.keys()
    ids = filter( lambda x: filters[x].get('zms_system',0)==1, ids)
    if createIfNotExists == 1 or newId in ids:
      delFilter(self, newId)
      setFilter(self, newId, newAcquired, newName, newFormat, newContentType, newDescription, newRoles, newMetaTypes, zms_system)
      for process in itemOb.get('processes',[]):
        newProcessId = process.get('id')
        newProcessFile = process.get('file')
        setFilterProcess(self, newId, newProcessId, newProcessFile)
  elif itemType == 'process':
    newId = itemOb.get('id')
    newAcquired = 0
    newName = itemOb.get('name')
    newType = itemOb.get('type','process')
    newCommand = itemOb.get('command')
    processes = getRawProcesses(self)
    ids = processes.keys()
    ids = filter( lambda x: processes[x].get('zms_system',0)==1, ids)
    if createIfNotExists == 1 or newId in ids:
      delProcess(self, newId)
      setProcess(self, newId, newAcquired, newName, newType, newCommand, zms_system)
  else:
    _globals.writeError(self,"[_importXml]: Unknown type >%s<"%itemType)
Exemplo n.º 23
0
def ftpToProvider(self, lang, REQUEST, RESPONSE):
    message = ''

    # Profile time.
    tStart = time.time()

    # Create temporary local-folder.
    tempfolder = tempfile.mktemp()
    ressources = self.exportRessources(tempfolder,
                                       REQUEST,
                                       from_content=self.getLevel() == 0,
                                       from_zms=True,
                                       from_home=True)

    # Download HTML-pages (to temporary local-folder).
    for lang in self.getLangIds():
        REQUEST.set('ZMS_HTML_EXPORT', 1)
        REQUEST.set('lang', lang)
        REQUEST.set('preview', None)
        self.recurse_downloadHtmlPages(self, tempfolder, lang, REQUEST)

    # Connect to FTP-server.
    # ----------------------
    dctFtp = self.getFtp(REQUEST)
    try:
        ftp = ftplib.FTP(dctFtp['site'])
        ftp.set_debuglevel(1)  # 0=no, 1=moderate, 2=maximum debugging output
        ftp.login(dctFtp['userid'], dctFtp['password'])
        ftpCwd(ftp, '', dctFtp['path'])
        recurse_Local(ftp, dctFtp['path'], tempfolder)
        message += ftp.getwelcome() + '<br/>'
        ftp.quit()

    except:
        message += _globals.writeError(
            self, "[_ftpmanager.ftpToProvider]:") + '<br/>'

    # Remove temporary local-folder.
    _fileutil.remove(tempfolder, deep=1)

    # Return with message.
    message += self.getZMILangStr('MSG_EXPORTED') % (
        '%s <b>%s</b> in %d sec.' %
        (self.display_type(REQUEST), dctFtp['site'] + dctFtp['path'],
         (time.time() - tStart)))
    return message
Exemplo n.º 24
0
    def manage_customizeFtp(self, btn, lang, REQUEST, RESPONSE):
        """ FtpManager.manage_customizeFtp """

        message = ''

        # Change.
        # -------
        self.attr_provider_ftp_site = REQUEST.form.get('site')
        self.attr_provider_ftp_path = REQUEST.form.get('path')
        self.attr_provider_ftp_userid = REQUEST.form.get('userid')
        self.attr_provider_ftp_password = REQUEST.form.get('password')
        message = self.getZMILangStr('MSG_CHANGED')

        # Ping.
        # -----
        if btn == self.getZMILangStr('BTN_PING'):
            try:
                # Profile time.
                tStart = time.time()
                ftp = ftplib.FTP(self.attr_provider_ftp_site)
                ftp.set_debuglevel(1)  # moderate output
                ftp.login(self.attr_provider_ftp_userid,
                          self.attr_provider_ftp_password)
                message = '%s%s<br/>' % (message, ftp.getwelcome())
                ftp.quit()
                message = 'Ping in %d sec.' % (time.time() - tStart)
            except:
                message = _globals.writeError(self, "[manage_customizeFtp]:")

        # Export.
        # -------
        if btn == self.getZMILangStr('BTN_EXPORT'):
            REQUEST.set('site', None)
            REQUEST.set('path', None)
            REQUEST.set('userid', None)
            REQUEST.set('password', None)
            message = ftpToProvider(self, lang, REQUEST, RESPONSE)

        # Return with message.
        return REQUEST.RESPONSE.redirect(
            'manage_importexportFtp?lang=%s&manage_tabs_message=%s' %
            (lang, urllib.quote(message)))
Exemplo n.º 25
0
 def renderShort(self, REQUEST):
     """
   Renders short presentation of link-container.
   """
     html = ''
     try:
         html = ''.join(
             map(
                 lambda x: x.renderShort(REQUEST),
                 filter(lambda x: x.isCommitted(REQUEST),
                        self.getChildNodes(REQUEST, ['ZMSLinkElement']))))
         html = '<div class="contentEditable" id="contentEditable_%s_%s">%s</div>' % (
             self.id, REQUEST['lang'], html)
         html = '<div class="zmiRenderShort">%s</div><!-- .zmiRenderShort -->' % html
         # Process html <form>-tags.
         html = _globals.form_quote(html, REQUEST)
     except:
         html = _globals.writeError(self, "[renderShort]")
         html = '<br/>'.join(html.split('\n'))
     # Return <html>.
     return html
Exemplo n.º 26
0
 def _getBodyContent(self, REQUEST):
   rtn = ''
   if self.getEmbedType() == 'remote':
     ref = self.getObjProperty('attr_ref',REQUEST)
     try:
       rtn += self.http_import( ref+'/getBodyContent')
     except:
       rtn += _globals.writeError(self,'[_getBodyContent]: can\'t embed from remote: ref=%s'%ref)
   else:
     proxy = self.getProxy()
     if proxy != self and proxy is not None and self.isEmbeddedRecursive( self.REQUEST):
       rtn += proxy._getBodyContent(REQUEST)
     elif proxy == self and proxy is not None and self.isEmbedded( REQUEST):
       ref_obj = self.getRefObj()
       if ref_obj is None:
         ref = self.getObjProperty('attr_ref',REQUEST)
         ref_obj = self.getLinkObj(ref)
       if ref_obj is not None:
         rtn += ref_obj._getBodyContent( REQUEST)
     else:
       rtn += self._getBodyContent2( REQUEST)
   return rtn
Exemplo n.º 27
0
    def manage_userProperties(self, btn, key, lang, REQUEST, RESPONSE=None):
        """ AccessManager.manage_userProperties """
        message = ''
        id = REQUEST.get('id', '')

        # Cancel.
        # -------
        if btn in [
                self.getZMILangStr('BTN_CANCEL'),
                self.getZMILangStr('BTN_BACK')
        ]:
            id = ''

        # Insert.
        # -------
        if btn == self.getZMILangStr('BTN_INSERT'):
            if key == 'obj':
                #-- Insert user.
                newId = REQUEST.get('newId', '').strip()
                newPassword = REQUEST.get('newPassword', '').strip()
                newConfirm = REQUEST.get('newConfirm', '').strip()
                newEmail = REQUEST.get('newEmail', '').strip()
                id = insertUser(self, newId, newPassword, newEmail, REQUEST)
                #-- Assemble message.
                message = self.getZMILangStr(
                    'MSG_INSERTED') % self.getZMILangStr('ATTR_USER')
            elif key == 'attr':
                #-- Insert local user.
                langs = REQUEST.get('langs', [])
                if not type(langs) is list: langs = [langs]
                roles = REQUEST.get('roles', [])
                if not type(roles) is list: roles = [roles]
                node = REQUEST.get('node')
                ob = self.getLinkObj(node, REQUEST)
                docElmnt = ob.getDocumentElement()
                node = docElmnt.getRefObjPath(ob)
                docElmnt.setLocalUser(id, node, roles, langs)
                #-- Assemble message.
                message = self.getZMILangStr(
                    'MSG_INSERTED') % self.getZMILangStr('ATTR_NODE')

        # Change.
        # -------
        elif btn == self.getZMILangStr('BTN_SAVE'):
            userObj = self.findUser(id)
            if key == 'obj':
                password = REQUEST.get('password', '******')
                confirm = REQUEST.get('confirm', '')
                if password != '******' and password == confirm:
                    try:
                        userFldr = self.getUserFolder()
                        roles = userObj.getRoles()
                        domains = userObj.getDomains()
                        userFldr.userFolderEditUser(id, password, roles,
                                                    domains)
                    except:
                        _globals.writeError(
                            self, '[manage_user]: can\'t change password')
                self.setUserAttr(id, 'email', REQUEST.get('email', '').strip())
                self.setUserAttr(id, 'profile',
                                 REQUEST.get('profile', '').strip())
            elif key == 'attr':
                pass
            #-- Assemble message.
            message = self.getZMILangStr('MSG_CHANGED')

        # Delete.
        # -------
        elif btn in ['delete', self.getZMILangStr('BTN_DELETE')]:
            if key == 'obj':
                #-- Delete user.
                deleteUser(self, id)
                id = ''
                #-- Assemble message.
                message = self.getZMILangStr('MSG_DELETED') % int(1)
            elif key == 'attr':
                #-- Delete local user.
                node = REQUEST.get('nodekey')
                try:
                    self.delLocalUser(id, node)
                except:
                    pass
                try:
                    docElmnt = self.getDocumentElement()
                    ob = self.getLinkObj(node, REQUEST)
                    if ob is not None:
                        docElmnt = ob.getDocumentElement()
                        node = docElmnt.getRefObjPath(ob)
                    docElmnt.delLocalUser(id, node)
                except:
                    pass
                #-- Assemble message.
                message = self.getZMILangStr('MSG_DELETED') % int(1)

        # Invite.
        # -------
        elif btn == self.getZMILangStr('BTN_INVITE'):
            if key == 'obj':
                email = self.getUserAttr(id, 'email', '')
                nodekeys = REQUEST.get('nodekeys', [])
                if len(email) > 0 and len(nodekeys) > 0:
                    # Send notification.
                    # ------------------
                    #-- Recipient
                    mto = email
                    #-- Body
                    userObj = self.findUser(id)
                    mbody = []
                    mbody.append(
                        self.getTitle(REQUEST) + ' ' +
                        self.getHref2IndexHtml(REQUEST))
                    mbody.append('\n')
                    mbody.append('\n%s: %s' %
                                 (self.getZMILangStr('ATTR_ID'), id))
                    mbody.append('\n')
                    for nodekey in nodekeys:
                        ob = self.getLinkObj(nodekey, REQUEST)
                        mbody.append('\n * ' + ob.getTitlealt(REQUEST) + ' [' +
                                     ob.display_type(REQUEST) + ']: ' +
                                     ob.absolute_url() + '/manage')
                    mbody.append('\n')
                    mbody.append('\n' +
                                 self.getZMILangStr('WITH_BEST_REGARDS'))
                    mbody.append('\n' + str(REQUEST['AUTHENTICATED_USER']))
                    mbody.append('\n-------------------------------')
                    mbody = ''.join(mbody)
                    #-- Subject
                    msubject = '%s (invitation)' % self.getTitlealt(REQUEST)
                    #-- Send
                    self.sendMail(mto, msubject, mbody, REQUEST)
                    #-- Assemble message.
                    message = self.getZMILangStr('MSG_CHANGED')

        # Return with message.
        if RESPONSE:
            message = urllib.quote(message)
            return RESPONSE.redirect(
                'manage_users?lang=%s&manage_tabs_message=%s&id=%s' %
                (lang, message, id))


################################################################################
Exemplo n.º 28
0
def getIMSManifestResources(base, self, scoType, REQUEST):
    from _exportable import localHtml
    obs = self.getChildNodes(REQUEST)
    xml = ''
    if not self.isActive(REQUEST) or self.isResource(REQUEST):
        scoType = 'asset'
    if self.isActive( REQUEST) and \
       (len(filter(lambda x: x.isPageElement(), obs)) > 0 or \
        len(filter(lambda x: x.isPage(), obs)) == 0):
        href = self.getHref2IndexHtml(REQUEST)[len(base.absolute_url()) + 1:]
        xml += '<resource'
        xml += ' identifier="R_%s"' % self.id
        xml += ' type="webcontent"'
        xml += ' adlcp:scormType="%s"' % scoType
        xml += ' href="%s"' % href
        xml += '>\n'
        xml += '<metadata/>\n'
        xml += '\t<file href="%s" />\n' % href
        REQUEST.set('ZMS_PATH_HANDLER', True)
        try:
            html = self.index_html(self, REQUEST)
        except:
            html = ''
            _globals.writeError(
                self,
                "[getIMSManifestResources]: An unexpected error occured!")
        html = localHtml(self, html)
        hrefs = []
        i = -1
        s0 = 'href="'
        s1 = '"'
        while True:
            i = html.find(s0, i + 1)
            if i < 0: break
            j = html.find(s1, i + len(s0))
            hrefs.append(html[i + len(s0):j])
        i = -1
        s0 = 'src="'
        s1 = '"'
        while True:
            i = html.find(s0, i + 1)
            if i < 0: break
            j = html.find(s1, i + len(s0))
            hrefs.append(html[i + len(s0):j])
        homeUrl = self.getHome().absolute_url() + '/'
        baseUrl = base.absolute_url() + '/'
        docUrl = self.getDocumentElement().absolute_url() + '/'
        commonUrl = self.getHome().common.absolute_url() + '/'
        for href in hrefs:
            if href.find(homeUrl) == 0:
                if href.find(baseUrl) == 0:
                    href = href[len(baseUrl):]
                elif href.find(docUrl) == 0:
                    href = href[len(docUrl):]
                elif href.find(commonUrl) == 0:
                    href = href[len(commonUrl):]
                xml += '\t<file href="%s" />\n' % href
        xml += '</resource>\n'
    for ob in obs:
        if ob.isPage():
            xml += getIMSManifestResources(base, ob, scoType, REQUEST)
    return xml
Exemplo n.º 29
0
    def manage_changeMetaProperties(self, btn, lang, REQUEST, RESPONSE=None):
        """ MetadictManager.manage_changeMetaProperties """
        message = ''
        extra = {}
        t0 = time.time()
        id = REQUEST.get('id', '')
        target = 'manage_metas'

        try:

            # Acquire.
            # --------
            if btn == self.getZMILangStr('BTN_ACQUIRE'):
                ids = REQUEST.get('aq_ids', [])
                for newId in ids:
                    newAcquired = 1
                    id = self.setMetadictAttr(None, newId, newAcquired)
                message = self.getZMILangStr('MSG_INSERTED') % str(len(ids))

            # Change.
            # -------
            elif btn == self.getZMILangStr('BTN_SAVE'):
                for oldId in REQUEST.get('old_ids', []):
                    if REQUEST.has_key('attr_id_%s' % oldId):
                        newId = REQUEST['attr_id_%s' % oldId].strip()
                        newAcquired = 0
                        newName = REQUEST['attr_name_%s' % oldId].strip()
                        newType = REQUEST['attr_type_%s' % oldId].strip()
                        newMandatory = REQUEST.get('attr_mandatory_%s' % oldId,
                                                   0)
                        newMultilang = REQUEST.get('attr_multilang_%s' % oldId,
                                                   0)
                        newRepetitive = REQUEST.get(
                            'attr_repetitive_%s' % oldId, 0)
                        newKeys = self.string_list(
                            REQUEST.get('attr_keys_%s' % oldId, ''), '\n')
                        newCustom = REQUEST.get('attr_custom_%s' % oldId, '')
                        self.setMetadictAttr(oldId, newId, newAcquired,
                                             newName, newType, newMandatory,
                                             newMultilang, newRepetitive,
                                             newCustom, newKeys)
                message += self.getZMILangStr('MSG_CHANGED')
                newId = REQUEST['_id'].strip()
                newAcquired = 0
                newName = REQUEST['_name'].strip()
                newType = REQUEST['_type'].strip()
                newMandatory = REQUEST.get('_mandatory', 0)
                newMultilang = REQUEST.get('_multilang', 0)
                newRepetitive = REQUEST.get('_repetitive', 0)
                newCustom = ''
                if len(newId) > 0 and len(newName) > 0 and len(newType) > 0:
                    if newType == 'method':
                        newCustom += '<dtml-comment>--// BO ' + newId + ' //--</dtml-comment>\n'
                        newCustom += '\n'
                        newCustom += '<dtml-comment>--// EO ' + newId + ' //--</dtml-comment>\n'
                    self.setMetadictAttr(None, newId, newAcquired, newName,
                                         newType, newMandatory, newMultilang,
                                         newRepetitive, newCustom)
                    message += self.getZMILangStr('MSG_INSERTED') % newId

            # Copy.
            # -----
            elif btn == self.getZMILangStr('BTN_COPY'):
                metaOb = self.getMetadictAttr(id)
                if metaOb.get('acquired', 0) == 1:
                    masterRoot = getattr(self,
                                         self.getConfProperty('Portal.Master'))
                    masterDocElmnt = masterRoot.content
                    REQUEST.set('ids', [id])
                    xml = masterDocElmnt.manage_changeMetaProperties(
                        self.getZMILangStr('BTN_EXPORT'), lang, REQUEST,
                        RESPONSE)
                    self.importMetadictXml(xml=xml)
                    message = self.getZMILangStr('MSG_IMPORTED') % (
                        '<i>%s</i>' % id)

            # Delete.
            # -------
            elif btn in ['delete', self.getZMILangStr('BTN_DELETE')]:
                oldId = id
                self.delMetadictAttr(oldId)
                for portalClient in self.getPortalClients():
                    pcmm = portalClient.metaobj_manager
                    if oldId in pcmm.getMetadictAttrs(
                    ) and pcmm.getMetadictAttr(oldId).get('acquired', 0) == 1:
                        pcmm.delMetadictAttr(oldId)
                message = self.getZMILangStr('MSG_DELETED') % int(1)

            # Export.
            # -------
            elif btn == self.getZMILangStr('BTN_EXPORT'):
                value = []
                ids = REQUEST.get('ids', [])
                metadicts = self.metas
                for i in range(len(metadicts) / 2):
                    id = metadicts[i * 2]
                    dict = metadicts[i * 2 + 1].copy()
                    if id in ids or len(ids) == 0:
                        if dict.has_key('zms_system'):
                            del dict['zms_system']
                        dst_meta_types = []
                        for meta_id in self.getMetaobjIds():
                            if id in self.getMetadictAttrs(meta_id):
                                dst_meta_types.append(meta_id)
                        dict['dst_meta_types'] = dst_meta_types
                        value.append(dict)
                if len(value) == 1:
                    value = value[0]
                content_type = 'text/xml; charset=utf-8'
                filename = 'export.metadict.xml'
                export = self.getXmlHeader() + self.toXmlString(value, 1)
                RESPONSE.setHeader('Content-Type', content_type)
                RESPONSE.setHeader('Content-Disposition',
                                   'inline;filename="%s"' % filename)
                return export

            # Import.
            # -------
            elif btn == self.getZMILangStr('BTN_IMPORT'):
                f = REQUEST['file']
                if f:
                    filename = f.filename
                    self.importMetadictXml(xml=f)
                else:
                    filename = REQUEST['init']
                    createIfNotExists = 1
                    self.importConf(filename, REQUEST, createIfNotExists)
                message = self.getZMILangStr('MSG_IMPORTED') % ('<i>%s</i>' %
                                                                filename)

            # Move to.
            # --------
            elif btn == 'move_to':
                pos = REQUEST['pos']
                oldId = id
                id = self.moveMetadictAttr(oldId, pos)
                message = self.getZMILangStr('MSG_MOVEDOBJTOPOS') % (
                    ("<i>%s</i>" % oldId), (pos + 1))

            ##### Page-Extension ####
            if id == 'attr_pageext':
                for langId in self.getLangIds():
                    self.setLangMethods(langId)

            ##### SYNCHRONIZE ####
            self.synchronizeObjAttrs()

        # Handle exception.
        except:
            _globals.writeError(self, "[manage_changeMetaProperties]")
            error = str(sys.exc_type)
            if sys.exc_value:
                error += ': ' + str(sys.exc_value)
            target = self.url_append_params(
                target, {'manage_tabs_error_message': error})

        # Return with message.
        target = self.url_append_params(target, {'lang': lang, 'id': id})
        target = self.url_append_params(target, extra)
        if len(message) > 0:
            message += ' (in ' + str(int(
                (time.time() - t0) * 100.0) / 100.0) + ' secs.)'
            target = self.url_append_params(target,
                                            {'manage_tabs_message': message})
        return RESPONSE.redirect(target)
Exemplo n.º 30
0
    def __call__(self, REQUEST=None, **kw):
        """"""
        if REQUEST is not None and REQUEST.has_key('path_to_handle'):
            REQUEST['path_to_handle'] = []
            RESPONSE = REQUEST.RESPONSE
            parent = self.aq_parent

            access = parent.hasAccess(REQUEST) or parent.getConfProperty(
                'ZMS.blobfields.grant_public_access', 0) == 1
            # Hook for custom access rules: return True/False, return 404 (Forbidden) if you want to perform redirect
            if access:
                try:
                    name = 'hasCustomAccess'
                    if hasattr(parent, name):
                        v = getattr(parent, name)(context=parent,
                                                  REQUEST=REQUEST)
                        if type(v) is bool:
                            access = access and v
                        elif type(v) is int and v == 404:
                            return ''
                except:
                    _globals.writeError(parent, '[__call__]: can\'t %s' % name)
            # Raise unauthorized error.
            if not access:
                if getattr(parent, 'login_form', None):
                    target = '%s/login_form' % parent.absolute_url()
                    target = parent.url_append_params(
                        target, {'came_from': REQUEST.get('URL')})
                    if REQUEST.get('QUERY_STRING'):
                        target = parent.url_append_params(
                            target,
                            {'QUERY_STRING': REQUEST.get('QUERY_STRING')})
                    return RESPONSE.redirect(target)
                else:
                    raise zExceptions.Unauthorized

            if self._if_modified_since_request_handler(REQUEST, RESPONSE):
                # we were able to handle this by returning a 304 (not modified)
                # unfortunately, because the HTTP cache manager uses the cache
                # API, and because 304 (not modified) responses are required to carry the Expires
                # header for HTTP/1.1, we need to call ZCacheable_set here.
                # This is nonsensical for caches other than the HTTP cache manager
                # unfortunately.
                self.ZCacheable_set(None)
                return ''

            if isinstance(self, MyImage) and self._range_request_handler(
                    REQUEST, RESPONSE):
                # we served a chunk of content in response to a range request.
                return ''

            parent.set_response_headers(self.getFilename(),
                                        self.getContentType())
            RESPONSE.setHeader('Content-Length', self.get_size())
            RESPONSE.setHeader('Last-Modified', rfc1123_date(parent._p_mtime))
            cacheable = not REQUEST.get('preview') == 'preview'
            if cacheable:
                cacheable = parent.hasPublicAccess()
            # Hook for custom cacheable rules: return True/False
            if cacheable:
                try:
                    name = 'hasCustomPublicAccess'
                    if hasattr(parent, name):
                        v = getattr(parent, name)(context=parent,
                                                  REQUEST=REQUEST)
                        if type(v) is bool:
                            cacheable = cacheable and v
                except:
                    _globals.writeError(parent, '[__call__]: can\'t %s' % name)
            if not cacheable:
                RESPONSE.setHeader('Expires', '-1')
                RESPONSE.setHeader('Cache-Control', 'no-cache')
                # IE6 SSL Download bug:
                # http://support.microsoft.com/kb/812935/en-us
                # http://support.microsoft.com/kb/323308/en-us
                if not REQUEST.get('URL', '').startswith('https://'):
                    RESPONSE.setHeader('Pragma', 'no-cache')

            # Hook for custom RESPONSE-headers
            name = 'getCustomBlobResponseHeaders'
            if hasattr(parent, name):
                v = getattr(parent, name)(context=parent, REQUEST=REQUEST)

            if self.ZCacheable_isCachingEnabled():
                result = self.ZCacheable_get(default=None)
                if result is not None:
                    # We will always get None from RAMCacheManager and HTTP
                    # Accelerated Cache Manager but we will get
                    # something implementing the IStreamIterator interface
                    # from a "FileCacheManager"
                    return result

            self.ZCacheable_set(None)

            mediadb = parent.getMediaDb()
            if mediadb is not None:
                mediadbfile = self.getMediadbfile()
                if mediadbfile is not None:
                    return mediadb.retrieveFileStreamIterator(
                        mediadbfile, REQUEST)

            RESPONSE.setBase(None)
            return self.getData()

        return self