From 8db44a89ad1641ae718b6763c0af0a7f08476e03 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Wed, 16 Oct 2013 10:12:15 +0200
Subject: [PATCH 01/16] =?utf8?q?Ajout=20du=20minimum=20pour=20que=20zope?=
 =?utf8?q?=20d=C3=A9marre=20sans=20paypal=20install=C3=A9.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 order.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/order.py b/order.py
index ea48483..66d17fa 100755
--- a/order.py
+++ b/order.py
@@ -45,7 +45,11 @@ from price import Price
 from xml.dom.minidom import Document
 from tool import COPIES_COUNTERS
 from App.config import getConfiguration
-from paypal.interface import PayPalInterface
+try :
+    from paypal.interface import PayPalInterface
+    paypalAvailable = True
+except ImportError :
+    paypalAvailable = False
 from logging import getLogger
 console = getLogger('Products.photoprint.order')
 
-- 
2.20.1


From 5c9828e1adc12051dd1297dc63727161d1b0bb41 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Wed, 9 Jul 2014 15:22:04 +0200
Subject: [PATCH 02/16] luxia--. GPL++

---
 __init__.py                               | 28 +++++++++++++++--------
 _utils/import_printing_list.py            |  2 +-
 cart.py                                   |  2 +-
 interfaces.py                             | 28 +++++++++++++++--------
 permissions.py                            | 28 +++++++++++++++--------
 price.py                                  | 28 +++++++++++++++--------
 skins/order_printing_list_template_xml.pt |  2 +-
 tool.py                                   | 28 +++++++++++++++--------
 8 files changed, 98 insertions(+), 48 deletions(-)

diff --git a/__init__.py b/__init__.py
index fbbbde2..0058631 100755
--- a/__init__.py
+++ b/__init__.py
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2009 Benoît PIN <pinbe@luxia.fr>             #
-# Cliché - http://luxia.fr                                 #
-#                                                          #
-# This program is free software; you can redistribute it   #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic"                  #
-# http://creativecommons.org/licenses/by-nc/2.0/           #
-############################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 Photo print product. Used to order photo prints.
 
diff --git a/_utils/import_printing_list.py b/_utils/import_printing_list.py
index 45fa187..834599f 100755
--- a/_utils/import_printing_list.py
+++ b/_utils/import_printing_list.py
@@ -4,7 +4,7 @@
 # Copyright © 2009 Luxia SAS. All rights reserved. #
 #                                                  #
 # Contributors:                                    #
-#  - Benoît Pin <pinbe@luxia.fr>                   #
+#  - Benoît Pin <pin@cri.ensmp.fr>                   #
 ####################################################
 """
 Downloads RSS based order description and make a local human readable file tree
diff --git a/cart.py b/cart.py
index fef5a85..58bebfd 100644
--- a/cart.py
+++ b/cart.py
@@ -3,7 +3,7 @@
 # Copyright © 2009 Luxia SAS. All rights reserved. #
 #                                                  #
 # Contributors:                                    #
-#  - Benoît Pin <pinbe@luxia.fr>                   #
+#  - Benoît Pin <pin@cri.ensmp.fr>                   #
 ####################################################
 """ Cart definition used to store buyable prints
 
diff --git a/interfaces.py b/interfaces.py
index 07819e8..c260970 100755
--- a/interfaces.py
+++ b/interfaces.py
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2009 Benoît PIN <pinbe@luxia.fr>             #
-# Cliché - http://luxia.fr                                 #
-#                                                          #
-# This program is free software; you can redistribute it   #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic"                  #
-# http://creativecommons.org/licenses/by-nc/2.0/           #
-############################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 Printable objects interfaces
 
diff --git a/permissions.py b/permissions.py
index 7125e00..38a70ba 100755
--- a/permissions.py
+++ b/permissions.py
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2009 Benoît PIN <pinbe@luxia.fr>             #
-# Cliché - http://luxia.fr                                 #
-#                                                          #
-# This program is free software; you can redistribute it   #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic"                  #
-# http://creativecommons.org/licenses/by-nc/2.0/           #
-############################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 photoprint specific permissions
 
diff --git a/price.py b/price.py
index dae05fb..83a23bf 100755
--- a/price.py
+++ b/price.py
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2009 Benoît PIN <pinbe@luxia.fr>             #
-# Cliché - http://luxia.fr                                 #
-#                                                          #
-# This program is free software; you can redistribute it   #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic"                  #
-# http://creativecommons.org/licenses/by-nc/2.0/           #
-############################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 Pricing types
 
diff --git a/skins/order_printing_list_template_xml.pt b/skins/order_printing_list_template_xml.pt
index 2c41205..2526e46 100644
--- a/skins/order_printing_list_template_xml.pt
+++ b/skins/order_printing_list_template_xml.pt
@@ -2,7 +2,7 @@
 <rdf:RDF
     xmlns:tal="http://xml.zope.org/namespaces/tal"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-    xmlns:pp="http://luxia.fr/namespaces/pp/"
+    xmlns:pp="http://plinn.org/namespaces/pp/"
     xmlns="http://purl.org/rss/1.0/">
   <channel rdf:about="URL"
       tal:define="channel_info options/channel_info"
diff --git a/tool.py b/tool.py
index 54fc648..ce244b5 100755
--- a/tool.py
+++ b/tool.py
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-############################################################
-# Copyright © 2009 Benoît PIN <pinbe@luxia.fr>             #
-# Cliché - http://luxia.fr                                 #
-#                                                          #
-# This program is free software; you can redistribute it   #
-# and/or modify it under the terms of the Creative Commons #
-# "Attribution-Noncommercial 2.0 Generic"                  #
-# http://creativecommons.org/licenses/by-nc/2.0/           #
-############################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 Photo print tool. Used to link photo to print orders.
 
-- 
2.20.1


From 2902c4fc625f6e3334aaf1b085b607870dba6177 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Wed, 9 Jul 2014 15:54:36 +0200
Subject: [PATCH 03/16] luxia--

---
 __init__.py                    |  2 --
 _utils/import_printing_list.py | 27 +++++++++++++++++++--------
 cart.py                        | 27 +++++++++++++++++++--------
 3 files changed, 38 insertions(+), 18 deletions(-)

diff --git a/__init__.py b/__init__.py
index 0058631..5017fd6 100755
--- a/__init__.py
+++ b/__init__.py
@@ -21,8 +21,6 @@
 """
 Photo print product. Used to order photo prints.
 
-
-
 """
 from Products.CMFCore import utils as cmfutils
 import tool
diff --git a/_utils/import_printing_list.py b/_utils/import_printing_list.py
index 834599f..245e1e1 100755
--- a/_utils/import_printing_list.py
+++ b/_utils/import_printing_list.py
@@ -1,17 +1,28 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
-####################################################
-# Copyright © 2009 Luxia SAS. All rights reserved. #
-#                                                  #
-# Contributors:                                    #
-#  - Benoît Pin <pin@cri.ensmp.fr>                   #
-####################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """
 Downloads RSS based order description and make a local human readable file tree
 to facilitate printing tasks.
 
-
-
 """
 
 
diff --git a/cart.py b/cart.py
index 58bebfd..cbadc53 100644
--- a/cart.py
+++ b/cart.py
@@ -1,14 +1,25 @@
 # -*- coding: utf-8 -*-
-####################################################
-# Copyright © 2009 Luxia SAS. All rights reserved. #
-#                                                  #
-# Contributors:                                    #
-#  - Benoît Pin <pin@cri.ensmp.fr>                   #
-####################################################
+#######################################################################################
+# Copyright © 2009 Benoît Pin <pin@cri.ensmp.fr>                                      #
+# Plinn - http://plinn.org                                                            #
+#                                                                                     #
+#                                                                                     #
+#   This program is free software; you can redistribute it and/or                     #
+#   modify it under the terms of the GNU General Public License                       #
+#   as published by the Free Software Foundation; either version 2                    #
+#   of the License, or (at your option) any later version.                            #
+#                                                                                     #
+#   This program is distributed in the hope that it will be useful,                   #
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of                    #
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                     #
+#   GNU General Public License for more details.                                      #
+#                                                                                     #
+#   You should have received a copy of the GNU General Public License                 #
+#   along with this program; if not, write to the Free Software                       #
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.   #
+#######################################################################################
 """ Cart definition used to store buyable prints
 
