Calcul de la retaille prenant en compte l'absence de barre de scroll horizontal
[Portfolio.git] / photo.py
index e7a10a1..f0a76f5 100755 (executable)
--- a/photo.py
+++ b/photo.py
@@ -21,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
@@ -37,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
@@ -48,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
@@ -58,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) :
@@ -150,7 +153,7 @@ class Photo(DynamicType, CMFCatalogAware, BasePhoto, DefaultDublinCoreImpl) :
        @memoizedmethod()
        def DateTimeOriginal(self) :
                """ return DateTimeOriginal exif tag value or created """
        @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 :
                if dto :
                        return DateTime(dto)
                else :
@@ -190,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
        #
@@ -219,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