diff options
| author | Roger Rehnelt <noreply@maennchen1.de> | 2026-10-04 19:28:06 +0200 |
|---|---|---|
| committer | Roger Rehnelt <noreply@maennchen1.de> | 2026-10-04 19:28:06 +0200 |
| commit | 9c3b88d208fa11f62fd11461604a995cff5b6656 (patch) | |
| tree | ba5c5ee16aae2c2fc3962a02aa47b75c319d5301 | |
| parent | ff6948abc961fbc7ef66e0700e9fe837b7ed9ea6 (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.phtml | 2 | ||||
| -rw-r--r-- | views/mods/mod_reviews/list.phtml | 2 | ||||
| -rw-r--r-- | views/mods/mod_reviews/mail_remind.phtml | 29 | ||||
| -rw-r--r-- | views/mods/mod_reviews/mail_remind_html.phtml | 30 | ||||
| -rw-r--r-- | views/mods/mod_reviews/order_view.phtml | 36 | ||||
| -rw-r--r-- | views/mods/mod_reviews/page.phtml | 19 | ||||
| -rw-r--r-- | views/mods/mod_reviews/remind_checkbox.phtml | 13 | ||||
| -rw-r--r-- | views/mods/mod_reviews/settings_edit.phtml | 8 |
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') +]); ?> |