-$Id$
-$URL$
 """
 from Globals import InitializeClass, Persistent, PersistentMapping
 from Acquisition import Implicit
-- 
2.20.1


From 221f5fb59b37184372ba78fc765925758f5c0579 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 17:24:45 +0200
Subject: [PATCH 04/16] =?utf8?q?Bugfix=C2=A0:=20reduce=20non=20homog=C3=A8?=
 =?utf8?q?ne.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 order.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/order.py b/order.py
index 66d17fa..db19cc0 100755
--- a/order.py
+++ b/order.py
@@ -337,12 +337,12 @@ class PrintOrder(PortalContent, DefaultDublinCoreImpl) :
                    }
         
         if len(self.items) > 1 :
-            quantitySum = reduce(lambda a, b : a['quantity'] + b['quantity'], self.items)
+            quantitySum = reduce(lambda a, b : a + b, [item['quantity'] for item in self.items])
         else :
             quantitySum = self.items[0]['quantity']
         total = round(self.amountWithFees.getValues()['taxed'], 2)
         
-        options['L_PAYMENTREQUEST_0_NAME0'] = 'Commande realis photo ref. %s' % self.getId()
+        options['L_PAYMENTREQUEST_0_NAME0'] = 'Commande photo ref. %s' % self.getId()
         if quantitySum == 1 :
             options['L_PAYMENTREQUEST_0_DESC0'] = "Commande d'un tirage photographique"
         else :
-- 
2.20.1


From 4108abadea5456a9d832614c32b93925425f6904 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 20:50:28 +0200
Subject: [PATCH 05/16] =?utf8?q?Mise=20=C3=A0=20jour=20des=20templates=20/?=
 =?utf8?q?=20script=20pour=20les=20inscriptions=20client.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 skins/customer_add_control.py   |  2 +-
 skins/customer_join_form.py     |  8 ++++++--
 skins/customer_join_template.pt | 30 +++++++++++++++++++++++++++++-
 skins/customer_login_form.pt    |  2 +-
 skins/validatePrivateAccess.py  | 16 ++++++++++++++++
 5 files changed, 53 insertions(+), 5 deletions(-)
 create mode 100755 skins/validatePrivateAccess.py

diff --git a/skins/customer_add_control.py b/skins/customer_add_control.py
index 274f4c6..8280dbc 100755
--- a/skins/customer_add_control.py
+++ b/skins/customer_add_control.py
@@ -1,6 +1,6 @@
 ##parameters=**kw
 from Products.CMFCore.utils import getToolByName
-from Products.realis.utils import translate
+from Products.photoprint.utils import translate
 from Products.CMFDefault.utils import translate as cmf_translate
 rtool = getToolByName(context, 'portal_registration')
 ptool = getToolByName(context, 'portal_properties')
diff --git a/skins/customer_join_form.py b/skins/customer_join_form.py
index 4df2848..13422ea 100755
--- a/skins/customer_join_form.py
+++ b/skins/customer_join_form.py
@@ -1,6 +1,6 @@
 ##parameters=add=''
 from Products.CMFCore.utils import getToolByName
-from Products.realis.utils import translate
+from Products.Plinn.utils import translate
 from ZTUtils import make_query as mq
 _ = lambda msg : translate(msg, context)
 ptool = getToolByName(script, 'portal_properties')
@@ -17,7 +17,8 @@ fg = lambda name : form.get(name,'').strip()
 
 if add and \
 	context.validatePassword(**form) and \
-	context.customer_add_control(**form) :
+	context.customer_add_control(**form) and \
+	context.validatePrivateAccess(**form) :
 	came_from = fg('came_from')
 	if came_from :
 		return context.setRedirect(	atool, 'user/logged_in'
@@ -39,6 +40,9 @@ continuationFields = [
 	, 'password'
 	, 'confirm'
 	, 'send_password'
+	, 'wedding_id'
+	, 'wedding_password'
+	, 'wedding_password_confirm'
 	, 'billing_address'
 	, 'billing_city'
 	, 'billing_zipcode'
diff --git a/skins/customer_join_template.pt b/skins/customer_join_template.pt
index 7799f6f..acbf54c 100644
--- a/skins/customer_join_template.pt
+++ b/skins/customer_join_template.pt
@@ -2,7 +2,7 @@
   <head>
     <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
   </head>
-  <body metal:fill-slot="main_no_tabs" i18n:domain="realis"
+  <body metal:fill-slot="main_no_tabs" i18n:domain="plinn"
         tal:omit-tag="">
     <div tal:condition="python:options.get('came_from', '').endswith('/my_cart')"
          tal:define="step_authentication python:True" tal:omit-tag="">
@@ -69,6 +69,34 @@
         <tr>
           <td colspan="2"><hr/></td>
         </tr>
+        <tr>
+          <td colspan="2" style="text-align:center">
+            <h3>Accès à des images privées</h3>
+            veuillez entrer le code d'accès pour accéder / acheter les images<br/>
+            d'un événement privé couvert par les photographes de notre agence.
+          </td>
+        </tr>
+        <tr>
+          <th>Identifiant collection privée</th>
+          <td>
+            <input type="text" name="wedding_id" tal:attributes="value options/wedding_id"/>
+          </td>
+        </tr>
+        <tr>
+          <th>Mot de passe associé</th>
+          <td>
+            <input type="password" name="wedding_password" tal:attributes="value options/wedding_password" />
+          </td>
+        </tr>
+        <tr>
+          <th>Confirmation du mot de passe</th>
+          <td>
+            <input type="password" name="wedding_password_confirm" tal:attributes="value options/wedding_password_confirm" />
+          </td>
+        </tr>
+        <tr>
+          <td colspan="2"><hr/></td>
+        </tr>
         <tr>
           <td colspan="2" style="text-align:center">
             <h3 i18n:translate="">Billing informations</h3>
diff --git a/skins/customer_login_form.pt b/skins/customer_login_form.pt
index d5fc2e5..7e9b601 100644
--- a/skins/customer_login_form.pt
+++ b/skins/customer_login_form.pt
@@ -4,7 +4,7 @@
   <head>
     <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
   </head>
-  <body metal:fill-slot="main_no_tabs" i18n:domain="realis" tal:omit-tag="">
+  <body metal:fill-slot="main_no_tabs" i18n:domain="photoprint" tal:omit-tag="">
     <div tal:condition="python:request.get('came_from', '').endswith('/my_cart')"
          tal:define="step_authentication python:True"
          tal:omit-tag="">
diff --git a/skins/validatePrivateAccess.py b/skins/validatePrivateAccess.py
new file mode 100755
index 0000000..19e3a7d
--- /dev/null
+++ b/skins/validatePrivateAccess.py
@@ -0,0 +1,16 @@
+##parameters=**kw
+kg = lambda name : kw.get(name,'').strip()
+
+weddingId = kg('wedding_id')
+if not weddingId :
+	return True
+
+else :
+	password = kg('wedding_password')
+	confirm = kg('wedding_password_confirm')
+	memberId = kg('member_id')
+	msg = context.grantAccess(context, weddingId, password, confirm, memberId)
+	if msg :
+		return context.setStatus(False, msg)
+	else :
+		return True
-- 
2.20.1


From 077104edcbc86919b1ba1bf6318e88201614faa4 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 21:18:24 +0200
Subject: [PATCH 06/16] localisation

---
 locales/en/LC_MESSAGES/photoprint.po | 181 +++++++++++++++++++------
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 11231 -> 13187 bytes
 locales/fr/LC_MESSAGES/photoprint.po | 192 ++++++++++++++++++++------
 locales/photoprint.pot               | 194 +++++++++++++++++++++------
 skins/customer_join_template.pt      |   2 +-
 5 files changed, 444 insertions(+), 125 deletions(-)

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index 7f97f28..ddc0a0d 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -1,4 +1,4 @@
-#: t/price.py:72
+#: t/price.py:82
 msgid "${i}.${d}"
 msgstr ""
 
@@ -60,6 +60,141 @@ msgstr ""
 msgid "Please accept general conditions of sales."
 msgstr ""
 
+#: t/skins/customer_join_template.pt:11
+msgid "New customer account"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:17
+msgid "Customer informations"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:21
+msgid "First name"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:27
+msgid "Last name"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:33
+msgid "Email Address"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:40
+msgid "Member ID"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:48 t/skins/customer_login_form.pt:45
+msgid "Password"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:54
+msgid "Password (confirm)"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:60
+msgid "Mail Password?"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:64
+msgid "Check this box to have the password mailed."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:102 t/skins/personalize_form.pt:46
+msgid "Billing informations"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:106 t/skins/order_view_template.pt:35
+#: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
+msgid "Address"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:113 t/skins/order_view_template.pt:39
+#: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
+msgid "City"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:119 t/skins/order_view_template.pt:43
+#: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
+msgid "Zip code"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:125 t/skins/order_view_template.pt:47
+#: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
+msgid "Country"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:135 t/skins/personalize_form.pt:79
+msgid "Phone"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:144
+msgid "I accept general conditions of sales"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:152
+msgid "Register"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:153
+#: t/skins/photoprint_templates_edit_template.pt:142
+msgid "Cancel"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:16
+msgid "You already have an account?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:17
+msgid "Please login to continue"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:20
+msgid "New customer?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:21
+msgid "Welcome!<br /> Please create an account to order."
+msgstr ""
+
+#. Default: "Login"
+#: t/skins/customer_login_form.pt:38
+msgid "user_name"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:55
+msgid "Remember my name."
+msgstr ""
+
+#. Default: "Login"
+#: t/skins/customer_login_form.pt:63
+msgid " Login "
+msgstr ""
+
+#: t/skins/customer_login_form.pt:73
+msgid "Open new account >>"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:81
+msgid "Forgot your password?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:87
+msgid ""
+"Having trouble logging in? Make sure to enable cookies in your web browser."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:90
+msgid "Don't forget to logout or exit your browser when you're done."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:94
+msgid ""
+"Setting the 'Remember my name' option will set a cookie with your username, "
+"so that when you next log in, your user name will already be filled in for "
+"you."
+msgstr ""
+
 #: t/skins/my_orders.py:17 t/skins/order_list.py:14
 #: t/skins/order_view_template.pt:181
 msgid "Date"
@@ -234,26 +369,6 @@ msgstr ""
 msgid "Billing"
 msgstr ""
 
-#: t/skins/order_view_template.pt:35 t/skins/order_view_template.pt:60
-#: t/skins/personalize_form.pt:50
-msgid "Address"
-msgstr ""
-
-#: t/skins/order_view_template.pt:39 t/skins/order_view_template.pt:64
-#: t/skins/personalize_form.pt:57
-msgid "City"
-msgstr ""
-
-#: t/skins/order_view_template.pt:43 t/skins/order_view_template.pt:68
-#: t/skins/personalize_form.pt:63
-msgid "Zip code"
-msgstr ""
-
-#: t/skins/order_view_template.pt:47 t/skins/order_view_template.pt:72
-#: t/skins/personalize_form.pt:69
-msgid "Country"
-msgstr ""
-
 #: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:133
 msgid "Shipping"
 msgstr ""
@@ -344,14 +459,6 @@ msgstr ""
 msgid "Email address"
 msgstr ""
 
-#: t/skins/personalize_form.pt:46
-msgid "Billing informations"
-msgstr ""
-
-#: t/skins/personalize_form.pt:79
-msgid "Phone"
-msgstr ""
-
 #: t/skins/personalize_form.pt:88
 msgid "Change"
 msgstr ""
@@ -427,39 +534,35 @@ msgstr ""
 msgid "Add"
 msgstr ""
 
-#: t/skins/photoprint_templates_edit_template.pt:142
-msgid "Cancel"
-msgstr ""
-
 #: t/skins/photoprint_templates_edit_template.pt:150
 msgid "Save"
 msgstr ""
 
-#: t/tool.py:109
+#: t/tool.py:119
 msgid "No printing options found at %r"
 msgstr ""
 
-#: t/tool.py:193
+#: t/tool.py:203
 msgid "You must enter a title."
 msgstr ""
 
-#: t/tool.py:197
+#: t/tool.py:207
 msgid ""
 "You must enter an integer number\n"
 "for the maximum number of copies."
 msgstr ""
 
-#: t/tool.py:199
+#: t/tool.py:209
 msgid ""
 "You must enter a positive value\n"
 "for the maximum number of copies."
 msgstr ""
 
-#: t/tool.py:203
+#: t/tool.py:213
 msgid "You must enter a numeric value for the price."
 msgstr ""
 
-#: t/tool.py:208
+#: t/tool.py:218
 msgid "You must enter a numeric value for the VAT rate."
 msgstr ""
 
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index 2246a9bffe8d35fed34dfd314503917f013b8bdf..3f692d0eb9b2b813809f231750e2c7f6502d1bcd 100644
GIT binary patch
delta 5187
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
L-`G>~aW(%1NQACN

delta 3165
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
Yu24HY>ofb`tYrH{_9@@hoC9J10qSE!3IG5A

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index 31b0546..3fc5946 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Fri Oct  4 21:36:58 2013\n"
-"PO-Revision-Date: 2013-10-03 17:55+0200\n"
+"POT-Creation-Date: Mon Sep  1 20:58:12 2014\n"
+"PO-Revision-Date: 2014-09-01 21:00+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -16,7 +16,7 @@ msgstr ""
 "Domain: plinn\n"
 "X-Is-Fallback-For: fr-fr, fr-be fr-ca fr-lu fr-mc fr-ch\n"
 
-#: t/price.py:72
+#: t/price.py:82
 msgid "${i}.${d}"
 msgstr "${i},${d}"
 
@@ -80,6 +80,148 @@ msgstr "Veuillez entrer un numéro de téléphone."
 msgid "Please accept general conditions of sales."
 msgstr "Veuillez accepter les conditions générales des ventes."
 
+#: t/skins/customer_join_template.pt:11
+msgid "New customer account"
+msgstr "Nouveau compte client"
+
+#: t/skins/customer_join_template.pt:17
+msgid "Customer informations"
+msgstr "Informations client"
+
+#: t/skins/customer_join_template.pt:21
+msgid "First name"
+msgstr "Prénom"
+
+#: t/skins/customer_join_template.pt:27
+msgid "Last name"
+msgstr "Nom"
+
+#: t/skins/customer_join_template.pt:33
+msgid "Email Address"
+msgstr "E-mail"
+
+#: t/skins/customer_join_template.pt:40
+msgid "Member ID"
+msgstr "Login"
+
+#: t/skins/customer_join_template.pt:48 t/skins/customer_login_form.pt:45
+msgid "Password"
+msgstr "Mot de passe"
+
+#: t/skins/customer_join_template.pt:54
+msgid "Password (confirm)"
+msgstr "Mot de passe (confirmation)"
+
+#: t/skins/customer_join_template.pt:60
+msgid "Mail Password?"
+msgstr "Envoyer le mot de passe ?"
+
+#: t/skins/customer_join_template.pt:64
+msgid "Check this box to have the password mailed."
+msgstr "Cochez cette case afin que votre mot de passe vous soit envoyé par mail."
+
+#: t/skins/customer_join_template.pt:102 t/skins/personalize_form.pt:46
+msgid "Billing informations"
+msgstr "Informations de facturation"
+
+#: t/skins/customer_join_template.pt:106 t/skins/order_view_template.pt:35
+#: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
+msgid "Address"
+msgstr "Adresse"
+
+#: t/skins/customer_join_template.pt:113 t/skins/order_view_template.pt:39
+#: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
+msgid "City"
+msgstr "Ville"
+
+#: t/skins/customer_join_template.pt:119 t/skins/order_view_template.pt:43
+#: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
+msgid "Zip code"
+msgstr "Code postal"
+
+#: t/skins/customer_join_template.pt:125 t/skins/order_view_template.pt:47
+#: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
+msgid "Country"
+msgstr "Pays"
+
+#: t/skins/customer_join_template.pt:135 t/skins/personalize_form.pt:79
+msgid "Phone"
+msgstr "Téléphone"
+
+#: t/skins/customer_join_template.pt:144
+msgid "I accept general conditions of sales"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:152
+msgid "Register"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:153
+#: t/skins/photoprint_templates_edit_template.pt:142
+msgid "Cancel"
+msgstr "Annuler"
+
+#: t/skins/customer_login_form.pt:16
+msgid "You already have an account?"
+msgstr "Vous avez déjà un compte ?"
+
+#: t/skins/customer_login_form.pt:17
+msgid "Please login to continue"
+msgstr "Veuillez vous authentifier pour continuer."
+
+#: t/skins/customer_login_form.pt:20
+msgid "New customer?"
+msgstr "Nouveau client ?"
+
+#: t/skins/customer_login_form.pt:21
+msgid "Welcome!<br /> Please create an account to order."
+msgstr "Bienvenue !<br/> Veuillez ouvrir un compte pour commander."
+
+#. Default: "Login"
+#: t/skins/customer_login_form.pt:38
+msgid "user_name"
+msgstr "Login"
+
+#: t/skins/customer_login_form.pt:55
+msgid "Remember my name."
+msgstr "Se souvenir de mon login."
+
+#. Default: "Login"
+#: t/skins/customer_login_form.pt:63
+msgid " Login "
+msgstr " Connexion "
+
+#: t/skins/customer_login_form.pt:73
+msgid "Open new account >>"
+msgstr "Ouvrir un nouveau compte >>"
+
+#: t/skins/customer_login_form.pt:81
+msgid "Forgot your password?"
+msgstr "Mot de passe oublié ?"
+
+#: t/skins/customer_login_form.pt:87
+msgid ""
+"Having trouble logging in? Make sure to enable cookies in your web browser."
+msgstr ""
+"Vous rencontrez des difficultés pour la connexion ? Vérifiez que votre "
+"navigateur accepte les cookies."
+
+#: t/skins/customer_login_form.pt:90
+msgid "Don't forget to logout or exit your browser when you're done."
+msgstr ""
+"N'oubliez pas de vous déconnecter ou de fermer votre navigateur à la fin de "
+"la session."
+
+#: t/skins/customer_login_form.pt:94
+msgid ""
+"Setting the 'Remember my name' option will set a cookie with your username, "
+"so that when you next log in, your user name will already be filled in for "
+"you."
+msgstr ""
+"L'option « Se souvenir de mon login » permet de le sauvegarder dans un "
+"cookie : vous n’aurez pas à le saisir de nouveau lors de votre prochaine "
+"visite."
+
 #: t/skins/my_orders.py:17 t/skins/order_list.py:14
 #: t/skins/order_view_template.pt:181
 msgid "Date"
@@ -263,26 +405,6 @@ msgstr "Commande N° ${order_number}"
 msgid "Billing"
 msgstr "Facturation"
 
-#: t/skins/order_view_template.pt:35 t/skins/order_view_template.pt:60
-#: t/skins/personalize_form.pt:50
-msgid "Address"
-msgstr "Adresse"
-
-#: t/skins/order_view_template.pt:39 t/skins/order_view_template.pt:64
-#: t/skins/personalize_form.pt:57
-msgid "City"
-msgstr "Ville"
-
-#: t/skins/order_view_template.pt:43 t/skins/order_view_template.pt:68
-#: t/skins/personalize_form.pt:63
-msgid "Zip code"
-msgstr "Code postal"
-
-#: t/skins/order_view_template.pt:47 t/skins/order_view_template.pt:72
-#: t/skins/personalize_form.pt:69
-msgid "Country"
-msgstr "Pays"
-
 #: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:133
 msgid "Shipping"
 msgstr "Livraison"
@@ -382,14 +504,6 @@ msgstr "Prénom"
 msgid "Email address"
 msgstr "Adresse e-mail"
 
-#: t/skins/personalize_form.pt:46
-msgid "Billing informations"
-msgstr "Informations de facturation"
-
-#: t/skins/personalize_form.pt:79
-msgid "Phone"
-msgstr "Téléphone"
-
 #: t/skins/personalize_form.pt:88
 msgid "Change"
 msgstr "Modifier"
@@ -468,23 +582,19 @@ msgstr "La valeur 0 signifie illimité"
 msgid "Add"
 msgstr "Ajouter"
 
-#: t/skins/photoprint_templates_edit_template.pt:142
-msgid "Cancel"
-msgstr "Annuler"
-
 #: t/skins/photoprint_templates_edit_template.pt:150
 msgid "Save"
 msgstr "Enregistrer"
 
-#: t/tool.py:109
+#: t/tool.py:119
 msgid "No printing options found at %r"
 msgstr "Aucune option d'impression trouvée sur %r"
 
-#: t/tool.py:193
+#: t/tool.py:203
 msgid "You must enter a title."
 msgstr "Vous devez saisir un titre."
 
-#: t/tool.py:197
+#: t/tool.py:207
 msgid ""
 "You must enter an integer number\n"
 "for the maximum number of copies."
@@ -492,7 +602,7 @@ msgstr ""
 "Vous devez saisir un nombre entier\n"
 "pour le nombre maxi de copies."
 
-#: t/tool.py:199
+#: t/tool.py:209
 msgid ""
 "You must enter a positive value\n"
 "for the maximum number of copies."
@@ -500,11 +610,11 @@ msgstr ""
 "Vous devez saisir une valeur positive\n"
 "pour le nombre maxi de copies."
 
-#: t/tool.py:203
+#: t/tool.py:213
 msgid "You must enter a numeric value for the price."
 msgstr "Vous devez saisir une valeur numérique pour le prix."
 
-#: t/tool.py:208
+#: t/tool.py:218
 msgid "You must enter a numeric value for the VAT rate."
 msgstr "Vous devez saisir une valeur numérique pour la TVA (pourcentage)."
 
diff --git a/locales/photoprint.pot b/locales/photoprint.pot
index 2e1b21d..ce8cb2e 100644
--- a/locales/photoprint.pot
+++ b/locales/photoprint.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Meaningless\n"
-"POT-Creation-Date: Fri Oct  4 21:36:58 2013\n"
+"POT-Creation-Date: Mon Sep  1 20:58:12 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"
@@ -23,7 +23,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Generated-By: zope/app/locales/extract.py\n"
 
-#: t/price.py:72
+#: t/price.py:82
 msgid "${i}.${d}"
 msgstr ""
 
@@ -83,6 +83,148 @@ msgstr ""
 msgid "Please accept general conditions of sales."
 msgstr ""
 
+#: t/skins/customer_join_template.pt:11
+msgid "New customer account"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:17
+msgid "Customer informations"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:21
+msgid "First name"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:27
+msgid "Last name"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:33
+msgid "Email Address"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:40
+msgid "Member ID"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:48
+#: t/skins/customer_login_form.pt:45
+msgid "Password"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:54
+msgid "Password (confirm)"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:60
+msgid "Mail Password?"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:64
+msgid "Check this box to have the password mailed."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:102
+#: t/skins/personalize_form.pt:46
+msgid "Billing informations"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:106
+#: t/skins/order_view_template.pt:35
+#: t/skins/order_view_template.pt:60
+#: t/skins/personalize_form.pt:50
+msgid "Address"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:113
+#: t/skins/order_view_template.pt:39
+#: t/skins/order_view_template.pt:64
+#: t/skins/personalize_form.pt:57
+msgid "City"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:119
+#: t/skins/order_view_template.pt:43
+#: t/skins/order_view_template.pt:68
+#: t/skins/personalize_form.pt:63
+msgid "Zip code"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:125
+#: t/skins/order_view_template.pt:47
+#: t/skins/order_view_template.pt:72
+#: t/skins/personalize_form.pt:69
+msgid "Country"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:135
+#: t/skins/personalize_form.pt:79
+msgid "Phone"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:144
+msgid "I accept general conditions of sales"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:152
+msgid "Register"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:153
+#: t/skins/photoprint_templates_edit_template.pt:142
+msgid "Cancel"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:16
+msgid "You already have an account?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:17
+msgid "Please login to continue"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:20
+msgid "New customer?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:21
+msgid "Welcome!<br /> Please create an account to order."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:38
+#. Default: "Login"
+msgid "user_name"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:55
+msgid "Remember my name."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:63
+#. Default: "Login"
+msgid " Login "
+msgstr ""
+
+#: t/skins/customer_login_form.pt:73
+msgid "Open new account >>"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:81
+msgid "Forgot your password?"
+msgstr ""
+
+#: t/skins/customer_login_form.pt:87
+msgid "Having trouble logging in? Make sure to enable cookies in your web browser."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:90
+msgid "Don't forget to logout or exit your browser when you're done."
+msgstr ""
+
+#: t/skins/customer_login_form.pt:94
+msgid "Setting the 'Remember my name' option will set a cookie with your username, so that when you next log in, your user name will already be filled in for you."
+msgstr ""
+
 #: t/skins/my_orders.py:17
 #: t/skins/order_list.py:14
 #: t/skins/order_view_template.pt:181
@@ -270,30 +412,6 @@ msgstr ""
 msgid "Billing"
 msgstr ""
 
-#: t/skins/order_view_template.pt:35
-#: t/skins/order_view_template.pt:60
-#: t/skins/personalize_form.pt:50
-msgid "Address"
-msgstr ""
-
-#: t/skins/order_view_template.pt:39
-#: t/skins/order_view_template.pt:64
-#: t/skins/personalize_form.pt:57
-msgid "City"
-msgstr ""
-
-#: t/skins/order_view_template.pt:43
-#: t/skins/order_view_template.pt:68
-#: t/skins/personalize_form.pt:63
-msgid "Zip code"
-msgstr ""
-
-#: t/skins/order_view_template.pt:47
-#: t/skins/order_view_template.pt:72
-#: t/skins/personalize_form.pt:69
-msgid "Country"
-msgstr ""
-
 #: t/skins/order_view_template.pt:53
 #: t/skins/order_view_template.pt:133
 msgid "Shipping"
@@ -378,14 +496,6 @@ msgstr ""
 msgid "Email address"
 msgstr ""
 
-#: t/skins/personalize_form.pt:46
-msgid "Billing informations"
-msgstr ""
-
-#: t/skins/personalize_form.pt:79
-msgid "Phone"
-msgstr ""
-
 #: t/skins/personalize_form.pt:88
 msgid "Change"
 msgstr ""
@@ -459,39 +569,35 @@ msgstr ""
 msgid "Add"
 msgstr ""
 
-#: t/skins/photoprint_templates_edit_template.pt:142
-msgid "Cancel"
-msgstr ""
-
 #: t/skins/photoprint_templates_edit_template.pt:150
 msgid "Save"
 msgstr ""
 
-#: t/tool.py:109
+#: t/tool.py:119
 msgid "No printing options found at %r"
 msgstr ""
 
-#: t/tool.py:193
+#: t/tool.py:203
 msgid "You must enter a title."
 msgstr ""
 
-#: t/tool.py:197
+#: t/tool.py:207
 msgid ""
 "You must enter an integer number\n"
 "for the maximum number of copies."
 msgstr ""
 
-#: t/tool.py:199
+#: t/tool.py:209
 msgid ""
 "You must enter a positive value\n"
 "for the maximum number of copies."
 msgstr ""
 
-#: t/tool.py:203
+#: t/tool.py:213
 msgid "You must enter a numeric value for the price."
 msgstr ""
 
-#: t/tool.py:208
+#: t/tool.py:218
 msgid "You must enter a numeric value for the VAT rate."
 msgstr ""
 
diff --git a/skins/customer_join_template.pt b/skins/customer_join_template.pt
index acbf54c..3693f7b 100644
--- a/skins/customer_join_template.pt
+++ b/skins/customer_join_template.pt
@@ -2,7 +2,7 @@
   <head>
     <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
   </head>
-  <body metal:fill-slot="main_no_tabs" i18n:domain="plinn"
+  <body metal:fill-slot="main_no_tabs" i18n:domain="photoprint"
         tal:omit-tag="">
     <div tal:condition="python:options.get('came_from', '').endswith('/my_cart')"
          tal:define="step_authentication python:True" tal:omit-tag="">
-- 
2.20.1


From c8d48896dcb3175772534fcb652c0356acbb4223 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 21:51:08 +0200
Subject: [PATCH 07/16] traductions++

---
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 13187 -> 13327 bytes
 locales/fr/LC_MESSAGES/photoprint.po |   6 +++---
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index 3f692d0eb9b2b813809f231750e2c7f6502d1bcd..4556162c1db81ee9dcdcd0af0122800151b8e5d9 100644
GIT binary patch
delta 3448
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

delta 3388
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

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index 3fc5946..4854769 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
 "POT-Creation-Date: Mon Sep  1 20:58:12 2014\n"
-"PO-Revision-Date: 2014-09-01 21:00+0200\n"
+"PO-Revision-Date: 2014-09-01 21:22+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -150,11 +150,11 @@ msgstr "Téléphone"
 
 #: t/skins/customer_join_template.pt:144
 msgid "I accept general conditions of sales"
-msgstr ""
+msgstr "J'accepte les conditions générales des ventes"
 
 #: t/skins/customer_join_template.pt:152
 msgid "Register"
-msgstr ""
+msgstr "S'enregistrer"
 
 #: t/skins/customer_join_template.pt:153
 #: t/skins/photoprint_templates_edit_template.pt:142
-- 
2.20.1


From 3c2f6847f02b7dc0b60fa586837e16635cef32cc Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 23:09:14 +0200
Subject: [PATCH 08/16] Remise en route des inscriptions client.

---
 skins/customer_join_form.py     |  6 +++---
 skins/customer_join_template.pt |  6 +++---
 skins/validatePrivateAccess.py  | 11 ++++++-----
 utils.py                        | 35 +++++++++++++++++++++++++++++++++
 4 files changed, 47 insertions(+), 11 deletions(-)

diff --git a/skins/customer_join_form.py b/skins/customer_join_form.py
index 13422ea..f5f0f7c 100755
--- a/skins/customer_join_form.py
+++ b/skins/customer_join_form.py
@@ -40,9 +40,9 @@ continuationFields = [
 	, 'password'
 	, 'confirm'
 	, 'send_password'
-	, 'wedding_id'
-	, 'wedding_password'
-	, 'wedding_password_confirm'
+	, 'collection_id'
+	, 'collection_password'
+	, 'collection_password_confirm'
 	, 'billing_address'
 	, 'billing_city'
 	, 'billing_zipcode'
diff --git a/skins/customer_join_template.pt b/skins/customer_join_template.pt
index 3693f7b..503c825 100644
--- a/skins/customer_join_template.pt
+++ b/skins/customer_join_template.pt
@@ -79,19 +79,19 @@
         <tr>
           <th>Identifiant collection privée</th>
           <td>
-            <input type="text" name="wedding_id" tal:attributes="value options/wedding_id"/>
+            <input type="text" name="collection_id" tal:attributes="value options/collection_id"/>
           </td>
         </tr>
         <tr>
           <th>Mot de passe associé</th>
           <td>
-            <input type="password" name="wedding_password" tal:attributes="value options/wedding_password" />
+            <input type="password" name="collection_password" tal:attributes="value options/collection_password" />
           </td>
         </tr>
         <tr>
           <th>Confirmation du mot de passe</th>
           <td>
-            <input type="password" name="wedding_password_confirm" tal:attributes="value options/wedding_password_confirm" />
+            <input type="password" name="collection_password_confirm" tal:attributes="value options/collection_password_confirm" />
           </td>
         </tr>
         <tr>
diff --git a/skins/validatePrivateAccess.py b/skins/validatePrivateAccess.py
index 19e3a7d..7fc6530 100755
--- a/skins/validatePrivateAccess.py
+++ b/skins/validatePrivateAccess.py
@@ -1,15 +1,16 @@
 ##parameters=**kw
+from Products.photoprint.utils import grantAccess
 kg = lambda name : kw.get(name,'').strip()
 
-weddingId = kg('wedding_id')
-if not weddingId :
+collectionId = kg('collection_id')
+if not collectionId :
 	return True
 
 else :
-	password = kg('wedding_password')
-	confirm = kg('wedding_password_confirm')
+	password = kg('collection_password')
+	confirm = kg('collection_password_confirm')
 	memberId = kg('member_id')
-	msg = context.grantAccess(context, weddingId, password, confirm, memberId)
+	msg = grantAccess(collectionId, password, confirm, memberId)
 	if msg :
 		return context.setStatus(False, msg)
 	else :
diff --git a/utils.py b/utils.py
index 0982bc7..9f4706f 100755
--- a/utils.py
+++ b/utils.py
@@ -19,6 +19,10 @@ from AccessControl import ModuleSecurityInfo
 from zope.i18n import translate as i18ntranslate
 from zope.i18nmessageid import MessageFactory
 from zope.globalrequest import getRequest
+from Products.CMFCore.utils import getUtilityByInterfaceName
+from Products.Plinn.utils import _sudo
+import transaction
+
 
 security = ModuleSecurityInfo('Products.photoprint.utils')
 
@@ -29,3 +33,34 @@ def translate(msgid, mapping=None, default=None) :
 
 security.declarePublic('Message')
 Message = _ = MessageFactory('photoprint')
+
+security.declarePublic('grantAccess')
+def grantAccess(collectionId, password, confirm, memberId) :
+    utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+    mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
+    portal = utool.getPortalObject()
+    
+    data = portal.private_collections.data
+    lines = filter(None, [l.strip() for l in data.split('\n')])
+    assert len(lines) % 3 == 0
+    collecInfos = {}
+    for i in xrange(0, len(lines), 3) :
+        collecInfos[lines[i]] = {'pw' : lines[i+1],
+                                 'path' : lines[i+2]}
+
+    if not collecInfos.has_key(collectionId) :
+        transaction.abort()
+        return _('Wrong private collection identifier.')
+    elif password != confirm :
+        transaction.abort()
+        return _("Collection's password does not match confirmation.")
+    else :
+        if collecInfos[collectionId]['pw'] != password :
+            transaction.abort()
+            return _("Wrong collection's password.")
+        else :
+            collec = portal.unrestrictedTraverse(collecInfos[collectionId]['path'])
+            def do() :
+                mtool.setLocalRoles(collec, [memberId], 'Reader')
+            
+            _sudo(do)
-- 
2.20.1


From 46df770d58b2dbf154a3da4d62d82ae30d39bc86 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Mon, 1 Sep 2014 23:43:31 +0200
Subject: [PATCH 09/16] =?utf8?q?D=C3=A9sactivation=20d'options=20obsol?=
 =?utf8?q?=C3=A8tes.=20Mise=20en=20place=20du=20script=20d'annulation=20d'?=
 =?utf8?q?un=20paiement=20PayPal.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 locales/en/LC_MESSAGES/photoprint.po |  48 ++++++++++----------
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 13327 -> 13368 bytes
 locales/fr/LC_MESSAGES/photoprint.po |  65 ++++++++++++++++-----------
 locales/photoprint.pot               |  50 ++++++++++-----------
 skins/customer_add_control.py        |   4 +-
 skins/customer_join_form.py          |   4 +-
 skins/customer_join_template.pt      |  16 -------
 skins/photoprint_order_cancel.py     |   6 +++
 8 files changed, 96 insertions(+), 97 deletions(-)
 create mode 100644 skins/photoprint_order_cancel.py

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index ddc0a0d..f0d7834 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -56,10 +56,6 @@ msgstr ""
 msgid "Please enter a phone."
 msgstr ""
 
-#: t/skins/customer_add_control.py:28
-msgid "Please accept general conditions of sales."
-msgstr ""
-
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr ""
@@ -92,51 +88,39 @@ msgstr ""
 msgid "Password (confirm)"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:60
-msgid "Mail Password?"
-msgstr ""
-
-#: t/skins/customer_join_template.pt:64
-msgid "Check this box to have the password mailed."
-msgstr ""
-
-#: t/skins/customer_join_template.pt:102 t/skins/personalize_form.pt:46
+#: t/skins/customer_join_template.pt:93 t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:106 t/skins/order_view_template.pt:35
+#: t/skins/customer_join_template.pt:97 t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:113 t/skins/order_view_template.pt:39
+#: t/skins/customer_join_template.pt:104 t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
 msgid "City"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:119 t/skins/order_view_template.pt:43
+#: t/skins/customer_join_template.pt:110 t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:125 t/skins/order_view_template.pt:47
+#: t/skins/customer_join_template.pt:116 t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:135 t/skins/personalize_form.pt:79
+#: t/skins/customer_join_template.pt:126 t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:144
-msgid "I accept general conditions of sales"
-msgstr ""
-
-#: t/skins/customer_join_template.pt:152
+#: t/skins/customer_join_template.pt:136
 msgid "Register"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:153
+#: t/skins/customer_join_template.pt:137
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr ""
@@ -463,6 +447,10 @@ msgstr ""
 msgid "Change"
 msgstr ""
 
+#: t/skins/photoprint_order_cancel.py:5
+msgid "Your payment has been canceled. You can retry later."
+msgstr ""
+
 #: t/skins/photoprint_order_confirm.py:7
 msgid "Your payment has been accepted by PayPal."
 msgstr ""
@@ -566,6 +554,18 @@ msgstr ""
 msgid "You must enter a numeric value for the VAT rate."
 msgstr ""
 
+#: t/utils.py:53
+msgid "Wrong private collection identifier."
+msgstr ""
+
+#: t/utils.py:56
+msgid "Collection's password does not match confirmation."
+msgstr ""
+
+#: t/utils.py:60
+msgid "Wrong collection's password."
+msgstr ""
+
 # from photoprint-manual.pot
 msgid "Your payment is complete."
 msgstr ""
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index 4556162c1db81ee9dcdcd0af0122800151b8e5d9..b480a57512ef20573544d7d2d5b6ff385ff00de1 100644
GIT binary patch
delta 3519
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
Wt=YHA3DF)7$2N@^9*>M@^ZW%2yRE|j

delta 3539
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

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index 4854769..e2a0659 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Mon Sep  1 20:58:12 2014\n"
-"PO-Revision-Date: 2014-09-01 21:22+0200\n"
+"POT-Creation-Date: Mon Sep  1 23:37:28 2014\n"
+"PO-Revision-Date: 2014-09-01 23:39+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -76,10 +76,6 @@ msgstr "Veuillez entrer un pays."
 msgid "Please enter a phone."
 msgstr "Veuillez entrer un numéro de téléphone."
 
-#: t/skins/customer_add_control.py:28
-msgid "Please accept general conditions of sales."
-msgstr "Veuillez accepter les conditions générales des ventes."
-
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr "Nouveau compte client"
@@ -112,51 +108,39 @@ msgstr "Mot de passe"
 msgid "Password (confirm)"
 msgstr "Mot de passe (confirmation)"
 
-#: t/skins/customer_join_template.pt:60
-msgid "Mail Password?"
-msgstr "Envoyer le mot de passe ?"
-
-#: t/skins/customer_join_template.pt:64
-msgid "Check this box to have the password mailed."
-msgstr "Cochez cette case afin que votre mot de passe vous soit envoyé par mail."
-
-#: t/skins/customer_join_template.pt:102 t/skins/personalize_form.pt:46
+#: t/skins/customer_join_template.pt:93 t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr "Informations de facturation"
 
-#: t/skins/customer_join_template.pt:106 t/skins/order_view_template.pt:35
+#: t/skins/customer_join_template.pt:97 t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr "Adresse"
 
-#: t/skins/customer_join_template.pt:113 t/skins/order_view_template.pt:39
+#: t/skins/customer_join_template.pt:104 t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
 msgid "City"
 msgstr "Ville"
 
-#: t/skins/customer_join_template.pt:119 t/skins/order_view_template.pt:43
+#: t/skins/customer_join_template.pt:110 t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr "Code postal"
 
-#: t/skins/customer_join_template.pt:125 t/skins/order_view_template.pt:47
+#: t/skins/customer_join_template.pt:116 t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr "Pays"
 
-#: t/skins/customer_join_template.pt:135 t/skins/personalize_form.pt:79
+#: t/skins/customer_join_template.pt:126 t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr "Téléphone"
 
-#: t/skins/customer_join_template.pt:144
-msgid "I accept general conditions of sales"
-msgstr "J'accepte les conditions générales des ventes"
-
-#: t/skins/customer_join_template.pt:152
+#: t/skins/customer_join_template.pt:136
 msgid "Register"
 msgstr "S'enregistrer"
 
-#: t/skins/customer_join_template.pt:153
+#: t/skins/customer_join_template.pt:137
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr "Annuler"
@@ -508,6 +492,10 @@ msgstr "Adresse e-mail"
 msgid "Change"
 msgstr "Modifier"
 
+#: t/skins/photoprint_order_cancel.py:5
+msgid "Your payment has been canceled. You can retry later."
+msgstr "Votre paiement a été annulé. Vous pouvez réessayer plus tard."
+
 #: t/skins/photoprint_order_confirm.py:7
 msgid "Your payment has been accepted by PayPal."
 msgstr "Votre paiement a été accepté par PayPal."
@@ -618,6 +606,18 @@ msgstr "Vous devez saisir une valeur numérique pour le prix."
 msgid "You must enter a numeric value for the VAT rate."
 msgstr "Vous devez saisir une valeur numérique pour la TVA (pourcentage)."
 
+#: t/utils.py:53
+msgid "Wrong private collection identifier."
+msgstr "Identifiant de collection privée incorrect."
+
+#: t/utils.py:56
+msgid "Collection's password does not match confirmation."
+msgstr "Le mot de passe de collection et sa confirmation sont différents."
+
+#: t/utils.py:60
+msgid "Wrong collection's password."
+msgstr "Mot de passe de collection incorrect."
+
 msgid "Your payment is complete."
 msgstr "Votre paiement a été accepté."
 
@@ -705,6 +705,19 @@ msgstr "[%s] expédition de la commande %s"
 msgid "paypal_pay"
 msgstr "Paiement PayPal"
 
+#~ msgid "Please accept general conditions of sales."
+#~ msgstr "Veuillez accepter les conditions générales des ventes."
+
+#~ msgid "Mail Password?"
+#~ msgstr "Envoyer le mot de passe ?"
+
+#~ msgid "Check this box to have the password mailed."
+#~ msgstr ""
+#~ "Cochez cette case afin que votre mot de passe vous soit envoyé par mail."
+
+#~ msgid "I accept general conditions of sales"
+#~ msgstr "J'accepte les conditions générales des ventes"
+
 #~ msgid "Use one of these button to pay:"
 #~ msgstr "Utilisez un de ces bouton pour payer :"
 
diff --git a/locales/photoprint.pot b/locales/photoprint.pot
index ce8cb2e..9965dd2 100644
--- a/locales/photoprint.pot
+++ b/locales/photoprint.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Meaningless\n"
-"POT-Creation-Date: Mon Sep  1 20:58:12 2014\n"
+"POT-Creation-Date: Mon Sep  1 23:37:28 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"
@@ -79,10 +79,6 @@ msgstr ""
 msgid "Please enter a phone."
 msgstr ""
 
-#: t/skins/customer_add_control.py:28
-msgid "Please accept general conditions of sales."
-msgstr ""
-
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr ""
@@ -116,61 +112,49 @@ msgstr ""
 msgid "Password (confirm)"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:60
-msgid "Mail Password?"
-msgstr ""
-
-#: t/skins/customer_join_template.pt:64
-msgid "Check this box to have the password mailed."
-msgstr ""
-
-#: t/skins/customer_join_template.pt:102
+#: t/skins/customer_join_template.pt:93
 #: t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:106
+#: t/skins/customer_join_template.pt:97
 #: t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60
 #: t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:113
+#: t/skins/customer_join_template.pt:104
 #: t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64
 #: t/skins/personalize_form.pt:57
 msgid "City"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:119
+#: t/skins/customer_join_template.pt:110
 #: t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68
 #: t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:125
+#: t/skins/customer_join_template.pt:116
 #: t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72
 #: t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:135
+#: t/skins/customer_join_template.pt:126
 #: t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:144
-msgid "I accept general conditions of sales"
-msgstr ""
-
-#: t/skins/customer_join_template.pt:152
+#: t/skins/customer_join_template.pt:136
 msgid "Register"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:153
+#: t/skins/customer_join_template.pt:137
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr ""
@@ -500,6 +484,10 @@ msgstr ""
 msgid "Change"
 msgstr ""
 
+#: t/skins/photoprint_order_cancel.py:5
+msgid "Your payment has been canceled. You can retry later."
+msgstr ""
+
 #: t/skins/photoprint_order_confirm.py:7
 msgid "Your payment has been accepted by PayPal."
 msgstr ""
@@ -601,6 +589,18 @@ msgstr ""
 msgid "You must enter a numeric value for the VAT rate."
 msgstr ""
 
+#: t/utils.py:53
+msgid "Wrong private collection identifier."
+msgstr ""
+
+#: t/utils.py:56
+msgid "Collection's password does not match confirmation."
+msgstr ""
+
+#: t/utils.py:60
+msgid "Wrong collection's password."
+msgstr ""
+
 # from photoprint-manual.pot
 
 msgid "Your payment is complete."
diff --git a/skins/customer_add_control.py b/skins/customer_add_control.py
index 8280dbc..00b4de3 100755
--- a/skins/customer_add_control.py
+++ b/skins/customer_add_control.py
@@ -25,7 +25,6 @@ mandatoryFields = [
 	, ('billing_zipcode', _('Please enter zip code.'))
 	, ('country', _('Please enter a country.'))
 	, ('phone', _('Please enter a phone.'))
-	, ('accept_gcs', _('Please accept general conditions of sales.'))
 	]
 
 for name, failMessage in mandatoryFields :
@@ -45,8 +44,7 @@ try:
 								,'billing_city'     : kg('billing_city')
 								,'billing_zipcode'	: kg('billing_zipcode')
 								,'country'			: kg('country')
-								,'phone'			: kg('phone')
-								,'accept_gcs'		: kg('accep_gcs')} )
+								,'phone'			: kg('phone')} )
 except ValueError, errmsg:
 	return context.setStatus(False, _(errmsg))
 
diff --git a/skins/customer_join_form.py b/skins/customer_join_form.py
index f5f0f7c..3f5beac 100755
--- a/skins/customer_join_form.py
+++ b/skins/customer_join_form.py
@@ -39,7 +39,6 @@ continuationFields = [
 	, 'member_id'
 	, 'password'
 	, 'confirm'
-	, 'send_password'
 	, 'collection_id'
 	, 'collection_password'
 	, 'collection_password_confirm'
@@ -47,8 +46,7 @@ continuationFields = [
 	, 'billing_city'
 	, 'billing_zipcode'
 	, 'country'
-	, 'phone'
-	, 'accept_gcs']
+	, 'phone']
 
 
 for name in continuationFields :
diff --git a/skins/customer_join_template.pt b/skins/customer_join_template.pt
index 503c825..ba4878a 100644
--- a/skins/customer_join_template.pt
+++ b/skins/customer_join_template.pt
@@ -56,15 +56,6 @@
               <input type="password" name="confirm" size="30" tal:attributes="value options/confirm" />
             </td>
           </tr>
-          <tr>
-            <th i18n:translate="">Mail Password?</th>
-            <td>
-              <input type="checkbox" name="send_password" id="cb_send_password"
-                     tal:attributes="checked options/send_password" />
-              <em><label for="cb_send_password" i18n:translate="">Check this box to
-                have the password mailed.</label></em>
-            </td>
-          </tr>
         </tal:case>
         <tr>
           <td colspan="2"><hr/></td>
@@ -137,13 +128,6 @@
             <input type="text" name="phone" tal:attributes="value options/phone"/>
           </td>
         </tr>
-        <tr>
-          <th><br/></th>
-          <td>
-            <input type="checkbox" name="accept_gcs" tal:attributes="checked python:options['accept_gcs']" />
-            <a tal:attributes="href string:$portal_url/cgv" target="_blank" i18n:translate="">I accept general conditions of sales</a>
-          </td>
-        </tr>
         <tr>
           <td>&nbsp;</td>
           <td>
diff --git a/skins/photoprint_order_cancel.py b/skins/photoprint_order_cancel.py
new file mode 100644
index 0000000..d5b5f81
--- /dev/null
+++ b/skins/photoprint_order_cancel.py
@@ -0,0 +1,6 @@
+##parameters=token=None
+from Products.photoprint.utils import Message as _
+if token :
+    context.ppCancel(token)
+context.setStatus(False, _('Your payment has been canceled. You can retry later.'))
+return context.order_view()
\ No newline at end of file
-- 
2.20.1


From 8044c73af157c724cd601bfb5ce90c41ca9cbca0 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Wed, 3 Sep 2014 23:23:50 +0200
Subject: [PATCH 10/16] Prise en charge du mode d'enregistrement anonyme avec
 mot de passe.

---
 locales/en/LC_MESSAGES/photoprint.po |  22 +++++++++++++---------
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 13368 -> 13531 bytes
 locales/fr/LC_MESSAGES/photoprint.po |  24 ++++++++++++++----------
 locales/photoprint.pot               |  24 ++++++++++++++----------
 skins/customer_add_control.py        |  10 +++++++++-
 5 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index f0d7834..10842db 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -20,42 +20,46 @@ msgstr ""
 msgid "Log in"
 msgstr ""
 
-#: t/skins/customer_add_control.py:19
+#: t/skins/customer_add_control.py:21
 msgid "Please enter a given name."
 msgstr ""
 
-#: t/skins/customer_add_control.py:20
+#: t/skins/customer_add_control.py:22
 msgid "Please enter a name."
 msgstr ""
 
-#: t/skins/customer_add_control.py:21
+#: t/skins/customer_add_control.py:23
 msgid "Please enter an email."
 msgstr ""
 
-#: t/skins/customer_add_control.py:22
+#: t/skins/customer_add_control.py:24
 msgid "Please enter a member id."
 msgstr ""
 
-#: t/skins/customer_add_control.py:23
+#: t/skins/customer_add_control.py:25
 msgid "Please enter a billing address."
 msgstr ""
 
-#: t/skins/customer_add_control.py:24
+#: t/skins/customer_add_control.py:26
 msgid "Please enter a city."
 msgstr ""
 
-#: t/skins/customer_add_control.py:25
+#: t/skins/customer_add_control.py:27
 msgid "Please enter zip code."
 msgstr ""
 
-#: t/skins/customer_add_control.py:26
+#: t/skins/customer_add_control.py:28
 msgid "Please enter a country."
 msgstr ""
 
-#: t/skins/customer_add_control.py:27
+#: t/skins/customer_add_control.py:29
 msgid "Please enter a phone."
 msgstr ""
 
+#: t/skins/customer_add_control.py:56
+msgid "Wrong private collection credentials."
+msgstr ""
+
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr ""
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index b480a57512ef20573544d7d2d5b6ff385ff00de1..351787e9922f0fc3473a340d812a242f7d6addd8 100644
GIT binary patch
delta 3556
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

delta 3468
zcmY+_dr($I7{~EPu8M#HN}`Cb3SLkMAw>~WQA;r|h<7qH6+sOxFO;`8yrg)yG$j-#
z{%D#}D|@Z687os~Do3YGZF0=UsnHzEDRb=NsP+B5XZfQYp7Yr~?>T38pWSn~TyeDA
z|3iG(E~C^F$wYLx*?GL*j00tOj9Da(K%FW=AC_PQu0U?FH5iID*ao+t?t2S$-8=XQ
ze&EiZ#a3p1yXY>si5<D%HnzlsShJp(ih4j1hT&w4!fDtQ%P||bV^chd>i7)uXBXW0
zpRhIUUs2BqX`uo6xtK~SCputr9Et;QESBL`WK4F~8OrGNfH>4Z5>XHCh`KJ<ogaoH
zX^%x^XfG;*4X6nn#8~>b02MvpguCE7jHmshYu`n6_%D(&3ybqQO2SOqU9kgBL_K&Z
zY9cF98LDv}cIPjlkMq~iuSx{HC16)f!v3f=oPbJcCGuxg9JIz8F&ejGH>^XFW2cZY
z+6C0}uAyfB4<?5&0n|W~nXM+0-<teuQxtKcEmoigu-08rkNjDHLn40Zyox<&|AiW8
zXMR*i`KWdQYAH%k&#yo|w;Gk9I@HoNB$9u!V23!NnSP2|qc2?h8`STYQA=<Ob>kmc
zhYwKq)zXUw(15x4wrgKSW#T$&K=)9YYRV{;!8U#>dSDtVwOOd$`xy4ZeAH`MiQ1%_
zT>CvtqkR^$@D65RD$^W{<B+~=Cl=sAT!6pfMJy%V-O=B>9i8a}K8`zaIiAN997FHi
zW0k0xZa@uW2X?{_kvGaNp=Npmm9hJ-9oya;NGH_&d8iBw@$_3U6{U72YS)&dQneVB
zqSdGlwjs-H^{DHPIFF<5KjYfxP#L{~>hK1t!`rCLHeptJUNa2S``?C&9@rkW_TBO8
zCT2PAe3;KW-x9m=dt1~d8saQOJ-7(<x=nHIYG(~<LOW3X>_?Jo2QZTU?Q<%6kH12t
z@F5Pvcs_@k!DQ6tnt^)29PEdSP-}Y#m8suRnRtMjaR}?9fySern}qs31G&Vq(chEG
zcq)2uHBP}TScN~M9#GoZOIaCerc0bFQJZWXYKHsV`2$!^JAfK^a;mqvJE1b%1vS8|
zRPwLQHHZ_sa4M=j9reIv7>XNEYrh$_xf)P!#}Q1&>!?h{rFk=Li~VV5;vk%hys35o
zd*cb`-)ZDuYmwQ-d(8?_Yd8m$(ru{U_hL96MLuHo3FhHB)PSP7Nnf-SR7P@886AnU
zL(C?jGW{{{oIZ3nkvG=D{S03nq@ZS=hkC$x<j>~2^SiMF?Zc><okRXCriZtteUY))
z0Mr0yp{}n&t@Un<#E&ovKSS*a{~0P;ldISqZ=zEFCu%@p3|r?@P~Y}++>iZH_gzM1
z<{B2_FRtAu!%KNSYUzqm_g7#vF2fl5xAj!C#=B4>tVPZ6O=Owu3i3<~<rU!-wk*uX
z(O7`hs5L!>L-8IeqXQrHzJw)MNqZlLHlgz@?|(;2Hqc<b|M^q~aKS2k4v(QymrgG}
zEJS5s9x9bp$ctgM7=y<!4o{<I_`UNMYUU47o3mApx9i)ZuFJqE`nSiasDlyihY6^Z
zmZ4sg`N+4(R$v0wIp4(y+9y%>pGIB(Eh@#=UHcAd0HJ*6V=)@F2il=uH+G?-4zrOA
zSuvqqs-jJ$q8Uyhv?Ps1%Q1*xa|i#KC~GQDde~@GMu)k!_J_)3VrH;L{+ChFs8vP~
z+Ef#X<wPGsg>l(a!J0P{Ri7ucFGdkz1j}n{h>b)pv7S)+8_QlQ`2?$LvxsU!`!85F
zbJSYa6T1kdTbpPOq0H<fl<H>*l^2L<L>ZAmsJuqZ4c5GUlR$k1G18sefc=PhL=CZr
zcv<}~AX*XWgf^mfe`8roWi`PP2FrMk`aaC?n!%&q9+kete4<1R%5b7KSo8k1zeN32
zVmdL2m_Ya!bC^xAN$qJuJ6vT6Q9<Y{*H~VsGR8IZ^_uGHJ5jILN@5eynb=0C>?XPq
z@oG@C0k!A05IY+4zluf_p={_KUP!z`3?x)~5PD@65o3uYqK>E{R7yQ;JN72@da5K7
zTZ1+4Q10plm>H~d=QHl)6F81oM?@1Z5|KnIp%Ox51#AC5EOpH{u!u+`1`|UF3#^MN
qZ61h9Iv$=dYC)y1c=ke{ua_@7Cod;AFS~ExO3I!Vf%h}JNBjpARWcg@

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index e2a0659..bb0f5b3 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -1,7 +1,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Mon Sep  1 23:37:28 2014\n"
+"POT-Creation-Date: Wed Sep  3 23:10:26 2014\n"
 "PO-Revision-Date: 2014-09-01 23:39+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
@@ -40,42 +40,46 @@ msgstr "Cliquez sur le bouton pour vous connecter immédiatement."
 msgid "Log in"
 msgstr "Connexion"
 
-#: t/skins/customer_add_control.py:19
+#: t/skins/customer_add_control.py:21
 msgid "Please enter a given name."
 msgstr "Veuillez entrer un prénom."
 
-#: t/skins/customer_add_control.py:20
+#: t/skins/customer_add_control.py:22
 msgid "Please enter a name."
 msgstr "Veuillez entrer un nom."
 
-#: t/skins/customer_add_control.py:21
+#: t/skins/customer_add_control.py:23
 msgid "Please enter an email."
 msgstr "Veuillez entrer un email."
 
-#: t/skins/customer_add_control.py:22
+#: t/skins/customer_add_control.py:24
 msgid "Please enter a member id."
 msgstr "Veuillez entrer un login."
 
-#: t/skins/customer_add_control.py:23
+#: t/skins/customer_add_control.py:25
 msgid "Please enter a billing address."
 msgstr "Veuillez entrer une addresse de facturation."
 
-#: t/skins/customer_add_control.py:24
+#: t/skins/customer_add_control.py:26
 msgid "Please enter a city."
 msgstr "Veuillez entrer une ville."
 
-#: t/skins/customer_add_control.py:25
+#: t/skins/customer_add_control.py:27
 msgid "Please enter zip code."
 msgstr "Veuillez entrer un code postal."
 
-#: t/skins/customer_add_control.py:26
+#: t/skins/customer_add_control.py:28
 msgid "Please enter a country."
 msgstr "Veuillez entrer un pays."
 
-#: t/skins/customer_add_control.py:27
+#: t/skins/customer_add_control.py:29
 msgid "Please enter a phone."
 msgstr "Veuillez entrer un numéro de téléphone."
 
+#: t/skins/customer_add_control.py:56
+msgid "Wrong private collection credentials."
+msgstr "Identifiant ou mot de passe de collection privée incorrect."
+
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr "Nouveau compte client"
diff --git a/locales/photoprint.pot b/locales/photoprint.pot
index 9965dd2..3ade077 100644
--- a/locales/photoprint.pot
+++ b/locales/photoprint.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Meaningless\n"
-"POT-Creation-Date: Mon Sep  1 23:37:28 2014\n"
+"POT-Creation-Date: Wed Sep  3 23:10:26 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"
@@ -43,42 +43,46 @@ msgstr ""
 msgid "Log in"
 msgstr ""
 
-#: t/skins/customer_add_control.py:19
+#: t/skins/customer_add_control.py:21
 msgid "Please enter a given name."
 msgstr ""
 
-#: t/skins/customer_add_control.py:20
+#: t/skins/customer_add_control.py:22
 msgid "Please enter a name."
 msgstr ""
 
-#: t/skins/customer_add_control.py:21
+#: t/skins/customer_add_control.py:23
 msgid "Please enter an email."
 msgstr ""
 
-#: t/skins/customer_add_control.py:22
+#: t/skins/customer_add_control.py:24
 msgid "Please enter a member id."
 msgstr ""
 
-#: t/skins/customer_add_control.py:23
+#: t/skins/customer_add_control.py:25
 msgid "Please enter a billing address."
 msgstr ""
 
-#: t/skins/customer_add_control.py:24
+#: t/skins/customer_add_control.py:26
 msgid "Please enter a city."
 msgstr ""
 
-#: t/skins/customer_add_control.py:25
+#: t/skins/customer_add_control.py:27
 msgid "Please enter zip code."
 msgstr ""
 
-#: t/skins/customer_add_control.py:26
+#: t/skins/customer_add_control.py:28
 msgid "Please enter a country."
 msgstr ""
 
-#: t/skins/customer_add_control.py:27
+#: t/skins/customer_add_control.py:29
 msgid "Please enter a phone."
 msgstr ""
 
+#: t/skins/customer_add_control.py:56
+msgid "Wrong private collection credentials."
+msgstr ""
+
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
 msgstr ""
diff --git a/skins/customer_add_control.py b/skins/customer_add_control.py
index 00b4de3..6efd42b 100755
--- a/skins/customer_add_control.py
+++ b/skins/customer_add_control.py
@@ -2,6 +2,8 @@
 from Products.CMFCore.utils import getToolByName
 from Products.photoprint.utils import translate
 from Products.CMFDefault.utils import translate as cmf_translate
+from Products.CMFCore.exceptions import AccessControl_Unauthorized
+from Products.Plinn.RegistrationTool import MODE_PASS_ANONYMOUS
 rtool = getToolByName(context, 'portal_registration')
 ptool = getToolByName(context, 'portal_properties')
 _ = lambda msg : translate(msg, context)
@@ -44,9 +46,15 @@ try:
 								,'billing_city'     : kg('billing_city')
 								,'billing_zipcode'	: kg('billing_zipcode')
 								,'country'			: kg('country')
-								,'phone'			: kg('phone')} )
+								,'phone'			: kg('phone')
+                                ,'collection_id'    : kg('collection_id')
+                                ,'collection_password': kg('collection_password')} )
 except ValueError, errmsg:
 	return context.setStatus(False, _(errmsg))
+except AccessControl_Unauthorized :
+    if rtool.getMode() == MODE_PASS_ANONYMOUS :
+        return context.setStatus(False, _('Wrong private collection credentials.'))
+    raise
 
 
 if kg('send_password') or ptool.getProperty('validate_email') :
-- 
2.20.1


From 4bb6988027b9396a5f0ed10509f15dc2a230c61c Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Wed, 3 Sep 2014 23:39:33 +0200
Subject: [PATCH 11/16] Aide + localisation.

---
 locales/en/LC_MESSAGES/photoprint.po |  35 ++++++++++++++++-------
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 13531 -> 14196 bytes
 locales/fr/LC_MESSAGES/photoprint.po |  40 +++++++++++++++++++--------
 locales/photoprint.pot               |  34 +++++++++++++++--------
 skins/customer_join_template.pt      |  17 ++++++++++--
 5 files changed, 91 insertions(+), 35 deletions(-)

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index 10842db..9dff8f9 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -84,47 +84,62 @@ msgstr ""
 msgid "Member ID"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:48 t/skins/customer_login_form.pt:45
+#: t/skins/customer_join_template.pt:45
+msgid ""
+"Your login must starts with a letter, followed only by <br /> letters, "
+"numbers or _ (underscore).<br /> No accent, nopunctuation or special chars."
+"<br /> Those restrictions are only for this login field."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:56 t/skins/customer_login_form.pt:45
 msgid "Password"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:54
+#: t/skins/customer_join_template.pt:62
 msgid "Password (confirm)"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:93 t/skins/personalize_form.pt:46
+#: t/skins/customer_join_template.pt:73
+msgid "Access to private Images"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:75
+msgid "Please enter the access code to view / purchase private images."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:104 t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:97 t/skins/order_view_template.pt:35
+#: t/skins/customer_join_template.pt:108 t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:104 t/skins/order_view_template.pt:39
+#: t/skins/customer_join_template.pt:115 t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
 msgid "City"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:110 t/skins/order_view_template.pt:43
+#: t/skins/customer_join_template.pt:121 t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:116 t/skins/order_view_template.pt:47
+#: t/skins/customer_join_template.pt:127 t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:126 t/skins/personalize_form.pt:79
+#: t/skins/customer_join_template.pt:137 t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:136
+#: t/skins/customer_join_template.pt:147
 msgid "Register"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:137
+#: t/skins/customer_join_template.pt:148
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr ""
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index 351787e9922f0fc3473a340d812a242f7d6addd8..3bdcd3483c9a5c8b54eca738a6b1cef523f1411c 100644
GIT binary patch
delta 4170
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

delta 3542
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
P-Cc8~SE|2kfZO#iZ`(f=

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index bb0f5b3..840f7e4 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -1,7 +1,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Wed Sep  3 23:10:26 2014\n"
+"POT-Creation-Date: Wed Sep  3 23:34:02 2014\n"
 "PO-Revision-Date: 2014-09-01 23:39+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
@@ -104,47 +104,65 @@ msgstr "E-mail"
 msgid "Member ID"
 msgstr "Login"
 
-#: t/skins/customer_join_template.pt:48 t/skins/customer_login_form.pt:45
+#: t/skins/customer_join_template.pt:45
+msgid ""
+"Your login must starts with a letter, followed only by <br /> letters, "
+"numbers or _ (underscore).<br /> No accent, nopunctuation or special chars."
+"<br /> Those restrictions are only for this login field."
+msgstr ""
+"Votre login doit commencer par une lettre, suivi par des lettres,<br/>\n"
+"des chiffres ou _ (underscore). Pas d'accent, pas de ponctuation, pas de<br/>\n"
+"caractères spéciaux. Ces restrictions ne s'appliquent qu'à ce champ."
+
+#: t/skins/customer_join_template.pt:56 t/skins/customer_login_form.pt:45
 msgid "Password"
 msgstr "Mot de passe"
 
-#: t/skins/customer_join_template.pt:54
+#: t/skins/customer_join_template.pt:62
 msgid "Password (confirm)"
 msgstr "Mot de passe (confirmation)"
 
-#: t/skins/customer_join_template.pt:93 t/skins/personalize_form.pt:46
+#: t/skins/customer_join_template.pt:73
+msgid "Access to private Images"
+msgstr "Accès à des images privées"
+
+#: t/skins/customer_join_template.pt:75
+msgid "Please enter the access code to view / purchase private images."
+msgstr "Veuillez entrer le code d'accès pour voir / acheter des images privées."
+
+#: t/skins/customer_join_template.pt:104 t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr "Informations de facturation"
 
-#: t/skins/customer_join_template.pt:97 t/skins/order_view_template.pt:35
+#: t/skins/customer_join_template.pt:108 t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr "Adresse"
 
-#: t/skins/customer_join_template.pt:104 t/skins/order_view_template.pt:39
+#: t/skins/customer_join_template.pt:115 t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
 msgid "City"
 msgstr "Ville"
 
-#: t/skins/customer_join_template.pt:110 t/skins/order_view_template.pt:43
+#: t/skins/customer_join_template.pt:121 t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr "Code postal"
 
-#: t/skins/customer_join_template.pt:116 t/skins/order_view_template.pt:47
+#: t/skins/customer_join_template.pt:127 t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr "Pays"
 
-#: t/skins/customer_join_template.pt:126 t/skins/personalize_form.pt:79
+#: t/skins/customer_join_template.pt:137 t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr "Téléphone"
 
-#: t/skins/customer_join_template.pt:136
+#: t/skins/customer_join_template.pt:147
 msgid "Register"
 msgstr "S'enregistrer"
 
-#: t/skins/customer_join_template.pt:137
+#: t/skins/customer_join_template.pt:148
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr "Annuler"
diff --git a/locales/photoprint.pot b/locales/photoprint.pot
index 3ade077..fef7ace 100644
--- a/locales/photoprint.pot
+++ b/locales/photoprint.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Meaningless\n"
-"POT-Creation-Date: Wed Sep  3 23:10:26 2014\n"
+"POT-Creation-Date: Wed Sep  3 23:34:02 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"
@@ -107,58 +107,70 @@ msgstr ""
 msgid "Member ID"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:48
+#: t/skins/customer_join_template.pt:45
+msgid "Your login must starts with a letter, followed only by <br /> letters, numbers or _ (underscore).<br /> No accent, nopunctuation or special chars.<br /> Those restrictions are only for this login field."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:56
 #: t/skins/customer_login_form.pt:45
 msgid "Password"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:54
+#: t/skins/customer_join_template.pt:62
 msgid "Password (confirm)"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:93
+#: t/skins/customer_join_template.pt:73
+msgid "Access to private Images"
+msgstr ""
+
+#: t/skins/customer_join_template.pt:75
+msgid "Please enter the access code to view / purchase private images."
+msgstr ""
+
+#: t/skins/customer_join_template.pt:104
 #: t/skins/personalize_form.pt:46
 msgid "Billing informations"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:97
+#: t/skins/customer_join_template.pt:108
 #: t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60
 #: t/skins/personalize_form.pt:50
 msgid "Address"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:104
+#: t/skins/customer_join_template.pt:115
 #: t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64
 #: t/skins/personalize_form.pt:57
 msgid "City"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:110
+#: t/skins/customer_join_template.pt:121
 #: t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68
 #: t/skins/personalize_form.pt:63
 msgid "Zip code"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:116
+#: t/skins/customer_join_template.pt:127
 #: t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72
 #: t/skins/personalize_form.pt:69
 msgid "Country"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:126
+#: t/skins/customer_join_template.pt:137
 #: t/skins/personalize_form.pt:79
 msgid "Phone"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:136
+#: t/skins/customer_join_template.pt:147
 msgid "Register"
 msgstr ""
 
-#: t/skins/customer_join_template.pt:137
+#: t/skins/customer_join_template.pt:148
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
 msgstr ""
diff --git a/skins/customer_join_template.pt b/skins/customer_join_template.pt
index ba4878a..92680ff 100644
--- a/skins/customer_join_template.pt
+++ b/skins/customer_join_template.pt
@@ -41,6 +41,14 @@
          <td>
           <input type="text" name="member_id" size="30" value=""
                  tal:attributes="value options/member_id" />
+           <dl class="FieldHelp">
+             <dd i18n:translate="">
+               Your login must starts with a letter, followed only by <br/>
+               letters, numbers or _ (underscore).<br/>
+               No accent, nopunctuation or special chars.<br/>
+               Those restrictions are only for this login field.
+             </dd>
+           </dl>
          </td>
         </tr>
         <tal:case tal:condition="not: options/validate_email">
@@ -62,9 +70,12 @@
         </tr>
         <tr>
           <td colspan="2" style="text-align:center">
-            <h3>Accès à des images privées</h3>
-            veuillez entrer le code d'accès pour accéder / acheter les images<br/>
-            d'un événement privé couvert par les photographes de notre agence.
+            <h3 i18n:translate="">Access to private Images</h3>
+            <dl class="FieldHelp">
+              <dd i18n:translate="">
+                Please enter the access code to view / purchase private images.
+              </dd>
+            </dl>
           </td>
         </tr>
         <tr>
-- 
2.20.1


From e4159a95428accbd43f91f44d568d7afff72fc95 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Thu, 4 Sep 2014 23:18:05 +0200
Subject: [PATCH 12/16] =?utf8?q?Impl=C3=A9mentation=20de=20la=20remise.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

---
 order.py                     | 8 +++++++-
 skins/order_view.py          | 1 +
 skins/order_view_template.pt | 4 ++++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/order.py b/order.py
index db19cc0..6966ff3 100755
--- a/order.py
+++ b/order.py
@@ -183,6 +183,7 @@ class PrintOrder(PortalContent, DefaultDublinCoreImpl) :
         self.id = id
         self.items = []
         self.quantity = 0
+        self.discount = 0 # discount ratio in percent
         self.price = Price(0, 0)
         # billing and shipping addresses
         self.billing = PersistentMapping()
@@ -192,7 +193,8 @@ class PrintOrder(PortalContent, DefaultDublinCoreImpl) :
     
     @property
     def amountWithFees(self) :
-        return self.price + self.shippingFees
+        coeff = (100 - self.discount) / 100.
+        return self.price * coeff + self.shippingFees
     
     
     security.declareProtected(ModifyPortalContent, 'editBilling')
@@ -223,6 +225,7 @@ class PrintOrder(PortalContent, DefaultDublinCoreImpl) :
         pptool = getToolByName(self, 'portal_photo_print')
         uidh = getToolByName(self, 'portal_uidhandler')
         mtool = getToolByName(self, 'portal_membership')
+        utool = getToolByName(self, 'portal_url')
         
         items = []
         for item in cart :
@@ -251,6 +254,9 @@ class PrintOrder(PortalContent, DefaultDublinCoreImpl) :
                 counters.confirm(reference, quantity)
                 
         self.items = tuple(items)
+        discount_script = getattr(utool.getPortalObject(), 'photoprint_discount', None)
+        if discount_script :
+            self.discount = discount_script(self.price, self.quantity)
 
         member = mtool.getAuthenticatedMember()
         mg = lambda name : member.getProperty(name, '')
diff --git a/skins/order_view.py b/skins/order_view.py
index 308844c..1930d31 100755
--- a/skins/order_view.py
+++ b/skins/order_view.py
@@ -55,6 +55,7 @@ for item in context.items :
 options['infos'] = infos
 options['quantity'] = quantity
 options['pricesSum'] = context.price
+options['discount'] = getattr(context, 'discount', 0)
 options['shippingFees'] = shippingFees = context.shippingFees
 options['total'] = context.amountWithFees
 
diff --git a/skins/order_view_template.pt b/skins/order_view_template.pt
index 5f748b2..96e6c4a 100644
--- a/skins/order_view_template.pt
+++ b/skins/order_view_template.pt
@@ -129,6 +129,10 @@
             <th class="num" tal:content="python:'%s €' % options['pricesSum'].taxed"
                 style="border-right:1px solid black"></th>
           </tr>
+          <tr tal:condition="options/discount">
+            <td class="num" colspan="5" i18n:translate="">Discount</td>
+            <td class="num"><span tal:replace="options/discount"/> %</td>
+          </tr>
           <tr>
             <td class="num" colspan="5" i18n:translate="">Shipping</td>
             <td class="num" tal:content="python:'%s €' % options['shippingFees'].taxed"></td>
-- 
2.20.1


From 1c64d06aeb63ed19c799e296996d012067b3990e Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Thu, 4 Sep 2014 23:27:50 +0200
Subject: [PATCH 13/16] maniaquerie

---
 skins/order_view_template.pt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/skins/order_view_template.pt b/skins/order_view_template.pt
index 96e6c4a..96c984a 100644
--- a/skins/order_view_template.pt
+++ b/skins/order_view_template.pt
@@ -131,7 +131,7 @@
           </tr>
           <tr tal:condition="options/discount">
             <td class="num" colspan="5" i18n:translate="">Discount</td>
-            <td class="num"><span tal:replace="options/discount"/> %</td>
+            <td class="num"><span tal:replace="options/discount"/> %</td>
           </tr>
           <tr>
             <td class="num" colspan="5" i18n:translate="">Shipping</td>
-- 
2.20.1


From f4c99bcdc9425cde32f0323811cf737e0d567070 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <benoit.pin@gmail.com>
Date: Fri, 5 Sep 2014 00:25:44 +0200
Subject: [PATCH 14/16] localisation++

---
 locales/en/LC_MESSAGES/photoprint.po |  26 +++++++++++--------
 locales/fr/LC_MESSAGES/photoprint.mo | Bin 14196 -> 14228 bytes
 locales/fr/LC_MESSAGES/photoprint.po |  36 ++++++++++++++++-----------
 locales/photoprint.pot               |  30 ++++++++++++----------
 4 files changed, 53 insertions(+), 39 deletions(-)

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index 9dff8f9..ac41bf8 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -199,7 +199,7 @@ msgid ""
 msgstr ""
 
 #: t/skins/my_orders.py:17 t/skins/order_list.py:14
-#: t/skins/order_view_template.pt:181
+#: t/skins/order_view_template.pt:185
 msgid "Date"
 msgstr ""
 
@@ -229,7 +229,7 @@ msgstr ""
 #: t/skins/order_list_template.pt:37 t/skins/order_list_template.pt:50
 #: t/skins/order_manual_payment_form.pt:19
 #: t/skins/order_notify_done_form.pt:19 t/skins/order_notify_sent_form.pt:19
-#: t/skins/order_view_template.pt:86 t/skins/order_view_template.pt:191
+#: t/skins/order_view_template.pt:86 t/skins/order_view_template.pt:195
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
@@ -372,7 +372,7 @@ msgstr ""
 msgid "Billing"
 msgstr ""
 
-#: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:133
+#: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:137
 msgid "Shipping"
 msgstr ""
 
@@ -402,23 +402,27 @@ msgstr ""
 msgid "image removed"
 msgstr ""
 
-#: t/skins/order_view_template.pt:137
-msgid "VAT"
+#: t/skins/order_view_template.pt:133
+msgid "Discount"
 msgstr ""
 
 #: t/skins/order_view_template.pt:141
+msgid "VAT"
+msgstr ""
+
+#: t/skins/order_view_template.pt:145
 msgid "Total amount to pay"
 msgstr ""
 
-#: t/skins/order_view_template.pt:151
+#: t/skins/order_view_template.pt:155
 msgid "Pay with PayPal:"
 msgstr ""
 
-#: t/skins/order_view_template.pt:152 t/skins/order_view_template.pt:154
+#: t/skins/order_view_template.pt:156 t/skins/order_view_template.pt:158
 msgid "Pay with PayPal"
 msgstr ""
 
-#: t/skins/order_view_template.pt:164
+#: t/skins/order_view_template.pt:168
 msgid ""
 "Please check the preceding table and proceed to payment. By clicking on the "
 "PayPal button, you will temporarily leave the site: you will be redirected "
@@ -430,15 +434,15 @@ msgid ""
 "or by credit card."
 msgstr ""
 
-#: t/skins/order_view_template.pt:176
+#: t/skins/order_view_template.pt:180
 msgid "Order processing history"
 msgstr ""
 
-#: t/skins/order_view_template.pt:182
+#: t/skins/order_view_template.pt:186
 msgid "Actor"
 msgstr ""
 
-#: t/skins/order_view_template.pt:183
+#: t/skins/order_view_template.pt:187
 msgid "Action"
 msgstr ""
 
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/locales/fr/LC_MESSAGES/photoprint.mo
index 3bdcd3483c9a5c8b54eca738a6b1cef523f1411c..01d5f9436723bc2c8b07edf997170631729ead78 100644
GIT binary patch
delta 3619
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
Sz+-uZCB@4Nn+p;`!~X-<L`xX}

delta 3588
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

diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/locales/fr/LC_MESSAGES/photoprint.po
index 840f7e4..b442ec6 100644
--- a/locales/fr/LC_MESSAGES/photoprint.po
+++ b/locales/fr/LC_MESSAGES/photoprint.po
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Plinn 2.0\n"
-"POT-Creation-Date: Wed Sep  3 23:34:02 2014\n"
-"PO-Revision-Date: 2014-09-01 23:39+0200\n"
+"POT-Creation-Date: Fri Sep  5 00:21:28 2014\n"
+"PO-Revision-Date: 2014-09-05 00:22+0200\n"
 "Last-Translator:  Benoît PIN\n"
 "Language-Team: CRI http://cri.ensmp.fr\n"
 "Language: \n"
@@ -111,7 +111,8 @@ msgid ""
 "<br /> Those restrictions are only for this login field."
 msgstr ""
 "Votre login doit commencer par une lettre, suivi par des lettres,<br/>\n"
-"des chiffres ou _ (underscore). Pas d'accent, pas de ponctuation, pas de<br/>\n"
+"des chiffres ou _ (underscore). Pas d'accent, pas de ponctuation, pas de<br/"
+">\n"
 "caractères spéciaux. Ces restrictions ne s'appliquent qu'à ce champ."
 
 #: t/skins/customer_join_template.pt:56 t/skins/customer_login_form.pt:45
@@ -128,7 +129,8 @@ msgstr "Accès à des images privées"
 
 #: t/skins/customer_join_template.pt:75
 msgid "Please enter the access code to view / purchase private images."
-msgstr "Veuillez entrer le code d'accès pour voir / acheter des images privées."
+msgstr ""
+"Veuillez entrer le code d'accès pour voir / acheter des images privées."
 
 #: t/skins/customer_join_template.pt:104 t/skins/personalize_form.pt:46
 msgid "Billing informations"
@@ -229,7 +231,7 @@ msgstr ""
 "visite."
 
 #: t/skins/my_orders.py:17 t/skins/order_list.py:14
-#: t/skins/order_view_template.pt:181
+#: t/skins/order_view_template.pt:185
 msgid "Date"
 msgstr "Date"
 
@@ -259,7 +261,7 @@ msgstr "Mes commandes"
 #: t/skins/order_list_template.pt:37 t/skins/order_list_template.pt:50
 #: t/skins/order_manual_payment_form.pt:19
 #: t/skins/order_notify_done_form.pt:19 t/skins/order_notify_sent_form.pt:19
-#: t/skins/order_view_template.pt:86 t/skins/order_view_template.pt:191
+#: t/skins/order_view_template.pt:86 t/skins/order_view_template.pt:195
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
@@ -411,7 +413,7 @@ msgstr "Commande N° ${order_number}"
 msgid "Billing"
 msgstr "Facturation"
 
-#: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:133
+#: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:137
 msgid "Shipping"
 msgstr "Livraison"
 
@@ -441,23 +443,27 @@ msgstr "Montant (TTC)"
 msgid "image removed"
 msgstr "image supprimée"
 
-#: t/skins/order_view_template.pt:137
+#: t/skins/order_view_template.pt:133
+msgid "Discount"
+msgstr "Remise"
+
+#: t/skins/order_view_template.pt:141
 msgid "VAT"
 msgstr "TVA"
 
-#: t/skins/order_view_template.pt:141
+#: t/skins/order_view_template.pt:145
 msgid "Total amount to pay"
 msgstr "Montant total à payer"
 
-#: t/skins/order_view_template.pt:151
+#: t/skins/order_view_template.pt:155
 msgid "Pay with PayPal:"
 msgstr "Payer avec PayPal :"
 
-#: t/skins/order_view_template.pt:152 t/skins/order_view_template.pt:154
+#: t/skins/order_view_template.pt:156 t/skins/order_view_template.pt:158
 msgid "Pay with PayPal"
 msgstr "Payer avec PayPal"
 
-#: t/skins/order_view_template.pt:164
+#: t/skins/order_view_template.pt:168
 msgid ""
 "Please check the preceding table and proceed to payment. By clicking on the "
 "PayPal button, you will temporarily leave the site: you will be redirected "
@@ -478,15 +484,15 @@ msgstr ""
 "vous pourrez, à votre convenance, payer par virement PayPal ou par carte "
 "bancaire."
 
-#: t/skins/order_view_template.pt:176
+#: t/skins/order_view_template.pt:180
 msgid "Order processing history"
 msgstr "Historique du traitement de la commande"
 
-#: t/skins/order_view_template.pt:182
+#: t/skins/order_view_template.pt:186
 msgid "Actor"
 msgstr "Acteur"
 
-#: t/skins/order_view_template.pt:183
+#: t/skins/order_view_template.pt:187
 msgid "Action"
 msgstr "Action"
 
diff --git a/locales/photoprint.pot b/locales/photoprint.pot
index fef7ace..2e7478b 100644
--- a/locales/photoprint.pot
+++ b/locales/photoprint.pot
@@ -14,7 +14,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Meaningless\n"
-"POT-Creation-Date: Wed Sep  3 23:34:02 2014\n"
+"POT-Creation-Date: Fri Sep  5 00:21:28 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"
@@ -227,7 +227,7 @@ msgstr ""
 
 #: t/skins/my_orders.py:17
 #: t/skins/order_list.py:14
-#: t/skins/order_view_template.pt:181
+#: t/skins/order_view_template.pt:185
 msgid "Date"
 msgstr ""
 
@@ -266,7 +266,7 @@ msgstr ""
 #: t/skins/order_notify_done_form.pt:19
 #: t/skins/order_notify_sent_form.pt:19
 #: t/skins/order_view_template.pt:86
-#: t/skins/order_view_template.pt:191
+#: t/skins/order_view_template.pt:195
 msgid "${DYNAMIC_CONTENT}"
 msgstr ""
 
@@ -413,7 +413,7 @@ msgid "Billing"
 msgstr ""
 
 #: t/skins/order_view_template.pt:53
-#: t/skins/order_view_template.pt:133
+#: t/skins/order_view_template.pt:137
 msgid "Shipping"
 msgstr ""
 
@@ -443,36 +443,40 @@ msgstr ""
 msgid "image removed"
 msgstr ""
 
-#: t/skins/order_view_template.pt:137
-msgid "VAT"
+#: t/skins/order_view_template.pt:133
+msgid "Discount"
 msgstr ""
 
 #: t/skins/order_view_template.pt:141
+msgid "VAT"
+msgstr ""
+
+#: t/skins/order_view_template.pt:145
 msgid "Total amount to pay"
 msgstr ""
 
-#: t/skins/order_view_template.pt:151
+#: t/skins/order_view_template.pt:155
 msgid "Pay with PayPal:"
 msgstr ""
 
-#: t/skins/order_view_template.pt:152
-#: t/skins/order_view_template.pt:154
+#: t/skins/order_view_template.pt:156
+#: t/skins/order_view_template.pt:158
 msgid "Pay with PayPal"
 msgstr ""
 
-#: t/skins/order_view_template.pt:164
+#: t/skins/order_view_template.pt:168
 msgid "Please check the preceding table and proceed to payment. By clicking on the PayPal button, you will temporarily leave the site: you will be redirected to the payment provider PayPal. Please follow given instructions. The transaction will be final as soon as you are back on the ${site_name} site. For your information, there is no need to create a PayPal account, even if you will be prompted: you can simply use your credit card. If you already have a PayPal account, you can, at your convenience, pay by PayPal transfer or by credit card."
 msgstr ""
 
-#: t/skins/order_view_template.pt:176
+#: t/skins/order_view_template.pt:180
 msgid "Order processing history"
 msgstr ""
 
-#: t/skins/order_view_template.pt:182
+#: t/skins/order_view_template.pt:186
 msgid "Actor"
 msgstr ""
 
-#: t/skins/order_view_template.pt:183
+#: t/skins/order_view_template.pt:187
 msgid "Action"
 msgstr ""
 
-- 
2.20.1


From ccaba0f54cbd41250107d36a49154353425da8b3 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Thu, 18 Sep 2014 15:10:21 +0200
Subject: [PATCH 15/16] + localisation anglais.

---
 locales/en/LC_MESSAGES/photoprint.mo | Bin 0 -> 13263 bytes
 locales/en/LC_MESSAGES/photoprint.po | 359 +++++++++++++++------------
 2 files changed, 206 insertions(+), 153 deletions(-)
 create mode 100644 locales/en/LC_MESSAGES/photoprint.mo

diff --git a/locales/en/LC_MESSAGES/photoprint.mo b/locales/en/LC_MESSAGES/photoprint.mo
new file mode 100644
index 0000000000000000000000000000000000000000..e93030cc0cb3b232c107fae70e522417caf24842
GIT binary patch
literal 13263
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

literal 0
HcmV?d00001

diff --git a/locales/en/LC_MESSAGES/photoprint.po b/locales/en/LC_MESSAGES/photoprint.po
index ac41bf8..65dc3f4 100644
--- a/locales/en/LC_MESSAGES/photoprint.po
+++ b/locales/en/LC_MESSAGES/photoprint.po
@@ -1,88 +1,115 @@
+# #############################################################################
+#
+# Copyright (c) 2003-2004 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+# #############################################################################
+msgid ""
+msgstr ""
+"Project-Id-Version: Meaningless\n"
+"POT-Creation-Date: Fri Sep  5 00:21:28 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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: zope/app/locales/extract.py\n"
+
 #: t/price.py:82
 msgid "${i}.${d}"
-msgstr ""
+msgstr "${i}.${d}"
 
 #: t/skins/confirm_join_template.pt:12
 msgid "You have been registered as a member."
-msgstr ""
+msgstr "You have been registered as a member."
 
 #: t/skins/confirm_join_template.pt:14
 msgid ""
 "You will receive an email shortly containing your password and instructions "
 "on how to activate your membership."
 msgstr ""
+"You will receive an email shortly containing your password and instructions "
+"on how to activate your membership."
 
 #: t/skins/confirm_join_template.pt:19
 msgid "Click the button to log in immediately."
-msgstr ""
+msgstr "Click the button to log in immediately."
 
 #: t/skins/confirm_join_template.pt:26
 msgid "Log in"
-msgstr ""
+msgstr "Log in"
 
 #: t/skins/customer_add_control.py:21
 msgid "Please enter a given name."
-msgstr ""
+msgstr "Please enter a given name."
 
 #: t/skins/customer_add_control.py:22
 msgid "Please enter a name."
-msgstr ""
+msgstr "Please enter a name."
 
 #: t/skins/customer_add_control.py:23
 msgid "Please enter an email."
-msgstr ""
+msgstr "Please enter an email."
 
 #: t/skins/customer_add_control.py:24
 msgid "Please enter a member id."
-msgstr ""
+msgstr "Please enter a member id."
 
 #: t/skins/customer_add_control.py:25
 msgid "Please enter a billing address."
-msgstr ""
+msgstr "Please enter a billing address."
 
 #: t/skins/customer_add_control.py:26
 msgid "Please enter a city."
-msgstr ""
+msgstr "Please enter a city."
 
 #: t/skins/customer_add_control.py:27
 msgid "Please enter zip code."
-msgstr ""
+msgstr "Please enter zip code."
 
 #: t/skins/customer_add_control.py:28
 msgid "Please enter a country."
-msgstr ""
+msgstr "Please enter a country."
 
 #: t/skins/customer_add_control.py:29
 msgid "Please enter a phone."
-msgstr ""
+msgstr "Please enter a phone."
 
 #: t/skins/customer_add_control.py:56
 msgid "Wrong private collection credentials."
-msgstr ""
+msgstr "Wrong private collection credentials."
 
 #: t/skins/customer_join_template.pt:11
 msgid "New customer account"
-msgstr ""
+msgstr "New customer account"
 
 #: t/skins/customer_join_template.pt:17
 msgid "Customer informations"
-msgstr ""
+msgstr "Customer informations"
 
 #: t/skins/customer_join_template.pt:21
 msgid "First name"
-msgstr ""
+msgstr "First name"
 
 #: t/skins/customer_join_template.pt:27
 msgid "Last name"
-msgstr ""
+msgstr "Last name"
 
 #: t/skins/customer_join_template.pt:33
 msgid "Email Address"
-msgstr ""
+msgstr "Email Address"
 
 #: t/skins/customer_join_template.pt:40
 msgid "Member ID"
-msgstr ""
+msgstr "Member ID"
 
 #: t/skins/customer_join_template.pt:45
 msgid ""
@@ -90,106 +117,110 @@ msgid ""
 "numbers or _ (underscore).<br /> No accent, nopunctuation or special chars."
 "<br /> Those restrictions are only for this login field."
 msgstr ""
+"Your login must starts with a letter, followed only by <br /> letters, "
+"numbers or _ (underscore).<br /> No accent, nopunctuation or special chars."
+"<br /> Those restrictions are only for this login field."
 
 #: t/skins/customer_join_template.pt:56 t/skins/customer_login_form.pt:45
 msgid "Password"
-msgstr ""
+msgstr "Password"
 
 #: t/skins/customer_join_template.pt:62
 msgid "Password (confirm)"
-msgstr ""
+msgstr "Password (confirm)"
 
 #: t/skins/customer_join_template.pt:73
 msgid "Access to private Images"
-msgstr ""
+msgstr "Access to private Images"
 
 #: t/skins/customer_join_template.pt:75
 msgid "Please enter the access code to view / purchase private images."
-msgstr ""
+msgstr "Please enter the access code to view / purchase private images."
 
 #: t/skins/customer_join_template.pt:104 t/skins/personalize_form.pt:46
 msgid "Billing informations"
-msgstr ""
+msgstr "Billing informations"
 
 #: t/skins/customer_join_template.pt:108 t/skins/order_view_template.pt:35
 #: t/skins/order_view_template.pt:60 t/skins/personalize_form.pt:50
 msgid "Address"
-msgstr ""
+msgstr "Address"
 
 #: t/skins/customer_join_template.pt:115 t/skins/order_view_template.pt:39
 #: t/skins/order_view_template.pt:64 t/skins/personalize_form.pt:57
 msgid "City"
-msgstr ""
+msgstr "City"
 
 #: t/skins/customer_join_template.pt:121 t/skins/order_view_template.pt:43
 #: t/skins/order_view_template.pt:68 t/skins/personalize_form.pt:63
 msgid "Zip code"
-msgstr ""
+msgstr "Zip code"
 
 #: t/skins/customer_join_template.pt:127 t/skins/order_view_template.pt:47
 #: t/skins/order_view_template.pt:72 t/skins/personalize_form.pt:69
 msgid "Country"
-msgstr ""
+msgstr "Country"
 
 #: t/skins/customer_join_template.pt:137 t/skins/personalize_form.pt:79
 msgid "Phone"
-msgstr ""
+msgstr "Phone"
 
 #: t/skins/customer_join_template.pt:147
 msgid "Register"
-msgstr ""
+msgstr "Register"
 
 #: t/skins/customer_join_template.pt:148
 #: t/skins/photoprint_templates_edit_template.pt:142
 msgid "Cancel"
-msgstr ""
+msgstr "Cancel"
 
 #: t/skins/customer_login_form.pt:16
 msgid "You already have an account?"
-msgstr ""
+msgstr "You already have an account?"
 
 #: t/skins/customer_login_form.pt:17
 msgid "Please login to continue"
-msgstr ""
+msgstr "Please login to continue"
 
 #: t/skins/customer_login_form.pt:20
 msgid "New customer?"
-msgstr ""
+msgstr "New customer?"
 
 #: t/skins/customer_login_form.pt:21
 msgid "Welcome!<br /> Please create an account to order."
-msgstr ""
+msgstr "Welcome!<br /> Please create an account to order."
 
 #. Default: "Login"
 #: t/skins/customer_login_form.pt:38
 msgid "user_name"
-msgstr ""
+msgstr "Login"
 
 #: t/skins/customer_login_form.pt:55
 msgid "Remember my name."
-msgstr ""
+msgstr "Remember my name."
 
 #. Default: "Login"
 #: t/skins/customer_login_form.pt:63
 msgid " Login "
-msgstr ""
+msgstr " Login "
 
 #: t/skins/customer_login_form.pt:73
 msgid "Open new account >>"
-msgstr ""
+msgstr "Open new account >>"
 
 #: t/skins/customer_login_form.pt:81
 msgid "Forgot your password?"
-msgstr ""
+msgstr "Forgot your password?"
 
 #: t/skins/customer_login_form.pt:87
 msgid ""
 "Having trouble logging in? Make sure to enable cookies in your web browser."
 msgstr ""
+"Having trouble logging in? Make sure to enable cookies in your web browser."
 
 #: t/skins/customer_login_form.pt:90
 msgid "Don't forget to logout or exit your browser when you're done."
-msgstr ""
+msgstr "Don't forget to logout or exit your browser when you're done."
 
 #: t/skins/customer_login_form.pt:94
 msgid ""
@@ -197,32 +228,35 @@ msgid ""
 "so that when you next log in, your user name will already be filled in for "
 "you."
 msgstr ""
+"Setting the 'Remember my name' option will set a cookie with your username, "
+"so that when you next log in, your user name will already be filled in for "
+"you."
 
 #: t/skins/my_orders.py:17 t/skins/order_list.py:14
 #: t/skins/order_view_template.pt:185
 msgid "Date"
-msgstr ""
+msgstr "Date"
 
 #: t/skins/my_orders.py:21 t/skins/order_list.py:22
 #: t/skins/photoprint_templates_edit_template.pt:42
 msgid "Reference"
-msgstr ""
+msgstr "Reference"
 
 #: t/skins/my_orders.py:25 t/skins/order_list.py:26
 msgid "Prints"
-msgstr ""
+msgstr "Prints"
 
 #: t/skins/my_orders.py:29 t/skins/order_list.py:30
 msgid "Amount"
-msgstr ""
+msgstr "Amount"
 
 #: t/skins/my_orders.py:33 t/skins/order_list.py:34
 msgid "State"
-msgstr ""
+msgstr "State"
 
 #: t/skins/my_orders.py:69
 msgid "My orders"
-msgstr ""
+msgstr "My orders"
 
 #: t/skins/my_orders_template.pt:34 t/skins/order_cancel_form.pt:19
 #: t/skins/order_list_template.pt:33 t/skins/order_list_template.pt:35
@@ -231,105 +265,107 @@ msgstr ""
 #: t/skins/order_notify_done_form.pt:19 t/skins/order_notify_sent_form.pt:19
 #: t/skins/order_view_template.pt:86 t/skins/order_view_template.pt:195
 msgid "${DYNAMIC_CONTENT}"
-msgstr ""
+msgstr "${DYNAMIC_CONTENT}"
 
 #: t/skins/order_cancel_form.pt:11
 msgid "Cancel order \"${order_reference}\""
-msgstr ""
+msgstr "Cancel order \"${order_reference}\""
 
 #: t/skins/order_cancel_form.pt:12
 msgid "Cancel the order and relist reserved copies."
-msgstr ""
+msgstr "Cancel the order and relist reserved copies."
 
 #: t/skins/order_cancel_form.pt:18 t/skins/order_manual_payment_form.pt:18
 #: t/skins/order_notify_done_form.pt:18 t/skins/order_notify_sent_form.pt:18
 msgid "Current state:"
-msgstr ""
+msgstr "Current state:"
 
 #. Default: "Subject"
 #: t/skins/order_cancel_form.pt:23 t/skins/order_notify_sent_form.pt:24
 msgid "mail_subject"
-msgstr ""
+msgstr "Subject"
 
 #: t/skins/order_cancel_form.pt:31 t/skins/order_notify_done_form.pt:21
 #: t/skins/order_notify_sent_form.pt:32
 msgid "Comments"
-msgstr ""
+msgstr "Comments"
 
 #: t/skins/order_cancel_form.pt:39
 msgid ""
 "Due to a lack of payment since ${creation_date}, your order has been "
 "canceled. The ${store_name} team."
 msgstr ""
+"Due to a lack of payment since ${creation_date}, your order has been "
+"canceled. The ${store_name} team."
 
 #: t/skins/order_cancel_form.pt:46 t/skins/order_notify_sent_form.pt:59
 msgid "Send email"
-msgstr ""
+msgstr "Send email"
 
 #: t/skins/order_cancel_form.pt:60
 msgid "Cancel the order"
-msgstr ""
+msgstr "Cancel the order"
 
 #: t/skins/order_list.py:18
 msgid "Customer"
-msgstr ""
+msgstr "Customer"
 
 #: t/skins/order_list.py:46
 msgid "descending sort"
-msgstr ""
+msgstr "descending sort"
 
 #: t/skins/order_list.py:49
 msgid "ascending sort"
-msgstr ""
+msgstr "ascending sort"
 
 #: t/skins/order_list_template.pt:17 t/skins/order_view_template.pt:31
 #: t/skins/order_view_template.pt:56 t/skins/personalize_form.pt:33
 msgid "Name"
-msgstr ""
+msgstr "Name"
 
 #: t/skins/order_manual_payment_form.pt:11
 msgid "Pay order \"${order_reference}\" manually."
-msgstr ""
+msgstr "Pay order \"${order_reference}\" manually."
 
 #: t/skins/order_manual_payment_form.pt:12
 msgid "Pay manually"
-msgstr ""
+msgstr "Pay manually"
 
 #: t/skins/order_manual_payment_form.pt:21
 msgid "Payment description"
-msgstr ""
+msgstr "Payment description"
 
 #: t/skins/order_manual_payment_form.pt:24
 msgid "Please indicate payment mean and references"
-msgstr ""
+msgstr "Please indicate payment mean and references"
 
 #: t/skins/order_manual_payment_form.pt:29
 msgid "Pay"
-msgstr ""
+msgstr "Pay"
 
 #: t/skins/order_notify_done_form.pt:11
 msgid "Notify order \"${order_reference}\" done."
-msgstr ""
+msgstr "Notify order \"${order_reference}\" done."
 
 #: t/skins/order_notify_done_form.pt:12
 msgid "Notify that order has been made."
-msgstr ""
+msgstr "Notify that order has been made."
 
 #: t/skins/order_notify_done_form.pt:26 t/skins/order_notify_sent_form.pt:73
 msgid "Notify"
-msgstr ""
+msgstr "Notify"
 
 #: t/skins/order_notify_sent_form.pt:11
 msgid "Notify order \"${order_reference}\" sent."
-msgstr ""
+msgstr "Notify order \"${order_reference}\" sent."
 
 #: t/skins/order_notify_sent_form.pt:12
 msgid "Notify that order has been sent."
-msgstr ""
+msgstr "Notify that order has been sent."
 
 #: t/skins/order_notify_sent_form.pt:21
 msgid "Tracking info"
-msgstr ""
+msgstr "Tracking info"
 
 #: t/skins/order_notify_sent_form.pt:39
 msgid ""
@@ -337,90 +373,93 @@ msgid ""
 "able to track your parcel with the informations below. The ${store_name} "
 "team thanks you for your confidence and wish you receipt you order."
 msgstr ""
+"Your order has been sent. You will receive your prints soon. You will be "
+"able to track your parcel with the informations below. The ${store_name} "
+"team thanks you for your confidence and wish you receipt you order."
 
 #: t/skins/order_notify_sent_form.pt:47
 msgid "Tracking number"
-msgstr ""
+msgstr "Tracking number"
 
 #: t/skins/order_notify_sent_form.pt:53
 msgid "Tracking url"
-msgstr ""
+msgstr "Tracking url"
 
 #: t/skins/order_printing_list_template.pt:22
 #: t/skins/order_view_template.pt:96
 msgid "Image"
-msgstr ""
+msgstr "Image"
 
 #: t/skins/order_printing_list_template.pt:23
 msgid "File"
-msgstr ""
+msgstr "File"
 
 #: t/skins/order_printing_list_template.pt:24
 msgid "Format / type"
-msgstr ""
+msgstr "Format / type"
 
 #: t/skins/order_printing_list_template.pt:25
 #: t/skins/order_view_template.pt:98
 msgid "Quantity"
-msgstr ""
+msgstr "Quantity"
 
 #: t/skins/order_view_template.pt:23
 msgid "Order Nb. ${order_number}"
-msgstr ""
+msgstr "Order Nb. ${order_number}"
 
 #: t/skins/order_view_template.pt:28
 msgid "Billing"
-msgstr ""
+msgstr "Billing"
 
 #: t/skins/order_view_template.pt:53 t/skins/order_view_template.pt:137
 msgid "Shipping"
-msgstr ""
+msgstr "Shipping"
 
 #: t/skins/order_view_template.pt:83
 msgid "Processing"
-msgstr ""
+msgstr "Processing"
 
 #: t/skins/order_view_template.pt:97
 msgid "Printing format and type"
-msgstr ""
+msgstr "Printing format and type"
 
 #: t/skins/order_view_template.pt:99
 msgid "Unit price"
-msgstr ""
+msgstr "Unit price"
 
 #: t/skins/order_view_template.pt:100
 #: t/skins/photoprint_templates_edit_template.pt:45
 #: t/skins/photoprint_templates_edit_template.pt:131
 msgid "VAT (%)"
-msgstr ""
+msgstr "VAT (%)"
 
 #: t/skins/order_view_template.pt:101
 msgid "Amount<br />(tax incl.)"
-msgstr ""
+msgstr "Amount<br />(tax incl.)"
 
 #: t/skins/order_view_template.pt:110
 msgid "image removed"
-msgstr ""
+msgstr "image removed"
 
 #: t/skins/order_view_template.pt:133
 msgid "Discount"
-msgstr ""
+msgstr "Discount"
 
 #: t/skins/order_view_template.pt:141
 msgid "VAT"
-msgstr ""
+msgstr "VAT"
 
 #: t/skins/order_view_template.pt:145
 msgid "Total amount to pay"
-msgstr ""
+msgstr "Total amount to pay"
 
 #: t/skins/order_view_template.pt:155
 msgid "Pay with PayPal:"
-msgstr ""
+msgstr "Pay with PayPal:"
 
 #: t/skins/order_view_template.pt:156 t/skins/order_view_template.pt:158
 msgid "Pay with PayPal"
-msgstr ""
+msgstr "Pay with PayPal"
 
 #: t/skins/order_view_template.pt:168
 msgid ""
@@ -433,246 +472,260 @@ msgid ""
 "have a PayPal account, you can, at your convenience, pay by PayPal transfer "
 "or by credit card."
 msgstr ""
+"Please check the preceding table and proceed to payment. By clicking on the "
+"PayPal button, you will temporarily leave the site: you will be redirected "
+"to the payment provider PayPal. Please follow given instructions. The "
+"transaction will be final as soon as you are back on the ${site_name} site. "
+"For your information, there is no need to create a PayPal account, even if "
+"you will be prompted: you can simply use your credit card. If you already "
+"have a PayPal account, you can, at your convenience, pay by PayPal transfer "
+"or by credit card."
 
 #: t/skins/order_view_template.pt:180
 msgid "Order processing history"
-msgstr ""
+msgstr "Order processing history"
 
 #: t/skins/order_view_template.pt:186
 msgid "Actor"
-msgstr ""
+msgstr "Actor"
 
 #: t/skins/order_view_template.pt:187
 msgid "Action"
-msgstr ""
+msgstr "Action"
 
 #: t/skins/personalize_form.pt:21
 msgid "Member Preferences"
-msgstr ""
+msgstr "Member Preferences"
 
 #: t/skins/personalize_form.pt:23
 msgid "${link} to change your password."
-msgstr ""
+msgstr "${link} to change your password."
 
 #: t/skins/personalize_form.pt:23
 msgid "Click here"
-msgstr ""
+msgstr "Click here"
 
 #: t/skins/personalize_form.pt:27
 msgid "Given Name"
-msgstr ""
+msgstr "Given Name"
 
 #: t/skins/personalize_form.pt:39
 msgid "Email address"
-msgstr ""
+msgstr "Email address"
 
 #: t/skins/personalize_form.pt:88
 msgid "Change"
-msgstr ""
+msgstr "Change"
 
 #: t/skins/photoprint_order_cancel.py:5
 msgid "Your payment has been canceled. You can retry later."
-msgstr ""
+msgstr "Your payment has been canceled. You can retry later."
 
 #: t/skins/photoprint_order_confirm.py:7
 msgid "Your payment has been accepted by PayPal."
-msgstr ""
+msgstr "Your payment has been accepted by PayPal."
 
 #: t/skins/photoprint_order_confirm.py:11
 msgid ""
 "Your payment has been canceled.<br/>You can retry with an other account / "
 "credit card by cliking on the PayPal button.<br/>"
 msgstr ""
+"Your payment has been canceled.<br/>You can retry with an other account / "
+"credit card by cliking on the PayPal button.<br/>"
 
 #: t/skins/photoprint_templates_edit_form.py:55
 msgid "Printing options added."
-msgstr ""
+msgstr "Printing options added."
 
 #: t/skins/photoprint_templates_edit_form.py:59
 msgid "Printing options deleted."
-msgstr ""
+msgstr "Printing options deleted."
 
 #: t/skins/photoprint_templates_edit_template.pt:19
 msgid "No printing options are defined at this level."
-msgstr ""
+msgstr "No printing options are defined at this level."
 
 #: t/skins/photoprint_templates_edit_template.pt:23
 msgid "The printing options that apply here are defined above:"
-msgstr ""
+msgstr "The printing options that apply here are defined above:"
 
 #: t/skins/photoprint_templates_edit_template.pt:28
 msgid "Define printing options"
-msgstr ""
+msgstr "Define printing options"
 
 #: t/skins/photoprint_templates_edit_template.pt:41
 #: t/skins/photoprint_templates_edit_template.pt:100
 msgid "Title"
-msgstr ""
+msgstr "Title"
 
 #: t/skins/photoprint_templates_edit_template.pt:43
 #: t/skins/photoprint_templates_edit_template.pt:118
 msgid "Max. number of copies"
-msgstr ""
+msgstr "Max. number of copies"
 
 #: t/skins/photoprint_templates_edit_template.pt:44
 #: t/skins/photoprint_templates_edit_template.pt:127
 msgid "Price"
-msgstr ""
+msgstr "Price"
 
 #: t/skins/photoprint_templates_edit_template.pt:80
 #: t/skins/photoprint_templates_edit_template.pt:81
 msgid "Add print order template"
-msgstr ""
+msgstr "Add print order template"
 
 #: t/skins/photoprint_templates_edit_template.pt:91
 msgid "Delete options defined at this level"
-msgstr ""
+msgstr "Delete options defined at this level"
 
 #: t/skins/photoprint_templates_edit_template.pt:106
 msgid "Description"
-msgstr ""
+msgstr "Description"
 
 #: t/skins/photoprint_templates_edit_template.pt:112
 msgid "Product reference"
-msgstr ""
+msgstr "Product reference"
 
 #. Default: "The 0 value means unlimited"
 #: t/skins/photoprint_templates_edit_template.pt:122
 msgid "max_copies_field_help"
-msgstr ""
+msgstr "The 0 value means unlimited"
 
 #: t/skins/photoprint_templates_edit_template.pt:140
 msgid "Add"
-msgstr ""
+msgstr "Add"
 
 #: t/skins/photoprint_templates_edit_template.pt:150
 msgid "Save"
-msgstr ""
+msgstr "Save"
 
 #: t/tool.py:119
 msgid "No printing options found at %r"
-msgstr ""
+msgstr "No printing options found at %r"
 
 #: t/tool.py:203
 msgid "You must enter a title."
-msgstr ""
+msgstr "You must enter a title."
 
 #: t/tool.py:207
 msgid ""
 "You must enter an integer number\n"
 "for the maximum number of copies."
 msgstr ""
+"You must enter an integer number\n"
+"for the maximum number of copies."
 
 #: t/tool.py:209
 msgid ""
 "You must enter a positive value\n"
 "for the maximum number of copies."
 msgstr ""
+"You must enter a positive value\n"
+"for the maximum number of copies."
 
 #: t/tool.py:213
 msgid "You must enter a numeric value for the price."
-msgstr ""
+msgstr "You must enter a numeric value for the price."
 
 #: t/tool.py:218
 msgid "You must enter a numeric value for the VAT rate."
-msgstr ""
+msgstr "You must enter a numeric value for the VAT rate."
 
 #: t/utils.py:53
 msgid "Wrong private collection identifier."
-msgstr ""
+msgstr "Wrong private collection identifier."
 
 #: t/utils.py:56
 msgid "Collection's password does not match confirmation."
-msgstr ""
+msgstr "Collection's password does not match confirmation."
 
 #: t/utils.py:60
 msgid "Wrong collection's password."
-msgstr ""
+msgstr "Wrong collection's password."
 
 # from photoprint-manual.pot
 msgid "Your payment is complete."
-msgstr ""
+msgstr "Your payment is complete."
 
 msgid "Your payment has been canceled. You will be able to pay later."
-msgstr ""
+msgstr "Your payment has been canceled. You will be able to pay later."
 
 msgid "Your payment has been refused."
-msgstr ""
+msgstr "Your payment has been refused."
 
 msgid "recorded-en.gif"
-msgstr ""
+msgstr "recorded-en.gif"
 
 msgid "done-en.gif"
-msgstr ""
+msgstr "done-en.gif"
 
 msgid "paid-en.gif"
-msgstr ""
+msgstr "paid-en.gif"
 
 msgid "refused-en.gif"
-msgstr ""
+msgstr "refused-en.gif"
 
 msgid "sent-en.gif"
-msgstr ""
+msgstr "sent-en.gif"
 
 msgid "canceled-en.gif"
-msgstr ""
+msgstr "canceled-en.gif"
 
 msgid "auto_accept_payment"
-msgstr ""
+msgstr "auto_accept_payment"
 
 msgid "auto_cancel_order"
-msgstr ""
+msgstr "auto_cancel_order"
 
 msgid "auto_refuse_payment"
-msgstr ""
+msgstr "auto_refuse_payment"
 
 msgid "auto_transaction_failed"
-msgstr ""
+msgstr "auto_transaction_failed"
 
 msgid "manual_payment"
-msgstr ""
+msgstr "manual_payment"
 
 msgid "notify_done"
-msgstr ""
+msgstr "notify_done"
 
 msgid "notify_sent"
-msgstr ""
+msgstr "notify_sent"
 
 msgid "canceled"
-msgstr ""
+msgstr "canceled"
 
 msgid "done"
-msgstr ""
+msgstr "done"
 
 msgid "paid"
-msgstr ""
+msgstr "paid"
 
 msgid "recorded"
-msgstr ""
+msgstr "recorded"
 
 msgid "refused"
-msgstr ""
+msgstr "refused"
 
 msgid "sent"
-msgstr ""
+msgstr "sent"
 
 msgid "Manual payment"
-msgstr ""
+msgstr "Manual payment"
 
 msgid "Notify done"
-msgstr ""
+msgstr "Notify done"
 
 msgid "Notify sent"
-msgstr ""
+msgstr "Notify sent"
 
 msgid "Printing list"
-msgstr ""
+msgstr "Printing list"
 
 msgid "[%s] order %s canceling notification"
-msgstr ""
+msgstr "[%s] order %s canceling notification"
 
 msgid "[%s] order %s sending notification"
-msgstr ""
+msgstr "[%s] order %s sending notification"
 
 msgid "paypal_pay"
-msgstr ""
+msgstr "paypal_pay"
-- 
2.20.1


From b521f0db73266a7bd6b69e6a9891046a03c482ee Mon Sep 17 00:00:00 2001
From: =?utf8?q?Benoi=CC=82t=20Pin?= <pin@cri.ensmp.fr>
Date: Fri, 19 Dec 2014 17:51:14 +0100
Subject: [PATCH 16/16] eggification

---
 Products/__init__.py                           |   5 +++++
 __init__.py => Products/photoprint/__init__.py |   0
 .../photoprint/_utils}/import_printing_list.py |   0
 cart.py => Products/photoprint/cart.py         |   0
 .../photoprint/compile-i18n.sh                 |   0
 .../photoprint/configure.zcml                  |   0
 .../photoprint/exceptions.py                   |   0
 .../photoprint/graphics}/tampon.psd            | Bin
 .../photoprint/interfaces.py                   |   0
 .../locales}/en/LC_MESSAGES/photoprint.mo      | Bin
 .../locales}/en/LC_MESSAGES/photoprint.po      |   0
 .../locales}/fr/LC_MESSAGES/photoprint.mo      | Bin
 .../locales}/fr/LC_MESSAGES/photoprint.po      |   0
 .../photoprint/locales}/photoprint-manual.pot  |   0
 .../photoprint/locales}/photoprint.pot         |   0
 order.py => Products/photoprint/order.py       |   0
 .../photoprint/permissions.py                  |   0
 .../photoprint/permissions.zcml                |   0
 price.py => Products/photoprint/price.py       |   0
 .../photoprint/skins}/confirm_join_template.pt |   0
 .../photoprint/skins}/customer_add_control.py  |   0
 .../photoprint/skins}/customer_join_form.py    |   0
 .../skins}/customer_join_template.pt           |   0
 .../photoprint/skins}/customer_login_form.pt   |   0
 .../skins}/get_photo_print_order_template.pt   |   0
 .../photoprint/skins}/my_orders.py             |   0
 .../photoprint/skins}/my_orders_template.pt    |   0
 .../photoprint/skins}/order_cancel_form.pt     |   0
 .../photoprint/skins}/order_list.py            |   0
 .../photoprint/skins}/order_list_template.pt   |   0
 .../skins}/order_manual_payment_form.pt        |   0
 .../skins}/order_notify_done_form.pt           |   0
 .../skins}/order_notify_sent_form.pt           |   0
 .../skins}/order_payment_template.pt           |   0
 .../photoprint/skins}/order_pplog.pt           |   0
 .../photoprint/skins}/order_printing_list.py   |   0
 .../skins}/order_printing_list_template.pt     |   0
 .../skins}/order_printing_list_template_xml.pt |   0
 .../skins}/order_states/canceled-en.gif        | Bin
 .../skins}/order_states/canceled-fr.gif        | Bin
 .../photoprint/skins}/order_states/done-en.gif | Bin
 .../photoprint/skins}/order_states/done-fr.gif | Bin
 .../photoprint/skins}/order_states/paid-en.gif | Bin
 .../photoprint/skins}/order_states/paid-fr.gif | Bin
 .../skins}/order_states/recorded-en.gif        | Bin
 .../skins}/order_states/recorded-fr.gif        | Bin
 .../skins}/order_states/refused-en.gif         | Bin
 .../skins}/order_states/refused-fr.gif         | Bin
 .../photoprint/skins}/order_states/sent-en.gif | Bin
 .../photoprint/skins}/order_states/sent-fr.gif | Bin
 .../photoprint/skins}/order_view.py            |   0
 .../photoprint/skins}/order_view_template.pt   |   0
 .../photoprint/skins}/paypal-button.png        | Bin
 .../photoprint/skins}/personalize_form.pt      |   0
 .../skins}/photoprint_order_cancel.py          |   0
 .../skins}/photoprint_order_confirm.py         |   0
 .../skins}/photoprint_templates_edit_form.py   |   0
 .../photoprint_templates_edit_template.pt      |   0
 .../photoprint/skins}/validatePrivateAccess.py |   0
 tool.gif => Products/photoprint/tool.gif       | Bin
 tool.py => Products/photoprint/tool.py         |   0
 .../photoprint/update_i18n.sh                  |   0
 utils.py => Products/photoprint/utils.py       |   0
 setup.py                                       |  17 +++++++++++++++++
 64 files changed, 22 insertions(+)
 create mode 100644 Products/__init__.py
 rename __init__.py => Products/photoprint/__init__.py (100%)
 rename {_utils => Products/photoprint/_utils}/import_printing_list.py (100%)
 rename cart.py => Products/photoprint/cart.py (100%)
 rename compile-i18n.sh => Products/photoprint/compile-i18n.sh (100%)
 rename configure.zcml => Products/photoprint/configure.zcml (100%)
 rename exceptions.py => Products/photoprint/exceptions.py (100%)
 rename {graphics => Products/photoprint/graphics}/tampon.psd (100%)
 rename interfaces.py => Products/photoprint/interfaces.py (100%)
 rename {locales => Products/photoprint/locales}/en/LC_MESSAGES/photoprint.mo (100%)
 rename {locales => Products/photoprint/locales}/en/LC_MESSAGES/photoprint.po (100%)
 rename {locales => Products/photoprint/locales}/fr/LC_MESSAGES/photoprint.mo (100%)
 rename {locales => Products/photoprint/locales}/fr/LC_MESSAGES/photoprint.po (100%)
 rename {locales => Products/photoprint/locales}/photoprint-manual.pot (100%)
 rename {locales => Products/photoprint/locales}/photoprint.pot (100%)
 rename order.py => Products/photoprint/order.py (100%)
 rename permissions.py => Products/photoprint/permissions.py (100%)
 rename permissions.zcml => Products/photoprint/permissions.zcml (100%)
 rename price.py => Products/photoprint/price.py (100%)
 rename {skins => Products/photoprint/skins}/confirm_join_template.pt (100%)
 rename {skins => Products/photoprint/skins}/customer_add_control.py (100%)
 rename {skins => Products/photoprint/skins}/customer_join_form.py (100%)
 rename {skins => Products/photoprint/skins}/customer_join_template.pt (100%)
 rename {skins => Products/photoprint/skins}/customer_login_form.pt (100%)
 rename {skins => Products/photoprint/skins}/get_photo_print_order_template.pt (100%)
 rename {skins => Products/photoprint/skins}/my_orders.py (100%)
 rename {skins => Products/photoprint/skins}/my_orders_template.pt (100%)
 rename {skins => Products/photoprint/skins}/order_cancel_form.pt (100%)
 rename {skins => Products/photoprint/skins}/order_list.py (100%)
 rename {skins => Products/photoprint/skins}/order_list_template.pt (100%)
 rename {skins => Products/photoprint/skins}/order_manual_payment_form.pt (100%)
 rename {skins => Products/photoprint/skins}/order_notify_done_form.pt (100%)
 rename {skins => Products/photoprint/skins}/order_notify_sent_form.pt (100%)
 rename {skins => Products/photoprint/skins}/order_payment_template.pt (100%)
 rename {skins => Products/photoprint/skins}/order_pplog.pt (100%)
 rename {skins => Products/photoprint/skins}/order_printing_list.py (100%)
 rename {skins => Products/photoprint/skins}/order_printing_list_template.pt (100%)
 rename {skins => Products/photoprint/skins}/order_printing_list_template_xml.pt (100%)
 rename {skins => Products/photoprint/skins}/order_states/canceled-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/canceled-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/done-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/done-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/paid-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/paid-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/recorded-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/recorded-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/refused-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/refused-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/sent-en.gif (100%)
 rename {skins => Products/photoprint/skins}/order_states/sent-fr.gif (100%)
 rename {skins => Products/photoprint/skins}/order_view.py (100%)
 rename {skins => Products/photoprint/skins}/order_view_template.pt (100%)
 rename {skins => Products/photoprint/skins}/paypal-button.png (100%)
 rename {skins => Products/photoprint/skins}/personalize_form.pt (100%)
 rename {skins => Products/photoprint/skins}/photoprint_order_cancel.py (100%)
 rename {skins => Products/photoprint/skins}/photoprint_order_confirm.py (100%)
 rename {skins => Products/photoprint/skins}/photoprint_templates_edit_form.py (100%)
 rename {skins => Products/photoprint/skins}/photoprint_templates_edit_template.pt (100%)
 rename {skins => Products/photoprint/skins}/validatePrivateAccess.py (100%)
 rename tool.gif => Products/photoprint/tool.gif (100%)
 rename tool.py => Products/photoprint/tool.py (100%)
 rename update_i18n.sh => Products/photoprint/update_i18n.sh (100%)
 rename utils.py => Products/photoprint/utils.py (100%)
 create mode 100644 setup.py

diff --git a/Products/__init__.py b/Products/__init__.py
new file mode 100644
index 0000000..d407605
--- /dev/null
+++ b/Products/__init__.py
@@ -0,0 +1,5 @@
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)
diff --git a/__init__.py b/Products/photoprint/__init__.py
similarity index 100%
rename from __init__.py
rename to Products/photoprint/__init__.py
diff --git a/_utils/import_printing_list.py b/Products/photoprint/_utils/import_printing_list.py
similarity index 100%
rename from _utils/import_printing_list.py
rename to Products/photoprint/_utils/import_printing_list.py
diff --git a/cart.py b/Products/photoprint/cart.py
similarity index 100%
rename from cart.py
rename to Products/photoprint/cart.py
diff --git a/compile-i18n.sh b/Products/photoprint/compile-i18n.sh
similarity index 100%
rename from compile-i18n.sh
rename to Products/photoprint/compile-i18n.sh
diff --git a/configure.zcml b/Products/photoprint/configure.zcml
similarity index 100%
rename from configure.zcml
rename to Products/photoprint/configure.zcml
diff --git a/exceptions.py b/Products/photoprint/exceptions.py
similarity index 100%
rename from exceptions.py
rename to Products/photoprint/exceptions.py
diff --git a/graphics/tampon.psd b/Products/photoprint/graphics/tampon.psd
similarity index 100%
rename from graphics/tampon.psd
rename to Products/photoprint/graphics/tampon.psd
diff --git a/interfaces.py b/Products/photoprint/interfaces.py
similarity index 100%
rename from interfaces.py
rename to Products/photoprint/interfaces.py
diff --git a/locales/en/LC_MESSAGES/photoprint.mo b/Products/photoprint/locales/en/LC_MESSAGES/photoprint.mo
similarity index 100%
rename from locales/en/LC_MESSAGES/photoprint.mo
rename to Products/photoprint/locales/en/LC_MESSAGES/photoprint.mo
diff --git a/locales/en/LC_MESSAGES/photoprint.po b/Products/photoprint/locales/en/LC_MESSAGES/photoprint.po
similarity index 100%
rename from locales/en/LC_MESSAGES/photoprint.po
rename to Products/photoprint/locales/en/LC_MESSAGES/photoprint.po
diff --git a/locales/fr/LC_MESSAGES/photoprint.mo b/Products/photoprint/locales/fr/LC_MESSAGES/photoprint.mo
similarity index 100%
rename from locales/fr/LC_MESSAGES/photoprint.mo
rename to Products/photoprint/locales/fr/LC_MESSAGES/photoprint.mo
diff --git a/locales/fr/LC_MESSAGES/photoprint.po b/Products/photoprint/locales/fr/LC_MESSAGES/photoprint.po
similarity index 100%
rename from locales/fr/LC_MESSAGES/photoprint.po
rename to Products/photoprint/locales/fr/LC_MESSAGES/photoprint.po
diff --git a/locales/photoprint-manual.pot b/Products/photoprint/locales/photoprint-manual.pot
similarity index 100%
rename from locales/photoprint-manual.pot
rename to Products/photoprint/locales/photoprint-manual.pot
diff --git a/locales/photoprint.pot b/Products/photoprint/locales/photoprint.pot
similarity index 100%
rename from locales/photoprint.pot
rename to Products/photoprint/locales/photoprint.pot
diff --git a/order.py b/Products/photoprint/order.py
similarity index 100%
rename from order.py
rename to Products/photoprint/order.py
diff --git a/permissions.py b/Products/photoprint/permissions.py
similarity index 100%
rename from permissions.py
rename to Products/photoprint/permissions.py
diff --git a/permissions.zcml b/Products/photoprint/permissions.zcml
similarity index 100%
rename from permissions.zcml
rename to Products/photoprint/permissions.zcml
diff --git a/price.py b/Products/photoprint/price.py
similarity index 100%
rename from price.py
rename to Products/photoprint/price.py
diff --git a/skins/confirm_join_template.pt b/Products/photoprint/skins/confirm_join_template.pt
similarity index 100%
rename from skins/confirm_join_template.pt
rename to Products/photoprint/skins/confirm_join_template.pt
diff --git a/skins/customer_add_control.py b/Products/photoprint/skins/customer_add_control.py
similarity index 100%
rename from skins/customer_add_control.py
rename to Products/photoprint/skins/customer_add_control.py
diff --git a/skins/customer_join_form.py b/Products/photoprint/skins/customer_join_form.py
similarity index 100%
rename from skins/customer_join_form.py
rename to Products/photoprint/skins/customer_join_form.py
diff --git a/skins/customer_join_template.pt b/Products/photoprint/skins/customer_join_template.pt
similarity index 100%
rename from skins/customer_join_template.pt
rename to Products/photoprint/skins/customer_join_template.pt
diff --git a/skins/customer_login_form.pt b/Products/photoprint/skins/customer_login_form.pt
similarity index 100%
rename from skins/customer_login_form.pt
rename to Products/photoprint/skins/customer_login_form.pt
diff --git a/skins/get_photo_print_order_template.pt b/Products/photoprint/skins/get_photo_print_order_template.pt
similarity index 100%
rename from skins/get_photo_print_order_template.pt
rename to Products/photoprint/skins/get_photo_print_order_template.pt
diff --git a/skins/my_orders.py b/Products/photoprint/skins/my_orders.py
similarity index 100%
rename from skins/my_orders.py
rename to Products/photoprint/skins/my_orders.py
diff --git a/skins/my_orders_template.pt b/Products/photoprint/skins/my_orders_template.pt
similarity index 100%
rename from skins/my_orders_template.pt
rename to Products/photoprint/skins/my_orders_template.pt
diff --git a/skins/order_cancel_form.pt b/Products/photoprint/skins/order_cancel_form.pt
similarity index 100%
rename from skins/order_cancel_form.pt
rename to Products/photoprint/skins/order_cancel_form.pt
diff --git a/skins/order_list.py b/Products/photoprint/skins/order_list.py
similarity index 100%
rename from skins/order_list.py
rename to Products/photoprint/skins/order_list.py
diff --git a/skins/order_list_template.pt b/Products/photoprint/skins/order_list_template.pt
similarity index 100%
rename from skins/order_list_template.pt
rename to Products/photoprint/skins/order_list_template.pt
diff --git a/skins/order_manual_payment_form.pt b/Products/photoprint/skins/order_manual_payment_form.pt
similarity index 100%
rename from skins/order_manual_payment_form.pt
rename to Products/photoprint/skins/order_manual_payment_form.pt
diff --git a/skins/order_notify_done_form.pt b/Products/photoprint/skins/order_notify_done_form.pt
similarity index 100%
rename from skins/order_notify_done_form.pt
rename to Products/photoprint/skins/order_notify_done_form.pt
diff --git a/skins/order_notify_sent_form.pt b/Products/photoprint/skins/order_notify_sent_form.pt
similarity index 100%
rename from skins/order_notify_sent_form.pt
rename to Products/photoprint/skins/order_notify_sent_form.pt
diff --git a/skins/order_payment_template.pt b/Products/photoprint/skins/order_payment_template.pt
similarity index 100%
rename from skins/order_payment_template.pt
rename to Products/photoprint/skins/order_payment_template.pt
diff --git a/skins/order_pplog.pt b/Products/photoprint/skins/order_pplog.pt
similarity index 100%
rename from skins/order_pplog.pt
rename to Products/photoprint/skins/order_pplog.pt
diff --git a/skins/order_printing_list.py b/Products/photoprint/skins/order_printing_list.py
similarity index 100%
rename from skins/order_printing_list.py
rename to Products/photoprint/skins/order_printing_list.py
diff --git a/skins/order_printing_list_template.pt b/Products/photoprint/skins/order_printing_list_template.pt
similarity index 100%
rename from skins/order_printing_list_template.pt
rename to Products/photoprint/skins/order_printing_list_template.pt
diff --git a/skins/order_printing_list_template_xml.pt b/Products/photoprint/skins/order_printing_list_template_xml.pt
similarity index 100%
rename from skins/order_printing_list_template_xml.pt
rename to Products/photoprint/skins/order_printing_list_template_xml.pt
diff --git a/skins/order_states/canceled-en.gif b/Products/photoprint/skins/order_states/canceled-en.gif
similarity index 100%
rename from skins/order_states/canceled-en.gif
rename to Products/photoprint/skins/order_states/canceled-en.gif
diff --git a/skins/order_states/canceled-fr.gif b/Products/photoprint/skins/order_states/canceled-fr.gif
similarity index 100%
rename from skins/order_states/canceled-fr.gif
rename to Products/photoprint/skins/order_states/canceled-fr.gif
diff --git a/skins/order_states/done-en.gif b/Products/photoprint/skins/order_states/done-en.gif
similarity index 100%
rename from skins/order_states/done-en.gif
rename to Products/photoprint/skins/order_states/done-en.gif
diff --git a/skins/order_states/done-fr.gif b/Products/photoprint/skins/order_states/done-fr.gif
similarity index 100%
rename from skins/order_states/done-fr.gif
rename to Products/photoprint/skins/order_states/done-fr.gif
diff --git a/skins/order_states/paid-en.gif b/Products/photoprint/skins/order_states/paid-en.gif
similarity index 100%
rename from skins/order_states/paid-en.gif
rename to Products/photoprint/skins/order_states/paid-en.gif
diff --git a/skins/order_states/paid-fr.gif b/Products/photoprint/skins/order_states/paid-fr.gif
similarity index 100%
rename from skins/order_states/paid-fr.gif
rename to Products/photoprint/skins/order_states/paid-fr.gif
diff --git a/skins/order_states/recorded-en.gif b/Products/photoprint/skins/order_states/recorded-en.gif
similarity index 100%
rename from skins/order_states/recorded-en.gif
rename to Products/photoprint/skins/order_states/recorded-en.gif
diff --git a/skins/order_states/recorded-fr.gif b/Products/photoprint/skins/order_states/recorded-fr.gif
similarity index 100%
rename from skins/order_states/recorded-fr.gif
rename to Products/photoprint/skins/order_states/recorded-fr.gif
diff --git a/skins/order_states/refused-en.gif b/Products/photoprint/skins/order_states/refused-en.gif
similarity index 100%
rename from skins/order_states/refused-en.gif
rename to Products/photoprint/skins/order_states/refused-en.gif
diff --git a/skins/order_states/refused-fr.gif b/Products/photoprint/skins/order_states/refused-fr.gif
similarity index 100%
rename from skins/order_states/refused-fr.gif
rename to Products/photoprint/skins/order_states/refused-fr.gif
diff --git a/skins/order_states/sent-en.gif b/Products/photoprint/skins/order_states/sent-en.gif
similarity index 100%
rename from skins/order_states/sent-en.gif
rename to Products/photoprint/skins/order_states/sent-en.gif
diff --git a/skins/order_states/sent-fr.gif b/Products/photoprint/skins/order_states/sent-fr.gif
similarity index 100%
rename from skins/order_states/sent-fr.gif
rename to Products/photoprint/skins/order_states/sent-fr.gif
diff --git a/skins/order_view.py b/Products/photoprint/skins/order_view.py
similarity index 100%
rename from skins/order_view.py
rename to Products/photoprint/skins/order_view.py
diff --git a/skins/order_view_template.pt b/Products/photoprint/skins/order_view_template.pt
similarity index 100%
rename from skins/order_view_template.pt
rename to Products/photoprint/skins/order_view_template.pt
diff --git a/skins/paypal-button.png b/Products/photoprint/skins/paypal-button.png
similarity index 100%
rename from skins/paypal-button.png
rename to Products/photoprint/skins/paypal-button.png
diff --git a/skins/personalize_form.pt b/Products/photoprint/skins/personalize_form.pt
similarity index 100%
rename from skins/personalize_form.pt
rename to Products/photoprint/skins/personalize_form.pt
diff --git a/skins/photoprint_order_cancel.py b/Products/photoprint/skins/photoprint_order_cancel.py
similarity index 100%
rename from skins/photoprint_order_cancel.py
rename to Products/photoprint/skins/photoprint_order_cancel.py
diff --git a/skins/photoprint_order_confirm.py b/Products/photoprint/skins/photoprint_order_confirm.py
similarity index 100%
rename from skins/photoprint_order_confirm.py
rename to Products/photoprint/skins/photoprint_order_confirm.py
diff --git a/skins/photoprint_templates_edit_form.py b/Products/photoprint/skins/photoprint_templates_edit_form.py
similarity index 100%
rename from skins/photoprint_templates_edit_form.py
rename to Products/photoprint/skins/photoprint_templates_edit_form.py
diff --git a/skins/photoprint_templates_edit_template.pt b/Products/photoprint/skins/photoprint_templates_edit_template.pt
similarity index 100%
rename from skins/photoprint_templates_edit_template.pt
rename to Products/photoprint/skins/photoprint_templates_edit_template.pt
diff --git a/skins/validatePrivateAccess.py b/Products/photoprint/skins/validatePrivateAccess.py
similarity index 100%
rename from skins/validatePrivateAccess.py
rename to Products/photoprint/skins/validatePrivateAccess.py
diff --git a/tool.gif b/Products/photoprint/tool.gif
similarity index 100%
rename from tool.gif
rename to Products/photoprint/tool.gif
diff --git a/tool.py b/Products/photoprint/tool.py
similarity index 100%
rename from tool.py
rename to Products/photoprint/tool.py
diff --git a/update_i18n.sh b/Products/photoprint/update_i18n.sh
similarity index 100%
rename from update_i18n.sh
rename to Products/photoprint/update_i18n.sh
diff --git a/utils.py b/Products/photoprint/utils.py
similarity index 100%
rename from utils.py
rename to Products/photoprint/utils.py
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..a5bb425
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,17 @@
+# -*- coding: utf-8 -*-
+from setuptools import setup, find_packages
+
+
+setup(name='Products.photoprint',
+      version='3.0',
+      description='Photo prints and sales management for Plinn CMS',
+      url='http://plinn.org',
+      author="Benoît Pin – MINES ParisTech – Armines",
+      author_email="benoit.pin@mines-paristech.fr",
+      license="GPL",
+      packages=find_packages(),
+      include_package_data=True,
+      namespace_packages=['Products'],
+      zip_safe=False,
+      install_requires=[] #TODO
+      )
-- 
2.20.1