diff options
| author | daniel <noreply@maennchen1.de> | 2026-09-16 15:02:32 +0200 |
|---|---|---|
| committer | daniel <noreply@maennchen1.de> | 2026-09-16 15:02:32 +0200 |
| commit | 32c0b971707d90d4c2643b58a81170b8b5065fa9 (patch) | |
| tree | c253193f2caaf19c009dcc5d8ed5d84b9c444336 | |
| parent | ec55f3e4012a85bf4979ff8508517f9054dd35d3 (diff) | |
| parent | 039ba05e6c05863f51e79f36d78e4641a04f7479 (diff) | |
Merge remote-tracking branch 'origin/main'
# Conflicts:
# src/changelog
| -rw-r--r-- | views/admin/modulelist.phtml | 10 | ||||
| -rw-r--r-- | views/mods/mod_campaigns/campaign_addedit.phtml | 32 | ||||
| -rw-r--r-- | views/mods/mod_campaigns/conditions_fields.phtml | 23 | ||||
| -rw-r--r-- | views/mods/mod_campaigns/template_addedit.phtml | 75 |
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> |
