Exemplo n.º 1
0
def CreateFolder(currentFolder, folderName ):

    user=context.REQUEST['AUTHENTICATED_USER']
    if currentFolder != "/" :
        obj = portal.restrictedTraverse(currentFolder.lstrip('/'))
    else :
        obj = portal
    sErrorNumber=""

    # error cases
    if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
       sErrorNumber = "103"
       sErrorDescription = "folder creation forbidden"

    if obj.meta_type in pa_meta_types :
       sErrorNumber = "103"
       sErrorDescription = "folder creation forbidden"

    if not folderName:
       sErrorNumber = "102"
       sErrorDescription = "invalid folder name"

    if not sErrorNumber :
      try :
        folderTitle=utf8Decode(folderName)
        folderName = fckCreateValidZopeId(utf8Encode(folderTitle))
        new_id = obj.invokeFactory(id=folderName, type_name=folder_portal_type, title=folderTitle)
        sErrorNumber = "0"
        sErrorDescription = "success"
      except :
        sErrorNumber = "103"
        sErrorDescription = "folder creation forbidden"

    return CreateXmlErrorNode(sErrorNumber,sErrorDescription)
Exemplo n.º 2
0
def CreateFolder(currentFolder, folderName):

    user = context.REQUEST['AUTHENTICATED_USER']
    if currentFolder != "/":
        obj = context.restrictedTraverse(currentFolder.lstrip('/'))
    else:
        obj = context.portal_url.getPortalObject()
    sErrorNumber = ""

    # error cases
    if not user.has_permission('Add portal content',
                               obj) and not user.has_permission(
                                   'Modify portal content', obj):
        sErrorNumber = "103"
        sErrorDescription = "folder creation forbidden"

    if not folderName:
        sErrorNumber = "102"
        sErrorDescription = "invalid folder name"

    if not sErrorNumber:
        try:
            folderTitle = utf8Decode(folderName)
            folderName = fckCreateValidZopeId(utf8Encode(folderName))
            new_id = obj.invokeFactory(id=folderName,
                                       type_name='Folder',
                                       title=folderTitle)
            sErrorNumber = "0"
            sErrorDescription = "success"
        except:
            sErrorNumber = "103"
            sErrorDescription = "folder creation forbidden"

    return CreateXmlErrorNode(sErrorNumber, sErrorDescription)
