Example #1
0
    def toZippedXml(self, REQUEST, get_data=True, incl_embedded=False):

        #-- Create temporary folder.
        tempfolder = tempfile.mktemp()
        ressources = self.exportRessources(tempfolder,
                                           REQUEST,
                                           incl_embedded=incl_embedded)

        #-- Get xml-export.
        xml = self.toXml(REQUEST, incl_embedded)

        #-- Write xml-export to file.
        xmlfilename = _fileutil.getOSPath(
            '%s/%s_%s.xml' % (tempfolder, self.getHome().id, self.meta_id))
        _fileutil.exportObj(xml, xmlfilename)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not _globals.debug(self):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
Example #2
0
    def rotate(self, img, direction, qual=75):
        """
    Rotate image.
    """
        try:
            from PIL import Image
        except:
            import Image

        # Save image in temp-folder
        tempfolder = tempfile.mktemp()
        filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
        _fileutil.exportObj(img, filepath)

        # Rotate image
        im = Image.open(filepath)
        im = im.rotate(direction)
        im.save(filepath, "JPEG", quality=qual)

        # Read resized image from file-system
        f = open(filepath, 'rb')
        result_data = f.read()
        result_filename = _fileutil.extractFilename(filepath)
        result = {'data': result_data, 'filename': result_filename}
        f.close()

        # Remove temp-folder and images
        _fileutil.remove(tempfolder, deep=1)

        # Returns resulting image
        image = self.context.ImageFromData(result['data'], result['filename'])
        return image


################################################################################
Example #3
0
    def toZippedHtml(self, REQUEST, get_data=True):
        REQUEST.set('ZMS_INDEX_HTML', 1)
        REQUEST.set('ZMS_HTML_EXPORT', 1)

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

        #-- Download HTML-pages.
        for lang in self.getLangIds():
            REQUEST.set('lang', lang)
            REQUEST.set('preview', None)
            self.recurse_downloadHtmlPages(self, tempfolder, lang, REQUEST)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not _globals.debug(self):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
Example #4
0
def importFile(self, file, REQUEST, handler):
  message = ''

  # Get filename.
  if isinstance(file,ZPublisher.HTTPRequest.FileUpload):
    filename = file.filename
  else: 
    filename = file.name
  _globals.writeBlock( self, '[importFile]: filename='+filename)

  # Create temporary folder.
  folder = tempfile.mktemp()
  os.mkdir(folder)
  
  # Save to temporary file.
  filename = _fileutil.getOSPath('%s/%s'%(folder,_fileutil.extractFilename(filename)))
  _fileutil.exportObj(file,filename)
  
  # Find XML-file.
  if _fileutil.extractFileExt(filename) == 'zip':
    _fileutil.extractZipArchive(filename)
    filename = None
    for deep in [0,1]:
      for ext in ['xml', 'htm', 'html' ]:
        if filename is None:
          filename = _fileutil.findExtension(ext, folder, deep)
	  break
    if filename is None:
      raise zExceptions.InternalError('XML-File not found!')
  
  # Import Filter.
  if REQUEST.get('filter','') in self.getFilterIds():
    filename = _filtermanager.importFilter(self, filename, REQUEST.get('filter',''), REQUEST)
  
  # Import XML-file.
  _globals.writeBlock( self, '[importFile]: filename='+filename)
  f = open(filename, 'r')
  message += handler(self, f)
  f.close()
  
  # Remove temporary files.
  _fileutil.remove(folder, deep=1)
  
  # Return with message.
  message += self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%_fileutil.extractFilename(filename))
  return message
Example #5
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
Example #6
0
def processData(self, processId, data, trans=None):
  # Create temporary folder.
  folder = tempfile.mktemp()
  # Save data to file.
  filename = _fileutil.getOSPath('%s/in.dat'%folder)
  _fileutil.exportObj(data, filename)
  # Save transformation to file.
  if trans is not None and trans != '':
    transfilename = _fileutil.getOSPath('%s/%s'%(folder,trans.getFilename()))
    _fileutil.exportObj(trans, transfilename)
  # Process file.
  filename = processFile(self, processId, filename, trans)
  # Read data from file.
  f = open(filename, 'rb')
  data = f.read()
  f.close()
  # Remove temporary folder.
  if not _globals.debug( self):
    _fileutil.remove(folder, deep=1)
  # Return data.
  return data
