Commit 61bed063 authored by Nicolas Delaby's avatar Nicolas Delaby

Get Images Sizes from portal_preferences

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@20763 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent a9acd32c
...@@ -41,6 +41,7 @@ from Acquisition import aq_base ...@@ -41,6 +41,7 @@ from Acquisition import aq_base
from DocumentTemplate.DT_Util import html_quote from DocumentTemplate.DT_Util import html_quote
from Products.CMFCore.utils import _setCacheHeaders, _ViewEmulator from Products.CMFCore.utils import _setCacheHeaders, _ViewEmulator
from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface 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.File import File
from Products.ERP5.Document.Document import ConversionError from Products.ERP5.Document.Document import ConversionError
...@@ -50,23 +51,10 @@ from OFS.content_types import guess_content_type ...@@ -50,23 +51,10 @@ from OFS.content_types import guess_content_type
from zLOG import LOG 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'] default_formats = ['jpg', 'jpeg', 'png', 'gif', 'pnm', 'ppm']
...@@ -206,7 +194,7 @@ class Image(File, OFSImage): ...@@ -206,7 +194,7 @@ class Image(File, OFSImage):
# display may be set from a cookie. # display may be set from a cookie.
if (display is not None or resolution is not None or quality!=75 or format != ''\ 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, if not self.hasConversion(display=display, format=format,
quality=quality, resolution=resolution, quality=quality, resolution=resolution,
frame=frame): frame=frame):
...@@ -262,15 +250,15 @@ class Image(File, OFSImage): ...@@ -262,15 +250,15 @@ class Image(File, OFSImage):
security.declareProtected('Access contents information', 'displayIds') security.declareProtected('Access contents information', 'displayIds')
def displayIds(self, exclude=('thumbnail',)): def displayIds(self, exclude=('thumbnail',)):
"""Return list of display Ids.""" """Return list of display Ids."""
ids = defaultdisplays.keys() id_list = list(default_displays_id_list)
# Exclude specified displays # Exclude specified displays
if exclude: if exclude:
for id in exclude: for id in exclude:
if id in ids: if id in id_list:
ids.remove(id) id_list.remove(id)
# Sort by desired photo surface area # 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])) id_list.sort(lambda x,y,d=self.getSizeFromImageDisplay: cmp(d(x)[0]*d(x)[1], d(y)[0]*d(y)[1]))
return ids return id_list
security.declareProtected('Access contents information', 'displayLinks') security.declareProtected('Access contents information', 'displayLinks')
def displayLinks(self, exclude=('thumbnail',)): def displayLinks(self, exclude=('thumbnail',)):
...@@ -293,8 +281,8 @@ class Image(File, OFSImage): ...@@ -293,8 +281,8 @@ class Image(File, OFSImage):
else: else:
(photo_width, photo_height, bytes, age) = (None, None, None, None) (photo_width, photo_height, bytes, age) = (None, None, None, None)
displays.append({'id': id, displays.append({'id': id,
'width': defaultdisplays[id][0], 'width': self.getSizeFromImageDisplay(id)[0],
'height': defaultdisplays[id][1], 'height': self.getSizeFromImageDisplay(id)[1],
'photo_width': photo_width, 'photo_width': photo_width,
'photo_height': photo_height, 'photo_height': photo_height,
'bytes': bytes, 'bytes': bytes,
...@@ -312,7 +300,7 @@ class Image(File, OFSImage): ...@@ -312,7 +300,7 @@ class Image(File, OFSImage):
if format in ('text', 'txt', 'html', 'base_html', 'stripped-html'): if format in ('text', 'txt', 'html', 'base_html', 'stripped-html'):
return None, None return None, None
if (display is not None or resolution is not None or quality != 75 or format != ''\ 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, if not self.hasConversion(display=display, format=format,
quality=quality, resolution=resolution, quality=quality, resolution=resolution,
frame=frame): frame=frame):
...@@ -338,7 +326,7 @@ class Image(File, OFSImage): ...@@ -338,7 +326,7 @@ class Image(File, OFSImage):
# display may be set from a cookie (?) # display may be set from a cookie (?)
if (display is not None or resolution is not None or quality != 75 or format != ''\ 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, if not self.hasConversion(display=display, format=format,
quality=quality, resolution=resolution, quality=quality, resolution=resolution,
frame=frame): frame=frame):
...@@ -421,7 +409,7 @@ class Image(File, OFSImage): ...@@ -421,7 +409,7 @@ class Image(File, OFSImage):
if display is None: if display is None:
(width, height) = (self.getWidth(), self.getHeight()) (width, height) = (self.getWidth(), self.getHeight())
else: else:
(width, height) = defaultdisplays[display] (width, height) = self.getSizeFromImageDisplay(display)
if width == 0 and height == 0: if width == 0 and height == 0:
width = self.getWidth() width = self.getWidth()
height = self.getHeight() height = self.getHeight()
...@@ -467,6 +455,26 @@ class Image(File, OFSImage): ...@@ -467,6 +455,26 @@ class Image(File, OFSImage):
"""At least see if it *might* be valid.""" """At least see if it *might* be valid."""
return self.getWidth() and self.getHeight() and self.getData() and self.getContentType() 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 # FTP/WebDAV support
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment