From 3881f82d87dfb933ec1e59161ff3cbc7ba9584ec Mon Sep 17 00:00:00 2001
From: Michael Danielczok <michael@pcsg.de>
Date: Thu, 19 Sep 2024 15:55:16 +0200
Subject: [PATCH] fix: standardized and simplified options for cart button
 click action

---
 bin/css/mini-basket.css           |  1 +
 bin/css/style.css                 |  5 +++--
 bin/css/variables.css             |  1 +
 bin/javascript/init.js            |  2 +-
 composer.json                     |  2 +-
 index.html                        | 20 +++++++++----------
 locale.xml                        | 32 +++++++++++++++++--------------
 settings.xml                      | 32 +++++++++++++++++++------------
 src/QUI/TemplateCologne/Utils.php | 11 ++++-------
 9 files changed, 59 insertions(+), 47 deletions(-)

diff --git a/bin/css/mini-basket.css b/bin/css/mini-basket.css
index 62be613..783dff8 100644
--- a/bin/css/mini-basket.css
+++ b/bin/css/mini-basket.css
@@ -11,6 +11,7 @@
     max-height: calc(100vh - 130px); /* header height + top bar height */
     padding: 0 !important;
     width: 350px;
+    top: calc(var(--_qui-cologne-header-height, 100px) - 1px) !important; /* -1 because of border width */
 }
 
 .quiqqer-order-basket-small-container > .qui-control {
diff --git a/bin/css/style.css b/bin/css/style.css
index a184fee..5eaf9e5 100644
--- a/bin/css/style.css
+++ b/bin/css/style.css
@@ -747,7 +747,7 @@ a.toTop:before {
     border-bottom: 1px solid #ddd;
     box-shadow: 0 0 20px 0 rgba(57, 57, 57, 0);
     display: flex;
-    height: 100px;
+    height: var(--_qui-cologne-header-height, 100px);
     justify-content: space-between;
     left: 0;
     position: relative;
@@ -758,8 +758,9 @@ a.toTop:before {
 }
 
 .cologne-header-fixed {
+    --_qui-cologne-header-height: 60px;
+
     box-shadow: 0 0 20px 0 rgba(57, 57, 57, 0.2);
-    height: 60px;
     position: fixed;
     z-index: 100; /* Because of the search dropdown */
 }
diff --git a/bin/css/variables.css b/bin/css/variables.css
index 47ad80e..434620f 100644
--- a/bin/css/variables.css
+++ b/bin/css/variables.css
@@ -17,6 +17,7 @@
     --bg-primary: #ddd;
     --bg-secondary: #f5f5f5;
 
+    --_qui-cologne-header-height: 100px;
 
     /* ecoyn / ecommerce */
     --_qui-order-basket-articles-image-width: var(--qui-order-basket-articles-image-width, 100px);
diff --git a/bin/javascript/init.js b/bin/javascript/init.js
index 80d9273..aa506c1 100644
--- a/bin/javascript/init.js
+++ b/bin/javascript/init.js
@@ -343,7 +343,7 @@ window.addEvent('domready', function () {
                 'package/quiqqer/order/bin/frontend/controls/basket/Button'
             ], function (Basket) {
                 new Basket({
-                    open  : BASKET_OPEN.toInt(),
+                    action  : BASKET_ACTION,
                     events: {
                         onCreate: function (Basket) {
                             var BasketNode     = Basket.getElm(),
diff --git a/composer.json b/composer.json
index 5689cd4..dd16d0b 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
         "quiqqer/core": "^2",
         "quiqqer/erp": "^3",
         "quiqqer/products": "^2",
-        "quiqqer/order": "^2",
+        "quiqqer/order": "^2.7.7",
         "quiqqer/product-bricks": "^2",
         "quiqqer/frontend-users": "^2",
         "quiqqer/menu": "^3",
diff --git a/index.html b/index.html
index 055e04b..145eb88 100644
--- a/index.html
+++ b/index.html
@@ -10,16 +10,16 @@
     {$Template->getHeader()}
 
     <script>
-        var BASKET_STYLE               = "{$basketStyle}";
-        var BASKET_OPEN                = "{$basketOpen}";
-        var INITAL_BASKET_PRICE        = "{$initialBasketPrice}";
-        var COUNT_LANGUAGES            = "{$countLanguages}";
-        var SHOW_CATEGORY_MENU         = "{$showCategoryMenu}";
-        var REGISTER_URL               = "{$registerSiteUrl}";
-        var SHOW_MENU_AFTER_SCROLL_POS = "{$showNavAfterScroll}"; // The number of pixels from top which the menu will be displayed.
-        var SHOW_MENU_SMOOTH           = "{$showMenuSmooth}"; // if true menu slides from top (animation)
-        var SET_MENU_POS_BACK_ON_INIT  = !!"{$setMenuPosBackOnInit}"; // if true menu slides from top (animation)
-        var SCROLL_OFFSET              = 80;
+        const BASKET_STYLE = "{$basketStyle}";
+        const BASKET_ACTION = "{$basketAction}";
+        const INITAL_BASKET_PRICE = "{$initialBasketPrice}";
+        const COUNT_LANGUAGES = "{$countLanguages}";
+        const SHOW_CATEGORY_MENU = "{$showCategoryMenu}";
+        const REGISTER_URL = "{$registerSiteUrl}";
+        const SHOW_MENU_AFTER_SCROLL_POS = "{$showNavAfterScroll}"; // The number of pixels from top which the menu will be displayed.
+        const SHOW_MENU_SMOOTH = "{$showMenuSmooth}"; // if true menu slides from top (animation)
+        const SET_MENU_POS_BACK_ON_INIT = !!"{$setMenuPosBackOnInit}"; // if true menu slides from top (animation)
+        const SCROLL_OFFSET = 80;
     </script>
 
     {fetch template="template/head/styles.html" Template=$Template}
diff --git a/locale.xml b/locale.xml
index 45a994e..7b129ba 100644
--- a/locale.xml
+++ b/locale.xml
@@ -509,22 +509,26 @@
             <en><![CDATA[If the option ist enabled, the product images are displayed in the shopping basket and order.]]></en>
         </locale>
 
-        <!-- basket open -->
-        <locale name="settings.shop.basketOpen">
-            <de><![CDATA[Aktion bei Klick auf Warenkorb]]></de>
-            <en><![CDATA[What should happen when the user clicks on the shopping cart?]]></en>
-        </locale>
-            <locale name="settings.shop.basketOpen.nothing">
-                <de><![CDATA[Bestellprozes nicht öffnen]]></de>
-                <en><![CDATA[Do not open order process]]></en>
+        <!-- basket action -->
+        <locale name="settings.shop.basketAction">
+            <de><![CDATA[Aktion bei Klick auf Warenkorb-Icon]]></de>
+            <en><![CDATA[Shopping card action on click]]></en>
+        </locale>
+        <locale name="settings.shop.basketAction.desc">
+            <de><![CDATA[Diese Option gilt nur für Desktop Ansicht. Auf mobilen Geräten wird immer zu der Bestellseite geleitet.]]></de>
+            <en><![CDATA[This option only applies to desktop view. On mobile devices it will always be redirected to the order process page.]]></en>
+        </locale>
+            <locale name="settings.shop.basketAction.openSmallBasket">
+                <de><![CDATA[Kleinen Warenkorb öffnen]]></de>
+                <en><![CDATA[Open small basket]]></en>
             </locale>
-            <locale name="settings.shop.basketOpen.window">
-                <de><![CDATA[Bestellprozes in einem Fenster öffnen]]></de>
-                <en><![CDATA[Open order process in a popup]]></en>
+            <locale name="settings.shop.basketAction.openOrderProcessUrl">
+                <de><![CDATA[Bestellseite öffnen]]></de>
+                <en><![CDATA[Open order process page]]></en>
             </locale>
-            <locale name="settings.shop.basketOpen.page">
-                <de><![CDATA[Zu Bestellprozess-Seite leiten]]></de>
-                <en><![CDATA[Go to order page]]></en>
+            <locale name="settings.shop.basketAction.openOrderProcess">
+                <de><![CDATA[Bestellung in einem Popup Fenster öffnen]]></de>
+                <en><![CDATA[Open order process in a popup]]></en>
             </locale>
         <!-- hide empty fields -->
         <locale name="settings.shop.hideEmptyFields">
diff --git a/settings.xml b/settings.xml
index 3f0a34b..36dacb1 100644
--- a/settings.xml
+++ b/settings.xml
@@ -40,9 +40,9 @@
                         <type><![CDATA[bool]]></type>
                         <defaultvalue>1</defaultvalue>
                     </conf>
-                    <conf name="basketOpen">
-                        <type><![CDATA[integer]]></type>
-                        <defaultvalue>2</defaultvalue>
+                    <conf name="basketAction">
+                        <type><![CDATA[string]]></type>
+                        <defaultvalue>openSmallBasket</defaultvalue>
                     </conf>
                     <conf name="hideEmptyFields">
                         <type><![CDATA[bool]]></type>
@@ -454,27 +454,35 @@
                                 </description>
                             </input>
 
-                            <!-- basket open (nothing order window, order page)-->
-                            <select conf="templateCologne.settings.basketOpen">
+
+
+
+                            <!-- basket action (openSmallBasket, openOrderProcessUrl, openOrderProcess (qui popup))-->
+                            <select conf="templateCologne.settings.basketAction">
                                 <text>
                                     <locale group="quiqqer/template-cologne"
-                                            var="settings.shop.basketOpen"
+                                            var="settings.shop.basketAction"
                                     />
                                 </text>
+                                <description>
+                                    <locale group="quiqqer/template-cologne"
+                                            var="settings.shop.basketAction.desc"
+                                    />
+                                </description>
 
-                                <option value="0">
+                                <option value="openSmallBasket">
                                     <locale group="quiqqer/template-cologne"
-                                            var="settings.shop.basketOpen.nothing"
+                                            var="settings.shop.basketAction.openSmallBasket"
                                     />
                                 </option>
-                                <option value="1">
+                                <option value="openOrderProcessUrl">
                                     <locale group="quiqqer/template-cologne"
-                                            var="settings.shop.basketOpen.window"
+                                            var="settings.shop.basketAction.openOrderProcessUrl"
                                     />
                                 </option>
-                                <option value="2">
+                                <option value="openOrderProcess">
                                     <locale group="quiqqer/template-cologne"
-                                            var="settings.shop.basketOpen.page"
+                                                var="settings.shop.basketAction.openOrderProcess"
                                     />
                                 </option>
                             </select>
diff --git a/src/QUI/TemplateCologne/Utils.php b/src/QUI/TemplateCologne/Utils.php
index bfa1bfa..098a86c 100644
--- a/src/QUI/TemplateCologne/Utils.php
+++ b/src/QUI/TemplateCologne/Utils.php
@@ -237,13 +237,10 @@ public static function getConfig(array $params): object|array|bool|string
         }
 
         // basket open
-        $basketOpen = 2;
+        $basketAction = $Project->getConfig('templateCologne.settings.basketAction');
 
-        switch ($Project->getConfig('templateCologne.settings.basketOpen')) {
-            case '0':
-            case '1':
-            case '2':
-                $basketOpen = $Project->getConfig('templateCologne.settings.basketOpen');
+        if (!in_array($basketAction, ['openSmallBasket', 'openOrderProcessUrl', 'openOrderProcess'])) {
+            $basketAction = 'openSmallBasket';
         }
 
         $settingsCSS = include 'settings.css.php';
@@ -355,7 +352,7 @@ public static function getConfig(array $params): object|array|bool|string
         $config['siteType'] = $siteType;
         $config['pageCustomClass'] = $pageCustomClass;
         $config['basketStyle'] = $basketStyle;
-        $config['basketOpen'] = $basketOpen;
+        $config['basketAction'] = $basketAction;
         $config['showCategoryMenu'] = $showCategoryMenu;
         $config['homeLink'] = $homeLink;
         $config['homeLinkText'] = $homeLinkText;
-- 
GitLab