Bugfix : quand on a une présentation sans breadcrumbs, il ne faut pas que ça plante.
[Portfolio.git] / skins / lightboxcontext.py
1 ##parameters=
2 from Products.CMFCore.utils import getToolByName
3 from Products.Portfolio.utils import translate
4 def _(message) : return translate(message, context).encode('utf-8')
5 bsize = 20
6 options = {}
7
8 uidh = getToolByName(context, 'portal_uidhandler')
9 utool = getToolByName(context, 'portal_url')
10 atool = getToolByName(context, 'portal_actions')
11 pptool = getToolByName(context, 'portal_photo_print', None)
12 portal_url = utool()
13 lightboxUrl = context.absolute_url()
14 portal = utool.getPortalObject()
15 portalDepth = len(portal.getPhysicalPath())
16 req = context.REQUEST
17 toUrl = req.physicalPathToURL
18 resp = req.RESPONSE
19 selDict = req.SESSION.get('objects_selection_dict', {})
20
21 if traverse_subpath[-1] == 'photo_view_ajax' :
22 photoSubPath = traverse_subpath[:-1]
23 ajax = True
24 else :
25 photoSubPath = traverse_subpath
26 ajax = False
27
28 photo = portal.restrictedTraverse(photoSubPath)
29 photouid = uidh.register(photo)
30
31 lightboxUids = context.getUidList()
32
33 if pptool :
34 buyable = bool(pptool.getPrintingOptionsFor(photo))
35 sd = context.session_data_manager.getSessionData(create=1)
36 cart = sd.get('cart', None)
37 if cart and cart.locked :
38 buyable = False
39 else :
40 buyable = False
41 options['buyable'] = buyable
42
43 infos = []
44 posOfPhoto = 0
45
46 if ajax == True :
47 try : posOfPhoto = lightboxUids.index(photouid)
48 except ValueError : pass
49 options['backToContextUrl'] = '%s?b_start:int=%s' % (lightboxUrl, posOfPhoto/bsize*bsize)
50 relPhotoPath = '/'.join(photo.getPhysicalPath()[portalDepth:])
51 lastBcUrl = '%s/lightboxcontext/%s' % (lightboxUrl, relPhotoPath)
52 options['lastBcUrl'] = lastBcUrl
53 app = context.restrictedTraverse('/')
54 meth = app.restrictedTraverse(photo.getPhysicalPath() + ('photo_view_ajax_template',))
55 return meth(**options)
56
57
58 for i, uid in enumerate(lightboxUids) :
59 b = uidh.getBrain(uid)
60 size = b.getThumbnailSize
61 size = {'width':int(size['width']/2.0), 'height':int(size['height']/2.0)}
62
63 className = selDict.has_key(uid) and 'selected' or ''
64 if uid == photouid :
65 className = ('%s displayed' % className).lstrip()
66 posOfPhoto = i
67
68 relPhotoPath = '/'.join(b.getPath().split('/')[portalDepth:])
69 href = '%s/lightboxcontext/%s' % (lightboxUrl, relPhotoPath)
70
71 d = {'src': '%s/getThumbnail' % b.getURL()
72 ,'href': href
73 ,'thumbSize': size
74 ,'title' : b.Title
75 ,'className': className
76 , 'index': i
77 }
78 infos.append(d)
79
80 if posOfPhoto > 0 :
81 previous = infos[posOfPhoto - 1]['href']
82 else :
83 previous = infos[0]['href']
84
85 if posOfPhoto < len(infos) -1 :
86 next = infos[posOfPhoto + 1]['href']
87 else :
88 next = infos[-1]['href']
89
90 contextInfos = {'infos':infos,
91 'isSelected': selDict.has_key(photouid),
92 'backUrl' : '%s?b_start:int=%s' % (lightboxUrl, posOfPhoto/bsize*bsize),
93 'index' : posOfPhoto,
94 'previous' : previous,
95 'next' : next,
96 'reBaseCtxUrl':'/^%s/' % ('%s/lightboxcontext/' % lightboxUrl).replace('/', '\/'),
97 'canonicalUrl': "'%s/'" % portal_url}
98
99 options['contextInfos'] = contextInfos
100
101 # breadcrumbs customization
102 breadcrumbs = context.breadcrumbs()
103 breadcrumbs.append(
104 {'id' : photo.getId()
105 ,'title' : photo.title_or_id()
106 , 'url' : req.ACTUAL_URL}
107 )
108
109 options['breadcrumbs'] = breadcrumbs
110
111
112 ti = photo.getTypeInfo()
113 method_id = ti.queryMethodID('view', context=photo)
114 app = context.restrictedTraverse('/')
115 meth = app.restrictedTraverse(photo.getPhysicalPath() + (method_id,))
116 return meth(req, resp, **options)