Index: /changelog
===================================================================
--- /changelog	(revision 7727)
+++ /changelog	(revision 7728)
@@ -364,2 +364,6 @@
 - Bugfix: Logo in E-Mail Konfiguration lÃ€sst sich speichern / Task #726
 - Bugfix: Einmal als bezahlt gemeldete Bestellungen ignorieren zukÃŒnftige ZahlungsbestÃ€tigungen auf diesen Bestellungen
+
+#4.2.4
+- Bugfix: Durch den Fix in 4.2.3. ("Zuordnung Produkt zu Artikel") wurden die Kategorien nicht mehr gespeichert. Dies ist korrigiert
+- Warnungen im Code aufgelÃ¶st
Index: /controller/wpsg_OrderController.class.php
===================================================================
--- /controller/wpsg_OrderController.class.php	(revision 7727)
+++ /controller/wpsg_OrderController.class.php	(revision 7728)
@@ -1363,13 +1363,4 @@
 			$this->shop->view['arTitles'] = explode('|', $this->shop->view['pflicht']['anrede_auswahl']);
 
-			$this->shop->view['shipping_country'] = $this->db->fetchRow("
-				SELECT
-					C.`id`, C.`name`, C.`kuerzel`
-				FROM
-					`".WPSG_TBL_LAND."` AS C
-				WHERE
-					C.`id` = '".wpsg_q(wpsg_getStr($this->shop->view['data']['shipping_land']))."'
-			");
-
 			$arAdr = $this->db->fetchRow("
 						SELECT
@@ -1472,6 +1463,5 @@
 		public function indexAction() {
 
-			if (wpsg_isSizedString($_REQUEST['do'], 'writeMultiRechnung') || wpsg_isSizedString($_REQUEST['wpsg_action'], 'showRechnung'))
-			{
+			if (wpsg_isSizedString($_REQUEST['do'], 'writeMultiRechnung') || wpsg_isSizedString($_REQUEST['wpsg_action'], 'showRechnung')) {
 
 				// Mehrere Rechnungen schreiben/anzeigen
@@ -1538,6 +1528,5 @@
 
 			}
-			else if (isset($_REQUEST['wpsg_order_doaction']))
-			{
+			else if (isset($_REQUEST['wpsg_order_doaction'])) {
 
 				if ($_REQUEST['wpsg_action'] == '-1') $this->addBackendError(__('Bitte eine Aktion wÃ€hlen!', 'wpsg'));
@@ -1692,6 +1681,5 @@
 			$this->shop->callMods('order_index_tab', array(&$this->shop->view['tabs']));
 
-			if (wpsg_isSizedArray($_REQUEST['filter']))
-			{
+			if (wpsg_isSizedArray($_REQUEST['filter'])) {
 
 				$_REQUEST['filter']['s'] = wpsg_sinput("text_field", $_REQUEST['filter']['s']);
@@ -1704,7 +1692,5 @@
 				$this->shop->view['arFilter'] = $_REQUEST['filter'];
 
-			}
-			else if (wpsg_isSizedArray($_SESSION['wpsg']['backend']['order']['arFilter']))
-			{
+			} else if (wpsg_isSizedArray($_SESSION['wpsg']['backend']['order']['arFilter'])) {
 
 				$this->shop->view['arFilter'] = $_SESSION['wpsg']['backend']['order']['arFilter'];
@@ -1715,6 +1701,5 @@
 
 			// Filter gesetzt?
-			foreach (Array('s', 'k_id', 'cdate_m', 'cdate_y', 'invoicedate_m', 'invoicedate_y') as $field)
-			{
+			foreach (Array('s', 'k_id', 'cdate_m', 'cdate_y', 'invoicedate_m', 'invoicedate_y') as $field) {
 
 				if (wpsg_isSizedString($this->shop->view['arFilter'][$field]) && $this->shop->view['arFilter'][$field] != '-1') { $this->shop->view['hasFilter'] = true; break; }
@@ -1723,6 +1708,5 @@
 
 
-			foreach ($this->shop->arStatus as $status_key => $status_label)
-			{
+			foreach ($this->shop->arStatus as $status_key => $status_label) {
 
 				if ($this->shop->get_option('wpsg_showincompleteorder') != '1' && $status_key == wpsg_ShopController::STATUS_UNVOLLSTAENDIG) continue;
Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 7727)
+++ /controller/wpsg_ShopController.class.php	(revision 7728)
@@ -1959,8 +1959,7 @@
 		 * der fÃŒr die Berechnung des Produktpreises notwendig ist
 		 */
-		public function getCalcTaxValue($tax_key)
-		{
-
-			if (wpsg_isSizedInt($this->view['oOrder']->adress_data['land'])) $country_id = $this->view['oOrder']->adress_data['land'];
+		public function getCalcTaxValue($tax_key) {
+
+			if (isset($this->view['oOrder']) && is_object($this->view['oOrder']) && wpsg_isSizedInt($this->view['oOrder']->adress_data['land'])) $country_id = $this->view['oOrder']->adress_data['land'];
 			if (wpsg_isSizedInt($this->country)) $country_id = $this->country;
 			if (wpsg_isSizedInt($country_id))
@@ -3470,19 +3469,4 @@
 
 		} // public function renderKundenField()
-
-		/**
-		 * Gibt den Basket aus der Session als Objekt zurÃŒck
-		 */
-		public function getFullBasket()
-		{
-
-			$arBasket = array();
-
-			// Session durchgehen
-
-
-			return $arBasket;
-
-		} // public function getFullBasket()
 
 		/**
Index: /lib/wpsg_calculation.class.php
===================================================================
--- /lib/wpsg_calculation.class.php	(revision 7727)
+++ /lib/wpsg_calculation.class.php	(revision 7728)
@@ -1208,6 +1208,6 @@
 				
 				$payment = $this->shop->arPayment[$_SESSION['wpsg']['checkout']['payment']];
-												
-				if (wpsg_isSizedArray($payment)) $this->addPayment(wpsg_getFloat($payment['price']), $this->shop->getBackendTaxview(), @$payment['tax_key'], $_SESSION['wpsg']['checkout']['payment']);
+
+                if (wpsg_isSizedArray($payment) && isset($payment['price'])) $this->addPayment(wpsg_getFloat($payment['price']), $this->shop->getBackendTaxview(), @$payment['tax_key'], $_SESSION['wpsg']['checkout']['payment']);
 				
 			}
Index: /lib/wpsg_db.class.php
===================================================================
--- /lib/wpsg_db.class.php	(revision 7727)
+++ /lib/wpsg_db.class.php	(revision 7728)
@@ -243,5 +243,5 @@
 			foreach ($data as $k => $v) {
 
-			    if (is_array($v)) var_dump($k);
+			    //if (is_array($v)) var_dump($v);
 
 				if ($v != "NOW()" && $v != "NULL") $v = "'".$v."'";
Index: /model/wpsg_order.class.php
===================================================================
--- /model/wpsg_order.class.php	(revision 7727)
+++ /model/wpsg_order.class.php	(revision 7728)
@@ -1111,5 +1111,5 @@
 				".$strLimit."
 			";
- 			
+
 			$arOrderID = $GLOBALS['wpsg_db']->fetchAssocField($strQuery, "id", "id");
 
@@ -1118,6 +1118,5 @@
 			$arReturn = array();
 			
-			foreach ($arOrderID as $order_id)
-			{
+			foreach ($arOrderID as $order_id) {
 
 				$oOrder = $GLOBALS['wpsg_sc']->cache->loadOrderObject($order_id);
@@ -1130,6 +1129,5 @@
 		} // public static function find($arFilter = array(), $load = true)
 
-		public static function getQueryParts($arFilter = array())
-		{
+		public static function getQueryParts($arFilter = array()) {
 
 			$strQuerySELECT = "";
@@ -1158,10 +1156,17 @@
 				
 			}
-			if (wpsg_isSizedString($arFilter['s']))
-			{
-
-				$strQueryWHERE .= "
-					AND
-					(
+
+			if (wpsg_isSizedString($arFilter['s'])) {
+
+                $strQueryWHERE_S_OR = "";
+
+				if (wpsg_ShopController::getShop()->hasMod('wpsg_mod_productvars')) {
+
+				    $strQueryWHERE_S_OR .= " OR O.`pvars` LIKE '%".wpsg_q($arFilter['s'])."%' ";
+
+                }
+
+                $strQueryWHERE .= "
+					AND (
 						OA.`vname` LIKE '%".wpsg_q($arFilter['s'])."%' OR
 						OA.`name` LIKE '%".wpsg_q($arFilter['s'])."%' OR
@@ -1171,14 +1176,14 @@
 						O.`onr` LIKE '%".wpsg_q($arFilter['s'])."%' OR
 						O.`id` = '".wpsg_q($arFilter['s'])."' 
+						".$strQueryWHERE_S_OR."
 					)
 				";
 
-				$bJoinOrderAdress = true;
-				$bJoinCustomer = true;
-
-			}
-
-			if (wpsg_isSizedInt($arFilter['status']) || $arFilter['status'] == '0')
-			{
+                $bJoinOrderAdress = true;
+                $bJoinCustomer = true;
+
+			}
+
+			if (wpsg_isSizedInt($arFilter['status']) || $arFilter['status'] == '0') {
 
 				$strQueryWHERE .= " AND O.`status` = '".wpsg_q($arFilter['status'])."' ";
Index: /mods/wpsg_mod_deliverytime.class.php
===================================================================
--- /mods/wpsg_mod_deliverytime.class.php	(revision 7727)
+++ /mods/wpsg_mod_deliverytime.class.php	(revision 7728)
@@ -180,12 +180,30 @@
 			$produkt_data['wpsg_mod_deliverytime_storelink'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_INT, wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_storelink'])));
 			$produkt_data['wpsg_mod_deliverytime_source'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_source'])));
-			$produkt_data['wpsg_mod_deliverytime_delay'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_VALUES, ['0, 1, 2'], wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_delay'])));
+
+		    //$produkt_data['wpsg_mod_deliverytime_delay'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_VALUES, ['0, 1, 2'], wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_delay'])));
+            wpsg_checkRequest(
+                'wpsg_mod_deliverytime_delay',
+                [WPSG_SANITIZE_VALUES, ['0', '1', '2']],
+                __('Hinweistext bei VerzÃ¶gerungen anzeigen', 'wpsg'),
+                $produkt_data,
+                $_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_delay']
+            );
+
 			$produkt_data['wpsg_mod_deliverytime_delaytext'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_FLOAT, wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_delaytext'])));
 			$produkt_data['wpsg_mod_deliverytime_delaytime'] = wpsg_tf(wpsg_q(wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_delaytime']), WPSG_SANITIZE_FLOAT)));
+
 			$produkt_data['wpsg_mod_deliverytime_holiday'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_VALUES, ['0, 1, 2'], wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_holiday'])));
+            wpsg_checkRequest(
+                'wpsg_mod_deliverytime_holiday',
+                [WPSG_SANITIZE_VALUES, ['0', '1']],
+                __('Urlaubszeit', 'wpsg'),
+                $produkt_data,
+                $_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_holiday']
+            );
+
 			$produkt_data['wpsg_mod_deliverytime_holidaytext'] = wpsg_q(wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_holidaytext'])));
 			$produkt_data['wpsg_mod_deliverytime_holidayStart'] = wpsg_q(wpsg_xss(wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_holidayStart'])));
 			$produkt_data['wpsg_mod_deliverytime_holidayEnd'] = wpsg_q(wpsg_xss(wpsg_getStr($_REQUEST['wpsg_mod_deliverytime']['wpsg_mod_deliverytime_holidayEnd'])));
-			
+
 		} // public function produkt_save_before(&$produkt_data)
 
Index: /mods/wpsg_mod_productvars.class.php
===================================================================
--- /mods/wpsg_mod_productvars.class.php	(revision 7727)
+++ /mods/wpsg_mod_productvars.class.php	(revision 7728)
@@ -64,6 +64,5 @@
 		} // public function settings_edit()
 
-		public function settings_save()
-		{
+		public function settings_save() {
 
 		    $this->shop->update_option('wpsg_mod_productvars_showProduct', $_REQUEST['wpsg_mod_productvars_showProduct'], false, false, WPSG_SANITIZE_CHECKBOX);
Index: /mods/wpsg_mod_produktartikel.class.php
===================================================================
--- /mods/wpsg_mod_produktartikel.class.php	(revision 7727)
+++ /mods/wpsg_mod_produktartikel.class.php	(revision 7728)
@@ -692,10 +692,9 @@
         } // public function produkt_save_before(&$produkt_data)
     
-        public function produkt_save(&$product_id)
-        {
+        public function produkt_save(&$product_id) {
 
             if (isset($_REQUEST['wpsg_mod_produktartikel'])) $comment = wpsg_sinput("key", $_REQUEST['wpsg_mod_produktartikel']['kommentare']); else $comment = false;
     
-            $this->getPostIdFromProductId($product_id, $_REQUEST['wpsg_mod_produktartikel']['path'], $comment, wpsg_sinput("key", $_REQUEST['wpsg_produktartikel_menuorder']), false, wpsg_sinput("key", @$_REQUEST['disabled']));
+            $this->getPostIdFromProductId($product_id, $_REQUEST['wpsg_mod_produktartikel']['path'], $comment, wpsg_sinput("key", $_REQUEST['wpsg_produktartikel_menuorder']), true, wpsg_sinput("key", @$_REQUEST['disabled']));
     
         } // public function produkt_save($produkt_id)
@@ -1015,6 +1014,5 @@
          * Wird kein Post gefunden, so wird der Post angelegt und zugeordnet
          */
-        private function getPostIdFromProductId($product_id, $path = false, $comment_status = false, $menu_order = false, $update = false, $disabled = false)
-        {
+        private function getPostIdFromProductId($product_id, $path = false, $comment_status = false, $menu_order = false, $update = false, $disabled = false) {
     
             global $current_user;
@@ -1046,6 +1044,6 @@
 				\wp_delete_post($double_post_id);
 				
-			}			
-    
+			}
+
             if (wpsg_isSizedInt($post_id) && $update !== true) return $post_id;
             else {
@@ -1166,9 +1164,9 @@
                     // Alte Zuordnung lÃ¶schen
                     $this->db->Query("DELETE FROM `".$this->shop->prefix."term_relationships` WHERE `object_id` = '".wpsg_q($post_id)."'");
-    
+
                     // Neue Zuordnung speichern
                     if (wpsg_isSizedArray($_REQUEST['tax_input'][$this->shop->get_option('wpsg_mod_produktartikel_pathkey_cat')]))
                     {
-    
+
                         foreach ($_REQUEST['tax_input'][$this->shop->get_option('wpsg_mod_produktartikel_pathkey_cat')] as $c)
                         {
Index: /views/mods/mod_productvars/settings_edit.phtml
===================================================================
--- /views/mods/mod_productvars/settings_edit.phtml	(revision 7727)
+++ /views/mods/mod_productvars/settings_edit.phtml	(revision 7728)
@@ -51,5 +51,5 @@
   		<li role="presentation" class="active"><a href="#tab1" role="tab" data-toggle="tab"><?php echo __('Produktvariablen', 'wpsg'); ?></a></li>
   		<li role="presentation"><a href="#tab2" role="tab" data-toggle="tab"><?php echo __('Einstellungen', 'wpsg'); ?></a></li>  
-	</ul>
+	</ul>wps
 	<div class="tab-content">
 		<div id="tab1" role="tabpanel" class="tab-pane active">
@@ -66,8 +66,10 @@
 			
 			<div class="wpsg_productvars_form">
+
 				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_productvars_showProduct', __('Produktvariable(n) im Produkttemplate abfragen', 'wpsg'), $this->get_option('wpsg_mod_productvars_showProduct'), array('help' => 'wpsg_mod_productvars_showProduct')); ?>
 				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_productvars_showBasket', __('Produktvariable(n) im Warenkorbtemplate darstellen', 'wpsg'), $this->get_option('wpsg_mod_productvars_showBasket'), array('help' => 'wpsg_mod_productvars_showBasket')); ?>
 				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_productvars_showOverview', __('Produktvariable(n) im BestellÃŒbersichtstemplate darstellen', 'wpsg'), $this->get_option('wpsg_mod_productvars_showOverview'), array('help' => 'wpsg_mod_productvars_showOverview')); ?>
-				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_productvars_showMail', __('Produktvariable(n) im Mailtemplate nicht darstellen', 'wpsg'), $this->get_option('wpsg_mod_productvars_showMail'), array('help' => 'wpsg_mod_productvars_showMail')); ?>		
+				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_productvars_showMail', __('Produktvariable(n) im Mailtemplate nicht darstellen', 'wpsg'), $this->get_option('wpsg_mod_productvars_showMail'), array('help' => 'wpsg_mod_productvars_showMail')); ?>
+
 			</div>
 		</div>
Index: /views/produkttemplates/standard.phtml
===================================================================
--- /views/produkttemplates/standard.phtml	(revision 7727)
+++ /views/produkttemplates/standard.phtml	(revision 7728)
@@ -184,5 +184,7 @@
 
 		<?php /* FÃŒllmengenanzeige START */ ?>
+        <?php if ($this->hasMod('wpsg_mod_fuellmenge')) { ?>
 		<?php echo $this->callMod('wpsg_mod_fuellmenge', 'renderPriceInfo', [$oProduct->getPrice($this->view['data']['product_key']), $this->view['data']['fmenge'], $oProduct->getId()]); ?>
+        <?php } ?>
 		<?php /* FÃŒllmengenanzeige ENDE */ ?>
 