Exemplo n.º 3
0
def UploadFile(resourceType, currentFolder, data, title):

    user = context.REQUEST['AUTHENTICATED_USER']
    if currentFolder != "/":
        obj = context.restrictedTraverse(currentFolder.lstrip('/'))
    else:
        obj = context.portal_url.getPortalObject()
    error = ""
    idObj = ""

    if obj.meta_type != 'PloneArticle':
        # define Portal Type to add

        if resourceType == 'File':
            typeToAdd = file_portal_type
        elif resourceType == 'Flash':
            typeToAdd = flash_portal_type
        elif resourceType == 'Image':
            if obj.meta_type == "CMF ZPhotoSlides":
                typeToAdd = 'ZPhoto'
            elif obj.meta_type == "Photo Album":
                typeToAdd = 'Photo'
            elif obj.meta_type == "ATPhotoAlbum":
                typeToAdd = 'ATPhoto'
            else:
                typeToAdd = image_portal_type

        if not user.has_permission('Add portal content',
                                   obj) and not user.has_permission(
                                       'Modify portal content', obj):
            error = "103"

        if resourceType == 'Image' and not allow_image_upload:
            error = "103"

        if resourceType == 'Flash' and not allow_flash_upload:
            error = "103"

        if resourceType not in ('Flash', 'Image') and not allow_file_upload:
            error = "103"

        if not data:
            #pas de fichier
            error = "202"

        titre_data = ''
        filename = utf8Decode(getattr(data, 'filename', ''))
        titre_data = filename[max(
            string.rfind(filename, '/'),
            string.rfind(filename, '\\'),
            string.rfind(filename, ':'),
        ) + 1:]

        idObj = fckCreateValidZopeId(utf8Encode(titre_data))

        if title:
            titre_data = title

        if not IsAllowedExt(FindExtension(idObj), resourceType):
            error = "202"

        if not error:
            error = "0"
            indice = 0
            exemple_titre = idObj
            while exemple_titre in obj.objectIds():
                indice = indice + 1
                exemple_titre = str(indice) + idObj
            if indice != 0:
                error = "201"
                idObj = exemple_titre

            try:
                obj.invokeFactory(id=idObj,
                                  type_name=typeToAdd,
                                  title=titre_data)
                newFile = getattr(obj, idObj)
                newFile.edit(file=data)
                obj.reindexObject()

            except:
                error = "103"

    #Plone Article treatment
    else:
        # find Plone Article version
        try:
            image_brains = obj.getImageBrains()
            attachment_brains = obj.getAttachmentBrains()
            versionPA = 3
        except:
            versionPA = 2

        if not data:
            #pas de fichier
            error = "1"
            customMsg = "no file uploaded"
        else:
            filename = utf8Decode(getattr(data, 'filename', ''))
            titre_data = filename[max(
                string.rfind(filename, '/'),
                string.rfind(filename, '\\'),
                string.rfind(filename, ':'),
            ) + 1:]

            # idObj can't be cleaned with PloneArticle attachements
            # it's a problem but we do the job
            idObj = fckCreateValidZopeId(utf8Encode(titre_data))
            if title:
                titre_data = title

            if resourceType == 'Image':
                # Upload file
                if not user.has_permission('Modify portal content', obj):
                    error = "103"
                elif not allow_image_upload:
                    error = "103"
                elif not IsAllowedExt(FindExtension(idObj), resourceType):
                    error = "202"
                    customMsg = "Invalid file type"
                elif obj.portal_article.checkImageSize(data):
                    if versionPA == 2:
                        obj.appendImage(
                            titre_data,
                            data,
                        )
                    else:
                        obj.addImage(title=titre_data,
                                     description='',
                                     image=data)
                    error = "0"
                    try:
                        obj.reindexObject()
                    except:
                        parent = obj.aq_parent
                        parent.reindexObject()

                else:
                    error = "104"
            else:
                # Upload file
                if not user.has_permission('Modify portal content', obj):
                    error = "103"
                elif not allow_file_upload:
                    error = "103"
                elif not IsAllowedExt(FindExtension(idObj), resourceType):
                    error = "202"
                    customMsg = "Invalid file type"
                elif obj.portal_article.checkAttachmentSize(data):
                    if versionPA == 2:
                        obj.appendAttachment(
                            titre_data,
                            data,
                        )
                    else:
                        obj.addAttachment(title=titre_data,
                                          description='',
                                          file=data)
                    error = "0"
                    try:
                        obj.reindexObject()
                    except:
                        parent = obj.aq_parent
                        parent.reindexObject()
                else:
                    error = "104"

    d = '''
        <script type="text/javascript">
        window.parent.frames['frmUpload'].OnUploadCompleted(%s,"%s") ;
        </script>
        ''' % (error, idObj)
    return d
