bugfix : pour obtenir l'url d'un brain, c'est getURL et non absolute_url
[Portfolio.git] / photo.py
index 2508ebc..f0a76f5 100755 (executable)
--- a/photo.py
+++ b/photo.py
@@ -9,8 +9,6 @@
 # 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
@@ -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 webdav.WriteLockInterface import WriteLockInterface as z2IWriteLock
+from webdav.interfaces import IWriteLock
 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.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
@@ -39,8 +37,7 @@ from interfaces import IPhoto
 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
@@ -50,6 +47,7 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        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
@@ -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)
-               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) :
@@ -152,7 +153,7 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        @memoizedmethod()
        def DateTimeOriginal(self) :
                """ return DateTimeOriginal exif tag value or created """
-               dto = self.getXmpValue('exif:DateTimeOriginal')
+               dto = self.getXmpValue('exif:DateTimeOriginal') or self.getXmpValue('xmp:CreateDate')
                if dto :
                        return DateTime(dto)
                else :
@@ -192,14 +193,6 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
                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
        #
@@ -221,4 +214,14 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        
 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