+++ /dev/null
-# -*- coding: utf-8 -*-
-# (c) 2003 Centre de Recherche en Informatique ENSMP Fontainebleau <http://cri.ensmp.fr>
-# (c) 2003 BenoƮt PIN <mailto:pin@cri.ensmp.fr>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
-#
-
-from OFS.Image import cookId
-from Globals import InitializeClass
-
-from Products.CMFCore.permissions import View, ModifyPortalContent
-from AccessControl import ClassSecurityInfo
-from Products.Photo import Photo
-from BaseSlot import BaseSlot
-
-factory_type_information = ( {'id' : 'Image Slot',
- 'meta_type' : 'Image Slot',
- 'description' : "Image Slot for Mosaic Document",
- 'icon' : 'mosaic_tool/photo_icon.gif',
- 'product' : 'MosaicDocument',
- 'factory' : 'addImageSlot',
- 'immediate_view' : 'view',
- 'actions' :
- ({'id' : 'view',
- 'name' : 'View',
- 'action' : 'slot_image_view',
- 'permissions' : (View, )
- },
-
- {'id' : 'edit',
- 'name' : 'Edit',
- 'action' : 'slot_image_form',
- 'permissions' : (ModifyPortalContent, )
- },
- )
- },
- )
-
-class ImageSlot(BaseSlot, Photo) :
- """Slot"""
- meta_type = 'Image Slot'
- manage_options = Photo.manage_options
-
- _indexableFields = ('title',)
-
- security = ClassSecurityInfo()
-
-
- def __init__(self, parentContainer, id, title='', file='',
- content_type='', precondition='', blankThumbnail = '', **kw) :
- blankThumbnailOb = None
- if blankThumbnail :
- blankThumbnailOb = parentContainer.restrictedTraverse(blankThumbnail)
- Photo.__init__(self, id, title=title, file=file,
- defaultBlankThumbnail = blankThumbnailOb, **kw)
-
-
- # This method is overloaded to manage file upload.
- # It's necessary to use manage_upload method from image
- # because manage_upload invoke update_data and the overload of
- # update_data in Photo product update the internal thumbnail image.
- security.declareProtected(ModifyPortalContent, 'edit')
- def edit(self, title='', thumb_width='440', thumb_height='440', file='', REQUEST=None):
- """ Edit image slot"""
- if file :
- self.manage_upload(file=file)
-
- if self.thumb_height != thumb_height or thumb_width != thumb_width :
- if thumb_width <= thumb_height :
- self.manage_editProperties(thumb_width=thumb_width, thumb_height=thumb_height)
- else :
- self.manage_editProperties(thumb_width=thumb_height, thumb_height=thumb_width)
- if title :
- self.manage_editProperties(title = title, no_refresh = 1)
-
- view = index_html = __call__ = Photo.index_html
-
-InitializeClass(ImageSlot)
-
-def addImageSlot(dispatcher, id, file='', title='',
- precondition='', content_type='', REQUEST=None, **kw) :
- """
- Add a new Photo object.
- Creates a new Photo object 'id' with the contents of 'file'.
- """
- id=str(id)
- title=str(title)
- content_type=str(content_type)
- precondition=str(precondition)
-
- id, title = cookId(id, title, file)
- parentContainer = dispatcher.Destination()
-
- # First, we create the image without data:
- parentContainer._setObject(id, ImageSlot(parentContainer, id,title,'',content_type, precondition, **kw))
-
- # Now we "upload" the data. By doing this in two steps, we
- # can use a database trick to make the upload more efficient.
- if file:
- parentContainer._getOb(id).manage_upload(file)
- if content_type:
- parentContainer._getOb(id).content_type=content_type
-
- if REQUEST is not None:
- try: url=dispatcher.DestinationURL()
- except: url=REQUEST['URL1']
- REQUEST.RESPONSE.redirect('%s/manage_main' % url)
- return id