Exemplo n.º 4
0
def UploadFile(resourceType, currentFolder, data, title):

    user = context.REQUEST['AUTHENTICATED_USER']
    if currentFolder != "/":
        obj = context.restrictedTraverse(currentFolder.lstrip('/'))
    else:
        obj = context.portal_url.getPortalObject()
    error = ""
    idObj = ""

    # define Portal Type to add

    if resourceType == 'Flash':
        typeToAdd = 'Flash Animation'
    elif resourceType in ('File', 'Flash', 'Media'):
        typeToAdd = 'File'
    elif resourceType == 'Image':
        typeToAdd = 'Image'

    if not user.has_permission('Add portal content',
                               obj) and not user.has_permission(
                                   'Modify portal content', obj):
        error = "103"

    if not data:
        #pas de fichier
        error = "202"

    titre_data = ''
    filename = utf8Decode(getattr(data, 'filename', ''))
    titre_data = filename[max(
        string.rfind(filename, '/'),
        string.rfind(filename, '\\'),
        string.rfind(filename, ':'),
    ) + 1:]

    idObj = fckCreateValidZopeId(utf8Encode(titre_data))

    if title:
        titre_data = title

    if not IsAllowedExt(FindExtension(idObj), resourceType):
        error = "202"

    if not error:
        error = "0"
        indice = 0
        exemple_titre = idObj
        while exemple_titre in obj.objectIds():
            indice = indice + 1
            exemple_titre = str(indice) + idObj
        if indice != 0:
            error = "201"
            idObj = exemple_titre

        try:
            # this method need to be changed for browser refresh
            # because it send 302 redirection : we need no http response
            request = context.REQUEST
            request.form.update({
                'widget__preview': data,
                'widget__preview_choice': 'change',
                'type_name': typeToAdd,
                'widget__Title': titre_data,
                'cpsdocument_create_button': 1,
                'widget__LanguageSelectorCreation': 'fr'
            })
            ti = context.portal_types[typeToAdd]
            res = ti.renderCreateObjectDetailed(
                container=obj,
                request=request,
                validate=1,
                layout_mode='create',
                create_callback='createCPSDocument_cb',
                created_callback='cpsdocument_created')

            #context.createCPSDocument(context=obj,REQUEST=request)
            obj.reindexObject()

        except Exception, e:

            error = "103"
