From 362525bf290b43724237432ce8480f5dbd7049b8 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Fri, 29 Aug 2014 14:02:08 +0200
Subject: [PATCH 1/1] Suppression des photos d'une table lumineuse par ajax.

---
 locales/en/LC_MESSAGES/portfolio.po |  24 ++++++++---
 locales/fr/LC_MESSAGES/portfolio.mo | Bin 7238 -> 7387 bytes
 locales/fr/LC_MESSAGES/portfolio.po |  28 +++++++++----
 locales/portfolio.pot               |  36 +++++++++++------
 skins/getLightboxPhotosInfos.py     |   2 +-
 skins/lightbox_view.py              |  59 +++++++++++++++++++++++-----
 skins/lightbox_view_template.pt     |  25 ++++++++----
 7 files changed, 130 insertions(+), 44 deletions(-)

diff --git a/locales/en/LC_MESSAGES/portfolio.po b/locales/en/LC_MESSAGES/portfolio.po
index 31709aa..09f46f3 100644
--- a/locales/en/LC_MESSAGES/portfolio.po
+++ b/locales/en/LC_MESSAGES/portfolio.po
@@ -74,12 +74,29 @@ msgstr ""
 msgid "Lightbox created."
 msgstr ""
 
+#: o/skins/lightbox_view.py:53
+msgid "Photo removed."
+msgstr ""
+
+#: o/skins/lightbox_view.py:55
+msgid "Removed photos."
+msgstr ""
+
+#: o/skins/lightbox_view.py:57
+msgid "Nothing to remove."
+msgstr ""
+
 #. Default: ""
 #: o/skins/lightbox_view_template.pt:19
 msgid "lightbox_selected_explanations"
 msgstr ""
 
-#: o/skins/lightbox_view_template.pt:22 o/skins/selection_view_template.pt:20
+#: o/skins/lightbox_view_template.pt:24 o/skins/my_cart_template.pt:59
+#: o/skins/portfolio_view.pt:88 o/skins/selection_view_template.pt:31
+msgid "delete"
+msgstr ""
+
+#: o/skins/lightbox_view_template.pt:31 o/skins/selection_view_template.pt:20
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
@@ -123,11 +140,6 @@ msgstr ""
 msgid "refresh amount"
 msgstr ""
 
-#: o/skins/my_cart_template.pt:59 o/skins/portfolio_view.pt:88
-#: o/skins/selection_view_template.pt:31
-msgid "delete"
-msgstr ""
-
 #: o/skins/my_cart_template.pt:69
 msgid "Prints"
 msgstr ""
