etechflow / module-advanced-product-reviews

etechflow/module-advanced-product-reviews

Advanced Product Reviews for Magento 2 — rich reviews with images & video, pros/cons, helpful voting, verified-buyer filters, review summaries, admin replies, Q&A, review reminders with auto-generated coupons, and headless (REST/GraphQL) support.

  • ETechFlow
magento2-module Compatibility: 2.4.7-2.4.8 Code Quality: Fail Tests: N/A Security: Pass OSL-3.0, AFL-3.0

ETechFlow Advanced Product Reviews for Magento 2

Rich, conversion-focused product reviews for Magento 2 (Open Source and Adobe
Commerce / Cloud). Replaces the bare core review experience with photos & video,
pros/cons, verified-buyer badges, helpful voting, review summaries, admin
replies, customer Q&A, post-purchase reminders with auto-generated coupons,
AI auto-translation, an analytics dashboard, and a full headless (GraphQL +
REST)
layer with a Hyvä theme integration.

  • Vendor / module: ETechFlow_AdvancedProductReviews
  • Compatibility: Magento 2.4.4 – 2.4.8, PHP 8.1 – 8.4, CE / EE / Cloud
  • Themes: Luma, Hyvä (via the companion ETechFlow_AdvancedProductReviewsHyva module), and headless storefronts (PWA Studio / custom)

Features