Exemplo n.º 5
0
def UploadFile(resourceType, currentFolder, data, title) :

        user=context.REQUEST['AUTHENTICATED_USER']
        if currentFolder != "/" :
            obj = portal.restrictedTraverse(currentFolder.lstrip('/'))
        else :
            obj = portal
        error=""
        idObj=""
        
        if obj.meta_type not in pa_meta_types:
            # define Portal Type to add

            if resourceType == 'File':
              if obj.meta_type in rd_portal_types :
                typeToAdd = 'FileAttachment'
              else:
                typeToAdd = file_portal_type
            elif resourceType == 'Flash':
                typeToAdd = flash_portal_type
            elif resourceType == 'Image' :
                if obj.meta_type=="CMF ZPhotoSlides":
                    typeToAdd = 'ZPhoto'
                elif obj.meta_type=="Photo Album":
                    typeToAdd = 'Photo'
                elif obj.meta_type=="ATPhotoAlbum":
                    typeToAdd = 'ATPhoto'
                elif obj.meta_type in rd_portal_types :
                    typeToAdd = 'ImageAttachment'
                else:
                    typeToAdd = image_portal_type
        

            if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
               error = "103"

            if resourceType == 'Image' and not allow_image_upload:
               error = "103"

            if resourceType == 'Flash' and not allow_flash_upload:
               error = "103"

            if resourceType not in ('Flash','Image') and not allow_file_upload:
               error = "103"

            if not data:
              #pas de fichier 
              error= "202"


            titre_data=''
            filename=utf8Decode(getattr(data,'filename', ''))
            titre_data=filename[max(string.rfind(filename, '/'),
                            string.rfind(filename, '\\'),
                            string.rfind(filename, ':'),
                            )+1:]                  

            idObj=fckCreateValidZopeId(utf8Encode(titre_data))

            if title :
               titre_data=title
            

            if not IsAllowedExt( FindExtension(idObj), resourceType ):
                  error= "202"

            if not error :              
                error="0"
                indice=0
                exemple_titre=idObj
                while exemple_titre in obj.objectIds():
                  indice=indice+1
                  exemple_titre=str(indice) + idObj
                if indice!=0:
                    error= "201"
                    idObj = exemple_titre

                try:
                    obj.invokeFactory(id=idObj, type_name=typeToAdd, title=titre_data )
                    newFile = getattr(obj, idObj)
                    newFile.edit(file=data)

                except:
                    error = "103"

        #Plone Article treatment
        else :
            if hasattr(obj.aq_explicit,'getImageBrains'):
                versionPA=3
            elif hasattr(obj.aq_explicit,'getImages') :
                versionPA=4
            else:
                error="103"

            if not data:
                #pas de fichier 
                error= "1"        
                customMsg="no file uploaded"
            if not error :
                filename=utf8Decode(getattr(data,'filename', ''))
                titre_data=filename[max(string.rfind(filename, '/'),
                                string.rfind(filename, '\\'),
                                string.rfind(filename, ':'),
                                )+1:]                  

                idObj=fckCreateValidZopeId(utf8Encode(titre_data))
                if title :
                    titre_data=title
                
                if resourceType == 'Image' :
                    # Upload file
                    if not user.has_permission('Modify portal content', obj):
                        error = "103"
                    elif not allow_image_upload:
                        error = "103"
                    elif not IsAllowedExt( FindExtension(idObj), resourceType ):
                        error= "202"        
                        customMsg="Invalid file type"
                    else :
                        if versionPA==3 :
                          if  obj.portal_article.checkImageSize(data):
                             obj.addImage(title=titre_data, description='', image=data)
                             error="0"
                          else:
                             error="104"    
                        
                        else :
                           # PA bontang treatment
                           # get size and check against max allowed size
                           data.seek(0, 2)
                           size = data.tell()
                           data.seek(0)
                           max_size = obj.getTypeInfo().getProperty('imageMaxSize', None)
                           if max_size is not None and size > max_size :
                             error='104'
                           else :
                             images = obj.getImages() 
                             imgIds =[img.getId() for img in images]
                             unikId = idObj
                             i=0
                             while unikId in imgIds :
                                i = i+1
                                unikId = str(i) + idObj
                             new_value = { 
                                          "attachedImage": (data, {}),
                                          "title": (titre_data, {}),
                                          "description": ('', {}),
                                          "id": (unikId, {}),
                                         }
                             if images:            
                               images.append(new_value)  
                             else:
                               images=[new_value]            
                             obj.setImages (images)
                             error='0'
                else:
                    # Upload file
                    if not user.has_permission('Modify portal content', obj):
                        error = "103"
                    elif not allow_file_upload:
                        error = "103"
                    elif not IsAllowedExt( FindExtension(idObj), resourceType ):
                        error= "202"        
                        customMsg="Invalid file type"
                    else :
                        if versionPA==3 :
                          if  obj.portal_article.checkAttachmentSize(data):
                             obj.addAttachment(title=titre_data, description='', file=data)
                             error="0"
                          else:
                             error="104"    
                        
                        else :
                           # PA bontang treatment
                           # get size and check against max allowed size
                           data.seek(0, 2)
                           size = data.tell()
                           data.seek(0)
                           max_size = obj.getTypeInfo().getProperty('attachmentMaxSize', None)
                           if max_size is not None and size > max_size :
                             error='104'
                           else :
                             files = obj.getFiles() 
                             fileIds =[f.getId() for f in files]
                             unikId = idObj
                             i=0
                             while unikId in fileIds :
                                i = i+1
                                unikId = str(i) + idObj
                             new_value = { 
                                          "attachedFile": (data, {}),
                                          "title": (titre_data, {}),
                                          "description": ('', {}),
                                          "id": (unikId, {}),
                                         }
                             if files:
                                files.append(new_value)
                             else:
                                files=[new_value]   
                             obj.setFiles (files)
                             error= '0'


        d= '''
        <script type="text/javascript">
        window.parent.frames['frmUpload'].OnUploadCompleted(%s,"%s") ;
        </script>
        '''% (error,idObj)
        return d
