summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaniel <noreply@maennchen1.de>2026-09-16 15:02:32 +0200
committerdaniel <noreply@maennchen1.de>2026-09-16 15:02:32 +0200
commit32c0b971707d90d4c2643b58a81170b8b5065fa9 (patch)
treec253193f2caaf19c009dcc5d8ed5d84b9c444336
parentec55f3e4012a85bf4979ff8508517f9054dd35d3 (diff)
parent039ba05e6c05863f51e79f36d78e4641a04f7479 (diff)
Merge remote-tracking branch 'origin/main'
# Conflicts: # src/changelog
-rw-r--r--views/admin/modulelist.phtml10
-rw-r--r--views/mods/mod_campaigns/campaign_addedit.phtml32
-rw-r--r--views/mods/mod_campaigns/conditions_fields.phtml23
-rw-r--r--views/mods/mod_campaigns/template_addedit.phtml75
4 files changed, 131 insertions, 9 deletions
diff --git a/views/admin/modulelist.phtml b/views/admin/modulelist.phtml
index 537ff78..9704987 100644
--- a/views/admin/modulelist.phtml
+++ b/views/admin/modulelist.phtml
@@ -38,6 +38,8 @@
</thead>
<tbody>
<?php foreach ($wpsg_update_data['modulinfo'] as $modul_key => $modul_info) { ?>
+ <?php /* Installierte Modulversion; Module ohne deklariertes $version liefern null -> vor PHP-8-Warnungen und version_compare()-Deprecations schuetzen. */ ?>
+ <?php $modul_version_installed = ($this->shop->hasModInstalled($modul_key) ? ($this->shop->arAllModule[$modul_key]->version ?? '') : ''); ?>
<tr style="font-style:normal;" class="<?php
if ($modul_info['free'] === true) echo 'active';
@@ -66,7 +68,7 @@
<td>
<?php if ($this->shop->hasModInstalled($modul_key)) { ?>
- <?php echo $this->shop->arAllModule[$modul_key]->version; ?>
+ <?php echo $modul_version_installed; ?>
<?php } ?>
</td>
@@ -100,7 +102,7 @@
</td>
<td><?php
- if ($modul_info['active'] === true && $modul_info['version'] != $modul_info['version_latest'] && version_compare($modul_info['version_latest'], $this->shop->arAllModule[$modul_key]->version) < 0)
+ if ($modul_info['active'] === true && $modul_info['version'] != $modul_info['version_latest'] && version_compare($modul_info['version_latest'], $modul_version_installed) < 0)
{
echo $modul_info['version_latest'];
@@ -115,7 +117,7 @@
echo $modul_info['version'];
- if ($this->shop->hasModInstalled($modul_key) && $modul_info['version'] === $this->shop->arAllModule[$modul_key]->version)
+ if ($this->shop->hasModInstalled($modul_key) && $modul_info['version'] === $modul_version_installed)
{
echo ' - <strong class="wpsg_message_ok">'.__('aktuell', 'wpsg').'</strong>';
@@ -127,7 +129,7 @@
echo ' - <strong class="wpsg_error">'.__('neue Version verfügbar', 'wpsg').'</strong><br />'.wpsg_translate(__('<a href="#1#">wpShopGermany Update</a> notwendig', 'wpsg'), WPSG_URL_WP.'wp-admin/plugins.php');
}
- else if ($this->shop->hasModInstalled($modul_key) && version_compare($modul_info['version'], $this->shop->arAllModule[$modul_key]->version) > 0)
+ else if ($this->shop->hasModInstalled($modul_key) && version_compare($modul_info['version'], $modul_version_installed) > 0)
{
echo ' - <strong class="wpsg_error">'.__('neue Version verfügbar', 'wpsg').'</strong>';
diff --git a/views/mods/mod_campaigns/campaign_addedit.phtml b/views/mods/mod_campaigns/campaign_addedit.phtml
index 538d663..69d6fb2 100644
--- a/views/mods/mod_campaigns/campaign_addedit.phtml
+++ b/views/mods/mod_campaigns/campaign_addedit.phtml
@@ -69,7 +69,7 @@
<option value="0"><?php echo __('Kein Versandprofil zugeordnet', 'wpsg'); ?></option>
<?php foreach ($templates as $template) { ?>
<?php $templateId = intval($template['id']); ?>
- <option value="<?php echo $templateId; ?>" <?php selected($assignedTemplateId, $templateId); ?>>
+ <option value="<?php echo $templateId; ?>" data-trigger-event="<?php echo esc_attr((string)($template['trigger_event'] ?? '')); ?>" <?php selected($assignedTemplateId, $templateId); ?>>
<?php echo esc_html($template['name']); ?>
</option>
<?php } ?>
@@ -212,3 +212,33 @@
</div>
</form>
</div>
+<script type="text/javascript">/* <![CDATA[ */
+
+ /**
+ * Die Bedingung "Bestellstatus" ergibt nur Sinn, wenn das zugeordnete Versandprofil auf
+ * den Statuswechsel-Trigger steht. Beim Produktkauf steht die Bestellung zum
+ * Pruefzeitpunkt immer auf "Eingegangen" — die Bedingung koennte dort nur diesen einen
+ * Wert treffen und wuerde jede andere Auswahl den Versand verhindern.
+ */
+ ( function() {
+
+ var elTemplate = document.getElementById('template_id');
+ var elCond = document.getElementById('wpsg_cond_order_status_wrap');
+
+ if (!elTemplate || !elCond) return;
+
+ function wpsgToggleStatusCondition() {
+
+ var elOption = elTemplate.options[elTemplate.selectedIndex];
+ var sEvent = (elOption ? elOption.getAttribute('data-trigger-event') : '');
+
+ elCond.style.display = ((sEvent === 'order_status') ? '' : 'none');
+
+ }
+
+ elTemplate.addEventListener('change', wpsgToggleStatusCondition);
+ wpsgToggleStatusCondition();
+
+ } )();
+
+/* ]]> */</script>
diff --git a/views/mods/mod_campaigns/conditions_fields.phtml b/views/mods/mod_campaigns/conditions_fields.phtml
index 25c8379..d122b05 100644
--- a/views/mods/mod_campaigns/conditions_fields.phtml
+++ b/views/mods/mod_campaigns/conditions_fields.phtml
@@ -22,7 +22,27 @@
?>
<p><small><?php echo __('Optionale Bedingungen. Nur gesetzte Felder werden geprüft; es müssen alle gesetzten Bedingungen zutreffen, damit die Kampagne ausgelöst wird.', 'wpsg'); ?></small></p>
-<p>
+<?php
+ /**
+ * Bedingung "Bestellstatus" — vorerst deaktiviert, weil sie in keinem der beiden
+ * Trigger einen Nutzen hat:
+ *
+ * - Produktkauf: die Bestellung steht zum Pruefzeitpunkt immer auf "Eingegangen",
+ * jede andere Auswahl wuerde den Versand nur verhindern.
+ * - Statuswechsel: der Zielstatus steht bereits als Trigger-Wert im Versandprofil,
+ * die Bedingung waere eine Dublette davon.
+ *
+ * Zum Reaktivieren genuegt es, den folgenden Block wieder freizugeben; die Auswertung
+ * im Matcher (Feld order_status) und das Ein-/Ausblenden in beiden Formularen sind
+ * weiterhin vorhanden.
+ *
+ * Hinweis: Bereits gespeicherte order_status-Bedingungen bleiben wirksam, bis der
+ * betreffende Datensatz einmal neu gespeichert wird — buildConditionsFromRequest()
+ * uebernimmt nur Felder, die auch im Formular stehen.
+ */
+?>
+<?php /*
+<p id="wpsg_cond_order_status_wrap">
<label for="cond_order_status"><strong><?php echo __('Bestellstatus', 'wpsg'); ?></strong></label><br />
<select id="cond_order_status" name="cond[order_status]" class="widefat">
<option value=""><?php echo __('— egal —', 'wpsg'); ?></option>
@@ -31,6 +51,7 @@
<?php } ?>
</select>
</p>
+*/ ?>
<p>
<label for="cond_order_total"><strong><?php echo __('Bestellsumme (brutto)', 'wpsg'); ?></strong></label><br />
diff --git a/views/mods/mod_campaigns/template_addedit.phtml b/views/mods/mod_campaigns/template_addedit.phtml
index 06ea4ef..f46400b 100644
--- a/views/mods/mod_campaigns/template_addedit.phtml
+++ b/views/mods/mod_campaigns/template_addedit.phtml
@@ -5,8 +5,11 @@
$triggerValueOptions = isset($this->view['template_trigger_value_options']) && is_array($this->view['template_trigger_value_options']) ? $this->view['template_trigger_value_options'] : array();
$assignedCampaignIds = isset($data['assigned_campaign_ids']) && is_array($data['assigned_campaign_ids']) ? array_map('intval', $data['assigned_campaign_ids']) : array();
$isEdit = intval($data['id']) > 0;
+ $triggerStatusOptions = isset($this->view['template_trigger_status_options']) && is_array($this->view['template_trigger_status_options']) ? $this->view['template_trigger_status_options'] : array();
$selectedTriggerEvent = (string)$data['trigger_event'];
$selectedTriggerValue = (string)$data['trigger_value'];
+ $selectedTriggerProduct = (($data['trigger_product'] === null || $data['trigger_product'] === '')?'':(string)intval($data['trigger_product']));
+ $bStatusTrigger = ($selectedTriggerEvent === 'order_status');
?>
<div class="wrap columns-2 wpng_template_addedit">
<div class="icon32 icon32-posts-post" id="icon-edit"><br></div>
@@ -88,9 +91,9 @@
<?php } ?>
</select>
</p>
- <p>
+ <p id="wpsg_trigger_value_product_wrap"<?php if ($bStatusTrigger) { ?> style="display:none;"<?php } ?>>
<label for="trigger_value"><strong><?php echo __('Trigger Wert (Produkt)', 'wpsg'); ?></strong></label><br />
- <select class="widefat" id="trigger_value" name="trigger_value">
+ <select class="widefat" id="trigger_value" name="trigger_value"<?php if ($bStatusTrigger) { ?> disabled="disabled"<?php } ?>>
<option value=""><?php echo __('Produkt auswählen', 'wpsg'); ?></option>
<?php foreach ($triggerValueOptions as $productId => $productName) { ?>
<?php $productId = (string)intval($productId); ?>
@@ -98,12 +101,35 @@
<?php echo esc_html($productName); ?> (<?php echo intval($productId); ?>)
</option>
<?php } ?>
- <?php if ($selectedTriggerValue !== '' && !isset($triggerValueOptions[intval($selectedTriggerValue)])) { ?>
+ <?php if (!$bStatusTrigger && $selectedTriggerValue !== '' && !isset($triggerValueOptions[intval($selectedTriggerValue)])) { ?>
<option value="<?php echo esc_attr($selectedTriggerValue); ?>" selected="selected"><?php echo esc_html($selectedTriggerValue); ?></option>
<?php } ?>
</select>
<small><?php echo __('Für Trigger "WPSG: Produktkauf" wird hier die Produkt-ID ausgewählt.', 'wpsg'); ?></small>
</p>
+ <p id="wpsg_trigger_value_status_wrap"<?php if (!$bStatusTrigger) { ?> style="display:none;"<?php } ?>>
+ <label for="trigger_value_status"><strong><?php echo __('Trigger Wert (Zielstatus)', 'wpsg'); ?></strong></label><br />
+ <select class="widefat" id="trigger_value_status" name="trigger_value"<?php if (!$bStatusTrigger) { ?> disabled="disabled"<?php } ?>>
+ <option value=""><?php echo __('Bitte auswählen', 'wpsg'); ?></option>
+ <?php foreach ($triggerStatusOptions as $statusKey => $statusLabel) { ?>
+ <option value="<?php echo esc_attr((string)$statusKey); ?>" <?php selected($selectedTriggerValue, (string)$statusKey); ?>><?php echo esc_html($statusLabel); ?></option>
+ <?php } ?>
+ </select>
+ <small><?php echo __('Die Kampagne wird ausgelöst, sobald eine Bestellung diesen Status erreicht.', 'wpsg'); ?></small>
+ </p>
+ <p id="wpsg_trigger_product_wrap"<?php if (!$bStatusTrigger) { ?> style="display:none;"<?php } ?>>
+ <label for="trigger_product"><strong><?php echo __('Produkt (optional)', 'wpsg'); ?></strong></label><br />
+ <select class="widefat" id="trigger_product" name="trigger_product"<?php if (!$bStatusTrigger) { ?> disabled="disabled"<?php } ?>>
+ <option value=""><?php echo __('Alle Bestellungen', 'wpsg'); ?></option>
+ <?php foreach ($triggerValueOptions as $productId => $productName) { ?>
+ <?php $productId = (string)intval($productId); ?>
+ <option value="<?php echo esc_attr($productId); ?>" <?php selected($selectedTriggerProduct, $productId); ?>>
+ <?php echo esc_html($productName); ?> (<?php echo intval($productId); ?>)
+ </option>
+ <?php } ?>
+ </select>
+ <small><?php echo __('Ohne Auswahl gilt die Kampagne für jede Bestellung, die den Zielstatus erreicht.', 'wpsg'); ?></small>
+ </p>
</div>
</div>
@@ -149,3 +175,46 @@
</div>
</form>
</div>
+<script type="text/javascript">/* <![CDATA[ */
+
+ /**
+ * Schaltet die Trigger-Felder passend zum gewaehlten Ereignis um. Das jeweils nicht
+ * benutzte Feld wird zusaetzlich deaktiviert, damit es nicht mitgesendet wird — beide
+ * Auswahlfelder heissen trigger_value.
+ */
+ ( function() {
+
+ var elEvent = document.getElementById('trigger_event');
+
+ if (!elEvent) return;
+
+ function wpsgToggleTrigger() {
+
+ var bStatus = (elEvent.value === 'order_status');
+
+ [
+ ['wpsg_trigger_value_product_wrap', 'trigger_value', !bStatus],
+ ['wpsg_trigger_value_status_wrap', 'trigger_value_status', bStatus],
+ ['wpsg_trigger_product_wrap', 'trigger_product', bStatus]
+ ].forEach(function(a) {
+
+ var elWrap = document.getElementById(a[0]);
+ var elField = document.getElementById(a[1]);
+
+ if (elWrap) elWrap.style.display = (a[2] ? '' : 'none');
+ if (elField) elField.disabled = !a[2];
+
+ });
+
+ // Der Bestellstatus als Bedingung ergibt nur beim Statuswechsel-Trigger Sinn.
+ var elCond = document.getElementById('wpsg_cond_order_status_wrap');
+ if (elCond) elCond.style.display = (bStatus ? '' : 'none');
+
+ }
+
+ elEvent.addEventListener('change', wpsgToggleTrigger);
+ wpsgToggleTrigger();
+
+ } )();
+
+/* ]]> */</script>