Example #7
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
Example #8
0
 def destroyFile(self, filename):
     try:
         filepath = _fileutil.getOSPath('%s/%s' % (self.location, filename))
         _fileutil.remove(filepath)
     except:
         pass
Example #9
0
    def resize(self, img, size, mode='resize', sffx='_thumbnail', qual=75):
        """
    Resize image.
    """
        try:
            from PIL import Image
        except:
            import Image

        # Save image in temp-folder
        tempfolder = tempfile.mktemp()
        filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
        _fileutil.exportObj(img, filepath)

        # Resize image
        im = Image.open(filepath)
        im = im.convert('RGB')
        maxdim = max(list(size))
        if mode == 'thumbnail':
            try:
                im.thumbnail((maxdim, maxdim), Image.ANTIALIAS)
            except:
                im.thumbnail((maxdim, maxdim))
                im.save(infile, "JPEG", quality=qual)
        elif mode == 'resize':
            try:
                im = im.resize(size, Image.ANTIALIAS)
            except:
                im = im.resize(size)
        elif mode == 'square':
            try:
                width, height = im.size
                dst_width, dst_height = maxdim, maxdim
                if width > height:
                    delta = width - height
                    left = int(delta / 2)
                    upper = 0
                    right = height + left
                    lower = height
                else:
                    delta = height - width
                    left = 0
                    upper = int(delta / 2)
                    right = width
                    lower = width + upper
                im = im.crop((left, upper, right, lower))
                im = im.resize((dst_width, dst_height), Image.ANTIALIAS)
            except:
                im.resize(size)
        im.save(filepath, "JPEG", quality=qual)

        # Read resized image from file-system
        f = open(filepath, 'rb')
        result_data = f.read()
        thumb_sffx = str(sffx)
        getfilename = _fileutil.extractFilename(filepath).split('.')
        filename = getfilename[0:-1]
        filename = ".".join(filename)
        filename = filename.replace('.', '_')
        extension = _fileutil.extractFileExt(filepath)
        result_filename = filename + thumb_sffx + '.' + extension
        result = {'data': result_data, 'filename': result_filename}
        f.close()

        # Remove temp-folder and images
        _fileutil.remove(tempfolder, deep=1)

        # Returns resulting image
        image = self.context.ImageFromData(result['data'], result['filename'])
        return image
Example #10
0
    def manage_customizeDesign(self, btn, lang, REQUEST, RESPONSE):
        """ ConfManager.manage_customizeDesign """
        message = ''
        cssId = REQUEST.get('cssId', '')

        # Ex-/Import.
        # -----------
        if btn in [
                self.getZMILangStr('BTN_EXPORT'),
                self.getZMILangStr('BTN_IMPORT')
        ]:
            #-- Theme.
            home = self.getHome()
            home_id = home.id
            temp_folder = self.temp_folder
            # Init exclude-ids.
            excl_ids = []
            # Add clients-folders to exclude-ids.
            for folder in home.objectValues(['Folder']):
                if len(folder.objectValues(['ZMS'])) > 0:
                    excl_ids.append(absattr(folder.id))
            # Add content-object artefacts to exclude-ids.
            for metaObjId in self.getMetaobjIds():
                for metaObjAttrId in self.getMetaobjAttrIds(metaObjId):
                    metaObjAttr = self.getMetaobjAttr(metaObjId, metaObjAttrId)
                    if metaObjAttr[
                            'type'] in self.metaobj_manager.valid_zopetypes:
                        excl_ids.append(metaObjAttrId)
            # Filter ids.
            ids = filter(lambda x: x not in excl_ids,
                         home.objectIds(self.metaobj_manager.valid_zopetypes))
            if btn == self.getZMILangStr('BTN_EXPORT'):
                if home_id in temp_folder.objectIds():
                    temp_folder.manage_delObjects(ids=[home_id])
                temp_folder.manage_addFolder(id=home_id,
                                             title=home.title_or_id())
                folder = getattr(temp_folder, home_id)
                home.manage_copyObjects(ids, REQUEST)
                folder.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST)
                return RESPONSE.redirect(
                    self.url_append_params(
                        '%s/manage_exportObject' % temp_folder.absolute_url(),
                        {
                            'id': home_id,
                            'download:int': 1
                        }))
            if btn == self.getZMILangStr('BTN_IMPORT'):
                v = REQUEST['theme']
                temp_filename = _fileutil.extractFilename(v.filename)
                temp_id = temp_filename[:temp_filename.rfind('.')]
                filepath = INSTANCE_HOME + '/import/' + temp_filename
                _fileutil.exportObj(v, filepath)
                if temp_id in temp_folder.objectIds():
                    temp_folder.manage_delObjects(ids=[temp_id])
                temp_folder.manage_importObject(temp_filename)
                folder = getattr(temp_folder, temp_id)
                home.manage_delObjects(ids=ids)
                folder.manage_copyObjects(folder.objectIds(), REQUEST)
                home.manage_pasteObjects(cb_copy_data=None, REQUEST=REQUEST)
                _fileutil.remove(filepath)
                temp_folder.manage_delObjects(ids=[temp_id])

        # Save.
        # -----
        if btn == self.getZMILangStr('BTN_SAVE'):
            #-- Stylesheet.
            if REQUEST.has_key('cssId'):
                if REQUEST.get('default'):
                    self.setConfProperty('ZMS.stylesheet',
                                         REQUEST.get('cssId'))
                css = self.getStylesheet(REQUEST.get('cssId'))
                data = REQUEST.get('stylesheet')
                title = css.title
                css.manage_edit(data, title)
                message = self.getZMILangStr('MSG_CHANGED')
            #-- Sitemap.
            if REQUEST.has_key('attr_layoutsitemap'):
                if len(REQUEST['attr_layoutsitemap']) > 0:
                    self.attr_layoutsitemap = int(
                        REQUEST['attr_layoutsitemap'])
                elif hasattr(self, 'attr_layoutsitemap'):
                    delattr(self, 'attr_layoutsitemap')
                message = self.getZMILangStr('MSG_CHANGED')

        # Upload.
        # -------
        elif btn == self.getZMILangStr('BTN_UPLOAD'):
            #-- ZMI Logo.
            self.zmi_logo = Image(id='logo', title='', file='')
            self.zmi_logo.manage_upload(REQUEST['file'], REQUEST)
            message = self.getZMILangStr('MSG_CHANGED')

        # Return with message.
        message = urllib.quote(message)
        return RESPONSE.redirect(
            'manage_customizeDesignForm?lang=%s&manage_tabs_message=%s&cssId=%s'
            % (lang, message, cssId))