Exemplo n.º 6
0
def UploadFile(resourceType, currentFolder, data, title) :

        user=context.REQUEST['AUTHENTICATED_USER']
        if currentFolder != "/" :
            obj = context.restrictedTraverse(currentFolder.lstrip('/'))
        else :
            obj = context.portal_url.getPortalObject()
        error=""
        idObj=""
        
        if obj.meta_type != 'PloneArticle':
            # define Portal Type to add

            if resourceType == 'File':
                typeToAdd = file_portal_type
            elif resourceType == 'Flash':
                typeToAdd = flash_portal_type
            elif resourceType == 'Image' :
                if obj.meta_type=="CMF ZPhotoSlides":
                    typeToAdd = 'ZPhoto'
                elif obj.meta_type=="Photo Album":
                    typeToAdd = 'Photo'
                elif obj.meta_type=="ATPhotoAlbum":
                    typeToAdd = 'ATPhoto'
                else:
                    typeToAdd = image_portal_type
        

            if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
               error = "103"

            if resourceType == 'Image' and not allow_image_upload:
               error = "103"

            if resourceType == 'Flash' and not allow_flash_upload:
               error = "103"

            if resourceType not in ('Flash','Image') and not allow_file_upload:
               error = "103"

            if not data:
              #pas de fichier 
              error= "202"


            titre_data=''
            filename=utf8Decode(getattr(data,'filename', ''))
            titre_data=filename[max(string.rfind(filename, '/'),
                            string.rfind(filename, '\\'),
                            string.rfind(filename, ':'),
                            )+1:]                  

            idObj=fckCreateValidZopeId(utf8Encode(titre_data))

            if title :
               titre_data=title
            

            if not IsAllowedExt( FindExtension(idObj), resourceType ):
                  error= "202"

            if not error :              
                error="0"
                indice=0
                exemple_titre=idObj
                while exemple_titre in obj.objectIds():
                  indice=indice+1
                  exemple_titre=str(indice) + idObj
                if indice!=0:
                    error= "201"
                    idObj = exemple_titre

                try:
                    obj.invokeFactory(id=idObj, type_name=typeToAdd, title=titre_data )
                    newFile = getattr(obj, idObj)
                    newFile.edit(file=data)
                    obj.reindexObject()

                except:
                    error = "103"

        #Plone Article treatment
        else :
            # find Plone Article version
            try :
                image_brains = obj.getImageBrains()
                attachment_brains = obj.getAttachmentBrains()
                versionPA=3
            except:
                versionPA=2

            if not data:
                #pas de fichier 
                error= "1"        
                customMsg="no file uploaded"
            else :
                filename=utf8Decode(getattr(data,'filename', ''))
                titre_data=filename[max(string.rfind(filename, '/'),
                                string.rfind(filename, '\\'),
                                string.rfind(filename, ':'),
                                )+1:]                  

                # idObj can't be cleaned with PloneArticle attachements
                # it's a problem but we do the job
                idObj=fckCreateValidZopeId(utf8Encode(titre_data))
                if title :
                    titre_data=title
                
                if resourceType == 'Image' :
                    # Upload file
                    if not user.has_permission('Modify portal content', obj):
                        error = "103"
                    elif not allow_image_upload:
                        error = "103"
                    elif not IsAllowedExt( FindExtension(idObj), resourceType ):
                        error= "202"        
                        customMsg="Invalid file type"
                    elif obj.portal_article.checkImageSize(data):
                        if versionPA==2 :
                            obj.appendImage(titre_data, data, )
                        else :
                            obj.addImage(title=titre_data, description='', image=data)
                        error="0"
                        try:
                            obj.reindexObject()
                        except:
                            parent = obj.aq_parent
                            parent.reindexObject()

                    else:
                        error="104"
                else:
                    # Upload file
                    if not user.has_permission('Modify portal content', obj):
                        error = "103"
                    elif not allow_file_upload:
                        error = "103"
                    elif not IsAllowedExt( FindExtension(idObj), resourceType ):
                        error= "202"        
                        customMsg="Invalid file type"
                    elif obj.portal_article.checkAttachmentSize(data):
                        if versionPA==2 :
                            obj.appendAttachment(titre_data, data, )
                        else :
                            obj.addAttachment(title=titre_data, description='', file=data)
                        error="0"
                        try:
                            obj.reindexObject()
                        except:
                            parent = obj.aq_parent
                            parent.reindexObject()
                    else:
                        error="104"


        d= '''
        <script type="text/javascript">
        window.parent.frames['frmUpload'].OnUploadCompleted(%s,"%s") ;
        </script>
        '''% (error,idObj)
        return d
