summaryrefslogtreecommitdiff
path: root/views/mods
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 /views/mods
parentec55f3e4012a85bf4979ff8508517f9054dd35d3 (diff)
parent039ba05e6c05863f51e79f36d78e4641a04f7479 (diff)
Merge remote-tracking branch 'origin/main'
# Conflicts: # src/changelog
Diffstat (limited to 'views/mods')
-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
3 files changed, 125 insertions, 5 deletions
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>