diff --git a/Makefile b/Makefile index bf3e333d3ed51f99600463f16a5bd4cb356d5d22..16832ebb0e56515a352014bf2940e2cb5ebfdbac 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 Binary files /dev/null and b/images/plg_vmshopper_ordernumber_Logo.larger.png differ diff --git a/images/plg_vmshopper_ordernumber_Logo.png b/images/plg_vmshopper_ordernumber_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..df429e69f02c252f414442d36448b4243215e413 Binary files /dev/null and b/images/plg_vmshopper_ordernumber_Logo.png differ 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 91a4e55bc8c6e2937c4ec12587fc20935849f956..7ef7f7a88c446273a043b290e4b2a13889e1f0c1 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 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb --- /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 3c291026f937649dd646ce7ac715e9ce9abcdbc4..dc80c777f294baaf36d45d15363855e7e1aa7dc3 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 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb --- /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 0000000000000000000000000000000000000000..2efb97f319a35f6bd80f1751134ed71ec11888eb --- /dev/null +++ b/language/index.html @@ -0,0 +1 @@ +<!DOCTYPE html><title></title> diff --git a/ordernumber.php b/ordernumber.php index 7a36fb6f27065edec623fcdeccd02f08bf736135..975959aad926f0a4e5401b362761e253c7ff710f 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 519ec37ccde5feb3cce59ae2269ded000b18e9cf..bec61daf9f3a2f1b771361b87cf783513308d7be 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 Binary files /dev/null and b/releases/plg_vmshopper_ordernumber_v1.6.zip differ