Exemplo n.º 7
0
def UploadFile(resourceType, currentFolder, data, title) :

        user=context.REQUEST['AUTHENTICATED_USER']
        if currentFolder != "/" :
            obj = context.restrictedTraverse(currentFolder.lstrip('/'))
        else :
            obj = context.portal_url.getPortalObject()
        error=""
        idObj=""
         
        # define Portal Type to add


        if resourceType == 'Flash':
            typeToAdd='Flash Animation'
        elif resourceType in ('File', 'Flash', 'Media'):
            typeToAdd = 'File'
        elif resourceType == 'Image' :
            typeToAdd='Image'
         
        

        if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
           error = "103"

        if not data:
          #pas de fichier 
          error= "202"


        titre_data=''
        filename=utf8Decode(getattr(data,'filename', ''))
        titre_data=filename[max(string.rfind(filename, '/'),
                        string.rfind(filename, '\\'),
                        string.rfind(filename, ':'),
                        )+1:]                  

        idObj=fckCreateValidZopeId(utf8Encode(titre_data))

        if title :
           titre_data=title

        if not IsAllowedExt( FindExtension(idObj), resourceType ):
              error= "202"
         
        if not error :              
            error="0"
            indice=0
            exemple_titre=idObj
            while exemple_titre in obj.objectIds():
              indice=indice+1
              exemple_titre=str(indice) + idObj
            if indice!=0:
                error= "201"
                idObj = exemple_titre

            try:
                # this method need to be changed for browser refresh
                # because it send 302 redirection : we need no http response
                request=context.REQUEST
                request.form.update({'widget__preview':data,'widget__preview_choice':'change','type_name':typeToAdd,'widget__Title':titre_data, 'cpsdocument_create_button':1,'widget__LanguageSelectorCreation':'fr'})
                ti=context.portal_types[typeToAdd]
                res = ti.renderCreateObjectDetailed(container=obj, request=request,
                                    validate=1, layout_mode='create',
                                    create_callback='createCPSDocument_cb',
                                    created_callback='cpsdocument_created')
                
                #context.createCPSDocument(context=obj,REQUEST=request)
                obj.reindexObject()
                
            except Exception , e :
                
                error = "103"
