summaryrefslogtreecommitdiff
path: root/views/mods
diff options
context:
space:
mode:
authordaniel <noreply@maennchen1.de>2026-09-24 11:24:12 +0200
committerdaniel <noreply@maennchen1.de>2026-09-24 11:24:12 +0200
commita95de0fa4cd3c617ef08a9679a6c32ae5f676fda (patch)
treeb78bd9fa23550e7dfd03cc693032cce5e9048236 /views/mods
parent19a8938fa3b41a6c6ed1e15c20586f860f4a637b (diff)
- Feature: PHP 8.3 Kompatibilität
- Feature: SmartCheckout - Ersatz für EinSeitenCheckout - Feature: Optik im Frontend an moderne Themes angepasst
Diffstat (limited to 'views/mods')
-rw-r--r--views/mods/mod_basketteaser/smartcheckout.phtml44
-rw-r--r--views/mods/mod_orderupload/smartcheckout_checkout.phtml77
-rw-r--r--views/mods/mod_orderupload/smartcheckout_row.phtml21
-rw-r--r--views/mods/mod_paypalapi/overview_preauth_button.phtml15
-rw-r--r--views/mods/mod_productvars/smartcheckout_row.phtml57
5 files changed, 214 insertions, 0 deletions
diff --git a/views/mods/mod_basketteaser/smartcheckout.phtml b/views/mods/mod_basketteaser/smartcheckout.phtml
new file mode 100644
index 0000000..712098c
--- /dev/null
+++ b/views/mods/mod_basketteaser/smartcheckout.phtml
@@ -0,0 +1,44 @@
+<?php
+
+ /**
+ * Template für die Warenkorbteaserprodukte im SmartCheckout
+ *
+ * Das Mengenfeld hat bewusst keinen Namen: es wird so bei den Aktualisierungen des
+ * Checkouts nicht mitgeschickt. Erst der Button überträgt die Menge unter
+ * wpsg_mod_basketteaser_row[ID] (siehe onModuleClick in smartcheckout.js).
+ */
+
+?>
+<div class="sc_teaser">
+
+ <div class="sc_teaser_title"><?php echo esc_html__('Das könnte Sie auch interessieren', 'wpsg'); ?></div>
+
+ <?php foreach ($this->view['wpsg_mod_basketteaser']['products'] as $p) { ?>
+ <div class="sc_teaser_item" data-sc-item>
+
+ <?php if ($p['image'] !== '') { ?>
+ <div class="sc_teaser_image">
+ <img src="<?php echo esc_url($p['image']); ?>" alt="<?php echo esc_attr($p['name']); ?>" loading="lazy" />
+ </div>
+ <?php } ?>
+
+ <div class="sc_teaser_body">
+ <div class="sc_teaser_name">
+ <?php if ($p['link'] !== '') { ?>
+ <a href="<?php echo esc_url($p['link']); ?>"><?php echo esc_html($p['name']); ?></a>
+ <?php } else { ?>
+ <?php echo esc_html($p['name']); ?>
+ <?php } ?>
+ </div>
+ <div class="sc_teaser_price"><?php echo esc_html($p['price']); ?></div>
+ </div>
+
+ <div class="sc_teaser_action">
+ <input type="text" inputmode="numeric" class="sc_teaser_amount" value="1" data-sc-amount aria-label="<?php echo esc_attr__('Menge', 'wpsg'); ?>" />
+ <button type="button" class="sc_button sc_button_secondary" data-sc-send="wpsg_mod_basketteaser_row[<?php echo intval($p['id']); ?>]"><?php echo esc_html__('Hinzufügen', 'wpsg'); ?></button>
+ </div>
+
+ </div>
+ <?php } ?>
+
+</div>
diff --git a/views/mods/mod_orderupload/smartcheckout_checkout.phtml b/views/mods/mod_orderupload/smartcheckout_checkout.phtml
new file mode 100644
index 0000000..7da51cb
--- /dev/null
+++ b/views/mods/mod_orderupload/smartcheckout_checkout.phtml
@@ -0,0 +1,77 @@
+<?php
+
+ /**
+ * Template für den Bestellupload im SmartCheckout
+ *
+ * Aufbau und Verhalten wie beim Upload zum Produkt (smartcheckout_row.phtml): Dateiliste mit Größe und
+ * Löschen, darunter die Dateiauswahl. Die Datei wird direkt nach der Auswahl hochgeladen (data-sc-upload,
+ * siehe smartcheckout.js), entfernt wird über data-sc-send, beides landet in
+ * wpsg_mod_orderupload::smartcheckout_ajax(). Der Block wird bei jeder Antwort neu geliefert.
+ */
+
+ $arUploads = (array)($_SESSION['wpsg']['wpsg_mod_orderupload'] ?? []);
+ $uploadsum = floatval($this->view['wpsg_mod_orderupload']['uploadsum'] ?? 0);
+ $maxweight = (string)($this->view['wpsg_mod_orderupload']['maxweight'] ?? '');
+ $bRequired = ($this->get_option('wpsg_mod_orderupload_optional') != '1');
+ $bMulti = ($this->get_option('wpsg_mod_orderupload_multifiles') == '1');
+ $arMessages = (array)($this->view['wpsg_mod_orderupload']['messages'] ?? []);
+ $arAllowed = (array)($this->view['wpsg_mod_orderupload']['allowedext'] ?? []);
+ $strAccept = implode(',', array_map(function($ext) { return '.'.$ext; }, $arAllowed));
+
+?>
+<div class="sc_orderupload">
+
+ <h2 class="sc_title"><?php echo esc_html__('Dateiupload', 'wpsg'); ?><?php if ($bRequired) { ?><span class="sc_required" aria-hidden="true">*</span><?php } ?></h2>
+
+ <div class="sc_upload">
+
+ <div class="sc_upload_label"><?php echo esc_html__('Upload zur Bestellung', 'wpsg'); ?></div>
+
+ <div class="sc_upload_target">
+
+ <?php /* Meldungen des letzten Uploads bzw. Entfernens, wie beim Upload zum Produkt direkt am Block */ ?>
+ <?php foreach ($arMessages as $message) { ?>
+ <div class="sc_upload_message sc_upload_message_<?php echo esc_attr($message['type']); ?>"><?php echo wp_kses_post($message['text']); ?></div>
+ <?php } ?>
+
+ <?php if (wpsg_isSizedArray($arUploads)) { ?>
+ <ul>
+ <?php foreach ($arUploads as $ou_index => $ou) { ?>
+ <li>
+ <a href="<?php echo esc_url($ou[2]); ?>" target="_blank" rel="noopener"><?php echo wpsg_hspc($ou[0]); ?> <span class="size">(<?php echo esc_html(wpsg_formatSize($ou[3])); ?>)</span></a>
+ <a
+ href="#"
+ class="removeLink"
+ role="button"
+ data-sc-send="wpsg_mod_orderupload_remove"
+ data-sc-value="<?php echo intval($ou_index); ?>"
+ data-sc-confirm="<?php echo esc_attr__('Sind Sie sich sicher, dass Sie dieses Dokument aus der Bestellung entfernen möchten?', 'wpsg'); ?>"
+ title="<?php echo esc_attr__('Upload entfernen.', 'wpsg'); ?>"
+ ><img src="<?php echo esc_url(WPSG_URL.'views/gfx/bin_x.png'); ?>" alt="<?php echo esc_attr__('Löschen', 'wpsg'); ?>" /></a>
+ </li>
+ <?php } ?>
+ </ul>
+ <?php } ?>
+
+ <?php if ($uploadsum > 0) { ?>
+ <input
+ type="file"
+ name="wpsg_mod_orderupload_file<?php echo (($bMulti)?'[]':''); ?>"
+ data-sc-upload="1"
+ data-sc-upload-wait="<?php echo esc_attr__('Bitte warten ', 'wpsg'); ?>"
+ <?php if ($strAccept !== '') { ?>accept="<?php echo esc_attr($strAccept); ?>"<?php } ?>
+ <?php echo (($bMulti)?'multiple="multiple"':''); ?>
+ aria-label="<?php echo esc_attr__('Upload zur Bestellung', 'wpsg'); ?>"
+ />
+ <?php } ?>
+
+ </div>
+
+ <div class="sc_hint"><?php echo esc_html(wpsg_translate(__('Es stehen Ihnen #1# Mb von #2# Mb für den Upload zur Verfügung', 'wpsg'), $uploadsum, $maxweight)); ?></div>
+ <?php if (wpsg_isSizedArray($arAllowed)) { ?>
+ <div class="sc_hint"><?php echo esc_html(wpsg_translate(__('Erlaubte Dateiendungen: #1#', 'wpsg'), implode(', ', $arAllowed))); ?></div>
+ <?php } ?>
+
+ </div>
+
+</div>
diff --git a/views/mods/mod_orderupload/smartcheckout_row.phtml b/views/mods/mod_orderupload/smartcheckout_row.phtml
new file mode 100644
index 0000000..66986f9
--- /dev/null
+++ b/views/mods/mod_orderupload/smartcheckout_row.phtml
@@ -0,0 +1,21 @@
+<?php
+
+ /**
+ * Template für den Upload zum Produkt an einer Warenkorbposition im SmartCheckout
+ *
+ * Das Ziel trägt dieselbe ID wie im klassischen Warenkorb, die Scripte aus basket_after.phtml
+ * ersetzen seinen Inhalt nach dem Hochladen bzw. Löschen.
+ */
+
+ $product_index = $this->view['wpsg_mod_orderupload']['product_index'];
+
+?>
+<div class="sc_upload">
+
+ <div class="sc_upload_label"><?php echo esc_html__('Upload zum Produkt', 'wpsg'); ?></div>
+
+ <div id="wpsg_mod_orderupload_<?php echo intval($product_index); ?>_target" class="wpsg_mod_orderupload_target sc_upload_target">
+ <?php echo $this->view['wpsg_mod_orderupload']['strHTMLTarget']; ?>
+ </div>
+
+</div>
diff --git a/views/mods/mod_paypalapi/overview_preauth_button.phtml b/views/mods/mod_paypalapi/overview_preauth_button.phtml
new file mode 100644
index 0000000..9fd775a
--- /dev/null
+++ b/views/mods/mod_paypalapi/overview_preauth_button.phtml
@@ -0,0 +1,15 @@
+<?php
+
+ /**
+ * Ersetzt in der Bestellübersicht den Button "zahlungspflichtig bestellen", solange die Zahlung noch nicht bei PayPal autorisiert wurde
+ */
+
+?>
+
+<?php if (($this->view['wpsg_mod_paypalapi']['preauth_changed']??false) === true) { ?>
+<div class="wpsg_mod_paypalapi_preauth_hint">
+ <p><?php echo esc_html__('Ihre Bestellung hat sich seit der Autorisierung geändert. Bitte autorisieren Sie die Zahlung erneut bei PayPal.', 'wpsg'); ?></p>
+</div>
+<?php } ?>
+
+<input type="submit" class="wpsg_orderbutton wpsg_mod_paypalapi_preauth_button" value="<?php echo esc_attr__('Mit PayPal bezahlen', 'wpsg'); ?>" name="wpsg_order" />
diff --git a/views/mods/mod_productvars/smartcheckout_row.phtml b/views/mods/mod_productvars/smartcheckout_row.phtml
new file mode 100644
index 0000000..b5845b5
--- /dev/null
+++ b/views/mods/mod_productvars/smartcheckout_row.phtml
@@ -0,0 +1,57 @@
+<?php
+
+ /**
+ * Template für die Produktvariablen an einer Warenkorbposition im SmartCheckout
+ *
+ * Die Feldnamen entsprechen denen aus basket_row.phtml, gespeichert wird über
+ * wpsg_mod_productvars::basket_preUpdate(). Pflichtfelder tragen required, der leere
+ * Platzhalter der Auswahl wird serverseitig zu not_set.
+ */
+
+ $p = $this->view['wpsg_mod_productvars']['p'];
+ $product_index = $p['product_index'];
+ $arError = (array)$this->view['error'];
+
+?>
+<div class="sc_pvars">
+
+ <?php foreach ($this->view['wpsg_mod_productvars']['data'] as $pv) { ?>
+ <?php
+
+ $field_name = 'wpsg_mod_productvars['.$pv['id'].']['.$product_index.']';
+ $field_id = 'wpsg_sc_pvar_'.$pv['id'].'_'.$product_index;
+ $value = wpsg_getStr($p['wpsg_mod_productvars'][$pv['id']]);
+ $bError = in_array('wpsg_mod_productvars_'.$pv['id'].'_'.$product_index, $arError);
+ $bRequired = ($pv['pflicht'] == '1');
+ $strRequired = (($bRequired)?'<span class="sc_required" aria-hidden="true">*</span>':'');
+
+ ?>
+ <div class="sc_pvar sc_pvar_typ<?php echo intval($pv['typ']); ?><?php echo (($bError)?' sc_invalid':''); ?>">
+
+ <?php if ($pv['typ'] == '3') { // Checkbox ?>
+ <label class="sc_pvar_check">
+ <input type="hidden" value="0" name="<?php echo esc_attr($field_name); ?>" />
+ <input type="checkbox" value="1" name="<?php echo esc_attr($field_name); ?>" <?php echo (($value === '1')?'checked="checked"':''); ?><?php echo (($bRequired)?' required':''); ?> />
+ <span><?php echo wpsg_hspc(__($pv['name'], 'wpsg')); ?><?php echo $strRequired; ?></span>
+ </label>
+ <?php } else { ?>
+ <label class="sc_pvar_label" for="<?php echo esc_attr($field_id); ?>"><?php echo wpsg_hspc(__($pv['name'], 'wpsg')); ?><?php echo $strRequired; ?></label>
+
+ <?php if ($pv['typ'] == '1') { // Auswahlfeld ?>
+ <select class="sc_pvar_input" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>"<?php echo (($bRequired)?' required':''); ?>>
+ <option value=""><?php echo __('Bitte wählen', 'wpsg'); ?></option>
+ <?php foreach ((array)$pv['auswahl'] as $option) { ?>
+ <option <?php echo ((wpsg_hspc($value) === wpsg_hspc($option))?'selected="selected"':''); ?> value="<?php echo wpsg_hspc($option); ?>"><?php echo wpsg_hspc($option); ?></option>
+ <?php } ?>
+ </select>
+ <?php } else if ($pv['typ'] == '4') { // Textfeld mehrzeilig ?>
+ <textarea class="sc_pvar_input" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>" rows="3"<?php echo (($bRequired)?' required':''); ?>><?php echo wpsg_hspc($value); ?></textarea>
+ <?php } else { // Textfeld ?>
+ <input class="sc_pvar_input" type="text" id="<?php echo esc_attr($field_id); ?>" name="<?php echo esc_attr($field_name); ?>" value="<?php echo wpsg_hspc($value); ?>"<?php echo (($bRequired)?' required':''); ?> />
+ <?php } ?>
+ <?php } ?>
+
+ </div>
+ <?php } ?>
+
+</div>