Example #11
0
def toCdata(self, s, xhtml=0):
    rtn = ''

    # Return Text (HTML) in CDATA as XHTML.
    from _filtermanager import processCommand
    processId = 'tidy'
    if xhtml == 0 \
       and self.getConfProperty('ZMS.export.xml.tidy',0) \
       and processId in self.getProcessIds():

        # Create temporary folder.
        folder = tempfile.mktemp()
        os.mkdir(folder)

        # Save <HTML> to file.
        filename = _fileutil.getOSPath('%s/xhtml.html' % folder)
        _fileutil.exportObj(s, filename)

        # Call <HTML>Tidy
        processOb = self.getProcess(processId)
        command = processOb.get('command')
        if command.find('{trans}') >= 0:
            trans = _fileutil.getOSPath(
                package_home(globals()) + '/conf/xsl/tidy.html2xhtml.conf')
            command = command.replace('{trans}', trans)
        filename = processCommand(self, filename, command)

        # Read <XHTML> from file.
        f = open(htmfilename, 'rb')
        rtn = f.read().strip()
        f.close()

        # Read Error-Log from file.
        f = open(logfilename, 'rb')
        log = f.read().strip()
        f.close()

        # Remove temporary files.
        _fileutil.remove(folder, deep=1)

        # Process <XHTML>.
        prefix = '<p>'
        if s[:len(prefix)] != prefix and rtn[:len(prefix)] == prefix:
            rtn = rtn[len(prefix):]
            suffix = '</p>'
            if s[-len(suffix):] != suffix and rtn[-len(suffix):] == suffix:
                rtn = rtn[:-len(suffix)]
        f.close()

        # Process Error-Log.
        if log.find('0 errors') < 0:
            rtn += '<!-- ' + log + '-->'

    # Return Text.
    elif xhtml == -1 \
       or type(s) is float \
       or type(s) is int:
        rtn = s

    # Return Text in CDATA.
    elif s is not None:
        # Hack for invalid characters
        s = s.replace(chr(30), '')
        # Hack for nested CDATA
        s = re.compile('\<\!\[CDATA\[(.*?)\]\]\>').sub('<!{CDATA{\\1}}>', s)
        rtn = '<![CDATA[%s]]>' % s

    # Return.
    return rtn