def _create_file(self, item, files, title, description, rights): namechooser = INameChooser(self.context) content_type = item.headers.get('Content-Type') filename = safe_unicode(item.filename) data = item.read() id_name = '' title = title and title[0] or filename id_name = namechooser.chooseName(title, self.context) if content_type in IMAGE_MIMETYPES: portal_type = 'Image' wrapped_data = NamedBlobImage(data=data, filename=filename) else: portal_type = 'File' wrapped_data = NamedBlobFile(data=data, filename=filename) self.context.invokeFactory(portal_type, id=id_name, title=title, description=description[0], rights=rights[0]) newfile = self.context[id_name] if portal_type == 'File': if IATFile.providedBy(newfile): newfile.setFile(data, filename=filename) else: newfile.file = wrapped_data elif portal_type == 'Image': if IATImage.providedBy(newfile): newfile.setImage(data, filename=filename) else: newfile.image = wrapped_data newfile.reindexObject() notify(ObjectModifiedEvent(newfile)) return newfile
def get_slid(self): """slideshare slideshowid or redirect to upload""" annotations = IAnnotations(self.context) sl_id = annotations.get(KEY, None) if sl_id: return sl_id else: if IATFile.providedBy(self.context): if self.context.getContentType() in SLIDES_MIMETYPES: self.request.response.redirect( self.context.absolute_url() + '/@@slideshare_post.html') else: msg = _(u"This file does not seem to be a presentation") IStatusMessage(self.request).addStatusMessage(msg, type='error') elif IATLink.providedBy(self.context): urlob = urlparse(self.context.getRemoteUrl()) if urlob.hostname == 'www.slideshare.net': self.request.response.redirect( self.context.absolute_url() + '/@@slideshare_getid.html') else: msg = _(u"This is not a valid slideshare URL") IStatusMessage(self.request).addStatusMessage(msg, type='error')
def testFileBlobInterfaces(self): foo = self.folder[self.folder.invokeFactory('File', 'foo')] self.assertTrue(atfile.IATFile.providedBy(foo), 'no IATFile?') self.assertTrue(atfile.IFileContent.providedBy(foo), 'no IFileContent?') self.assertTrue(IATBlobFile.providedBy(foo), 'no IATBlobFile?') if not IInterface.providedBy(Z2IATFile): # this is zope < 2.12 self.assertTrue(Z2IATFile.isImplementedBy(foo), 'no zope2 IATFile?') self.assertFalse(Z2IATImage.isImplementedBy(foo), 'zope2 IATImage?')
def test_files(self): view = api.content.get_view('view', self.task, self.request) self.assertEqual(len(view.files()), 0) api.content.create(self.task, 'File', 'file') self.assertEqual(len(view.files()), 1) self.assertTrue(IATFile.providedBy(view.files()[0])) api.content.delete(self.task['file']) self.assertEqual(len(view.files()), 0)
def testImageBlobInterfaces(self): foo = self.folder[self.folder.invokeFactory('Image', 'foo')] self.failUnless(atimage.IATImage.providedBy(foo), 'no IATImage?') self.failUnless(atimage.IImageContent.providedBy(foo), 'no IImageContent?') self.failUnless(IATBlobImage.providedBy(foo), 'no IATBlobImage?') if not IInterface.providedBy(Z2IATFile): # this is zope < 2.12 self.failUnless(Z2IATImage.isImplementedBy(foo), 'no zope2 IATImage?') self.failIf(Z2IATFile.isImplementedBy(foo), 'zope2 IATFile?')
def upload(self, files, title='', description=''): loaded = [] namechooser = INameChooser(self.context) if not isinstance(files, list): files = [files] for item in files: if item.filename: content_type = item.headers.get('Content-Type') filename = safe_unicode(item.filename) data = item.read() id_name = '' title = title and title[0] or filename # Get a unique id here id_name = namechooser.chooseName(title, self.context) # Portal types allowed : File and Image # Since Plone 4.x both types use Blob if content_type in IMAGE_MIMETYPES: portal_type = 'ArquivoBiblioteca' wrapped_data = NamedBlobFile(data=data, filename=filename) else: portal_type = 'ArquivoBiblioteca' wrapped_data = NamedBlobFile(data=data, filename=filename) # Create content self.context.invokeFactory(portal_type, id=id_name, title=title, description=description[0]) newfile = self.context[id_name] if not newfile.Title(): newfile.setTitle(title) import transaction transaction.commit() if IBoaPratica.providedBy(self.context): newfile.setUid_pratica(self.context) # Set data if portal_type == 'ArquivoBiblioteca': if IATFile.providedBy(newfile): newfile.setFile(data, filename=filename) else: newfile.file = wrapped_data elif portal_type == 'ArquivoBiblioteca': if IATImage.providedBy(newfile): newfile.setImage(data, filename=filename) else: newfile.image = wrapped_data # Finalize content creation, reindex it newfile.reindexObject() notify(ObjectModifiedEvent(newfile)) loaded.append(newfile) if loaded: return loaded return False
def upload(self, files, title='', description='', rights=''): loaded = [] namechooser = INameChooser(self.context) if not isinstance(files, list): files = [files] for item in files: if item.filename: content_type = item.headers.get('Content-Type') filename = safe_unicode(item.filename) data = item.read() id_name = '' title = title and title[0] or filename # Get a unique id here id_name = namechooser.chooseName(title, self.context) # Portal types allowed : File and Image # Since Plone 4.x both types use Blob if content_type in IMAGE_MIMETYPES: portal_type = 'Image' wrapped_data = NamedBlobImage(data=data, filename=filename) else: portal_type = 'File' wrapped_data = NamedBlobFile(data=data, filename=filename) # Create content newfile = api.content.create( container=self.context, type=portal_type, id=id_name, title=title, description=description[0], rights=rights[0] ) # Set data if portal_type == 'File': if IATFile.providedBy(newfile): newfile.setFile(data, filename=filename) else: newfile.file = wrapped_data elif portal_type == 'Image': if IATImage.providedBy(newfile): newfile.setImage(data, filename=filename) else: newfile.image = wrapped_data # Finalize content creation, reindex it newfile.reindexObject() notify(ObjectModifiedEvent(newfile)) loaded.append(newfile) if loaded: return loaded return False
def folderupload(self, files, title='', description=''): if not self.doc.isDocument(): return self.doc.setfile(self.doc, files[0]) docfolderId = self.doc.getId() dbfolderId = self.doc.getParentDatabase().id #TODO come configurare diverse cartelle per applicazione o plomino db (da fare sulle singole app)? target = self.context.portal_url.getPortalObject()[ATTACHMENT_FOLDER] with adopt_roles('Manager'): if not dbfolderId in target.keys(): target.invokeFactory("Folder", id=dbfolderId, title=dbfolderId) target = target[dbfolderId] if not docfolderId in target.keys(): target.invokeFactory("Folder", id=docfolderId, title=docfolderId) docFolder = target[docfolderId] for username, roles in self.doc.get_local_roles(): docFolder.manage_setLocalRoles(username, roles) if not isinstance(files, list): files = [files] #se non campo multiplo vuoto la cartella #TODO tenere allineati i files nella cartella con i nomi sul campo di plomino current_files = self.doc.getItem(self.element) cleaned_files = {} if self.multiple: for fName in current_files: if fName in docFolder.keys(): cleaned_files[fName] = current_files[fName] self.doc.setItem(self.element, cleaned_files) #se upload singolo cancello tutti i file presenti collegati al campo else: try: docFolder.manage_delObjects(current_files.keys()) except Exception as error: pass self.doc.removeItem(self.element) namechooser = INameChooser(docFolder) loaded = [] for item in files: if item.filename: content_type = item.headers.get('Content-Type') filename = safe_unicode(item.filename) data = item.read() id_name = '' title = title and title[0] or filename # Get a unique id here id_name = namechooser.chooseName(title, docFolder) # Portal types allowed : File and Image # Since Plone 4.x both types use Blob if content_type in IMAGE_MIMETYPES: portal_type = 'Image' wrapped_data = NamedBlobImage(data=data, filename=filename) else: portal_type = 'File' wrapped_data = NamedBlobFile(data=data, filename=filename) # Create content docFolder.invokeFactory(portal_type, id=id_name, title=title, description=description[0]) newfile = docFolder[id_name] # Set data if portal_type == 'File': if IATFile.providedBy(newfile): newfile.setFile(data, filename=filename) else: newfile.file = wrapped_data elif portal_type == 'Image': if IATImage.providedBy(newfile): newfile.setImage(data, filename=filename) else: newfile.image = wrapped_data # Finalize content creation, reindex it newfile.reindexObject() notify(ObjectModifiedEvent(newfile)) loaded.append(newfile) if loaded: return loaded return False
def upload(self, files, title='', description=''): #TODO!!!!!!!!!!!!!!! #OGNI PACCHETTO CREA LA PROPRIA CARTELLA PER GLI ALLEGATI #E IL GRUPPO DI ISTRUTTORI/RUP #CHE HANNO RUOLI DI CONTRIBUTORI/EDITOR SULLA CARTELLA #QUESTO PACCHETTO DEVE CREARE LA CARTELLA DI PARTENZA CHE PER ORA CABLO IN documenti_allegati #import pdb;pdb.set_trace() if not self.doc.isDocument(): return docfolderId = self.doc.getId() dbfolderId = self.doc.getParentDatabase().id #TODO come configurare diverse cartelle per applicazione o plomino db (da fare sulle singole app)? target = self.context.portal_url.getPortalObject()[ATTACHMENT_FOLDER] with adopt_roles('Manager'): if not dbfolderId in target.keys(): target.invokeFactory("Folder", id=dbfolderId, title=dbfolderId) target = target[dbfolderId] if not docfolderId in target.keys(): target.invokeFactory("Folder", id=docfolderId, title=docfolderId) docFolder = target[docfolderId] for username, roles in self.doc.get_local_roles(): docFolder.manage_setLocalRoles(username, roles) if not isinstance(files, list): files = [files] #se non campo multiplo vuoto la cartella #TODO tenere allineati i files nella cartella con i nomi sul campo di plomino current_files = self.doc.getItem(self.fieldName) cleaned_files = {} if self.multiple: for fName in current_files: if fName in docFolder.keys(): cleaned_files[fName] = current_files[fName] self.doc.setItem(self.fieldName, cleaned_files) #se upload singolo cancello tutti i file presenti collegati al campo else: try: docFolder.manage_delObjects(current_files.keys()) except Exception as error: pass self.doc.removeItem(self.fieldName) namechooser = INameChooser(docFolder) loaded = [] for item in files: if item.filename: content_type = item.headers.get('Content-Type') filename = safe_unicode(item.filename) data = item.read() id_name = '' title = title and title[0] or filename # Get a unique id here id_name = namechooser.chooseName(title, docFolder) # Portal types allowed : File and Image # Since Plone 4.x both types use Blob if content_type in IMAGE_MIMETYPES: portal_type = 'Image' wrapped_data = NamedBlobImage(data=data, filename=filename) else: portal_type = 'File' wrapped_data = NamedBlobFile(data=data, filename=filename) # Create content docFolder.invokeFactory(portal_type, id=id_name, title=title, description=description[0]) newfile = docFolder[id_name] # Set data if portal_type == 'File': if IATFile.providedBy(newfile): newfile.setFile(data, filename=filename) else: newfile.file = wrapped_data elif portal_type == 'Image': if IATImage.providedBy(newfile): newfile.setImage(data, filename=filename) else: newfile.image = wrapped_data # Finalize content creation, reindex it newfile.reindexObject() notify(ObjectModifiedEvent(newfile)) loaded.append(newfile) if loaded: return loaded return False
def link_text(self): if IATFile.providedBy(self.context): return _("Download") elif IATLink.providedBy(self.context): return _("View it on SlideShare")
def get_url(self): if IATFile.providedBy(self.context): return self.context.absolute_url() elif IATLink.providedBy(self.context): return self.context.getRemoteUrl()