From a749f114a1595a6d5ed28280a9a4ea7a7c9b080e Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Wed, 9 Jan 2013 19:57:05 +0100
Subject: [PATCH] Version 1.6: Implement customizing the customer numbers, too.

This needs at least VirtueMart 2.0.15b, because before that the trigger did not allow changing the user data...
---
 Makefile                                      |   6 +-
 .../plg_vmshopper_ordernumber_Logo.larger.png | Bin 0 -> 8073 bytes
 images/plg_vmshopper_ordernumber_Logo.png     | Bin 0 -> 1431 bytes
 .../de-DE.plg_vmshopper_ordernumber.sys.ini   |  16 ++++-
 language/de-DE/index.html                     |   1 +
 .../en-GB.plg_vmshopper_ordernumber.sys.ini   |  17 ++++-
 language/en-GB/index.html                     |   1 +
 language/index.html                           |   1 +
 ordernumber.php                               |  67 +++++++++++-------
 ordernumber.xml                               |  30 +++++---
 releases/plg_vmshopper_ordernumber_v1.6.zip   | Bin 0 -> 9366 bytes
 11 files changed, 96 insertions(+), 43 deletions(-)
 create mode 100644 images/plg_vmshopper_ordernumber_Logo.larger.png
 create mode 100644 images/plg_vmshopper_ordernumber_Logo.png
 rename de-DE.plg_vmshopper_ordernumber.sys.ini => language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini (79%)
 create mode 100644 language/de-DE/index.html
 rename en-GB.plg_vmshopper_ordernumber.sys.ini => language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini (78%)
 create mode 100644 language/en-GB/index.html
 create mode 100644 language/index.html
 create mode 100644 releases/plg_vmshopper_ordernumber_v1.6.zip

diff --git a/Makefile b/Makefile
index bf3e333..16832eb 100644
--- a/Makefile
+++ b/Makefile
@@ -1,17 +1,17 @@
 BASE=ordernumber
 PLUGINTYPE=vmshopper
-VERSION=1.5
+VERSION=1.6
 
 PLUGINFILES=$(BASE).php $(BASE).xml index.html
 # TRANSDIR=../../../administrator/language/
 # TRANSLATIONS=$(call wildcard,$(TRANSDIR)/*/*.plg_$(PLUGINTYPE)_$(BASE).sys.ini)
-TRANSLATIONS=$(call wildcard,*.plg_$(PLUGINTYPE)_$(BASE).sys.ini)
+TRANSLATIONS=$(call wildcard,language/*/*.plg_$(PLUGINTYPE)_$(BASE).sys.ini) language/index.html $(call wildcard,language/**/index.html)
 ZIPFILE=plg_$(PLUGINTYPE)_$(BASE)_v$(VERSION).zip
 
 zip: $(PLUGINFILES) $(TRANSLATIONS)
 	@echo "Packing all files into distribution file $(ZIPFILE):"
 	@zip -r $(ZIPFILE) $(PLUGINFILES) 
-	@zip -r --junk-paths $(ZIPFILE) $(TRANSLATIONS)
+	@zip -r $(ZIPFILE) $(TRANSLATIONS)
 
 clean:
 	rm -f $(ZIPFILE)
diff --git a/images/plg_vmshopper_ordernumber_Logo.larger.png b/images/plg_vmshopper_ordernumber_Logo.larger.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9e15d0cf41ff033274a7c1e4a22fe747afd4bd8
GIT binary patch
literal 8073
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

literal 0
HcmV?d00001

