[Erp5-report] r20763 - /erp5/trunk/products/ERP5/Document/Image.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Apr 23 11:46:43 CEST 2008


Author: nicolas
Date: Wed Apr 23 11:46:42 2008
New Revision: 20763

URL: http://svn.erp5.org?rev=20763&view=rev
Log:
Get Images Sizes from portal_preferences

Modified:
    erp5/trunk/products/ERP5/Document/Image.py

Modified: erp5/trunk/products/ERP5/Document/Image.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/Image.py?rev=20763&r1=20762&r2=20763&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/Image.py (original)
+++ erp5/trunk/products/ERP5/Document/Image.py Wed Apr 23 11:46:42 2008
@@ -41,6 +41,7 @@
 from DocumentTemplate.DT_Util import html_quote
 from Products.CMFCore.utils import _setCacheHeaders, _ViewEmulator
 from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
+from Products.ERP5Type.Cache import CachingMethod
 from Products.ERP5.Document.File import File
 from Products.ERP5.Document.Document import ConversionError
 
@@ -50,23 +51,10 @@
 
 from zLOG import LOG
 
-# XXX This should be move to preferences
-defaultdisplays = {'nano'      : (25,25),
-                   'micro'     : (64,64),
-                   'thumbnail' : (128,128),
-                   'xsmall'    : (200,200),
-                   'small'     : (320,320),
-                   'medium'    : (480,480),
-                   'large'     : (768,768),
-                   'xlarge'    : (1024,1024)
-                  }
-
-def getSizeFromImageDisplay(image_display):
-  """Retuns the size for this image display, or None if this image display name
-  is not known.
-  """
-  return defaultdisplays.get(image_display)
-
+
+default_displays_id_list = ('nano', 'micro', 'thumbnail',
+                            'xsmall', 'small', 'medium',
+                            'large', 'large', 'xlarge',)
 
 default_formats = ['jpg', 'jpeg', 'png', 'gif', 'pnm', 'ppm']
 
@@ -206,7 +194,7 @@
 
       # display may be set from a cookie.
       if (display is not None or resolution is not None or quality!=75 or format != ''\
-                              or frame is not None) and defaultdisplays.has_key(display):
+                              or frame is not None) and self.getSizeFromImageDisplay(display):
           if not self.hasConversion(display=display, format=format,
                                     quality=quality, resolution=resolution,
                                     frame=frame):
@@ -262,15 +250,15 @@
   security.declareProtected('Access contents information', 'displayIds')
   def displayIds(self, exclude=('thumbnail',)):
       """Return list of display Ids."""
-      ids = defaultdisplays.keys()
+      id_list = list(default_displays_id_list)
       # Exclude specified displays
       if exclude:
-          for id in exclude:
-              if id in ids:
-                  ids.remove(id)
+        for id in exclude:
+          if id in id_list:
+            id_list.remove(id)
       # Sort by desired photo surface area
-      ids.sort(lambda x,y,d=defaultdisplays: cmp(d[x][0]*d[x][1], d[y][0]*d[y][1]))
-      return ids
+      id_list.sort(lambda x,y,d=self.getSizeFromImageDisplay: cmp(d(x)[0]*d(x)[1], d(y)[0]*d(y)[1]))
+      return id_list
 
   security.declareProtected('Access contents information', 'displayLinks')
   def displayLinks(self, exclude=('thumbnail',)):
@@ -293,8 +281,8 @@
           else:
               (photo_width, photo_height, bytes, age) = (None, None, None, None)
           displays.append({'id': id,
-                            'width': defaultdisplays[id][0],
-                            'height': defaultdisplays[id][1],
+                            'width': self.getSizeFromImageDisplay(id)[0],
+                            'height': self.getSizeFromImageDisplay(id)[1],
                             'photo_width': photo_width,
                             'photo_height': photo_height,
                             'bytes': bytes,
@@ -312,7 +300,7 @@
     if format in ('text', 'txt', 'html', 'base_html', 'stripped-html'):
       return None, None
     if (display is not None or resolution is not None or quality != 75 or format != ''\
-                            or frame is not None) and defaultdisplays.has_key(display):
+                            or frame is not None) and self.getSizeFromImageDisplay(display):
         if not self.hasConversion(display=display, format=format,
                                   quality=quality, resolution=resolution,
                                   frame=frame):
@@ -338,7 +326,7 @@
 
       # display may be set from a cookie (?)
       if (display is not None or resolution is not None or quality != 75 or format != ''\
-                              or frame is not None) and defaultdisplays.has_key(display):
+                              or frame is not None) and self.getSizeFromImageDisplay(display):
           if not self.hasConversion(display=display, format=format,
                                     quality=quality, resolution=resolution,
                                     frame=frame):
@@ -421,7 +409,7 @@
       if display is None:
           (width, height) = (self.getWidth(), self.getHeight())
       else:
-          (width, height) = defaultdisplays[display]
+          (width, height) = self.getSizeFromImageDisplay(display)
       if width == 0 and height == 0:
           width = self.getWidth()
           height = self.getHeight()
@@ -467,6 +455,26 @@
       """At least see if it *might* be valid."""
       return self.getWidth() and self.getHeight() and self.getData() and self.getContentType()
 
+  security.declareProtected('View', 'getSizeFromImageDisplay')
+  def getSizeFromImageDisplay(self, image_display):
+    """Retuns the size for this image display, or None if this image display name
+    is not known.
+    """
+    def getDefaultDisplayAsDict():
+      preference_tool = self.getPortalObject().portal_preferences
+      defaultdisplays = dict()
+      for id in default_displays_id_list:
+        height_preference = 'preferred_%s_image_height' % (id)
+        width_preferece = 'preferred_%s_image_width' % (id)
+        size_list = (preference_tool.getPreference(height_preference),
+                     preference_tool.getPreference(width_preferece))
+        defaultdisplays.setdefault(id, size_list)
+      return defaultdisplays
+    Cached_getDefaultDisplayAsDict = CachingMethod(getDefaultDisplayAsDict,
+                                                    id='Image_getDefaultDisplayAsDict',
+                                                    cache_factory='erp5_ui_long')
+    defaultdisplays = Cached_getDefaultDisplayAsDict()
+    return defaultdisplays.get(image_display)
 
   #
   # FTP/WebDAV support




More information about the Erp5-report mailing list