summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Rehnelt <noreply@maennchen1.de>2026-10-04 19:28:06 +0200
committerRoger Rehnelt <noreply@maennchen1.de>2026-10-04 19:28:06 +0200
commit9c3b88d208fa11f62fd11461604a995cff5b6656 (patch)
treeba5c5ee16aae2c2fc3962a02aa47b75c319d5301
parentff6948abc961fbc7ef66e0700e9fe837b7ed9ea6 (diff)
Produktbewertungen: Erinnerung per E-Mail und Block
Mit Einwilligung in der Kasse bekommt der Kunde einige Tage nach dem Versand eine Sammelmail mit den Links zu seinen offenen Bewertungen, abbestellbar über einen Link. Neuer Block „Produktbewertungen“ zeigt die Bewertungen eines Produkts auf eigenen Seiten. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-rw-r--r--views/mods/mod_reviews/admin_index.phtml2
-rw-r--r--views/mods/mod_reviews/list.phtml2
-rw-r--r--views/mods/mod_reviews/mail_remind.phtml29
-rw-r--r--views/mods/mod_reviews/mail_remind_html.phtml30
-rw-r--r--views/mods/mod_reviews/order_view.phtml36
-rw-r--r--views/mods/mod_reviews/page.phtml19
-rw-r--r--views/mods/mod_reviews/remind_checkbox.phtml13
-rw-r--r--views/mods/mod_reviews/settings_edit.phtml8
8 files changed, 137 insertions, 2 deletions
diff --git a/views/mods/mod_reviews/admin_index.phtml b/views/mods/mod_reviews/admin_index.phtml
index 495a793..6d268c7 100644
--- a/views/mods/mod_reviews/admin_index.phtml
+++ b/views/mods/mod_reviews/admin_index.phtml
@@ -73,6 +73,8 @@
<?php echo $this->writeBackendMessage(); ?>
+ <?php echo $this->callMod('wpsg_mod_reviews', 'privacyNotice'); /* schon escaped */ ?>
+
<nav class="nav-tab-wrapper" aria-label="<?php echo esc_attr__('Bewertungen nach Status', 'wpsg'); ?>">
<?php foreach ($arTabs as $status => $label) { ?>
<a href="<?php echo esc_url(add_query_arg('status', $status, $base)); ?>" class="nav-tab<?php echo (($admin['status'] === $status)?' nav-tab-active':''); ?>"<?php if ($admin['status'] === $status) { ?> aria-current="page"<?php } ?>><?php echo esc_html($label); ?> (<?php echo intval($admin['count'][$status]??0); ?>)</a>
diff --git a/views/mods/mod_reviews/list.phtml b/views/mods/mod_reviews/list.phtml
index 1080b5f..985b2d8 100644
--- a/views/mods/mod_reviews/list.phtml
+++ b/views/mods/mod_reviews/list.phtml
@@ -13,7 +13,7 @@
?>
<section class="wpsg-reviews<?php if ($v['wide']) echo ' alignwide'; ?>" id="<?php echo esc_attr($section_id); ?>" aria-labelledby="<?php echo esc_attr($section_id.'-title'); ?>">
- <h2 class="wpsg-reviews__title" id="<?php echo esc_attr($section_id.'-title'); ?>"><?php echo esc_html__('Bewertungen', 'wpsg'); ?></h2>
+ <h2 class="wpsg-reviews__title" id="<?php echo esc_attr($section_id.'-title'); ?>"><?php echo esc_html($v['title']); ?></h2>
<?php echo $v['summary']; ?>
diff --git a/views/mods/mod_reviews/mail_remind.phtml b/views/mods/mod_reviews/mail_remind.phtml
new file mode 100644
index 0000000..1492153
--- /dev/null
+++ b/views/mods/mod_reviews/mail_remind.phtml
@@ -0,0 +1,29 @@
+<?php
+ /**
+ * Textmail: Erinnerung an eine Bewertung, je Bestellung die offenen Produkte mit Link (Modul Produktbewertungen)
+ *
+ * Die Zeilenumbrüche werden ausdrücklich ausgegeben, weil PHP einen Zeilenumbruch direkt nach dem schließenden PHP-Tag
+ * verschluckt.
+ * @version 4.6.1
+ */
+ defined('ABSPATH') || exit;
+
+ // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Textmail ohne HTML-Kontext, HTML-Escaping würde den Text verfälschen
+
+ $this->htmlMail = false;
+
+ $v = $this->view['wpsg_mod_reviews']['remind'];
+
+ echo (($v['name'] !== '')?wpsg_translate(__('Guten Tag #1#,', 'wpsg'), $v['name']):__('Guten Tag,', 'wpsg'))."\n\n";
+ echo _n('Sie hatten uns erlaubt, Sie an eine Bewertung zu erinnern. Wie gefallen Ihnen die Produkte aus Ihrer Bestellung?', 'Sie hatten uns erlaubt, Sie an eine Bewertung zu erinnern. Wie gefallen Ihnen die Produkte aus Ihren Bestellungen?', sizeof($v['orders']), 'wpsg')."\n\n";
+
+ foreach ($v['orders'] as $order) {
+
+ echo wpsg_translate(__('Bestellung #1# vom #2#', 'wpsg'), $order['nr'], $order['date'])."\n";
+ foreach ($order['positions'] as $position) echo '- '.wpsg_translate(__('#1# bewerten:', 'wpsg'), $position['name'])."\n ".$position['url']."\n";
+ echo "\n";
+
+ }
+
+ echo __('Jeder Link führt zum Formular für ein Produkt und gilt einmal.', 'wpsg')."\n\n";
+ echo __('Sie möchten keine Erinnerungen mehr? Hier abbestellen:', 'wpsg')."\n".$v['stop_url']."\n";
diff --git a/views/mods/mod_reviews/mail_remind_html.phtml b/views/mods/mod_reviews/mail_remind_html.phtml
new file mode 100644
index 0000000..7299f00
--- /dev/null
+++ b/views/mods/mod_reviews/mail_remind_html.phtml
@@ -0,0 +1,30 @@
+<?php
+ /**
+ * HTML-Mail: Erinnerung an eine Bewertung, je Bestellung die offenen Produkte mit Bild und Link (Modul Produktbewertungen)
+ * @version 4.6.1
+ */
+ defined('ABSPATH') || exit;
+
+ $this->htmlMail = true;
+
+ $v = $this->view['wpsg_mod_reviews']['remind'];
+?>
+<p><?php echo esc_html(($v['name'] !== '')?wpsg_translate(__('Guten Tag #1#,', 'wpsg'), $v['name']):__('Guten Tag,', 'wpsg')); ?></p>
+
+<p><?php echo esc_html(_n('Sie hatten uns erlaubt, Sie an eine Bewertung zu erinnern. Wie gefallen Ihnen die Produkte aus Ihrer Bestellung?', 'Sie hatten uns erlaubt, Sie an eine Bewertung zu erinnern. Wie gefallen Ihnen die Produkte aus Ihren Bestellungen?', sizeof($v['orders']), 'wpsg')); ?></p>
+
+<?php foreach ($v['orders'] as $order) { ?>
+<h2><?php echo esc_html(wpsg_translate(__('Bestellung #1# vom #2#', 'wpsg'), $order['nr'], $order['date'])); ?></h2>
+<table role="presentation" style="width:100%;">
+ <?php foreach ($order['positions'] as $position) { ?>
+ <tr>
+ <td style="width:76px; padding:6px 12px 6px 0; vertical-align:middle;"><?php if ($position['image'] !== '') { ?><img src="<?php echo esc_url($position['image']); ?>" alt="" width="64" height="64" style="display:block; width:64px; height:64px;" /><?php } ?></td>
+ <td style="padding:6px 0; vertical-align:middle;"><a href="<?php echo esc_url($position['url']); ?>"><?php echo esc_html(wpsg_translate(__('#1# bewerten', 'wpsg'), $position['name'])); ?></a></td>
+ </tr>
+ <?php } ?>
+</table>
+<?php } ?>
+
+<p><?php echo esc_html__('Jeder Link führt zum Formular für ein Produkt und gilt einmal.', 'wpsg'); ?></p>
+
+<p><?php echo esc_html__('Sie möchten keine Erinnerungen mehr?', 'wpsg'); ?> <a href="<?php echo esc_url($v['stop_url']); ?>"><?php echo esc_html__('Erinnerungen abbestellen', 'wpsg'); ?></a></p>
diff --git a/views/mods/mod_reviews/order_view.phtml b/views/mods/mod_reviews/order_view.phtml
new file mode 100644
index 0000000..fdd672c
--- /dev/null
+++ b/views/mods/mod_reviews/order_view.phtml
@@ -0,0 +1,36 @@
+<?php
+ /**
+ * Bestellansicht im Backend: Erinnerung per E-Mail und Bewertungen der Bestellung (Modul Produktbewertungen)
+ * @version 4.6.1
+ */
+ defined('ABSPATH') || exit;
+
+ $v = $this->view['wpsg_mod_reviews']['order'];
+ $c = $v['count'];
+ $submitted = intval($c[wpsg_review::STATUS_PENDING]) + intval($c[wpsg_review::STATUS_APPROVED]) + intval($c[wpsg_review::STATUS_REJECTED]);
+?>
+<?php echo wpsg_drawForm_AdminboxStart(__('Produktbewertungen', 'wpsg')); ?>
+<p class="wpsg-reviews-order">
+ <strong><?php echo esc_html__('Erinnerung per E-Mail', 'wpsg'); ?></strong><br />
+ <?php if ($v['remind'] === '') { ?>
+ <?php echo esc_html__('nicht gewünscht', 'wpsg'); ?>
+ <?php } else { ?>
+ <?php echo esc_html(wpsg_translate(__('eingewilligt am #1#', 'wpsg'), $v['remind'])); ?><br />
+ <?php if ($v['stop'] !== '') { ?>
+ <?php echo esc_html(wpsg_translate(__('abbestellt am #1#', 'wpsg'), $v['stop'])); ?>
+ <?php } else if ($v['sent'] !== '') { ?>
+ <?php echo esc_html(wpsg_translate(__('gesendet am #1#', 'wpsg'), $v['sent'])); ?>
+ <?php } else if ($v['skip'] !== '') { ?>
+ <?php echo esc_html(wpsg_translate(__('nicht gesendet, nichts mehr offen (#1#)', 'wpsg'), $v['skip'])); ?>
+ <?php } else if ($v['due'] !== '') { ?>
+ <?php echo esc_html(wpsg_translate(__('wird gesendet ab #1#', 'wpsg'), $v['due'])); ?>
+ <?php } else { ?>
+ <?php echo esc_html__('wartet auf den Status zum Bewerten', 'wpsg'); ?>
+ <?php } ?>
+ <?php } ?>
+</p>
+<p class="wpsg-reviews-order">
+ <strong><?php echo esc_html__('Bewertungen', 'wpsg'); ?></strong><br />
+ <?php echo esc_html(wpsg_translate(__('#1# abgegeben, #2# offen', 'wpsg'), $submitted, intval($c[wpsg_review::STATUS_INVITED]))); ?>
+</p>
+<?php echo wpsg_drawForm_AdminboxEnd(); ?>
diff --git a/views/mods/mod_reviews/page.phtml b/views/mods/mod_reviews/page.phtml
index f246c15..ef3d53f 100644
--- a/views/mods/mod_reviews/page.phtml
+++ b/views/mods/mod_reviews/page.phtml
@@ -13,6 +13,23 @@
<p class="wpsg-review-page__message" role="status"><?php echo esc_html((($page['status']??'') === wpsg_review::STATUS_APPROVED)?__('Vielen Dank für Ihre Bewertung. Sie ist jetzt veröffentlicht.', 'wpsg'):__('Vielen Dank für Ihre Bewertung. Sie erscheint, sobald wir sie freigegeben haben.', 'wpsg')); ?></p>
+ <?php } else if ($page['state'] === 'stop') { ?>
+
+ <h2 class="wpsg-review-page__title"><?php echo esc_html__('Erinnerungen abbestellen', 'wpsg'); ?></h2>
+ <p class="wpsg-review-page__message"><?php echo esc_html__('Sie bekommen dann keine E-Mail mehr, die Sie an eine Bewertung Ihrer Bestellungen erinnert. Bewerten können Sie weiter über die Links, die Sie schon haben, und im Kundenkonto.', 'wpsg'); ?></p>
+ <form method="post" action="<?php echo esc_url(add_query_arg(wpsg_mod_reviews::PARAM_STOP, $page['token'], (string)get_permalink())); ?>">
+ <?php wp_nonce_field('wpsg_review_stop_'.intval($page['order_id'])); ?>
+ <p class="wpsg_checkoutblock"><button type="submit" name="wpsg_review_stop_submit" value="1" class="wpsg_button<?php echo wpsg_button_class(); ?>"><?php echo esc_html__('Keine Erinnerungen mehr', 'wpsg'); ?></button></p>
+ </form>
+
+ <?php } else if ($page['state'] === 'stopped') { ?>
+
+ <p class="wpsg-review-page__message" role="status"><?php echo esc_html__('Erledigt: Sie bekommen keine Erinnerungen an eine Bewertung mehr.', 'wpsg'); ?></p>
+
+ <?php } else if ($page['state'] === 'stop_invalid') { ?>
+
+ <p class="wpsg-review-page__message"><?php echo esc_html__('Dieser Link ist ungültig. Bitte verwenden Sie den vollständigen Link aus der E-Mail.', 'wpsg'); ?></p>
+
<?php } else if ($page['state'] === 'invalid') { ?>
<p class="wpsg-review-page__message"><?php echo esc_html__('Dieser Link ist ungültig. Bitte verwenden Sie den vollständigen Link aus Ihrer Bestellung.', 'wpsg'); ?></p>
@@ -31,7 +48,7 @@
<?php } else { $errors = $page['errors']; $data = $page['data']; ?>
- <h2 class="wpsg-review-page__title"><?php echo esc_html(wpsg_translate(__('„#1#“ bewerten', 'wpsg'), $page['product'])); ?></h2>
+ <h2 class="wpsg-review-page__title"><?php echo esc_html(wpsg_translate(__('#1# bewerten', 'wpsg'), $page['product'])); ?></h2>
<?php if (sizeof($errors) > 0) { ?>
<div class="wpsg-review-page__errors" role="alert">
diff --git a/views/mods/mod_reviews/remind_checkbox.phtml b/views/mods/mod_reviews/remind_checkbox.phtml
new file mode 100644
index 0000000..5817cf3
--- /dev/null
+++ b/views/mods/mod_reviews/remind_checkbox.phtml
@@ -0,0 +1,13 @@
+<?php
+ /**
+ * Kasse, Zusammenfassung: Einwilligung in die Erinnerung an eine Bewertung, nicht vorbelegt (Modul Produktbewertungen)
+ * @version 4.6.1
+ */
+ defined('ABSPATH') || exit;
+?>
+<div class="wpsg_checkoutblock wpsg-review-remind">
+ <label>
+ <input type="checkbox" name="wpsg_mod_reviews[remind]" value="1" />
+ <?php echo esc_html($this->view['wpsg_mod_reviews']['remind_label']); ?>
+ </label>
+</div>
diff --git a/views/mods/mod_reviews/settings_edit.phtml b/views/mods/mod_reviews/settings_edit.phtml
index 7ee9555..9a047ff 100644
--- a/views/mods/mod_reviews/settings_edit.phtml
+++ b/views/mods/mod_reviews/settings_edit.phtml
@@ -12,6 +12,7 @@
}
?>
+<?php echo $this->view['wpsg_mod_reviews']['notice']; /* schon escaped, wpsg_mod_reviews::privacyNotice() */ ?>
<?php echo wpsg_drawForm_Select('wpsg_page_review', __('Seite „Bewertung abgeben“', 'wpsg'), $this->view['wpsg_mod_reviews']['pages'], $this->get_option('wpsg_page_review')); ?>
<?php echo wpsg_drawForm_Select('wpsg_mod_reviews_from_status', __('Bewerten möglich ab Status', 'wpsg'), $arStatus, $this->get_option('wpsg_mod_reviews_from_status')); ?>
<?php echo wpsg_drawForm_Select('wpsg_mod_reviews_approval', __('Neue Bewertungen', 'wpsg'), [
@@ -26,3 +27,10 @@
</div>
<div class="clearfix wpsg_clear"></div>
</div>
+<?php echo wpsg_drawForm_Checkbox(wpsg_mod_reviews::OPTION_REMIND, __('Erinnerung per E-Mail anbieten', 'wpsg'), strval($this->get_option(wpsg_mod_reviews::OPTION_REMIND)) === '1', [
+ 'hint' => __('In der Kasse erscheint ein Ankreuzfeld, nicht vorbelegt. Nur wer es ankreuzt, bekommt eine Mail mit den Links zu seinen offenen Bewertungen, mehrere Bestellungen zusammen in einer Mail. Ergänzen Sie dafür Ihre Datenschutzerklärung. Betreff und Absender: wpShopGermany → Konfiguration → E-Mail Konfiguration.', 'wpsg')
+]); ?>
+<?php echo wpsg_drawForm_Input(wpsg_mod_reviews::OPTION_REMIND_DAYS, __('Erinnerung nach Tagen', 'wpsg'), strval($this->get_option(wpsg_mod_reviews::OPTION_REMIND_DAYS)), [
+ 'type' => 'number', 'min' => 1, 'max' => 90,
+ 'hint' => __('Gezählt ab dem Status unter „Bewerten möglich ab Status“.', 'wpsg')
+]); ?>