Skip to content
Snippets Groups Projects
Commit 1a6682c0 authored by Reinhold Kainhofer's avatar Reinhold Kainhofer
Browse files

Version 1.3: Fix php 5.2 for real, fix german translation

parent 4b0e432a
Branches
Tags V1.3
No related merge requests found
BASE=ordernumber BASE=ordernumber
PLUGINTYPE=vmshopper PLUGINTYPE=vmshopper
VERSION=1.2 VERSION=1.3
PLUGINFILES=$(BASE).php $(BASE).xml index.html PLUGINFILES=$(BASE).php $(BASE).xml index.html
# TRANSDIR=../../../administrator/language/ # TRANSDIR=../../../administrator/language/
......
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
; Copyright (C) 2012 Reinhold Kainhofer. All rights reserved. ; Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.
; License http://www.gnu.org/licenses/gpl.html GNU/GPL ; License http://www.gnu.org/licenses/gpl.html GNU/GPL
; Note : All ini files need to be saved as UTF-8 - No BOM ; Note : All ini files need to be saved as UTF-8 - No BOM
VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Einstellung zu Bestellungs- und Rechnungsnummern" VMSHOPPER_ORDERNUMBER = "VM2 - Plugin zur Anpassung von Auftrags- und Rechnungsnummern"
VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Bestellungs- und Rechnungsnummern in VirtueMart 2 anzupassen.<br/><br/> VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Auftrags- und Rechnungsnummern in VirtueMart 2 anzupassen.<br/><br/>
<div style='font-weight: normal'> <div style='font-weight: normal'>
<p style='font-weight: normal'> <p style='font-weight: normal'>
Das Format der Bestellungs- 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- 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>
<tr><td>year</td><td>Aktuelles Jahr (4 Ziffern)</td></tr> <tr><td>year</td><td>Aktuelles Jahr (4 Ziffern)</td></tr>
<tr><td>year2</td><td>Aktuelles Jahr (2 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> <tr><td>month</td><td>Aktuelles Monat (2 Ziffern); mit führenden Nullen wenn nötig</td></tr>
...@@ -26,8 +26,8 @@ VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Bes ...@@ -26,8 +26,8 @@ VMSHOPPER_ORDERNUMBER_DESC = "Dieses Plugin erlaubt es Ihnen, das Format von Bes
<tr><td>userID</td><td>(Interne) VirtueMart Benutzer ID</td></tr> <tr><td>userID</td><td>(Interne) VirtueMart Benutzer ID</td></tr>
<tr><td>IPaddress</td><td>IP-Addresse des Käufers</td></tr> <tr><td>IPaddress</td><td>IP-Addresse des Käufers</td></tr>
<tr><th colspan=2><em>Nur für Rechnungsnummern:</em></td></tr> <tr><th colspan=2><em>Nur für Rechnungsnummern:</em></td></tr>
<tr><td>orderNumber</td><td>Bestellungsnummer, für die die Rechnung erstellt wird</td></tr> <tr><td>orderNumber</td><td>Auftragsnummer, für die die Rechnung erstellt wird</td></tr>
<tr><td>orderID</td><td>(Interne) Bestellungs-ID, für die die Rechnung erstellt wird</td></tr> <tr><td>orderID</td><td>(Interne) Auftrags-ID, für die die Rechnung erstellt wird</td></tr>
<tr><td>Lastname</td><td>Nachname des Käufers (Rechnungsadresse)</td></tr> <tr><td>Lastname</td><td>Nachname des Käufers (Rechnungsadresse)</td></tr>
<tr><td>Firstname</td><td>Vorname des Käufers (Rechnungsadresse)</td></tr> <tr><td>Firstname</td><td>Vorname des Käufers (Rechnungsadresse)</td></tr>
<tr><td>Company</td><td>Unternehmen des Käufers (Rechnungsadresse)</td></tr> <tr><td>Company</td><td>Unternehmen des Käufers (Rechnungsadresse)</td></tr>
...@@ -44,19 +44,19 @@ PLG_ORDERNUMBER_NO = "Nein" ...@@ -44,19 +44,19 @@ PLG_ORDERNUMBER_NO = "Nein"
PLG_ORDERNUMBER_COUNTER_GLOBAL="Global" PLG_ORDERNUMBER_COUNTER_GLOBAL="Global"
PLG_ORDERNUMBER_COUNTER_PERFORMAT = "Eigener Zähler pro Formatwert" PLG_ORDERNUMBER_COUNTER_PERFORMAT = "Eigener Zähler pro Formatwert"
PLG_ORDERNUMBER_ORDERNR = "<b>Bestellungsnummern</b>" PLG_ORDERNUMBER_ORDERNR = "<b>Auftragsgsnummern</b>"
PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE = "Bestellungsnummern anpassen" PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE = "Auftragsnummern anpassen"
PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Bestellungsnummern anpassen möchten und nicht die Standardeinstellung benutzen möchten." PLG_ORDERNUMBER_ORDERNR_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Auftragsnummern anpassen möchten und nicht die Standardeinstellung benutzen möchten."
PLG_ORDERNUMBER_ORDERNR_FMT="Format der Bestellungsnummern" PLG_ORDERNUMBER_ORDERNR_FMT="Format der Auftragsnummern"
PLG_ORDERNUMBER_ORDERNR_FMT_DESC="Hier können Sie Ihr eigenes Format für Bestellungsnummern angeben." PLG_ORDERNUMBER_ORDERNR_FMT_DESC="Hier können Sie Ihr eigenes Format für Auftragsnummern angeben."
PLG_ORDERNUMBER_ORDERNR_COUNTER = "Zähler" PLG_ORDERNUMBER_ORDERNR_COUNTER = "Zähler"
PLG_ORDERNUMBER_ORDERNR_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_ORDERNR_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_PASSWD = "<b>Bestellungspasswort</b>" PLG_ORDERNUMBER_PASSWD = "<b>Auftragspasswort</b>"
PLG_ORDERNUMBER_PASSWD_CUSTOMIZE = "Bestellungspasswort anpassen" PLG_ORDERNUMBER_PASSWD_CUSTOMIZE = "Auftragspasswort anpassen"
PLG_ORDERNUMBER_PASSWD_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Bestellungspasswörter anpassen möchten und nicht die Standardeinstellung benutzen möchten." PLG_ORDERNUMBER_PASSWD_CUSTOMIZE_DESC = "Hier ankreuzen, wenn Sie Ihre Auftragspasswörter anpassen möchten und nicht die Standardeinstellung benutzen möchten."
PLG_ORDERNUMBER_PASSWD_FMT = "Format of the order password" PLG_ORDERNUMBER_PASSWD_FMT = "Format der Auftragspasswörter"
PLG_ORDERNUMBER_PASSWD_FMT_DESC = "Hier können Sie Ihr eigenes Format für Bestellungspasswörter angeben (# wird nicht ersetzt)." PLG_ORDERNUMBER_PASSWD_FMT_DESC = "Hier können Sie Ihr eigenes Format für Auftragspasswörter angeben (# wird nicht ersetzt)."
PLG_ORDERNUMBER_INVOICENR = "<b>Rechnungsnummern</b>" PLG_ORDERNUMBER_INVOICENR = "<b>Rechnungsnummern</b>"
PLG_ORDERNUMBER_INVOICENR_CUSTOMIZE = "Rechnungsnummern anpassen" PLG_ORDERNUMBER_INVOICENR_CUSTOMIZE = "Rechnungsnummern anpassen"
......
...@@ -10,6 +10,63 @@ ...@@ -10,6 +10,63 @@
defined('_JEXEC') or die( 'Direct Access to ' . basename( __FILE__ ) . ' is not allowed.' ) ; defined('_JEXEC') or die( 'Direct Access to ' . basename( __FILE__ ) . ' is not allowed.' ) ;
if (!class_exists('vmShopperPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmshopperplugin.php'); if (!class_exists('vmShopperPlugin')) require(JPATH_VM_PLUGINS . DS . 'vmshopperplugin.php');
/* For php 5.2 we cannot use lambda functions or any other way to pass local variables to the callback.
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;
function __construct($orderDetails) {
$this->orderDetails = $orderDetails;
}
function replace ($match) {
$varname = strtolower($match[1]);
switch ($varname) {
case "year": return date ("Y");
case "year2": return date ("y");
case "month": return date("m");
case "day": return date("d");
case "hour": return date("H");
case "hour12": return date("h");
case "ampm": return date("a");
case "minute": return date("i");
case "second": return date("s");
case "random":
/* the regexp matches (random)(Type)(Len) as match 1 to 3, Len is optional */
$len = ($match[3]?$match[3]:1);
// Fallback: If no Type is given, use Digit
$alphabet = "0123456789";
// Select the correct alphabet depending on Type
switch (strtolower($match[2])) {
case "digit": $alphabet = "0123456789"; break;
case "hex": $alphabet = "0123456789abcdef"; break;
case "letter": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
case "uletter": $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
case "lletter": $alphabet = "abcdefghijklmnopqrstuvwxyz"; break;
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);
// 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);
}
// No variable type matched, so don't replace, return the original string
return $match[0];
}
}
class plgVmShopperOrdernumber extends vmShopperPlugin { class plgVmShopperOrdernumber extends vmShopperPlugin {
function __construct(& $subject, $config) { function __construct(& $subject, $config) {
...@@ -47,50 +104,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { ...@@ -47,50 +104,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
} }
/* Replace the format variables, match[1] is the variable name, match[2] and match[3] are only used for random fields */ /* Replace the format variables, match[1] is the variable name, match[2] and match[3] are only used for random fields */
static function replacementCallback ($match, $orderDetails) {
$varname = strtolower($match[1]);
switch ($varname) {
case "year": return date ("Y");
case "year2": return date ("y");
case "month": return date("m");
case "day": return date("d");
case "hour": return date("H");
case "hour12": return date("h");
case "ampm": return date("a");
case "minute": return date("i");
case "second": return date("s");
case "random":
/* the regexp matches (random)(Type)(Len) as match 1 to 3, Len is optional */
$len = ($match[3]?$match[3]:1);
// Fallback: If no Type is given, use Digit
$alphabet = "0123456789";
// Select the correct alphabet depending on Type
switch (strtolower($match[2])) {
case "digit": $alphabet = "0123456789"; break;
case "hex": $alphabet = "0123456789abcdef"; break;
case "letter": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
case "uletter": $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; break;
case "lletter": $alphabet = "abcdefghijklmnopqrstuvwxyz"; break;
case "alphanum": $alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; break;
}
return self::randomString ($alphabet, $len);
case "vendorid": return ($orderDetails->virtuemart_vendor_id);
case "userid": return ($orderDetails->virtuemart_user_id);
case "ipaddress": return ($orderDetails->ip_address);
// Only for Invoice:
case "ordernumber": return ($orderDetails->order_number);
case "orderid": return ($orderDetails->virtuemart_order_id);
case "lastname": return ($orderDetails->last_name);
case "firstname": return ($orderDetails->first_name);
case "company": return ($orderDetails->company);
case "city": return ($orderDetails->city);
case "zip": return ($orderDetails->zip);
case "orderstatus": return ($orderDetails->order_status);
}
// No variable type matched, so don't replace, return the original string
return $match[0];
}
function replace_fields ($fmt, $orderDetails) { function replace_fields ($fmt, $orderDetails) {
// Match variables for the form random[type][count] and everything else. // Match variables for the form random[type][count] and everything else.
...@@ -99,12 +112,19 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { ...@@ -99,12 +112,19 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
'/\[(random)(.*?)([0-9]*?)\]/', // For randomTypeN, spit the three parts '/\[(random)(.*?)([0-9]*?)\]/', // For randomTypeN, spit the three parts
'/\[([^\]]+)\]/' // Everything else matches whole variable name '/\[([^\]]+)\]/' // Everything else matches whole variable name
); );
$callback = function ($match) use ($orderDetails) { // // TODO: in php 5.3 and 5.4 we can easier pass $orderDetails to the callback
return self::replacementCallback ($match, $orderDetails); // function my_callback ($match) {
}; // return self::replacementCallback ($match, $orderDetails);
// };
return preg_replace_callback ($patterns, $callback, $fmt); // return preg_replace_callback ($patterns,
// return preg_replace_callback ($patterns, function ($match) use ($orderDetails) { return self::replacementCallback ($match, $orderDetails); }, $fmt); // function ($match) use ($orderDetails) {
// return self::replacementCallback ($match, $orderDetails);
// }, $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);
return preg_replace_callback ($patterns, array($callback, 'replace'), $fmt);
} }
/* Type 0 means order number, type 1 means invoice number */ /* Type 0 means order number, type 1 means invoice number */
...@@ -154,8 +174,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { ...@@ -154,8 +174,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
} }
function plgVmOnUserInvoice($orderDetails,&$data) { function plgVmOnUserInvoice($orderDetails,&$data) {
// print("<pre>plgVmOnUserInvoice, orderDetails=");print_r($orderDetails);print("</pre>");
// print("<pre>plgVmOnUserInvoice, data=");print_r($data);print("</pre>");
// Is order number customization enabled? // Is order number customization enabled?
if ($this->params->get('customize_invoice_number')) { if ($this->params->get('customize_invoice_number')) {
// check the default configuration // check the default configuration
...@@ -168,7 +186,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin { ...@@ -168,7 +186,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
$fmt = $this->params->get ('invoice_number_format', "#"); $fmt = $this->params->get ('invoice_number_format', "#");
$global = $this->params->get ('invoice_number_global', 1); $global = $this->params->get ('invoice_number_global', 1);
$invoicenr = $this->format_number ($fmt, (object)$orderDetails, $nrtype, $global); $invoicenr = $this->format_number ($fmt, (object)$orderDetails, $nrtype, $global);
// print("<pre> invoice nr format: $fmt, resulting in $invoicenr</pre>");
$data['invoice_number'] = $invoicenr; $data['invoice_number'] = $invoicenr;
} }
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<authorUrl>http://www.kainhofer.com/</authorUrl> <authorUrl>http://www.kainhofer.com/</authorUrl>
<copyright>Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.</copyright> <copyright>Copyright (C) 2012 Reinhold Kainhofer. All rights reserved.</copyright>
<license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license> <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license>
<version>1.1.0</version> <version>1.3.0</version>
<releaseDate>2012-11-13</releaseDate> <releaseDate>2012-11-13</releaseDate>
<releaseType>Major update</releaseType> <releaseType>Major update</releaseType>
<downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/</downloadUrl> <downloadUrl>http://www.kainhofer.com/virtuemart-2-extensions/</downloadUrl>
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
<option value="1">PLG_ORDERNUMBER_YES</option> <option value="1">PLG_ORDERNUMBER_YES</option>
<option value="0">PLG_ORDERNUMBER_NO</option> <option value="0">PLG_ORDERNUMBER_NO</option>
</field> </field>
<field name="invoice_number_format" type="text" default="[year]/#" label="PLG_ORDERNUMBER_INVOICENR_FMT" description="PLG_ORDERNUMBER_INVOICENR_FMT_DESC"/> <field name="invoice_number_format" type="text" default="[year]-#" label="PLG_ORDERNUMBER_INVOICENR_FMT" description="PLG_ORDERNUMBER_INVOICENR_FMT_DESC"/>
<field name="invoice_number_global" type="radio" default="0" label="PLG_ORDERNUMBER_INVOICENR_COUNTER" description="PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC"> <field name="invoice_number_global" type="radio" default="0" label="PLG_ORDERNUMBER_INVOICENR_COUNTER" description="PLG_ORDERNUMBER_INVOICENR_COUNTER_DESC">
<option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option> <option value="1">PLG_ORDERNUMBER_COUNTER_GLOBAL</option>
<option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option> <option value="0">PLG_ORDERNUMBER_COUNTER_PERFORMAT</option>
......
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment