From f835021d4b5f8b51c74e97323351622f1bb40d12 Mon Sep 17 00:00:00 2001
From: Reinhold Kainhofer <reinhold@kainhofer.com>
Date: Sat, 6 Sep 2014 00:42:12 +0200
Subject: [PATCH] V1.10: Fix issues with J3.0; install plugin table on
 install/update

---
 Makefile                                     |   2 +-
 ordernumber.php                              |  19 ++++++++++++-------
 ordernumber.script.php                       |  18 ++++++++++++++++--
 ordernumber.xml                              |  16 ++++++++--------
 releases/plg_vmshopper_ordernumber_v1.10.zip | Bin 0 -> 12638 bytes
 5 files changed, 37 insertions(+), 18 deletions(-)
 create mode 100644 releases/plg_vmshopper_ordernumber_v1.10.zip

diff --git a/Makefile b/Makefile
index 3673229..118d3ef 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 BASE=ordernumber
 PLUGINTYPE=vmshopper
-VERSION=1.9
+VERSION=1.10
 
 PLUGINFILES=$(BASE).php $(BASE).script.php $(BASE).xml index.html
 
diff --git a/ordernumber.php b/ordernumber.php
index 7ad7753..621e195 100644
--- a/ordernumber.php
+++ b/ordernumber.php
@@ -15,7 +15,6 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
         parent::__construct($subject, $config);
         /* Create the database table */
         $this->tableFields = array_keys ($this->getTableSQLFields ());
-        $this->onStoreInstallPluginTable($this->_psType);
     }
 
     public function getVmPluginCreateTableSQL () {
@@ -140,19 +139,19 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
 
         // Look up the current counter
         $db = JFactory::getDBO();
-        /* prevent sql injection attacks by escaping the user-entered format! */
-        $nr_escaped = $db->getEscaped ($nr);
+        /* prevent sql injection attacks by escaping the user-entered format! Empty for global counter... */
         /* For global counting, simply read the empty number_format entries! */
-        $q = 'SELECT `count` FROM `'.$this->_tablename.'` WHERE `number_type`='.(int)$nrtype.' AND `number_format`="'.($global?"":$nr_escaped).'"';
+        $nr_escaped = $global?"":$db->getEscaped ($nr);
+        $q = 'SELECT `count` FROM `'.$this->_tablename.'` WHERE `number_type`='.(int)$nrtype.' AND `number_format`="'.$nr_escaped.'"';
         $db->setQuery($q);
         $existing = $db->loadResult();
         $count = $existing?($existing+1):1;
 
         // Insert new counter value into the db
         if ($existing) {
-            $q = 'UPDATE `'.$this->_tablename.'` SET `count`= "'.$count.'" WHERE `number_type`='.(int)$nrtype.' AND `number_format`="'.($global?"":$nr_escaped).'"';
+            $q = 'UPDATE `'.$this->_tablename.'` SET `count`= "'.$count.'" WHERE `number_type`='.(int)$nrtype.' AND `number_format`="'.$nr_escaped.'"';
         } else {
-            $q = 'INSERT INTO `'.$this->_tablename.'` (`count`, `number_type`, `number_format`) VALUES ('.(int)$count.','.(int)$nrtype.', "'.($global?"":$nr_escaped).'")';
+            $q = 'INSERT INTO `'.$this->_tablename.'` (`count`, `number_type`, `number_format`) VALUES ('.(int)$count.','.(int)$nrtype.', "'.$nr_escaped.'")';
         }
         $db->setQuery( $q );
         $db->query();
@@ -188,7 +187,7 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
             $orderstatusForInvoice = VmConfig::get('inv_os',array());
             if(!is_array($orderstatusForInvoice)) $orderstatusForInvoice = array($orderstatusForInvoice); //for backward compatibility 2.0.8e
             $pdfInvoice = (int)VmConfig::get('pdf_invoice', 0); // backwards compatible
-            $force_create_invoice=JRequest::getInt('create_invoice', 0);
+            $force_create_invoice=JInput::getInt('create_invoice', 0);
             if ( in_array($orderDetails['order_status'],$orderstatusForInvoice)  or $pdfInvoice==1  or $force_create_invoice==1 ){
                 $nrtype = 1; /*invoice-nr*/
                 $fmt = $this->params->get ('invoice_number_format', "#");
@@ -215,5 +214,11 @@ class plgVmShopperOrdernumber extends vmShopperPlugin {
             return $data;
         }
     }
+    
+    /* In versions before VM 2.6.8, the onStoreInstallPluginTable function was protected, so the installer couldn't call it to create the plugin table...
+       This function simply is a public wrapper to make this function available to the installer on all VM versions: */
+	public function plgVmOnStoreInstallPluginTable($psType, $name='') {
+		return $this->onStoreInstallPluginTable($psType, $name);
+	}
 
 }