Exemplo n.º 8
0
def UploadFile(resourceType, currentFolder, data, title) :

    user=context.REQUEST['AUTHENTICATED_USER']
    if currentFolder != "/" :
        obj = browser_root.restrictedTraverse(currentFolder.lstrip('/'))
    else :
        obj = browser_root
    error=""
    idObj=""

    if obj.meta_type not in pa_meta_types:
        # define Portal Type to add

       # TODO portal_type for Media Resource Type in FCK control panel
        if resourceType in ('File', 'Media'):
            if obj.meta_type in rd_portal_types :
                typeToAdd = 'FileAttachment'
            else:
                typeToAdd = file_portal_type
        elif resourceType == 'Flash':
            typeToAdd = flash_portal_type
        elif resourceType == 'Image' :
            if obj.meta_type=="CMF ZPhotoSlides":
                typeToAdd = 'ZPhoto'
            elif obj.meta_type=="Photo Album":
                typeToAdd = 'Photo'
            elif obj.meta_type=="ATPhotoAlbum":
                typeToAdd = 'ATPhoto'
            elif obj.meta_type in rd_portal_types :
                typeToAdd = 'ImageAttachment'
            else:
                typeToAdd = image_portal_type


        if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
            error = "103"

        if resourceType == 'Image' and not allow_image_upload:
            error = "103"

        if resourceType == 'Flash' and not allow_flash_upload:
            error = "103"

        if resourceType not in ('Flash','Image') and not allow_file_upload:
            error = "103"

        if not data:
            #pas de fichier
            error= "202"


        titre_data=''
        filename=utf8Decode(getattr(data,'filename', ''))
        titre_data=filename[max(string.rfind(filename, '/'),
                        string.rfind(filename, '\\'),
                        string.rfind(filename, ':'),
                        )+1:]

        idObj=fckCreateValidZopeId(utf8Encode(titre_data))

        if title :
            titre_data=title


        if not IsAllowedExt( FindExtension(idObj), resourceType ):
            error= "202"

        if not error :
            error="0"
            indice=0
            exemple_titre=idObj
            while exemple_titre in obj.objectIds():
                indice=indice+1
                exemple_titre=str(indice) + idObj
            if indice!=0:
                error= "201"
                idObj = exemple_titre

            try:
                obj.invokeFactory(id=idObj, type_name=typeToAdd, title=titre_data )
                newFile = getattr(obj, idObj)
                newFile.edit(file=data)

            except:
                error = "103"

    # upload is no more allowed in articles
    # because in Plone3 it becames really complicated to 
    # upload contents inside context during edition
    # it's impossible when using portal_factory
    # it's impossible when using standard edition forms
    # MULTIPAGE schema is responsible (all forms in hidden fieldsets ...)
    else :
        error = "103"
        customMsg = "USE PloneArticle forms to add content inside articles"



    d= '''
    <script type="text/javascript">
    window.parent.frames['frmUpload'].OnUploadCompleted(%s,"%s") ;
    </script>
    '''% (error,idObj)
    return d