diff --git a/images/plg_vmshopper_ordernumber_Logo.png b/images/plg_vmshopper_ordernumber_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..df429e69f02c252f414442d36448b4243215e413
GIT binary patch
literal 1431
zcmeAS@N?(olHy`uVBq!ia0y~yV2ER2U`Xd+V_;zDT>h1tfq^y7)5S5QV$R#S_qBh=
z%N(Eo<HwR2+%YHerqnw~dL{;{IP2{!aC9kjP7~C7(iP)%YUwQPr%9Zyc{^^ja)%c^
zbkE)`k>r+Ub$|8webS%ro%_A_ZRx%0`R<z4@8>Lkd-GPsmsckedkj5{{Peyu8)$8+
zP)hmea^g|vgrmZW-Re!Nf6SgO?c?KfAZzQQty@LAySq79m>3!o3_4Dp^fWOuJCwCG
zsjN)Q-{0Tx_x=0#6F1+SbS~u9@)BD)n`~po@Q-}$%x~YmE!Y`z<L=$olPQNzo#J9R
z@UmplqD4&X?Cb?QV>I;j+b_TDdBe-rJY(j}#`Dj;t%5V}=U;z(aI;ym0WS*^W7^gz
z$>bhhKE6$>SFb)%E7#xN+uQ4!$IrvF;q~k6u;AdyCCe`DOZi-JJ&nuv{l|v|5=W07
zWoX#F+j_>?XD4b^RaJNF+t+tTPFmVIG*mPkq4ub}y!_(Di<ub&I9LJ#0t9xxe}8{}
zMP+5@optNiKR*|8YkH2{`&&K>cl|hi+<nfxc}W==91I5@Y0RH9N5*&N%`@_*v+eBd
zH}2ZiwR5NCljqNw8M?Z=1-V+4*8eK7;F)}KiDodbShwn@y|>?n&7GXLqx*Y>&5av3
z4xBi_aq845rR&<-+8=-X=;-R=VmR>nwYHYFwrT1r$0wT>Kdf49X>Wi0%NLVl$B)-f
zi3$&IpF3A}&z?OBB3utYd@xw~J#6WjoVM4Z`}geOS%1Cz+_`fzUgvF>-n(~iL_|cx
z*)-;4o~>KAMnpwjnlkh3lMNN~yC!W>j^!0Zj@^l0?d)dOaBaGGT>X@~b9eBy?*8yo
z%MS_I#c9sxa{f`Vv_^~P>0{SVf7?EOTzSf0wC%&km1q1VZRQ_IPfuU7etrMXntk%$
zbMx{xZQW}6?a!Yxc6N3%F278Pj*hm!R{LMqMKd@ve$neaKWDaibC;Kv9(?`v-;Q@>
zyB~i4y>Y{ahSR4{OUTDZL`ZDDmbCH69<8ZHQ@^S1IyZZM=8}GOr(IGg$x!Ka?VkJZ
z+wbPNdwX-wnl<Y|fyIXp9}axpa@pzH?~2`b`(C}udh_<}!KXzBbIg+K>gGMqT+Xgr
zU;Fan@%{VuZE9;{TW9;yVXDgS_IWin$vpo4{x|O5cP}n3zV!Q2>#|2*pFCc^Y}tdd
z-3KKO|N3Qh{a#6eg#7+(+u9~i7A`3-Pp+)AeEM^b#IfVd4taTcZtm_EuU%VaWgjYW
z=(zjmuU}g)T?+EGR~AkATT@eCZ{OF~_u=Qy&h6XHbMo^SFJG?y)V_WCn(rUKfBzm4
z8F}#NQP!@mt_yeX_C9==_~hwR)tY@TU4B(4Em^JTB<A0uGmj(E1{6^xuODAMv$wk>
ztv9dM=KY=B1?kr^3QtY3v%9$OeMebZZ{G9A!f$`~Wu#wwQ3ezA4f|0s@!7q}uHWtK
z?%CPSiCmm5|NpjK;OV}`=aVCr{H)ko{C?4&u*K2x>&xERPTYT9<kE3rMYM$B`0nx4
zXV<T${cHR3F;L^|`qgK9+P{3{{8!X7FWx^??foqug)=oa-NyUpX&pbm+f10lSYAHA
z&Nj4fetE8%z_H`UXUAWkrD?RPEBw>P{|~-?Jn;YX>+RdO&oa^#^M2wT((>WsMVIsI
zSDzI*Xs6axV;7fM7n{3GPT~7Uug|ZujHgbpyZ68&+!+xNDIZ-V4ju2VXxpP$vu8s3
ziR{8tRi8fYx6RYydHlG(`c8<%vE%>0?O16rr(ZmE+Pwg~xFyC<cppD@wRXNIU>A4f
mzhpLty#6D}Pgwl=QGTKHg+QsR{gn(13=E#GelF{r5}E*kR^(Oy

literal 0
HcmV?d00001

diff --git a/de-DE.plg_vmshopper_ordernumber.sys.ini b/language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini
similarity index 79%
rename from de-DE.plg_vmshopper_ordernumber.sys.ini
rename to language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini
index 91a4e55..7ef7f7a 100644
--- a/de-DE.plg_vmshopper_ordernumber.sys.ini
+++ b/language/de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini
@@ -2,11 +2,11 @@
 ; Copyright (C)  2012 Reinhold Kainhofer. All rights reserved.
 ; License http://www.gnu.org/licenses/gpl.html GNU/GPL
 ; Note : All ini files need to be saved as UTF-8 - No BOM
-VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Anpassung von Auftrags- und Rechnungsnummern"
-VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Auftrags- und Rechnungsnummern in VirtueMart 2 anzupassen.<br/><br/>
+VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Anpassung von Auftrags-, Rechnungs- und Kundennummern"
+VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Auftrags-, Rechnungs- und Kundennummern in VirtueMart 2 anzupassen.<br/><br/>
       <div style='font-weight: normal'>
       <p style='font-weight: normal'>
-		Das Format der Auftrags- und Rechnungsnummern ist ein einfacher Text, wobei <tt>#</tt> die laufende Nummer anzeigt und <tt>[variable]</tt> als Variable interpretiert und durch deren Wert ersetzt wird. Aktuell sind folgende Variablen möglich (Groß-/Kleinschreibung ist egal):<table border=1>
+		Das Format der Auftrags-, Rechnungs- und Kundennummern ist ein einfacher Text, wobei <tt>#</tt> die laufende Nummer anzeigt und <tt>[variable]</tt> als Variable interpretiert und durch deren Wert ersetzt wird. Aktuell sind folgende Variablen möglich (Groß-/Kleinschreibung ist egal):<table border=1>
 		<tr><td>year</td><td>Aktuelles Jahr (4 Ziffern)</td></tr>
 		<tr><td>year2</td><td>Aktuelles Jahr (2 Ziffern)</td></tr>
 		<tr><td>month</td><td>Aktuelles Monat (2 Ziffern); mit führenden Nullen wenn nötig</td></tr>
@@ -69,3 +69,13 @@ PLG_ORDERNUMBER_INVOICENR_COUNTER = "Zähler"
 PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC = "Wählen Sie aus, ob der Zähler global oder pro Formatwert laufen soll. Z.B. beginnt bei einem Format '[year]-#' und einem Zähler pro Formatwert der Zähler jedes Jahr bei 1."
 PLG_ORDERNUMBER_INVOICENR_PADDING = "Mindestziffern für den Zähler"
 PLG_ORDERNUMBER_INVOICENR_PADDING_DESC = "Wählen Sie hier die Mindestzahl von Ziffern, die der Zähler anzeigt. Ist der Wert des Zählers kleiner, werden entsprechend viele führende Nullen vorangestellt."
+
+PLG_ORDERNUMBER_CUSTOMERNR = "<b>Kundennummern</b>"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE = "Kundennummern anpassen"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Kundennummern anpassen möchten und nicht die Standardeinstellung benutzen möchten."
+PLG_ORDERNUMBER_CUSTOMERNR_FMT = "Format der Kundennummern"
+PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC = "Hier können Sie Ihr eigenes Format für Kundennummern angeben."
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER = "Zähler"
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER_DESC = "Wählen Sie aus, ob der Zähler global oder pro Formatwert laufen soll. Z.B. beginnt bei einem Format '[year]-#' und einem Zähler pro Formatwert der Zähler jedes Jahr bei 1."
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING = "Mindestziffern für den Zähler"
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC = "Wählen Sie hier die Mindestzahl von Ziffern, die der Zähler anzeigt. Ist der Wert des Zählers kleiner, werden entsprechend viele führende Nullen vorangestellt."
diff --git a/language/de-DE/index.html b/language/de-DE/index.html
new file mode 100644
index 0000000..2efb97f
--- /dev/null
+++ b/language/de-DE/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/en-GB.plg_vmshopper_ordernumber.sys.ini b/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini
similarity index 78%
rename from en-GB.plg_vmshopper_ordernumber.sys.ini
rename to language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini
index 3c29102..dc80c77 100644
--- a/en-GB.plg_vmshopper_ordernumber.sys.ini
+++ b/language/en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini
@@ -2,11 +2,11 @@
 ; Copyright (C)  2012 Reinhold Kainhofer. All rights reserved.
 ; License http://www.gnu.org/licenses/gpl.html GNU/GPL
 ; Note : All ini files need to be saved as UTF-8 - No BOM
-VMSHOPPER_ORDERNUMBER = "VM2 - Custom Order and Invoice Number plugin"
-VMSHOPPER_ORDERNUMBER_DESC = "This plugin is used to create custom order and invoice numbers for Virtuemart 2<br/><br/>
+VMSHOPPER_ORDERNUMBER = "VM2 - Custom Order, Invoice and Customer Number plugin"
+VMSHOPPER_ORDERNUMBER_DESC = "This plugin is used to create custom order, invoice and customer numbers for Virtuemart 2<br/><br/>
       <div style='font-weight: normal'>
       <p style='font-weight: normal'>
-		The format of the order and invoice numbers is a free-form text string, where <tt>#</tt> indicates the running counter and <tt>[variable]</tt> is understood as a variable and replaced by its current value. Currently, the following variables are available (case-insensitive):<table border=1>
+		The format of the numbers is a free-form text string, where <tt>#</tt> indicates the running counter and <tt>[variable]</tt> is understood as a variable and replaced by its current value. Currently, the following variables are available (case-insensitive):<table border=1>
 		<tr><td>year</td><td>Current year (4 digits)</td></tr>
 		<tr><td>year2</td><td>Current year (2 digits)</td></tr>
 		<tr><td>month</td><td>Current month (2 digits); leading zeros if necessary</td></tr>
@@ -69,3 +69,14 @@ PLG_ORDERNUMBER_INVOICENR_COUNTER = "Counter"
 PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC = "Choose whether you want one global counter or per-format value counters. E.g. with a format of '[year]-#' and the latter option checked, the invoice count will be within the year only."
 PLG_ORDERNUMBER_INVOICENR_PADDING = "Minimum digits for the counter"
 PLG_ORDERNUMBER_INVOICENR_PADDING_DESC = "Select the minimum number of digits that the counter shall display. The value of the counter will be left-padded with 0 to have this minimum number of digits. If the counter is already larger than this number, no padding will occur"
+
+PLG_ORDERNUMBER_CUSTOMERNR = "<b>Customer numbers</b>"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE = "Customize customer numbers"
+PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC = "Check here if you want customized customer number formats rather than the default."
+PLG_ORDERNUMBER_CUSTOMERNR_FMT = "Format of the customer numbers"
+PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC = "Here you can customize the customer number"
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER = "Counter"
+PLG_ORDERNUMBER_CUSTOMERNR_COUNTER_DESC = "Choose whether you want one global counter or per-format value counters. E.g. with a format of '[year]-#' and the latter option checked, the customer count will be within the year only."
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING = "Minimum digits for the counter"
+PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC = "Select the minimum number of digits that the counter shall display. The value of the counter will be left-padded with 0 to have this minimum number of digits. If the counter is already larger than this number, no padding will occur"
+
diff --git a/language/en-GB/index.html b/language/en-GB/index.html
new file mode 100644
index 0000000..2efb97f
--- /dev/null
+++ b/language/en-GB/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/language/index.html b/language/index.html
new file mode 100644
index 0000000..2efb97f
--- /dev/null
+++ b/language/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><title></title>
diff --git a/ordernumber.php b/ordernumber.php
index 7a36fb6..975959a 100644
--- a/ordernumber.php
+++ b/ordernumber.php
@@ -14,10 +14,12 @@ if (!class_exists('vmShopperPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmshopper
    The only way to pass a local variable to a callback for preg_replace_callback is to 
    create a class instance... */
 class ReplacementCallback {
-    private $orderDetails;
+    private $details;
+    private $nrtype;
 
-    function __construct($orderDetails) {
-        $this->orderDetails = $orderDetails;
+    function __construct($nrtype, $details) {
+        $this->details = $details;
+        $this->nrtype = $nrtype;
     }
 
     /* Return a random "string" of the given length taken from the given alphabet */
@@ -57,19 +59,19 @@ class ReplacementCallback {
                     case "alphanum": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; break;
                 }
                 return self::randomString ($alphabet, $len);
-            case "vendorid": return ($this->orderDetails->virtuemart_vendor_id);
-            case "userid": return ($this->orderDetails->virtuemart_user_id);
-            case "ipaddress": return ($this->orderDetails->ip_address);
+            case "vendorid": return ($this->details->virtuemart_vendor_id);
+            case "userid": return ($this->details->virtuemart_user_id);
+            case "ipaddress": return ($this->details->ip_address);
 
             // Only for Invoice:
-            case "ordernumber": return ($this->orderDetails->order_number);
-            case "orderid": return ($this->orderDetails->virtuemart_order_id);
-            case "lastname": return ($this->orderDetails->last_name);
-            case "firstname": return ($this->orderDetails->first_name);
-            case "company": return ($this->orderDetails->company);
-            case "city": return ($this->orderDetails->city);
-            case "zip": return ($this->orderDetails->zip);
-            case "orderstatus": return ($this->orderDetails->order_status);
+            case "ordernumber": return ($this->details->order_number);
+            case "orderid": return ($this->details->virtuemart_order_id);
+            case "lastname": return ($this->details->last_name);
+            case "firstname": return ($this->details->first_name);
+            case "company": return ($this->details->company);
+            case "city": return ($this->details->city);
+            case "zip": return ($this->details->zip);
+            case "orderstatus": return ($this->details->order_status);
         }
         // No variable type matched, so don't replace, return the original string
         return $match[0];
@@ -104,8 +106,8 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
     function plgVmOnUpdateOrderBEShopper($_orderID) {}
 
     /* Replace the format variables, match[1] is the variable name, match[2] and match[3] are only used for random fields */
-
-    function replace_fields ($fmt, $orderDetails) {
+    /* Type 0 means order number, type 1 means invoice number, type 2 means customer number */
+    function replace_fields ($fmt, $nrtype, $details) {
         // Match variables for the form random[type][count] and everything else.
         // This makes it possible to handle "random" just like any other type!
         $patterns = array (
@@ -114,23 +116,23 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
         );
 //         // TODO: in  php 5.3 and 5.4 we can easier pass $orderDetails to the callback
 //         function my_callback ($match) {
-//             return self::replacementCallback ($match, $orderDetails); 
+//             return self::replacementCallback ($match, $details); 
 //         };
 //         return preg_replace_callback ($patterns, 
-//             function ($match) use ($orderDetails) { 
-//                 return self::replacementCallback ($match, $orderDetails); 
+//             function ($match) use ($details) { 
+//                 return self::replacementCallback ($match, $details); 
 //             }, $fmt);
 
         /* php 5.2 does not allow lambda functions and there is no other way to
            pass a local variable to the callback than a class instance! */
-        $callback = new ReplacementCallback ($orderDetails);
+        $callback = new ReplacementCallback ($nrtype, $details);
         return preg_replace_callback ($patterns, array($callback, 'replace'), $fmt);
     }
 
-    /* Type 0 means order number, type 1 means invoice number */
-    function format_number ($fmt, $orderDetails, $nrtype = 0, $global = 1, $padding = 1) {
+    /* Type 0 means order number, type 1 means invoice number, type 2 means customer number */
+    function format_number ($fmt, $details, $nrtype = 0, $global = 1, $padding = 1) {
         // First, replace all variables:
-        $nr = $this->replace_fields ($fmt, $orderDetails);
+        $nr = $this->replace_fields ($fmt, $nrtype, $details);
 
         // Look up the current counter
         $db = JFactory::getDBO();
@@ -169,7 +171,7 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
         }
         // Is order password customization enabled?
         if ($this->params->get('customize_order_password')) {
-          $fmt = $this->params->get ('order_password_format', "#");
+          $fmt = $this->params->get ('order_password_format', "[randomHex8]");
           $passwd = $this->replace_fields ($fmt, $orderDetails);
           $orderDetails->order_pass = $passwd;
         }
@@ -190,7 +192,24 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
                 $padding = $this->params->get ('invoice_number_padding', 1);
                 $invoicenr = $this->format_number ($fmt, (object)$orderDetails, $nrtype, $global, $padding);
                 $data['invoice_number'] = $invoicenr;
+                return $data;
             }
         }
     }
+
+    // Customizing the customer numbers requires VM >= 2.0.15b, earlier versions 
+    // left out the & and thus didn't allow changing the user data
+    function plgVmOnUserStore(&$data) {
+        // Is order number customization enabled?
+        if ($this->params->get('customize_customer_number') && isset($data['customer_number_bycore']) && $data['customer_number_bycore']==1) {
+            $nrtype=2; /*customer-nr*/
+            $fmt = $this->params->get ('customer_number_format', "#");
+            $global = $this->params->get ('customer_number_global', 1);
+            $padding = $this->params->get ('customer_number_padding', 1);
+            $customernr = $this->format_number ($fmt, (object)$data, $nrtype, $global, $padding);
+            $data['customer_number'] = $customernr;
+            return $data;
+        }
+    }
+
 }
diff --git a/ordernumber.xml b/ordernumber.xml
index 519ec37..bec61da 100644
--- a/ordernumber.xml
+++ b/ordernumber.xml
@@ -1,25 +1,23 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<install version="1.5" type="plugin" group="vmshopper" method="upgrade">
+<install version="1.6" type="plugin" group="vmshopper" method="upgrade">
     <name>VMSHOPPER_ORDERNUMBER</name>
-    <creationDate>2012-11-13</creationDate>
+    <creationDate>2013-01-09</creationDate>
     <author>Reinhold Kainhofer</author>
     <authorEmail>reinhold@kainhofer.com</authorEmail>
     <authorUrl>http://www.kainhofer.com/</authorUrl>
-    <copyright>Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.</copyright>
+    <copyright>Copyright (C) 2012-2013 Reinhold Kainhofer. All rights reserved.</copyright>
     <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license>
-    <version>1.5.0</version>
-    <releaseDate>2012-12-16</releaseDate>
+    <version>1.6.0</version>
+    <releaseDate>2013-01-09</releaseDate>
     <releaseType>Minor update</releaseType>
-    <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/</downloadUrl>
+    <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/vm2-ordernumber-plugin.html</downloadUrl>
 
     <description>VMSHOPPER_ORDERNUMBER_DESC</description>
 
-    <languages>
-        <language tag="en-GB">en-GB.plg_vmshopper_ordernumber.sys.ini</language>
-        <language tag="de-DE">de-DE.plg_vmshopper_ordernumber.sys.ini</language>
-    </languages>
     <files>
         <filename plugin="ordernumber">ordernumber.php</filename>
+	<filename>index.html</filename>
+        <folder>language</folder>
     </files>
     <config>
         <fields name="params">
@@ -55,6 +53,18 @@
                     <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
                     <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
                 </field>
+
+                <field name="customer_options" type="spacer" label="PLG_ORDERNUMBER_CUSTOMERNR" />
+                <field name="customize_customer_number" type="radio" default="0" label="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE" description="PLG_ORDERNUMBER_CUSTOMERNR_CUSTOMIZE_DESC">
+                    <option value="1">PLG_ORDERNUMBER_YES</option>
+                    <option value="0">PLG_ORDERNUMBER_NO</option>
+                </field>
+                <field name="customer_number_format" type="text" default="#" label="PLG_ORDERNUMBER_CUSTOMERNR_FMT" description="PLG_ORDERNUMBER_CUSTOMERNR_FMT_DESC"/>
+                <field name="customer_number_padding" type="integer" default="5" label="PLG_ORDERNUMBER_CUSTOMERNR_PADDING" description="PLG_ORDERNUMBER_CUSTOMERNR_PADDING_DESC"  first="1" last="10" step="1" />
+                <field name="customer_number_global" type="radio" default="1" label="PLG_ORDERNUMBER_CUSTOMERNR_COUNTER" description="PLG_ORDERNUMBER_CUSTOMERNR_COUNTER_DESC">
+                    <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
+                    <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
+                </field>
             </fieldset>
         </fields>
     </config>
diff --git a/releases/plg_vmshopper_ordernumber_v1.6.zip b/releases/plg_vmshopper_ordernumber_v1.6.zip
new file mode 100644
index 0000000000000000000000000000000000000000..7dce92a88a8f4c09fd7838ca76a572f1cbd6a365
GIT binary patch
literal 9366
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
agE9(+@vLm1B+kLW!NAGPz)-FT;sF34GTt!&

literal 0
HcmV?d00001

-- 
GitLab