diff --git a/ordernumber.script.php b/ordernumber.script.php
index 5bfe935..caa5f20 100644
--- a/ordernumber.script.php
+++ b/ordernumber.script.php
@@ -6,6 +6,9 @@ defined('_JEXEC') or die('Restricted access');
  * @copyright Copyright (C) 2013-2014 Reinhold Kainhofer, office@open-tools.net
  * @license GPL v3+,  http://www.gnu.org/copyleft/gpl.html
  */
+defined('DS') or define('DS', DIRECTORY_SEPARATOR);
+if (!class_exists( 'VmConfig' )) 
+    require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php');
 
 class plgVmShopperOrdernumberInstallerScript
 {
@@ -29,12 +32,23 @@ class plgVmShopperOrdernumberInstallerScript
     /**
      * Called after any type of action
      *
-     * @param   string  $route  Which action is happening (install|uninstall|discover_install)
+     * @param   string  $route  Which action is happening (install|update|uninstall|discover_install)
      * @param   JAdapterInstance  $adapter  The object responsible for running this script
      *
      * @return  boolean  True on success
      */
 //     public function postflight($route, JAdapterInstance $adapter);
+    public function postflight ($type, $parent = null) {
+        if(!class_exists( 'vmPlugin' )) 
+            require JPATH_VM_ADMINISTRATOR.DS.'plugins'.DS.'vmplugin.php';
+        if(!class_exists( 'plgVmShopperOrdernumber' )) 
+            require JPATH_ROOT.DS.'plugins'.DS.'vmshopper'.DS.'ordernumber'.DS.'ordernumber.php';
+        $dispatcher = new JDispatcher();
+        $config = array('name' => 'ordernumber', 'type' => 'vmshopper');
+        $plugin = new plgVmShopperOrdernumber($dispatcher, $config);
+        $plugin->plgVmOnStoreInstallPluginTable('shopper');
+//         $dispatcher->trigger("plgVmOnStoreInstallPluginTable", array('vmshopper'));
+    }
  
     /**
      * Called on installation
@@ -79,7 +93,7 @@ class plgVmShopperOrdernumberInstallerScript
     {
         // Remove plugin table
         $db =& JFactory::getDBO();
-        $db->setQuery('DROP TABLE `#__virtuemart_shopper_plg_ordernumber`;');
+        $db->setQuery('DROP TABLE IF EXISTS `#__virtuemart_shopper_plg_ordernumber`;');
         $db->query();
     }
 }
\ No newline at end of file
diff --git a/ordernumber.xml b/ordernumber.xml
index bad71ae..32999cd 100644
--- a/ordernumber.xml
+++ b/ordernumber.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<extension version="1.6" type="plugin" group="vmshopper" method="upgrade">
+<extension version="2.5" type="plugin" group="vmshopper" method="upgrade">
     <name>VMSHOPPER_ORDERNUMBER</name>
     <creationDate>2013-01-09</creationDate>
     <author>Reinhold Kainhofer</author>
@@ -7,8 +7,8 @@
     <authorUrl>http://www.open-tools.net/</authorUrl>
     <copyright>Copyright (C) 2012-2014 Reinhold Kainhofer. All rights reserved.</copyright>
     <license>http://www.gnu.org/licenses/gpl-3.0.html GNU/GPLv3</license>
-    <version>1.9</version>
-    <releaseDate>2014-01-13</releaseDate>
+    <version>1.10</version>
+    <releaseDate>2014-08-31</releaseDate>
     <releaseType>Minor update</releaseType>
     <downloadUrl>http://www.open-tools.net/virtuemart-2-extensions/vm2-ordernumber-plugin.html</downloadUrl>
 
@@ -18,14 +18,14 @@
         <filename plugin="ordernumber">ordernumber.php</filename>
         <filename>ordernumber.script.php</filename>
         <filename>index.html</filename>
-	<folder>language</folder>
+    <folder>language</folder>
     </files>
     <scriptfile>ordernumber.script.php</scriptfile>
     <languages folder="language">
-	<language tag="en-GB">en-GB/en-GB.plg_vmshopper_ordernumber.ini</language>
-	<language tag="en-GB">en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini</language>
-	<language tag="de-DE">de-DE/de-DE.plg_vmshopper_ordernumber.ini</language>
-	<language tag="de-DE">de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini</language>
+        <language tag="en-GB">en-GB/en-GB.plg_vmshopper_ordernumber.ini</language>
+        <language tag="en-GB">en-GB/en-GB.plg_vmshopper_ordernumber.sys.ini</language>
+        <language tag="de-DE">de-DE/de-DE.plg_vmshopper_ordernumber.ini</language>
+        <language tag="de-DE">de-DE/de-DE.plg_vmshopper_ordernumber.sys.ini</language>
     </languages>
     <!-- Joomla 2.5 & 3.0 config -->
     <config>
diff --git a/releases/plg_vmshopper_ordernumber_v1.10.zip b/releases/plg_vmshopper_ordernumber_v1.10.zip
new file mode 100644
index 0000000000000000000000000000000000000000..076ce15134dc99ad2fe9169eebb0649616e20d0a
GIT binary patch
literal 12638
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
AlmGw#

literal 0
HcmV?d00001

-- 
GitLab