diff --git a/locales/fr/LC_MESSAGES/portfolio.mo b/locales/fr/LC_MESSAGES/portfolio.mo
index 7097597a37bf078223fd33eb1440b297ac840da9..400e2cc169966841099ff3430814d5cd92fb9e51 100644
GIT binary patch
delta 2448
zcmXxldrZ}39LMqR5r~6uxL+hRjs{3e5al95Cq)D+Z-C`3i!2TTf*?|>wRO}kthqJU
znM~*A+^{X$S}Xo3jaE^(sHU?~TWs==lP&tgjchsF>is$A;kWZWujhGwzu$BDKF@)P
z>gn~No9VG<jH`!OO1u?griMQs;EQWxf>}A%VH&=S**J)acmY%KBTU9C7>|>v=Wn?7
zTbN0G9@VvXv01EH$Wo#O%fuvZ<f1w#a+acAsKN{kU<x*)CU6kbu?P9salU+b3d`^u
zYJ!uf_omT{bC}Nf_7{aX8sh0qH+-m>XQO6Z?Aim!<gF1k!6wv%_aZB?AeLYkR^eG(
zi`P&ST*SjN3nTri&iEFfP=QTYjc=nS@)c^JtEkjoLrv_atKUI&^dIJ6Cd*cR6)wR#
z)K=|BKORN(`@Zu$hV<Yi3QF-9DplV(r%)@tje7A8Y76e6Qt4w>TKO_0iM9e)U<vB^
zCS>up4|TSJs0^IM0z8vU{+0U6G{~<}15BVg{v9>J8RT5rKd27>#fQ+#ESBL)ROT8`
znRo-0`XP7!2Yj6RENWs!tWy22P9^_Zc?Atxc`aY+cpEBphf()WB3ZU~Q7;Z5NwD*%
z4o6U#`V5tcFOfOgRd@ea*FNLwf1tK@KI9ti<8=?6v%wp<F-4xV*IA?^vO-k70hN(G
zs8sf$I(ic|@F~>5L#RxA;O>v17V<qR(?6jW6uLn{E1Gc++(NBn4j;t3$j4GSSxS8Y
zs=W*~;8s`Pja#T6Mb=_pI44o>O=B+3q9)+Uio74PcnVrkI;!JGQ7LUiw##;+25Lp6
zyvyBx6>F)VaE>|ep$=Om`=<=Gpau@2CKkd*JdO4G{r^TmsmLQ=8n_sh>NTi|)uSeI
z05!pG*FK1R>>^(p@N>+^DO`<rQ4=qu6ZKz)MHoPBSsP|BzI9X3Opl{p2&1;(0`jpB
z`O<{GL8bB+)RxTPTAW8cU&Jya17R`s0FrHM$CdaxD)qz85mYwp6AC&56PSlTqJD0(
zs0qzsA^z=LN*Xp(--LR85bJRmAI4eKSxDrjCcF!E_*zjDZAW&=`tr#CX$tSqz#=S%
zJnF$R)JoQ&wq!GsP229;gU)``X%C?~e9yICLJjmOs=q6!g?x)TLq8)wHfzxSH&WP0
z=+aC2{g)CIgbs|Zy;1BXr+A)FdNr{Axaeo9bFzofVA|tqLYdWe=<11Ltyn;8S?E~p
z&k<!rH=)(*(z&RKl+1Qui!1NP1Fp<sBA2#u6S0%151;U6cpeLX9G?@aqrRRX$&u?Y
z-~MRPwxcqrtgIolt-A?bwS>-18?lwxMd&(2yg+OqDv75FozHEAcIgRX;o>+{*)!Bu
z5zC1V;t@gz_enzAzK`f40>r{q5`N8_?|CtN&YRcVOk=0J(T+M2>xg_pzqDtGa$*so
z?QSA;JryPL-#F;X;^1gpf;T2@NAEyK=aEDHfnI-qu&4KxU^p>pcyUMXLVa{3DczIO
z61mmp@6(NArK6X9g)#BvHI<b$<(1*vsRgl=t45R4QsR6qoxvmi@r(2}(Agi(&A#qy
ha=lR>9|?PMvPSP`*L%_;&Bvn8jgJKBHLxTh_J8U*>y!Wh

delta 2304
zcmX}sX>3$g7{>8;oI-DfnQ05Qg|>EzWlOBKbY^IaEP||}ltCy`s4PWFC4>MmE@>uV
zi5mS-G77OxAT&WSrizXxL<}(qCV-j(A7n`(ge577fCgMXVEjMRGo19D-?``BdzSZ{
z+e>vn)g~_IXMJRpHll>s;5Spl_k;PN<mQ;wU>@e-Of0}g9D*A$7vI7lzK_}1iF&@<
zwSR-dx&9H=^?A%POW2ixie1N{+~`Mj@R##H)C+?jH5-Nj3}HEH0@aw0laW7b;3t4h
zScU6R6YNC2_c?la1oIi+j#C*#!*A|JA8O_|Q8WI>wFelDxmW>ef??Ez#~~}RC{|)U
z#;_G9;6Bs@&pK~lx?hYiz6I!|7N?_T_BLvO9jKIkfSOPj>ct)`#AELIA{KFd2emaG
z%MW82s=sN@xv1yjsEodb38iK;6}cU?!Vgg|?nR~iQ`8ENAjz;Fa1@?KJ$D;fjQx!|
zLw;th6^F3`Yfu?p>TE{!+Y%)I>i7*BG_!W({Ml|)hn@I1euAZV0+p$2s0@^_p-OQC
zb$=aB!JVjy9Y^*53u?t@Q476*>i1TN{3~TSwCaH{l0_SfdNG15%IZ)Z&PHXZ0hNhm
z$Xsl#yT8@7x4Y|iQCqpoU4M+dKE4W^O8b@sdD7mdFug)|eGQe7`^cXK$(K4RM-4n4
zHE;x#i5c#G6KWxAP$_RiEoc*JLGAATHq=5A?@<{^C5imm7yKyo$6Wibr~&)k^*x-;
zb%>M5BCOHbihA!&9DzGg6WE7({{U)1hfw34L^7JN>r~hd`yKV*160br#|BbffRnf`
zb2d5mpbpzPREF-N2KKX`v#=CrU<)b(2T@!2Eh^(ju}I&4FBQ$GKixo@$fr_T%8v$!
zVj0HqY21vOXg8|k9vp+;p|<EMk|gU#P3!^c`COK-loz8iF`AztjBit@=!JPW0h>_|
z?m`XFh2!ubk{mmOWAP>`#X*)Wha+pSk*K|{#$t@2zN$ECB1>>IuEK;W?@)OTdr&X@
ziAr6Nv^;@v)SkbN+T)|BLv{)^(KAT)?Gkq2AIRKn8=dL7F4RK0QCsjOk`y~!O#XGF
z*FDgOI@PyO9scXuL+pbFDnWHP2DOq()LE%TzABqeXyW=GprUv5omUdAgbu9A;sI=>
z_CHgas3^S}_!&Z<qYmavga*^z#t5ZW+o94nfGx)gLRrj|WmI%t))QK!iq1oAx@Pt~
zF35DGwwK)v7LzX8%V|U-@oe%dZ<wz>*_U0In9B7;g5*3bVON`n%Am4RMKlwO2$ecQ
z=Vlc#hiD*FT8I_IWTJ*xNazchOK6*B5}Cqrh*_MgCy8=mEis;`CT0=Z_a($SViJ)l
z^OK)>WxiLEC%xi@FVgs`yRim6B1-5hdx}^}=tFpf(00E-sOSu;M2OYtn)^vbb3A{t
yVd(y^0|8&EG+5!!uBwkj>Z@YOIe8UX)T60Qd7(kcj)I?48wwZuQs;`itp5RQ;==_1

diff --git a/locales/fr/LC_MESSAGES/portfolio.po b/locales/fr/LC_MESSAGES/portfolio.po
index dc2a367..00a754f 100644
--- a/locales/fr/LC_MESSAGES/portfolio.po
+++ b/locales/fr/LC_MESSAGES/portfolio.po
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Fri Aug 29 10:44:06 2014\n"
-"PO-Revision-Date: 2014-08-29 10:45+0200\n"
+"POT-Creation-Date: Fri Aug 29 13:55:35 2014\n"
+"PO-Revision-Date: 2014-08-29 13:56+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -97,6 +97,18 @@ msgstr "Vous devez entrer un titre."
 msgid "Lightbox created."
 msgstr "Table lumineuse créée."
 
+#: o/skins/lightbox_view.py:53
+msgid "Photo removed."
+msgstr "Photo retirée."
+
+#: o/skins/lightbox_view.py:55
+msgid "Removed photos."
+msgstr "Photos retirées."
+
+#: o/skins/lightbox_view.py:57
+msgid "Nothing to remove."
+msgstr "Rien à retirer."
+
 #. Default: ""
 #: o/skins/lightbox_view_template.pt:19
 msgid "lightbox_selected_explanations"
@@ -104,7 +116,12 @@ msgstr ""
 "Cette table lumineuse est sélectionnée : les images que vous sélectionnerez "
 "à présent seront automatiquement sauvegardées à cet endroit."
 
-#: o/skins/lightbox_view_template.pt:22 o/skins/selection_view_template.pt:20
+#: o/skins/lightbox_view_template.pt:24 o/skins/my_cart_template.pt:59
+#: o/skins/portfolio_view.pt:88 o/skins/selection_view_template.pt:31
+msgid "delete"
+msgstr "supprimer"
+
+#: o/skins/lightbox_view_template.pt:31 o/skins/selection_view_template.pt:20
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
@@ -148,11 +165,6 @@ msgstr "Prix (TTC)"
 msgid "refresh amount"
 msgstr "actualiser le montant"
 
-#: o/skins/my_cart_template.pt:59 o/skins/portfolio_view.pt:88
-#: o/skins/selection_view_template.pt:31
-msgid "delete"
-msgstr "supprimer"
-
 #: o/skins/my_cart_template.pt:69
 msgid "Prints"
 msgstr "Tirages"
diff --git a/locales/portfolio.pot b/locales/portfolio.pot
index 6d8a06a..fd5694f 100644
--- a/locales/portfolio.pot
+++ b/locales/portfolio.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: 3.0\n"
-"POT-Creation-Date: Fri Aug 29 10:44:06 2014\n"
+"POT-Creation-Date: Fri Aug 29 13:55:35 2014\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: Zope 3 Developers <zope-dev@zope.org>\n"
@@ -106,12 +106,35 @@ msgstr ""
 msgid "Lightbox created."
 msgstr ""
 
+#: o/skins/lightbox_view.py:53
+msgid "Photo removed."
+msgstr ""
+
+#: o/skins/lightbox_view.py:55
+msgid "Removed photos."
+msgstr ""
+
+#: o/skins/lightbox_view.py:57
+msgid "Nothing to remove."
+msgstr ""
+
 #: o/skins/lightbox_view_template.pt:19
 #. Default: ""
 msgid "lightbox_selected_explanations"
 msgstr ""
 
-#: o/skins/lightbox_view_template.pt:22
+#: o/skins/lightbox_view_template.pt:24
+#: o/skins/lightbox_view_template.pt:24
+#: o/skins/my_cart_template.pt:59
+#: o/skins/my_cart_template.pt:59
+#: o/skins/portfolio_view.pt:88
+#: o/skins/portfolio_view.pt:88
+#: o/skins/selection_view_template.pt:31
+#: o/skins/selection_view_template.pt:31
+msgid "delete"
+msgstr ""
+
+#: o/skins/lightbox_view_template.pt:31
 #: o/skins/selection_view_template.pt:20
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
@@ -158,15 +181,6 @@ msgstr ""
 msgid "refresh amount"
 msgstr ""
 
-#: o/skins/my_cart_template.pt:59
-#: o/skins/my_cart_template.pt:59
-#: o/skins/portfolio_view.pt:88
-#: o/skins/portfolio_view.pt:88
-#: o/skins/selection_view_template.pt:31
-#: o/skins/selection_view_template.pt:31
-msgid "delete"
-msgstr ""
-
 #: o/skins/my_cart_template.pt:69
 msgid "Prints"
 msgstr ""
diff --git a/skins/getLightboxPhotosInfos.py b/skins/getLightboxPhotosInfos.py
index f5afc8c..626ebd1 100644
--- a/skins/getLightboxPhotosInfos.py
+++ b/skins/getLightboxPhotosInfos.py
@@ -42,7 +42,7 @@ for index, b in enumerate(batch) :
 	infos.append(d)
 
 features = {}
-features['del'] = lambda b: '%s/remove_to_lightbox?uid=%s' % (lightboxUrl, b.cmf_uid)
+features['checkbox'] = True
 features['cart'] = lambda b : '%s/get_slide_buyable_items' % b.getURL()
 
 return {'infos' : infos,
diff --git a/skins/lightbox_view.py b/skins/lightbox_view.py
index 7fb12dc..1a06cef 100755
--- a/skins/lightbox_view.py
+++ b/skins/lightbox_view.py
@@ -1,27 +1,66 @@
-##parameters=load='',unload='',**kw
+##parameters=
+from Products.Portfolio.utils import translate
+_ = lambda msg : translate(msg, context)
 options = {}
 buttons = []
-lightboxSelected = False
 
 sd = context.session_data_manager.getSessionData(create = 1)
 path  = context.getPhysicalPath()
+req = context.REQUEST
+form = req.form
+fg = form.get
+
+# check if lighbox is selected
+sessionpath = sd.get('lightboxpath', None)
+lightboxSelected = False
+if sessionpath == path :
+	lightboxSelected = True
+	buttons.append({'name': 'unload', 'value': 'Unload from my selection'})
+else :
+	buttons.append({'name':'load', 'value': 'Load in my selection'})
 
-if load :
+# form processing
+if fg('load') :
 	sd.set('lightboxpath', path)
 	selection = context.getUidList()
 	sd.set('objects_selection', selection)
 	sd.set('objects_selection_dict', dict([(uid, True) for uid in selection]))
-elif unload :
+
+elif fg('unload') :
 	sd.set('lightboxpath', None)
 	sd.set('objects_selection', [])
 	sd.set('objects_selection_dict', {})
 
-sessionpath = sd.get('lightboxpath', None)
-if sessionpath == path :
-	lightboxSelected = True
-	buttons.append({'name': 'unload', 'value': 'Unload from my selection'})
-else :
-	buttons.append({'name':'load', 'value': 'Load in my selection'})
+elif fg('delete.x') or form.has_key('delete') :
+    uids = fg('uids', [])
+    if not lightboxSelected :
+        for uid in [int(uid) for uid in uids] :
+            context.remove(uid)
+    else :
+        selection = sd.get('objects_selection', [])
+        selDict = sd.get('objects_selection_dict', {})
+        for uid in [int(uid) for uid in uids] :
+            context.remove(uid)
+            selection.remove(uid)
+            del selDict[uid]
+
+        sd['objects_selection'] = selection
+        sd['objects_selection_dict'] = selDict
+    
+    # ui feedback message
+    if uids :
+        if len(uids) == 1 :
+            msg = _('Photo removed.')
+        else :
+            msg = _('Removed photos.')
+    else :
+        msg = _('Nothing to remove.')
+    
+    if fg('ajax') :
+        context.REQUEST.RESPONSE.setHeader('Content-Type', 'text/xml;;charset=utf-8')
+        return '<deleted>%s</deleted>' % msg
+    else :
+        context.setStatus(True, msg)
 
 
 options['buttons'] = buttons
diff --git a/skins/lightbox_view_template.pt b/skins/lightbox_view_template.pt
index 3e73cca..5200891 100644
--- a/skins/lightbox_view_template.pt
+++ b/skins/lightbox_view_template.pt
@@ -18,18 +18,27 @@
     <div metal:fill-slot="main" tal:omit-tag="" i18n:domain="portfolio">
       <em tal:condition="options/lightboxSelected" i18n:translate="lightbox_selected_explanations"></em>
       <form tal:attributes="action string:${here/absolute_url}/lightbox_view" tal:condition="options/buttons">
+        <div id="lightbox_toolbar" class="image_toolbar"
+             tal:define="ModifyPortalContent modules/Products/CMFCore/permissions/ModifyPortalContent"
+             tal:condition="python:mtool.checkPermission(ModifyPortalContent, here)">
+          <input type="image" width="17" height="27" alt="delete" title="delete"
+                 name="delete"
+                 tal:attributes="src string:$portal_url/trash_btn.gif"
+                 i18n:attributes="alt;title"/>
+          <br/>
+        </div>
         <span tal:repeat="button options/buttons" tal:omit-tag="">
           <input type="submit" tal:attributes="name button/name; value button/value" i18n:attributes="value"/>
         </span>
-      </form>
-      <div tal:define="batch options/batch;
-                       infos options/infos;
-                       features options/features"
-           tal:omit-tag="">
-        <div metal:use-macro="here/photo_layout_macros/macros/grid">
-          affichage grille
+        <div tal:define="batch options/batch;
+                         infos options/infos;
+                         features options/features"
+             tal:omit-tag="">
+          <div metal:use-macro="here/photo_layout_macros/macros/grid">
+            affichage grille
+          </div>
         </div>
-      </div>
+      </form>
       <br clear="all"/>
     </div>
   </body>
-- 
2.20.1