=== Review Wall ===
Contributors: norml, aleksandrsapyan
Tags: reviews, google reviews, customer feedback, review widget
Requires at least: 6.0
Tested up to: 7.1
Stable tag: 1.5.0
Requires PHP: 8.0
License: GPL-2.0+
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Collect private customer feedback, offer an equal Google review option, and display reviews in a customizable widget.

== Description ==

Review Wall gives businesses a simple, neutral feedback page. A visitor selects a rating and then sees the same two choices regardless of that rating:

* Open the Google review page configured by the website administrator.
* Send private feedback to the website administrator.

The selected rating never hides, changes, or promotes either choice. Private feedback stays in WordPress and is not sent to Google or Norml Studio.

You can create separate feedback URLs for different locations or services. Each destination uses its own URL key and Google review link while sharing the same feedback-page design.

Review Wall also includes an optional review widget. Administrators can add reviews they are permitted to reproduce, include an original source link, and display the collection with a shortcode. The plugin does not fetch or store content from the Google Places API.

== Key Features ==

* Neutral feedback flow with equal public-review and private-feedback choices for every rating.
* A default Google review destination plus optional destination-specific URLs.
* Custom feedback-page logo and text.
* Private feedback stored as administrator-only WordPress content.
* Optional visitor email address.
* Rate limiting, duplicate protection, and a honeypot on public feedback submissions.
* WordPress personal-data exporter, eraser, and suggested privacy-policy text.
* Manually managed review widget with calculated average rating and review count.
* Configurable widget colors, button, title, and read-more text.
* No license key, premium gate, or required account.

== Installation ==

1. Upload the `review-wall` folder to `/wp-content/plugins/`, or install Review Wall through the WordPress Plugins screen.
2. Activate the plugin.
3. Open **Review Wall → Settings**.
4. Add your default Google review URL and customize the feedback-page text.
5. Share the generated feedback page with customers.

== Usage ==

=== Configure the Default Destination ===

1. Open **Review Wall → Settings**.
2. Add a logo if desired.
3. Enter the Google review URL for your primary location.
4. Save the settings.

The default destination is used when the feedback page has no destination key or has an unknown key.

=== Create Destination-Specific Links ===

1. In **Review Wall → Settings**, find **Add New URL**.
2. Enter a destination name, such as "Downtown Location."
3. Enter a URL key or leave it empty to generate one.
4. Enter that destination's Google review URL.
5. Share the resulting URL, such as `example.com/feedback/?id=downtown`.

=== Manage Private Feedback ===

Private feedback is available under **Review Wall → Private Feedback**. Each record contains the selected rating, feedback text, and the visitor's email address only when they chose to provide one.

=== Display the Review Widget ===

1. Open **Review Wall → Review Widget**.
2. Add only reviews you have permission to reproduce.
3. Add the original review URL when available.
4. Configure the widget appearance.
5. Place `[review_wall_google_reviews]` in a shortcode-enabled post, page, or block.

== Privacy ==

When a visitor sends private feedback, Review Wall stores the rating, feedback text, and optional email address in the website's WordPress database. The record remains until an administrator deletes it or uninstalls the plugin.

The plugin temporarily uses a one-way salted hash of the visitor's IP address for rate limiting. Review Wall does not store the raw IP address.

Review Wall adds suggested text to the WordPress privacy-policy guide and integrates with WordPress personal-data export and erasure tools for feedback associated with an email address.

Review Wall makes no server-side requests to Google or Norml Studio. When a visitor chooses the separately presented Google review option, their browser opens the administrator-configured external URL. Google's own [Privacy Policy](https://policies.google.com/privacy) and [Terms of Service](https://policies.google.com/terms) then apply.

== Frequently Asked Questions ==

= Does a low rating hide the Google review link? =

No. Every rating leads to the same screen with the same Google review and private-feedback choices.

= Is an email address required for private feedback? =

No. The email field is optional.

= Does Review Wall send private feedback to Google or Norml Studio? =

No. Private feedback is stored only in the website's WordPress database.

= Does the plugin need a license or API key? =

No. Version 1.5.0 removes the former license service and Google Places API integration. All included features are available after activation.

= Can I create different links for multiple locations? =

Yes. Each destination can have its own name, URL key, and Google review link.

= How do I display the review widget? =

Add reviews under **Review Wall → Review Widget**, then place `[review_wall_google_reviews]` in a shortcode-enabled area.

== Upgrade Notice ==

= 1.5.0 =

Review Wall now uses a neutral feedback flow. The license service and automatic Google Places review sync have been removed. Legacy reviews imported by that sync are removed during the upgrade; reviews entered manually remain available.

== Changelog ==

= 1.5.0 =
* Replaced rating-based review routing with equal Google review and private-feedback choices for every rating
* Removed the license gate and all requests to the former Reviews Wall service
* Retired automatic Google Places API syncing and API-key storage
* Removed reviews imported by the retired Places sync while preserving manually entered widget reviews
* Added optional source URLs and locally calculated summary data to the review widget
* Replaced the abandoned Remodal dependency with native expandable review content
* Stored new private feedback with private post status and administrator-only capabilities
* Added submission rate limiting, duplicate suppression, input limits, and a honeypot
* Made visitor email optional
* Added WordPress privacy-policy text plus personal-data export and erasure callbacks
* Added direct source links for individual widget reviews when provided

= 1.4.0 =
* Added direct Google Maps links for individual synced reviews when Google provides a review URL
* Added schema support for storing per-review URLs
* Preserved the existing review modal as a fallback when no direct review URL is available
* Added type-appropriate sanitization for registered settings and explicit admin capability checks
* Fixed widget output escaping, external-link protection, and feedback form label associations
* Added automatic database upgrades for existing installations
* Prevented deactivation and uninstall from modifying pages without strong plugin ownership proof

= 1.3.4 =
* Removed conflicting H1 tags from templates

= 1.3.3 =
* Fixed floating point precision issues in star rating calculations

= 1.3.2 =
* Fixed incorrect photo rendering in the review popup

= 1.3.1 =
* Added a helper for photo retrieval by attachment ID or direct URL

= 1.3.0 =
* Added review-widget style settings
* Improved widget design flexibility
* Fixed several bugs and performance issues

= 1.2.0 =
* Added automatic Google review fetching and the former plugin license system

= 1.1.0 =
* Added manual review management
* Added the review widget shortcode

= 1.0.0 =
* Initial release

== Support ==

For support, contact maxtymosh@norml.studio.

== License ==

Review Wall is licensed under the GPLv2 or later.