Exemplo n.º 9
0
def UploadFile(resourceType, currentFolder, data, title, description, thumbsize ) :

        user=context.REQUEST['AUTHENTICATED_USER']
        if currentFolder != "/" :
            obj = browser_root.restrictedTraverse(currentFolder.lstrip('/'))
        else :
            obj = browser_root
        error=""
        fileUrl=""
        customMsg=""
        idObj=""
        folderUrl=GetUrlFromPath(currentFolder)+ "/"
        smallSizeUrl = ''
        mediumSizeUrl = ''

        if (obj.meta_type not in pa_meta_types and
            obj.portal_type not in rd_portal_types):
            # define Portal Type to add

            # TODO portal_type for Media Resource Type in FCK control panel
            if resourceType in ('File', 'Media'):
                typeToAdd = file_portal_type
            elif resourceType == 'Flash':
                typeToAdd = flash_portal_type
            elif resourceType == 'Image' :
                if obj.meta_type=="CMF ZPhotoSlides":
                    typeToAdd = 'ZPhoto'
                elif obj.meta_type=="Photo Album":
                    typeToAdd = 'Photo'
                elif obj.meta_type=="ATPhotoAlbum":
                    typeToAdd = 'ATPhoto'
                else:
                    typeToAdd = image_portal_type
                    smallSizeUrl = '/image_thumb'
                    mediumSizeUrl = '/image_preview'
        

            if not user.has_permission('Add portal content', obj) and not user.has_permission('Modify portal content', obj):
               error = "1"
               customMsg="upload denied - insufficient privileges"

            if resourceType == 'Image' and not allow_image_upload:
               error = "1"
               customMsg="image upload denied - contact your site admin"

            if resourceType == 'Flash' and not allow_flash_upload:
               error = "1"
               customMsg="flash upload denied - contact your site admin"

            if resourceType not in ('Flash','Image') and not allow_file_upload:
               error = "1"
               customMsg="file upload denied - contact your site admin"

            if not data:
              #pas de fichier 
              error= "1"        
              customMsg="no file uploaded"


            titre_data=''
            filename=utf8Decode(getattr(data,'filename', ''))
            titre_data=filename[max(string.rfind(filename, '/'),
                            string.rfind(filename, '\\'),
                            string.rfind(filename, ':'),
                            )+1:]                  

            idObj=fckCreateValidZopeId(utf8Encode(titre_data))

            if title :
               titre_data=title

            if not IsAllowedExt( FindExtension(idObj), resourceType ):
                  error= "202"        
                  customMsg="Invalid file type"

            if not error :              
                error="0"
                indice=0
                exemple_titre=idObj
                while exemple_titre in obj.objectIds():
                  indice=indice+1
                  exemple_titre=str(indice) + idObj
                if indice!=0:
                    error= "201"
                    idObj = exemple_titre                        
                    customMsg="an object already exists with the same name, the file has been renamed " + idObj 

                try:
                    obj.invokeFactory(id=idObj, type_name=typeToAdd, title=titre_data )
                    newFile = getattr(obj, idObj)
                    newFile.edit(file=data)
                    newFile.setDescription(description)
                    if linkbyuid and hasattr(newFile.aq_explicit, 'UID'):
                        uid = newFile.UID()
                        fileUrl = "./resolveuid/" + uid
                    else :
                        fileUrl = folderUrl + idObj                          

                except:
                    error = "1"
                    customMsg = "Server error"

        # upload is no more allowed in articles
        # because in Plone3 it becames really complicated to 
        # upload contents inside context during edition
        # it's impossible when using portal_factory
        # it's impossible when using standard edition forms
        # MULTIPAGE schema is responsible (all forms are in hidden fieldsets ...)
        elif obj.meta_type in pa_meta_types:
            error= "103"        
            customMsg="Upload is not allowed in articles, use standard PloneArticle forms"

                             
        elif obj.portal_type in rd_portal_types:
          if not data:
            error="1"
            customMsg="no file uploaded"
          else:
            filename=utf8Decode(getattr(data,'filename', ''))
            titre_data=filename[max(string.rfind(filename, '/'),
                            string.rfind(filename, '\\'),
                            string.rfind(filename, ':'),
                            )+1:]                  

            # idObj can't be cleaned with PloneArticle attachements
            # it's a problem but we do the job
            idObj=fckCreateValidZopeId(utf8Encode(titre_data))
            if title :
                titre_data=title

            if not user.has_permission('Modify portal content', obj):
                error = "103"
            elif not allow_image_upload:
                error = "103"
            elif not IsAllowedExt( FindExtension(idObj), resourceType ):
                error= "202"        
                customMsg="Invalid file type"
            if not error:
               error = "0"
               # [reinout:] somehow error is set to "" at the start,
               # but that wreaks havoc here (javascript syntax
               # error). So we set it to "0", which is the right
               # 'error' when there's no error.
            if error=="0":
              try:
                while idObj in obj.contentIds():
                  idObj = 'copy_of_%s' % idObj

                resource_to_pt = dict(
                  File='FileAttachment',
                  Image='ImageAttachment',
                  Flash='FileAttachment',
                  )
                
                obj.invokeFactory(resource_to_pt[resourceType], idObj)
                attachment = getattr(obj, idObj)
                attachment.setTitle(titre_data)
                if resourceType == 'Image':
                  attachment.setImage(data)
                else:
                  attachment.setFile(data)

                if linkbyuid:
                  fileUrl = "./resolveuid/" + attachment.UID()
                else:
                  fileUrl = attachment.absolute_url()
                
              except Exception, e:
                error="1"
                customMsg="Server error: %s" % e