Storefront reviews

  • Photos & video on reviews (real MIME sniffing, not just extension checks, to block spoofed uploads)
  • Pros / cons lists and a "would recommend" flag
  • Verified Buyer badge (detected from the customer's order history)
  • "Was this helpful?" voting with duplicate-vote protection (per customer, and per guest via a privacy-preserving hash)
  • Summary bar: average rating, star distribution, recommend %, verified count
  • Filtering & sorting: by rating, verified-only, with-media; newest / oldest / most-helpful / highest / lowest
  • Comments on reviews, including store (admin) replies
  • AI auto-translation of reviews into the storefront language, powered by the Claude API, cached per language so each review is translated once

Customer Q&A

  • Customers ask questions on a product; staff or other customers answer
  • Moderation workflow (pending / approved / rejected), admin answers flagged as official

Post-purchase review reminders

  • Schedules a reminder email a configurable number of days after an order completes
  • Optional auto-generated coupon as a thank-you incentive (uses Magento SalesRule coupon generation)
  • Skips customers who have already reviewed; idempotent per order; cron-driven

Admin

  • Configuration under Stores ▸ Configuration ▸ ETechFlow ▸ Advanced Product Reviews
  • Grids for Comments, Questions, and Reminders with mass actions
  • Analytics dashboard (Reports ▸ Reviews Analytics): KPIs, rating distribution, 12-month trend, top products — dependency-free inline charts

Headless (Phase 7)

  • GraphQL API for summary, review list, Q&A, and mutations (vote / comment / ask / translate)
  • REST API for review summary and review-extra data
  • Hyvä companion module renders the whole UI from the GraphQL API (Tailwind + Alpine)

Installation

Composer (recommended)

composer require etechflow/module-advanced-product-reviews
bin/magento module:enable ETechFlow_AdvancedProductReviews
bin/magento setup:upgrade
bin/magento setup:di:compile        # production mode only
bin/magento cache:flush

Manual

Copy the module to app/code/ETechFlow/AdvancedProductReviews, then run the same
module:enable / setup:upgrade / cache:flush commands.

Hyvä stores should also install the companion module
etechflow/module-advanced-product-reviews-hyva (see its own README).


Configuration

Stores ▸ Configuration ▸ ETechFlow ▸ Advanced Product Reviews

Section Key settings
General Enable module, allow guest reviews, auto-approve
Review elements Pros/cons, recommend, helpful voting, comments (+ guest), Q&A
Media Enable images / videos, max counts & sizes, allowed video types
Translation (Claude) Enable, Claude API key (stored encrypted), model, auto-translate
Spam CAPTCHA toggle
Reminders Enable, delay (days), coupon toggle + SalesRule id, email template

Translation and Reminders ship OFF by default. Enable them and supply the
Claude API key / coupon rule when you're ready. The Claude key is stored with
Magento's encrypted-config field and is never committed to source.


Headless API

GraphQL

All types are namespaced with etf / Etf so they never collide with core.

Queries: etfReviewSummary, etfProductReviews (paged + filter + sort),
etfProductQuestions, and etf_review_summary added onto ProductInterface
(so a products query can pull the summary inline).

Mutations: etfVoteReviewHelpful, etfPostReviewComment,
etfAskProductQuestion, etfTranslateReview.

{
  etfReviewSummary(sku: "24-MB01") {
    review_count
    average_rating
    rating_distribution { rating count percent }
  }
  etfProductReviews(sku: "24-MB01", pageSize: 5, sort: HELPFUL,
                    filter: { verified_only: true }) {
    total_count
    items { review_id title rating nickname pros cons helpful_count
            media { media_type url } comments { author_name comment } }
  }
}

REST

Method Endpoint Auth
GET /V1/etechflow-reviews/summary/product/:productId anonymous
GET /V1/etechflow-reviews/summary/sku/:sku anonymous
GET /V1/etechflow-reviews/extra/review/:reviewId anonymous
GET /V1/etechflow-reviews/extra/:extraId admin
GET /V1/etechflow-reviews/extra/search admin
POST /V1/etechflow-reviews/extra admin
DELETE /V1/etechflow-reviews/extra/:extraId admin
curl https://store.example.com/rest/V1/etechflow-reviews/summary/sku/24-MB01

Data model

Eight tables, all etechflow_*, foreign-keyed to core review with
ON DELETE CASCADE (child rows clean up when a review is deleted):
review_extra, review_media, review_vote, review_comment,
review_translation, qa_question, qa_answer, review_reminder.

product_id columns are indexed, not hard-FK'd, so the module stays
compatible with Adobe Commerce Content Staging (which swaps the catalog
primary key to row_id).


Cron

Job Schedule Purpose
etechflow_reviews_send_reminders hourly (0 * * * *) Send due review reminders + issue coupons

Quality

  • Coding standard: Magento2 (PHP_CodeSniffer) — 0 errors
  • PHP 8.1–8.4, declare(strict_types=1) throughout, constructor property promotion
  • Service contracts (Api/) for repository + summary management; GraphQL and REST share the same service layer

Licensing & Activation

This module is commercially licensed. On a production host it stays inactive
until a valid license key is present
— every storefront, headless
(GraphQL/REST), and admin surface is gated, so there is no ungated bypass.

  • Activate: Stores ▸ Configuration ▸ eTechFlow ▸ Advanced Product Reviews ▸
    License → paste your key. Or open any admin grid (Comments / Q&A /
    Reminders / Analytics) to reach the in-admin gate page, choose a plan and
    pay by card (Stripe) — your subscription key is issued by the eTechFlow portal
    and saved automatically.
  • Key types: a per-module HMAC key, the shared eTechFlow bundle key (one
    key activates every eTechFlow module on the host), or an SP-XXXX
    subscription key validated against the licensing portal (with domain + server-IP
    checks and soft expiry).
  • Dev/staging is free: localhost, *.test, *.local, staging./dev.
    hosts, *.magento.cloud, ngrok tunnels, etc. bypass licensing automatically.
    You can also set Production Environment = No to bypass on any host.
  • HMAC and bundle keys validate offline (no phone-home); only SP-XXXX keys
    contact the portal, and results are cached.

Uninstall

bin/magento module:disable ETechFlow_AdvancedProductReviews
# optional data removal:
bin/magento setup:upgrade

Drop the etechflow_* tables manually if you want to remove stored data.


License

OSL-3.0 / AFL-3.0. See LICENSE.txt.

Author

ETechFlow — [email protected]

No changelog yet

The vendor hasn't published a changelog. Tagged releases appear in the Versions tab.

Versions
Version Stability QA Status Compatibility Released
1.1.5 stable Fail Magento 2.4.7-2.4.8 Details 2026-06-22 15:13:05
1.1.4 stable Not tested Not yet tested Details 2026-06-22 14:47:16
1.1.2 stable Not tested Not yet tested Details 2026-06-22 14:12:00
1.1.1 stable Not tested Not yet tested Details 2026-06-22 12:57:00
1.0.0 stable Not tested Not yet tested Details 2026-06-16 13:08:19

Requires 9

Package Constraint
magento/framework >=103.0.0
magento/module-catalog >=104.0.0
magento/module-customer >=103.0.0
magento/module-review >=100.4.0
magento/module-sales >=103.0.0
magento/module-sales-rule >=101.2.0
magento/module-store >=101.1.0
magento/module-ui >=101.2.0
php ~8.1.0||~8.2.0||~8.3.0||~8.4.0

Suggests 1

Package Reason
hyva-themes/magento2-theme-module Install on Hyvä-themed storefronts to enable the bundled Tailwind/Alpine reviews UI. Not required on Luma or other standard themes — the module detects the active theme automatically.

Compatibility

Each Magento release line is installed on its supported PHP versions, then the module is built (DI compilation + static-content deploy) and its unit and integration suites are run. The matrix shows the lines and PHP versions the module is confirmed to install and run on. Code-quality results further down (phpstan, phpcs, …) are reported separately and never affect compatibility.

Compatibility matrix (Magento × PHP)
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 Pass Pass
2.4.8 Pass Pass
2.4.9 not tested not tested

Code Quality

Advisory checks against the module's source. Static analysis runs once across the whole module; PHPStan re-runs per Magento + PHP version because resolvable symbols differ between releases. These NEVER affect the Compatibility badge — a phpcs finding can't make a module incompatible.

Static analysis

Coding standards (phpcs), mess detection (phpmd), copy-pasted code (cpd), PHP cross-version compatibility, composer.json validity. Each runs once for the whole module.

Static analysis results
Tool Status Findings Summary
PHPCS Fail 172 6 errors, 166 warnings (ruleset: Magento2) — 46 auto-fixable with phpcbf
PHPMD Warning 55 55 rule violations (MissingImport:21, NPathComplexity:11, CyclomaticComplexity:10, EmptyCatchBlock:6, UnusedFormalParameter:5)
Cpd Warning 1 1 duplicated chunk spanning 31 total lines (min-lines=5, min-tokens=70)
Composer validate Info 9 valid; 9 advisory notes (composer validate --strict)

PHPStan

Type-checks the module's PHP against a real Magento install at the configured gate level. Re-runs per Magento and PHP version because resolvable symbols differ between releases. Cell → details modal.

PHPStan results by Magento and PHP version
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 50 50
2.4.8 50 50
2.4.9 50 N/A

Tests

Unit and integration suites, run for each applicable Magento and PHP version. A test failure speaks to the module's behaviour, not its compatibility with a Magento line, so it is reported here separately and never reddens the compatibility matrix.

Unit tests

Unit tests results by Magento and PHP version
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 N/A N/A
2.4.8 N/A N/A
2.4.9 N/A N/A

Integration tests

Integration tests results by Magento and PHP version
Magento PHP 8.2 PHP 8.3 PHP 8.4 PHP 8.5
2.4.7 N/A N/A
2.4.8 N/A N/A
2.4.9 N/A N/A

Security

Security checks run directly against the module: an audit of its declared dependencies for known vulnerabilities (composer audit) and a scan of its source for malware and web-shell signatures. Each runs once. A malware detection fails the version outright.

Security results
Tool Status Findings Summary
Composer audit Pass 0
Malware scan Pass 0
License
OSL-3.0, AFL-3.0
Authors

More from etechflow

View vendor
Make it pay

Turn an existing module into recurring revenue.

If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.