Ce qu'il faut côté serveur pour l'upload par drag and drop sur la page de présentation.
[Portfolio.git] / photo.py
index 2508ebc..7cb8974 100755 (executable)
--- a/photo.py
+++ b/photo.py
@@ -9,8 +9,6 @@
 # http://creativecommons.org/licenses/by-nc/2.0/           #
 ############################################################
 """ CMFAware Image
 # http://creativecommons.org/licenses/by-nc/2.0/           #
 ############################################################
 """ CMFAware Image
-$Id: photo.py 1202 2009-07-15 08:48:42Z pin $
-$URL: http://svn.luxia.fr/svn/labo/projects/zope/Portfolio/trunk/photo.py $
 """
 
 from Globals import InitializeClass
 """
 
 from Globals import InitializeClass
@@ -23,15 +21,15 @@ from Products.CMFCore.permissions import View, AccessContentsInformation, \
 from permissions import ViewRawImage
 from zope.component.factory import Factory
 from zope.interface import implements
 from permissions import ViewRawImage
 from zope.component.factory import Factory
 from zope.interface import implements
-from webdav.WriteLockInterface import WriteLockInterface as z2IWriteLock
+from webdav.interfaces import IWriteLock
 from Products.CMFCore.interfaces import IContentish
 from Products.CMFCore.interfaces import IContentish
-from Products.CMFCore.interfaces.Contentish import Contentish as z2IContentish
+from Products.CMFCore.interfaces import IDynamicType
 
 from Products.CMFCore.DynamicType import DynamicType
 from Products.CMFCore.CMFCatalogAware import CMFCatalogAware
 from Products.Photo.Photo import Photo as BasePhoto
 from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
 
 from Products.CMFCore.DynamicType import DynamicType
 from Products.CMFCore.CMFCatalogAware import CMFCatalogAware
 from Products.Photo.Photo import Photo as BasePhoto
 from Products.CMFDefault.DublinCore import DefaultDublinCoreImpl
-from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import getToolByName, getUtilityByInterfaceName
 from Products.Photo.cache import memoizedmethod
 from Products.DCWorkflow.utils import modifyRolesForPermission
 from interfaces import IPhoto
 from Products.Photo.cache import memoizedmethod
 from Products.DCWorkflow.utils import modifyRolesForPermission
 from interfaces import IPhoto
@@ -39,8 +37,7 @@ from interfaces import IPhoto
 class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        """ Photo CMF aware """
        
 class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        """ Photo CMF aware """
        
-       implements(IPhoto, IContentish)
-       __implements__ = (z2IContentish, z2IWriteLock, DynamicType.__implements__)
+       implements(IPhoto, IContentish, IWriteLock, IDynamicType)
        
        meta_type = BasePhoto.meta_type
        manage_options = BasePhoto.manage_options
        
        meta_type = BasePhoto.meta_type
        manage_options = BasePhoto.manage_options
@@ -50,6 +47,7 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        security.declareProtected(ViewRawImage, 'getJpegImage')
                
        def __init__(self, id, title='', file='', content_type='', precondition='', **kw) :
        security.declareProtected(ViewRawImage, 'getJpegImage')
                
        def __init__(self, id, title='', file='', content_type='', precondition='', **kw) :
+               DefaultDublinCoreImpl.__init__(self, title=title)
                BasePhoto.__init__(self, id, title, file, content_type=content_type, precondition=precondition, **kw)
                self.id = id
                self.title = title
                BasePhoto.__init__(self, id, title, file, content_type=content_type, precondition=precondition, **kw)
                self.id = id
                self.title = title
@@ -60,7 +58,10 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
                
        def update_data(self, data, content_type=None) :
                BasePhoto.update_data(self, data, content_type=content_type)
                
        def update_data(self, data, content_type=None) :
                BasePhoto.update_data(self, data, content_type=content_type)
-               self.reindexObject()
+               # update_data can be invoked during construction
+               # in this case, reindexObject put a parasite catalag entry.
+               if self.getParentNode() :
+                       self.reindexObject()
        
 
        def _getAfterResizingHooks(self) :
        
 
        def _getAfterResizingHooks(self) :
@@ -192,14 +193,6 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
                return getattr(self, '_hiddenForAnon', False)
                
        
                return getattr(self, '_hiddenForAnon', False)
                
        
-#      security.declareProtected(AccessContentsInformation, 'position')
-#      def position(self):
-#              " returns position of self in parent container "
-#              parent = self.getParentNode()
-#              position = parent.getObjectPosition(self.getId())
-#              return position
-               
-       
        #
        # SimpleItem interface
        #
        #
        # SimpleItem interface
        #
@@ -221,4 +214,14 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        
 InitializeClass(Photo)
 
        
 InitializeClass(Photo)
 
-PhotoFactory = Factory(Photo)
\ No newline at end of file
+class _PhotoFactory(Factory) :
+    def __call__(self, *args, **kw):
+        if not kw.has_key('thumb_height') or not kw.has_key('thumb_width') :
+            utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+            portal = utool.getPortalObject()
+            size = portal.getProperty('thumb_size')
+            kw.update({'thumb_height' : size, 'thumb_width' : size })
+        return self._callable(*args, **kw)
+    
+
+PhotoFactory = _PhotoFactory(Photo)
\ No newline at end of file