Git Product home page Git Product logo

opengento / magento2-gdpr Goto Github PK

View Code? Open in Web Editor NEW
127.0 23.0 36.0 2.42 MB

Magento 2 GDPR module is a must have extension for the largest e-commerce CMS used in the world. The module helps to be GDPR compliant. Actually it allows the customers to erase, or export their personal data. As a merchant you have powerful tools to customize the extension capabilities and apply the finest privacy rules.

Home Page: https://opengento.fr/magento2-gdpr

License: MIT License

PHP 91.62% HTML 8.15% Less 0.24%
magento2 rgpd gdpr privacy magento2-module magento2-extension magento-2 magento-2-extension anonymization erasure

magento2-gdpr's Introduction

GDPR Module for Magento 2

Latest Stable Version License: MIT Packagist Packagist Codacy Badge

This extension fulfill the GDPR requirements for Magento 2.

Setup

Magento 2 Open Source or Commerce edition is required.

Composer installation

Run the following composer command:

composer require opengento/module-gdpr

Setup the module

Run the following magento command:

bin/magento setup:upgrade

If you are in production mode, do not forget to recompile and redeploy the static resources.

Features

See the screenshots of the module's features.

Users, guest and customer can:

  • Art. 16 GDPR Edit their personal data (native in vanilla)

  • Art. 17 GDPR

    • Customers can use their 'right to be forgotten'. Account deletion and anonymization can be done in 'My Account > Privacy Settings'. The password is required to ensure the customer legibility. The account will be erased within 1 hour, or as specified in configuration. The customer can undo the action in this time span.
    • Guest users can use their 'right to be forgotten'. Account deletion and anonymization can be done in the order view, they must fill the guest form first to show their order. The data will be erased within 1 hour, or as specified in the configuration. The guest can undo the action is this time spare.
    • The customers and guests will be erased after a configurable idle time.
    • The sales information are locked within a configurable time. These information are automatically erased after this period.

    As a merchant you can easily manage which type of entity must to be delete or anonymize. In the last case, the module allows to define which attribute must to be anonymize, and how it is.

Times are configurable too, you can define the period of cancellation for the erasure, the idle time for the users before they are erase, and the sales information lifetime.

  • Art. 20 GDPR
    • Customers can export their data in .zip archive containing file, .html (many others are available), with personal data. Personal data export can be done in 'My Account > Privacy Settings'.
    • Guest users can export their data in .zip archive containing file, .html (many others are available), with personal data. Personal data export can be done in the order view, they must fill the guest form first to show their order.
  • Cookie Policy in a disclosure popup are shown at the first time customer visit.

Details:

  • Erasure: delete or anonymize specific data thanks to configurable settings in admin ui.
  • Configure which order can be erased, regarding their state and life time.
  • Privacy data will be automatically erased after a delay.
  • Sales data are safely keeped till the preservation delay expired.
  • Choose the file name and the format of your choice for the privacy data export.
  • Choose which data is interpreted as privacy data and will be exported.
  • Actions related to the GDPR compliance are reported in the admin ui.
  • Merchants can execute and keep an eye on the performed actions from the admin ui.
  • Choose the CMS static block to show on the storefront by scope and features.
  • Enable or disable features for the storefront.
  • Notify the user when a GDPR action is performed, configure the template and sending settings.
  • Display the cookie disclosure pop-in and edit its content as you want.

Languages:

Open contributions to translations can be done with transifex.

  • bg_BG ; Bulgarian
  • de_DE ; German
  • en_US ; English
  • fr_FR ; French
  • it_IT ; Italian
  • nl_NL ; Dutch
  • pl_PL ; Polish
  • th_TH ; Thai
  • da_DK ; Danish

Many thanks to the translators who contributed directly here or with transifex!

Settings

The configuration for this module is available in 'Stores > Configuration > GDPR Compliance'.

Documentation

The documentation is available here.

Support

Raise a new request to the issue tracker.

Authors

  • Opengento Community - Lead - Twitter Follow
  • Thomas Klein - Maintainer - GitHub followers
  • Contributors - Contributor - GitHub contributors

License

This project is licensed under the MIT License - see the LICENSE details.

That's all folks!

magento2-gdpr's People

Contributors

aamant avatar anthony-blackbird avatar antoniocarboni avatar elisei avatar etienne-blackbird avatar fredericmartinez avatar fulmenef avatar krj29b avatar miraclebg avatar owebia avatar parakoopa avatar piets avatar quazz avatar somegeek avatar stigmi-man avatar thomas-kl1 avatar transifex-integration[bot] avatar vincentmarmiesse avatar wouter-toppy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magento2-gdpr's Issues

[BUG] Cannot instantiate interface

Description

There's an issue during setup:upgrade with the module. It prevents us to upgrade to 2.3.4 because we can't complete our deployment process.

Prerequisites

PHP Version:

  • 7.3.16

Magento Version:

  • 2.3.4

Module Version:

  • dev-master

Issue Details

Steps to reproduce the behavior
php bin/magento setup:upgrade

Expected behavior
Upgrade successful.

Screenshots

PHP Fatal error:  Uncaught Error: Cannot instantiate interface Opengento\Gdpr\Api\ActionInterface in /var/www/html/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:50
Stack trace:
#0 /var/www/html/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Opengento\\Gdpr\\...')
#1 /var/www/html/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Opengento\\Gdpr\\...')
#2 /var/www/html/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Opengento\\Gdpr\\...', NULL, 'action', 'Opengento\\Gdpr\\...')
#3 /var/www/html/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\AbstractFactory->getResolvedArgument('Opengento\\Gdpr\\...', Array, Array)
#4 /var/www/html/vendor/magento/framework/ObjectManager/Factory/Dynam in /var/www/html/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php on line 50

[ENHANCEMENT] make package compatible with Magento 2.4.0

Description

Please make the package compatible with Magento 2.4.0

Prerequisites

PHP Version:

  • 7.4.0

Magento Version:

  • 2.4.0

Issue Details

Could not find a version of package opengento/module-gdpr matching your minimum-stability (stable). Require it with an explicit version constraint allowing its desired stability.

Report all performed GDPR actions

Description

  • It requires major modifications.

Priority of the change: High

Which problem the feature would fix?
Customer actions associated to the personal data as the data consentement, data erasure, data export, must be reported and accessible by the store owner.

These data should describe which customer have performed which type of action. The date, the motivation (optional) and identity are collected too. The customer identity is requires as it's a proof of whom performed the request. The identity is an entity type with an entity ID.
These logs are useful to proove the GDPR conformity.

Additional context

In the admin ui, in the customer entry, a new section "GDPR users actions" is available. This section is a grid of all reported actions. The grid is filterable and sortable.
Each rows has a details button. This button redirect to the detail view page of the given reported action.

These actions logs can be the point to send notification. The store admin could be able to send a notification for each type of action in the admin grid and or the view page for example.

Contributing

  • Action API
  • Action SPI
  • Action Entity Data Persistance
  • Action Implementation
  • Action Settings & Configuration
  • Action frontend controllers
  • Action adminhtml controllers
  • Action console commands
  • Action backend management
  • Action backend grid
  • Auto-resolve performed by (designed by area)
  • Auto-resolve performed from (designed by area)

[BUG] Export does not catch NoSuchEntityException

Description

When an entity does not exists, the exporter does not catch the NoSuchEntityException

Issue Details

  1. Trigger an export of a customer
  2. Delete the customer before the exporter is processed'
  3. See error

Expected behavior
No errors should be thrown. The existing export should be removed.

Customer anonymize proccess : security issue

Steps to reproduce

  • Sign in as customer, use the right to be forgotten: click delete account action.
  • Wait till the erase process is run.

Expected result

  • After the erase process, the customer should be unable to sign in.
  • The logged in customer should be disconnected.

Actual result

  • The logged in customer is still connected and can visit the website as usual.
  • The customer still sign in if he knows the anonymized email address.

orders not in export (overwritten)

Orders are not in the export.

checked it. orders are generated and added to the $data array. but are overwritten by the SubscriberDataProcessor at line 35 where the subscriber data is added to $data['orders']

See PullRequest for fix #6

Console command performance

Description

Command/Console classes can be improved by using proxies in the constructor. As the console command classes are always instantiated when running the bin/magento command, it's not necessary to load the dependency as it's only used if the specific command is executed.
The solution is to pass proxy through the di. Warning, We cannot use the native auto-generated proxy of Magento over the erase and export manager because they are final. Solution is to remove the final or to implement our own proxy.

Magento 2 GDPR Compliance

All of the following fields must be processed by the anonymize/delete/export components by default:
https://devdocs.magento.com/guides/v2.3/architecture/gdpr/magento-2x.html

Export / Delete / Anonymize - Customer Guest Data

Provide a easy way for store owners to delete data from orders placed without account (guest checkout). Currently there seems to be no (easy) to do so.

A way to let customers do it themselves is by providing a way using their email address, send them a mail with a link to delete the data. That way no intervention from the store owner would be required. Maybe put in a threshold as some data need to be kept for a specified time for tax purposes.

[BUG] Should not ihnerit from final class

Description

There's an issue during di:compile with the module. It prevents us to upgrade to 2.3.2 because we can't complete our deployment process.

Prerequisites

PHP Version:

  • 7.2.20

Magento Version:

  • 2.3.2

Module Version:

  • dev-magento2.3.x (tag 3.0-beta is not push inside the composer.json)

Issue Details

Steps to reproduce the behavior
php bin/magento setup:di:compile --ansi --no-interaction

Expected behavior
Compile successful

Screenshots

a7eb6b12d180:/var/www/html$ php bin/magento setup:di:compile --ansi --no-interaction
Compilation was started.
Interceptors generation... 4/7 [================>-----------]  57% 3 mins 230.0 MiB[01-Aug-2019 12:54:19 UTC] PHP Fatal error:  Class Opengento\Gdpr\Model\ResourceModel\EraseEntity\Collection\Interceptor may not inherit from final class (Opengento\Gdpr\Model\ResourceModel\EraseEntity\Collection) in /var/www/html/generated/code/Opengento/Gdpr/Model/ResourceModel/EraseEntity/Collection/Interceptor.php on line 7
[01-Aug-2019 12:54:19 UTC] PHP Stack trace:
[01-Aug-2019 12:54:19 UTC] PHP   1. {main}() /var/www/html/bin/magento:0
[01-Aug-2019 12:54:19 UTC] PHP   2. Magento\Framework\Console\Cli->run() /var/www/html/bin/magento:23
[01-Aug-2019 12:54:19 UTC] PHP   3. Magento\Framework\Console\Cli->doRun() /var/www/html/vendor/symfony/console/Application.php:145
[01-Aug-2019 12:54:19 UTC] PHP   4. Magento\Framework\Console\Cli->doRun() /var/www/html/vendor/magento/framework/Console/Cli.php:105
[01-Aug-2019 12:54:19 UTC] PHP   5. Magento\Framework\Console\Cli->doRunCommand() /var/www/html/vendor/symfony/console/Application.php:262
[01-Aug-2019 12:54:19 UTC] PHP   6. Magento\Setup\Console\Command\DiCompileCommand->run() /var/www/html/vendor/symfony/console/Application.php:893
[01-Aug-2019 12:54:19 UTC] PHP   7. Magento\Setup\Console\Command\DiCompileCommand->execute() /var/www/html/vendor/symfony/console/Command/Command.php:255
[01-Aug-2019 12:54:19 UTC] PHP   8. Magento\Setup\Module\Di\App\Task\Manager->process() /var/www/html/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php:206
[01-Aug-2019 12:54:19 UTC] PHP   9. Magento\Setup\Module\Di\App\Task\Operation\Interception->doOperation() /var/www/html/setup/src/Magento/Setup/Module/Di/App/Task/Manager.php:56
[01-Aug-2019 12:54:19 UTC] PHP  10. Magento\Setup\Module\Di\Code\Generator->generateList() /var/www/html/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php:100
[01-Aug-2019 12:54:19 UTC] PHP  11. Magento\Setup\Module\Di\Code\Generator->generateClass() /var/www/html/setup/src/Magento/Setup/Module/Di/Code/Generator.php:69
[01-Aug-2019 12:54:19 UTC] PHP  12. Magento\Framework\Code\Generator\Io->includeFile() /var/www/html/vendor/magento/framework/Code/Generator.php:142
[01-Aug-2019 12:54:19 UTC] PHP  13. include() /var/www/html/vendor/magento/framework/Code/Generator/Io.php:160

Fatal error: Class Opengento\Gdpr\Model\ResourceModel\EraseEntity\Collection\Interceptor may not inherit from final class (Opengento\Gdpr\Model\ResourceModel\EraseEntity\Collection) in /var/www/html/generated/code/Opengento/Gdpr/Model/ResourceModel/EraseEntity/Collection/Interceptor.php on line 7

Call Stack:
    0.0005     392920   1. {main}() /var/www/html/bin/magento:0
    5.5432   19279728   2. Magento\Framework\Console\Cli->run() /var/www/html/bin/magento:23
    5.5517   19289464   3. Magento\Framework\Console\Cli->doRun() /var/www/html/vendor/symfony/console/Application.php:145
    5.5517   19289464   4. Magento\Framework\Console\Cli->doRun() /var/www/html/vendor/magento/framework/Console/Cli.php:105
   17.5125   53446296   5. Magento\Framework\Console\Cli->doRunCommand() /var/www/html/vendor/symfony/console/Application.php:262
   17.5125   53446296   6. Magento\Setup\Console\Command\DiCompileCommand->run() /var/www/html/vendor/symfony/console/Application.php:893
   17.5159   53451784   7. Magento\Setup\Console\Command\DiCompileCommand->execute() /var/www/html/vendor/symfony/console/Command/Command.php:255
   29.9723   67111680   8. Magento\Setup\Module\Di\App\Task\Manager->process() /var/www/html/setup/src/Magento/Setup/Console/Command/DiCompileCommand.php:206
  221.5212  228820288   9. Magento\Setup\Module\Di\App\Task\Operation\Interception->doOperation() /var/www/html/setup/src/Magento/Setup/Module/Di/App/Task/Manager.php:56
  305.4962  233075088  10. Magento\Setup\Module\Di\Code\Generator->generateList() /var/www/html/setup/src/Magento/Setup/Module/Di/App/Task/Operation/Interception.php:100
  338.7203  305420640  11. Magento\Setup\Module\Di\Code\Generator->generateClass() /var/www/html/setup/src/Magento/Setup/Module/Di/Code/Generator.php:69
  338.7334  305430488  12. Magento\Framework\Code\Generator\Io->includeFile() /var/www/html/vendor/magento/framework/Code/Generator.php:142
  338.7336  305439568  13. include('/var/www/html/generated/code/Opengento/Gdpr/Model/ResourceModel/EraseEntity/Collection/Interceptor.php') /var/www/html/vendor/magento/framework/Code/Generator/Io.php:160

Additional context
I sew there's similar issue closed a few days ago: #25
Not sure if I had to re-open it or create a new one

Magento 2.3.2; gdpr-module version 2.0.0-beta5

PHP Fatal error: Class Opengento\Gdpr\Console\Command\EraseCommand\Interceptor may not inherit from final class (Opengento\Gdpr\Console\Command\EraseCommand) in /usr4/data/web2124/web/generated/code/Opengento/Gdpr/Console/Command/EraseCommand/Interceptor.php on line 7

[BUG] pdf renderer fails to create a pdf file

Description

When trying to export a customer's data using pdf renderer I get an error

[2020-03-17 22:23:28] main.CRITICAL: Exception message: The PDF was not created successfully.
Trace: <pre>#1 Opengento\Gdpr\Service\Export\Renderer\AbstractRenderer->saveData('gdpr/e2ea3c6b50c...', array('customer' => array('email' => '[email protected]', 'firstname' => 'test', 'lastname' => 'test'), 'subscriber' => array())) called at [vendor/opengento/module-gdpr/Model/Export/ExportToFile.php:67]
#2 Opengento\Gdpr\Model\Export\ExportToFile->export(&Opengento\Gdpr\Model\ExportEntity#000000007fa568c400000000356e0a2e#) called at [vendor/opengento/module-gdpr/Model/ExportEntityManagement.php:89]
#3 Opengento\Gdpr\Model\ExportEntityManagement->export(&Opengento\Gdpr\Model\ExportEntity#000000007fa568c400000000356e0a2e#) called at [vendor/opengento/module-gdpr/Model/Export/ExportEntityData.php:68]
#4 Opengento\Gdpr\Model\Export\ExportEntityData->export(1, 'customer') called at [vendor/opengento/module-gdpr/Model/Action/Export/CreateOrExportAction.php:40]
#5 Opengento\Gdpr\Model\Action\Export\CreateOrExportAction->execute(&Opengento\Gdpr\Model\Action\Context#000000007fa568da00000000356e0a2e#) called at [vendor/opengento/module-gdpr/Model/Action/ActionComposite.php:115]
#6 Opengento\Gdpr\Model\Action\ActionComposite->process(&Opengento\Gdpr\Model\Action\Context#000000007fa568da00000000356e0a2e#) called at [vendor/opengento/module-gdpr/Model/Action/ActionComposite.php:89]
#7 Opengento\Gdpr\Model\Action\ActionComposite->execute(&Opengento\Gdpr\Model\Action\Context#000000007fa568da00000000356e0a2e#) called at [vendor/opengento/module-gdpr/Controller/Adminhtml/Privacy/MassExport.php:78]
#8 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport->massAction(&Magento\Customer\Model\ResourceModel\Customer\Collection\Interceptor#000000007fa565f700000000356e0a2e#) called at [vendor/magento/module-customer/Controller/Adminhtml/Index/AbstractMassAction.php:65]  #9 Magento\Customer\Controller\Adminhtml\Index\AbstractMassAction->execute() called at [generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php:24]
#10 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#11 Magento\Framework\App\Action\Action->dispatch(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#12 Magento\Backend\App\AbstractAction->dispatch(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#13 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#14 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]      #15 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(&Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor#000000007fa5676600000000356e0a2e#, &Closure#000000007fa5676c00000000356e0a2e#, &Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#16 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#17 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#), NULL) called at [generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php:39]
#18 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/App/FrontController.php:159]
#19 Magento\Framework\App\FrontController->processRequest(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#, &Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor#000000007fa5676600000000356e0a2e#) called at [vendor/magento/framework/App/FrontController.php:99]
#20 Magento\Framework\App\FrontController->dispatch(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#21 Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#22 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#23 Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#), array(array('default_store_se...', 'page_cache_from_...', 'storeCookieValid...', 'install', 'configHash'))) called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#24 Magento\Framework\App\FrontController\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000007fa563c800000000356e0a2e#) called at [vendor/magento/framework/App/Http.php:116]
#25 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#26 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#27 Magento\Framework\App\Bootstrap->run(&Magento\Framework\App\Http\Interceptor#000000007fa563a700000000356e0a2e#) called at [index.php:39]
</pre> [] []

The problem with the PDF renderer is it relies on the tool wkhtmltopdf and not purely on PHP. By itself this is an issue because this limits hosting environments where magento can be installed. No sane hosting provider will allow the installation of a system package in shared hosting environments.

So definitely as a first step if this PDF library is used we need to document this in the readme file that it relies on wkhtmltopdf for PDF generation. Then the user can disable it if it's not possible for his environment.

I think we could improve the warning here. The original error message is sh: 1: wkhtmltopdf: not found but is hidden behind the custom exception thrown.

There could be a check section about dependencies in the backend. For example it could check if the command exists and report it missing so that the user can expect the error to happen.

I finally proceeded with installing wkhtmltopdf from the debian 9 repos and ended up with another error

wkhtmltopdf 0.12.4

The switch --no-outline, is not support using unpatched qt, and will be ignored.The switch --enable-external-links, is not support using unpatched qt, and will be ignored.The switch --enable-internal-links, is not support using unpatched qt, and will be ignored.The switch --disable-smart-shrinking, is not support using unpatched qt, and will be ignored.QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-sys_m2electro'
qt.qpa.screen: QXcbConnection: Could not connect to display 
Could not connect to any X display.

This happens because the user needs patched qt version of wkhtmltopdf. You won't easily find the guide to install it. Thanks to ERPNext I know this is the way to install it on ubuntu / debian

sudo apt -y install libxrender1 libxext6 xfonts-75dpi xfonts-base
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb
sudo tar -xf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz -C /opt
sudo ln -s /opt/wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
sudo ln -s /opt/wkhtmltox/bin/wkhtmltoimage /usr/bin/wkhtmltoimage

I'm sure you can already see how hard it is to install the PDF capabilities for a non-trained user.

Finally after installing the patched qt version I'm receiving this error

Got error 'PHP message: PHP Fatal error:  Uncaught TypeError: Return value of Opengento\\Gdpr\\Model\\Export\\ExportEntityData::export() must be of the type string, object returned in /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Model/Export/ExportEntityData.php:68
Stack trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Model/Action/Export/CreateOrExportAction.php(40): Opengento\\Gdpr\\Model\\Export\\ExportEntityData->export(1, 'customer')
#1 /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Model/Action/ActionComposite.php(115): Opengento\\Gdpr\\Model\\Action\\Export\\CreateOrExportAction->execute(Object(Opengento\\Gdpr\\Model\\Action\\Context))
#2 /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Model/Action/ActionComposite.php(89): Opengento\\Gdpr\\Model\\Action\\ActionComposite->process(Object(Opengento\\Gdpr\\Model\\Action\\Context))
#3 /var/www/vhosts/example.com/httpdocs/vendor/opengento/mod...
', referer: https://example.com/admin__admin/customer/index/index/key/abc53e4ca9d7864b3eb2d47cd4101ce4bbe9d61d7b37e461b21af2a350f729f3/
[Wed Mar 18 01:04:14.913795 2020] [proxy_fcgi:error] [pid 22422:tid 139794717853440] [client 37.6.144.135:49250] AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught Error: Call to a member function getFilePath() on string in /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Controller/Adminhtml/Privacy/MassExport.php:81
Stack trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/magento/module-customer/Controller/Adminhtml/Index/AbstractMassAction.php(65): Opengento\\Gdpr\\Controller\\Adminhtml\\Privacy\\MassExport->massAction(Object(Magento\\Customer\\Model\\ResourceModel\\Customer\\Collection\\Interceptor))
#1 /var/www/vhosts/example.com/httpdocs/generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php(24): Magento\\Customer\\Controller\\Adminhtml\\Index\\AbstractMassAction->execute()
#2 /var/www/vhosts/example.com/httpdocs/vendor/magento/framework/App/Action/Action.php(108): Opengento\\Gdpr\\Controller\\Adminhtml\\Privacy\\MassExport\\Interceptor->execute()
#3 /var/www/vhosts/example.com/httpdocs/vendor/magento/module-backend/App/Abstract...
', referer: https://example.com/admin__admin/customer/index/index/key/abc53e4ca9d7864b3eb2d47cd4101ce4bbe9d61d7b37e461b21af2a350f729f3/
[Wed Mar 18 01:04:34.738615 2020] [proxy_fcgi:error] [pid 23376:tid 139794726246144] [client 37.6.144.135:49264] AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught Error: Call to a member function getFilePath() on string in /var/www/vhosts/example.com/httpdocs/vendor/opengento/module-gdpr/Controller/Adminhtml/Privacy/MassExport.php:81
Stack trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/magento/module-customer/Controller/Adminhtml/Index/AbstractMassAction.php(65): Opengento\\Gdpr\\Controller\\Adminhtml\\Privacy\\MassExport->massAction(Object(Magento\\Customer\\Model\\ResourceModel\\Customer\\Collection\\Interceptor))
#1 /var/www/vhosts/example.com/httpdocs/generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php(24): Magento\\Customer\\Controller\\Adminhtml\\Index\\AbstractMassAction->execute()
#2 /var/www/vhosts/example.com/httpdocs/vendor/magento/framework/App/Action/Action.php(108): Opengento\\Gdpr\\Controller\\Adminhtml\\Privacy\\MassExport\\Interceptor->execute()
#3 /var/www/vhosts/example.com/httpdocs/vendor/magento/module-backend/App/Abstract...
', referer: https://example.com/admin__admin/customer/index/index/key/abc53e4ca9d7864b3eb2d47cd4101ce4bbe9d61d7b37e461b21af2a350f729f3/

The \Opengento\Gdpr\Model\ExportEntityManagement::export function should return an ExportEntityInterface but the \Opengento\Gdpr\Model\Export\ExportEntityData::export is set to return a string. It can return string or ExportEntityInterface though in the return statement. Which one is correct?

PS: I'd submit a pull request but unfortunately I don't know how this part was designed. The easiest way would be to allow string or ExportEntityInterface in \Opengento\Gdpr\Model\Export\ExportEntityData::export but it would help with consistency.

Prerequisites

PHP Version:

  • 7.2.28

Magento Version:

  • 2.3.4

Module Version:

  • dev-master

Issue Details

Steps to reproduce the behavior

  1. Go to mass actions for customers and try to export a customer's data.
  2. Enable pdf renderer.

Expected behavior
I would expect the pdf file to be rendered.

Additional context

Wrong condition filters applied to list

List of erase object retrieved in Opengento\Gdpr\Cron\Erasure is wrong.
Actually the group filter adds the filters within a group with an 'OR' condition, and the groups are combined with a 'AND' condition.

To solve it, a new filter method might be added to the collection implementation, then register it to the collectionProcessor. It requires adaptation for Magento 2.1.x, the collectionProcessor is added in Magento 2.2.x.

Notify the user for its actions

The user must be notified for each of its actions:

  • #30 the personal data is processing to be exported
  • #30 the personal data is ready to be exported
  • the personal data will be erased
  • the personal data erasure have been canceled
  • the personal data have been erased

The notification is a short message that explains that an action have been performed in the name of the user.
The service must allow any notification provider implementation

[BUG] cookie error

Description

Hi we use a magento 2.3.3 , and we have a problem with the cookie message it doesn't show in a pop up . I have installed by composer. I had to remove to final class because it was giving some kind of error
imagen

Prerequisites

magento 2.3.3.
PHP Version:
-7.2.19

Magento Version:
magento 2.3.3.

.

[BUG] Less rules should be in mixin guards

File less should have the structure of other Magento less files. The css directives should be inside the Magento mixin guards. As a consequence, as an error, the css rules are duplicated in the css files generated by magento.

[BUG] Popup in absolute position instead fixed position

Description

Cookie Popup is printed inside page in many themes

Prerequisites

PHP Version:

  • [e.g. 7.2.19]

Magento Version:

  • [e.g. 2.3.2]

Module Version:

  • dev-master

Desktop (if applicable):

  • all

Issue Details

Steps to reproduce the behavior

  1. Enable Popup.'

Expected behavior
Popup should be in fixed position

Async Export

Description

The export should be asynchrone as it can take long times to be generated (old users with a lot of data, many services, or other).
The document should be created via a cron. The document will be available by clicking the "export" button once it's ready. The first time the customer click on the button "ask for my personal data", once it's ready the button became "export my personal data".
The customer should be notified of the ask to export its data, and when the document is ready.
The document has a limited lifetime. The customer can download the document during this period. However if its personal data has changed, the document should be invalidated. Warning, some data modification should be ignored by this observer, like the "last active date".

Data Consent

The customer can agreed or revoke his consent for the usage of its personal data. In its account, the customer can view and edit his consents.

The merchant should manage agreements on the forms where data are collected. To achieve this, he can create, edit, enable, disable or remove agreements on the admin panel. These agreements are then related to a form where they will be asked for the customer to agreed with.

Subscriber type resolver: "Class object does not exist"

Export: Fails: Class object does not exist

Trace:

[2019-06-13 10:04:32] main.CRITICAL: Exception message: Class object does not exist
Trace: <pre>#1 Magento\Framework\Reflection\MethodsMap->getMethodMapViaReflection('object') called at [vendor/magento/framework/Reflection/MethodsMap.php:108]
#2 Magento\Framework\Reflection\MethodsMap->getMethodsMap('object') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:83]
#3 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&PDO#000000004023e8650000000036a34631#, 'object') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:115]
#4 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&Magento\Framework\DB\Adapter\Pdo\Mysql#000000004023e8150000000036a34631#, 'Zend_Db_Adapter_...') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:115]
#5 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&Magento\Framework\DB\Select#000000004023e43f0000000036a34631#, '\Magento\Framewo...') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:115]
#6 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&Magento\Newsletter\Model\ResourceModel\Subscriber\Collection#000000004023e5c00000000036a34631#, '\Magento\Framewo...') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:115]
#7 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&Magento\Newsletter\Model\Subscriber\Interceptor#000000004023e5dc0000000036a34631#, '\Magento\Newslet...') called at [vendor/magento/framework/Reflection/DataObjectProcessor.php:115]
#8 Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#, 'Opengento\Gdpr\M...') called at [vendor/magento/framework/EntityManager/Hydrator.php:60]
#9 Magento\Framework\EntityManager\Hydrator->extract(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#) called at [app/code/Opengento/Gdpr/Model/Entity/EntityIterator.php:54]
#10 Opengento\Gdpr\Model\Entity\EntityIterator->iterate(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#) called at [app/code/Opengento/Gdpr/Model/Entity/DataCollector.php:42]
#11 Opengento\Gdpr\Model\Entity\DataCollector->collect(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#) called at [app/code/Opengento/Gdpr/Model/Entity/DataCollectorGeneric.php:57]
#12 Opengento\Gdpr\Model\Entity\DataCollectorGeneric->collect(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#) called at [app/code/Opengento/Gdpr/Service/Export/Processor/AbstractDataProcessor.php:40]
#13 Opengento\Gdpr\Service\Export\Processor\AbstractDataProcessor->collectData(&Opengento\Gdpr\Model\Newsletter\Subscriber#000000004023e2e40000000036a34631#) called at [app/code/Opengento/Gdpr/Service/Export/Processor/SubscriberDataProcessor.php:43]
#14 Opengento\Gdpr\Service\Export\Processor\SubscriberDataProcessor->execute(17, array()) called at [app/code/Opengento/Gdpr/Service/Export/Processor/CompositeProcessor.php:43]
#15 Opengento\Gdpr\Service\Export\Processor\CompositeProcessor::Opengento\Gdpr\Service\Export\Processor\{closure}(array('customer' => array())), &Opengento\Gdpr\Service\Export\Processor\SubscriberDataProcessor#000000004023eda40000000036a34631#)
#16 array_reduce(array('customer_data' => &Opengento\Gdpr\Service\Export\Processor\CustomerDataProcessor#000000004023ed4b0000000036a34631#, 'customer_address...' => &Opengento\Gdpr\Service\Export\Processor\CustomerAddressDataProcessor#000000004023ed4a0000000036a34631#, 'quote' => &Opengento\Gdpr\Service\Export\Processor\QuoteDataProcessor#000000004023ed5a0000000036a34631#, 'order' => &Opengento\Gdpr\Service\Export\Processor\OrderDataProcessor#000000004023edaa0000000036a34631#, 'subscriber' => &Opengento\Gdpr\Service\Export\Processor\SubscriberDataProcessor#000000004023eda40000000036a34631#), &Closure#000000004023e21f0000000036a34631#, array()) called at [app/code/Opengento/Gdpr/Service/Export/Processor/CompositeProcessor.php:45]
#17 Opengento\Gdpr\Service\Export\Processor\CompositeProcessor->execute(17, array()) called at [app/code/Opengento/Gdpr/Service/ExportManagement.php:46]
#18 Opengento\Gdpr\Service\ExportManagement->exportToFile(17, 'personal_data') called at [app/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport.php:78]
#19 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport->massAction(&Magento\Customer\Model\ResourceModel\Customer\Collection#000000004023ef130000000036a34631#) called at [vendor/magento/module-customer/Controller/Adminhtml/Index/AbstractMassAction.php:65]
#20 Magento\Customer\Controller\Adminhtml\Index\AbstractMassAction->execute() called at [generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php:24]
#21 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#22 Magento\Framework\App\Action\Action->dispatch(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/module-backend/App/AbstractAction.php:231]
#23 Magento\Backend\App\AbstractAction->dispatch(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#24 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#25 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#26 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(&Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor#000000004023eda20000000036a34631#, &Closure#000000004023edbc0000000036a34631#, &Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#27 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#28 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#), NULL) called at [generated/code/Opengento/Gdpr/Controller/Adminhtml/Privacy/MassExport/Interceptor.php:39]
#29 Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/App/FrontController.php:159]
#30 Magento\Framework\App\FrontController->processRequest(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#, &Opengento\Gdpr\Controller\Adminhtml\Privacy\MassExport\Interceptor#000000004023eda20000000036a34631#) called at [vendor/magento/framework/App/FrontController.php:99]
#31 Magento\Framework\App\FrontController->dispatch(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#32 Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#33 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#34 Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#), array(array('default_store_se...', 'page_cache_from_...', 'storeCookieValid...', 'install', 'configHash'))) called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#35 Magento\Framework\App\FrontController\Interceptor->dispatch(&Magento\Framework\App\Request\Http#000000004023e9a00000000036a34631#) called at [vendor/magento/framework/App/Http.php:136]
#36 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#37 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:258]
#38 Magento\Framework\App\Bootstrap->run(&Magento\Framework\App\Http\Interceptor#000000004023e9fd0000000036a34631#) called at [index.php:39]
</pre> [] []

Cookie Popin doesn't appear

Magento 2.3.1
PHP 7.2.14
Download ZIP master of your module.

Hello,

I don't have any popin for cookies. I added the CMS block with id equal to cookies-policy but I have nothing.
Do you know why ?

Many thanks for your feedback.

Competitors Magento 2

Free modules on Github:

[Active]

[Stale]

Set a sales information lifetime

Maximum value is 10 years.
This value must be configurable in the settings (0 to 10 years, in days unit).

Data considered as "sales information" must not be erased until the delay, which is calculated from their creation date, plus the configured value.

[BUG] make package compatible with Magento 2.3.4

Description

Please make the package compatible with Magento 2.3.4

Prerequisites

PHP Version:

  • 7.2.23

Magento Version:

  • 2.3.4

Module Version:

  • n/a

Desktop (if applicable):

  • OS: MacOS
  • Browser chrome
  • Version 82

Issue Details

Error message:

Could not find a version of package opengento/module-gdpr matching your minimum-stability (stable). Require it with an explicit version constraint allowing its desired stability.

[BUG]

Description

main.CRITICAL: Type Error occurred when creating object: Opengento\Gdpr\Model\Config\Source\EraseComponents, Argument 2 passed to Opengento\Gdpr\Model\Config\Source\EraseComponents::__construct() must be of the type string, null given, called in /web/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php on line 116 [] []

1 exception(s):
Exception #0 (Magento\Framework\Exception\RuntimeException): Type Error occurred when creating object: Opengento\Gdpr\Model\Config\Source\EraseComponents

Exception #0 (Magento\Framework\Exception\RuntimeException): Type Error occurred when creating object: Opengento\Gdpr\Model\Config\Source\EraseComponents

#1 Magento\Framework\ObjectManager\Factory\Compiled->create() called at [vendor/magento/framework/ObjectManager/Factory/Compiled.php:150]
#2 Magento\Framework\ObjectManager\Factory\Compiled->get() called at [vendor/magento/framework/ObjectManager/Factory/Compiled.php:79]
#3 Magento\Framework\ObjectManager\Factory\Compiled->create() called at [vendor/magento/framework/ObjectManager/ObjectManager.php:56]
#4 Magento\Framework\ObjectManager\ObjectManager->create() called at [vendor/magento/framework/View/Element/BlockFactory.php:46]
#5 Magento\Framework\View\Element\BlockFactory->createBlock() called at [vendor/magento/framework/View/Layout/Generator/Block.php:268]
#6 Magento\Framework\View\Layout\Generator\Block->getBlockInstance() called at [vendor/magento/framework/View/Layout/Generator/Block.php:248]
#7 Magento\Framework\View\Layout\Generator\Block->createBlock() called at [vendor/magento/framework/View/Layout.php:776]
#8 Magento\Framework\View\Layout->_createBlock() called at [vendor/magento/framework/View/Layout.php:759]
#9 Magento\Framework\View\Layout->createBlock() called at [vendor/opengento/module-gdpr/Block/Adminhtml/Config/Form/Field/EraseComponentsProcessors.php:37]
#10 Opengento\Gdpr\Block\Adminhtml\Config\Form\Field\EraseComponentsProcessors->getEraseComponentsSelectRenderer() called at [vendor/opengento/module-gdpr/Block/Adminhtml/Config/Form/Field/EraseComponentsProcessors.php:77]
#11 Opengento\Gdpr\Block\Adminhtml\Config\Form\Field\EraseComponentsProcessors->_prepareToRender() called at [vendor/magento/module-config/Block/System/Config/Form/Field/FieldArray/AbstractFieldArray.php:254]
## Prerequisites  

**PHP Version:**
PHP 7.2.14

**Magento Version:**
 2.3.3

**Module Version:**
dev-magento2.3.x


## Issue Details  

**Steps to reproduce the behavior**
1. Go to Admin-backend ->Stores->configuration->Customers->GDPR Compliance

Compatibility with Magento 2.3

is it possible to make the composer side installation requirements less stricted to allow compatibility with magento 2.3?
Actually "magento/framework": "^103.0" require a version of laminas-code 3.4.1 which is used in 2.4 but isn't compatible with 2.3 (which require laminas-code 3.3)

is possible to replace the version of magento/framework with this version?

"magento/framework": "^102.0||^103.0",

Thanks

[BUG] Issue compile on php7.4 magento 2.4.1

Class Opengento\Gdpr\Block\Adminhtml\Customer\Edit\EraseButton\Interceptor may not inherit from final class (Opengento\Gdpr\Block\Adminhtml\Customer\Edit\EraseButton) in /home/cloudpanel/htdocs/glamira2.local/generated/code/Opengento/Gdpr/Block/Adminhtml/Customer/Edit/EraseButton/Interceptor.php on line 7
( removed final to fix )

Export method type

Description

Priority of the change:

  • High
  • Medium
  • Low

When the user ask for the portability/export of it's personal data, the document should be human readable and machine readable.

The user ask for the export of its personal data. In the archive he received, two documents are available.
The administrator can select in the module settings, the type of human and machine readable file.

Contributing

  • Would you want to contribute and to be assigned to this enhancement?

[BUG] master: Email template 'gdpr_notification_export_succeeded_template' is not defined

Description

The error message

Email template 'gdpr_notification_export_succeeded_template' is not defined

is displayed when I try to go to the GDPR section in admin.

Prerequisites

PHP Version:

  • 7.2.15

Magento Version:

  • 2.3.1

Module Version:

  • master branch

Issue Details

Steps to reproduce the behavior

  1. Go to Stores > Configuration > Customers > GDPR Compliance
  2. See error

Expected behavior
There is no error :)

Make the tools available in the admin section

Make the tools available in the admin section, so the store owner can do it for a customer (for example: provide direct support for requests by phone (and yes, there are a lot of people who request things by phone even after placing an order online))

Originally posted by @SomeGeek in #12 (comment)

[BUG] Return value ... must be an instance of ..

Description

Return value of Opengento\Gdpr\Cron\EraseEntity::retrieveEraseEntityList() must be an instance of Opengento\Gdpr\Api\Data\EraseEntitySearchResultsInterface, instance of Magento\Framework\Api\SearchResults returned.

Prerequisites

PHP Version:

  • 7.2.31

Magento Version:

  • 2.3.5-p1

Module Version:

  • dev-master#682ccc2525d9b0c6cb09bf3ae4be50c2a1744fb3

Issue Details

Expected behavior
main.ERROR: Cron Job gdpr_erase_entity has an error: Return value of Opengento\Gdpr\Cron\EraseEntity::retrieveEraseEntityList() must be an instance of Opengento\Gdpr\Api\Data\EraseEntitySearchResultsInterface, instance of Magento\Framework\Api\SearchResults returned. Statistics: {"sum":0,"count":1,"realmem":0,"emalloc":0,"realmem_start":81788928,"emalloc_start":43287080} [] []
[2020-08-18 15:04:04] main.CRITICAL: Error when running a cron job {"exception":"[object] (RuntimeException(code: 0): Error when running a cron job at vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php:362, TypeError(code: 0): Return value of Opengento\Gdpr\Cron\EraseEntity::retrieveEraseEntityList() must be an instance of Opengento\Gdpr\Api\Data\EraseEntitySearchResultsInterface, instance of Magento\Framework\Api\SearchResults returned at vendor/opengento/module-gdpr/Cron/EraseEntity.php:121)"} []

Not working with PHP 7.2

Magento 2.3 PHP 7.2.14

Your requirements could not be resolved to an installable set of packages.
Problem 1
- magento/framework 101.0.7 requires php ~7.0.13|~7.1.0 -> your PHP version (7.2.14) does not satisfy that requirement.
- opengento/module-gdpr dev-magento2.3.x requires magento/framework ^101.0.7 -> satisfiable by magento/framework[101.0.7].
- Installation request for opengento/module-gdpr dev-magento2.3.x -> satisfiable by opengento/module-gdpr[dev-magento2.3.x].
Installation failed, reverting ./composer.json to its original content.

[BUG] fatal error exporting customer data from backend

Description

While trying to export customer data from Backend -> Customers -> Mass Actions -> Export
I get the following php error

Got error 'PHP message: PHP Fatal error:  Uncaught Error: Call to a member function getFilePath() on string in /var/www/vhosts/example.com/example.com/httpdocs/vendor/opengento/module-gdpr/Controller/Adminhtml/Privacy/MassExport.php:81
Stack trace:
#0 /var/www/vhosts/example.com/example.com/httpdocs/vendor/magento/module-customer/Controller/Adminhtml/Index/AbstractMassAction.php(65): Opengento\\Gdpr\\Controller\\Adminhtml\\Privacy\\MassExport->massAction(Object(Magento\\Customer\\Model\\ResourceModel\\Customer\\Collection\\Interceptor))
#1 /var/www/vhosts/example.com/example.com/httpdocs/vendor/magento/framework/App/Action/Action.php(108): Magento\\Customer\\Controller\\Adminhtml\\Index\\AbstractMassAction->execute()
#2 /var/www/vhosts/example.com/example.com/httpdocs/vendor/magento/module-backend/App/AbstractAction.php(231): Magento\\Framework\\App\\Action\\Action->dispatch(Object(Magento\\Framework\\App\\Request\\Http))
#3 /var/www/vhosts/example.com/example.com/httpdocs/vendor/magento/framework/Interception/Interceptor.php(58): Magento\\Backend\\Ap...
', referer: https://example.com/admin_test/customer/index/index/key/2d2a71fd27d8c508f8a88f615ada33735515543f59c61b860583df1be963a778/

Prerequisites

PHP Version:

  • 7.2.28

Magento Version:

  • 2.3.4

Module Version:

  • dev-master

Issue Details

Steps to reproduce the behavior

  1. Go to Backend -> Customers -> Mass Actions -> Export
  2. See white page with fatal error

Expected behavior
The file is exported

[BUG] Error 500 in customer account on Magento 2.4.0

Description

TypeError: Argument 1 passed to Magento\Customer\Controller\Plugin\Account::aroundExecute() must be an instance of Magento\Customer\Controller\AccountInterface, instance of Opengento\Gdpr\Controller\Privacy\Settings\Interceptor given, called in ...\vendor\magento\framework\Interception\Interceptor.php on line 135 and defined in ...\vendor\magento\module-customer\Controller\Plugin\Account.php:60

Prerequisites

PHP Version:

  • 7.4.0

Magento Version:

  • 2.4.0

Module Version:

  • dev-master#87f21cd7ca938963763854f81e151c19b3eafa85

Issue Details

Steps to reproduce the behavior

  1. Go to customer account (frontend)
  2. Click on "Privacy Settings" in menu
  3. See error

Additional context

TypeError: Argument 1 passed to Magento\Customer\Controller\Plugin\Account::aroundExecute() must be an instance of Magento\Customer\Controller\AccountInterface, instance of Opengento\Gdpr\Controller\Privacy\Settings\Interceptor given, called in ...\vendor\magento\framework\Interception\Interceptor.php on line 135 and defined in ...\vendor\magento\module-customer\Controller\Plugin\Account.php:60
Stack trace:
#0 ...\vendor\magento\framework\Interception\Interceptor.php(135): Magento\Customer\Controller\Plugin\Account->aroundExecute(Object(Opengento\Gdpr\Controller\Privacy\Settings\Interceptor), Object(Closure))
#1 ...\vendor\magento\framework\App\Action\Plugin\ActionFlagNoDispatchPlugin.php(51): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->Magento\Framework\Interception\{closure}()
#2 ...\vendor\magento\framework\Interception\Interceptor.php(135): Magento\Framework\App\Action\Plugin\ActionFlagNoDispatchPlugin->aroundExecute(Object(Opengento\Gdpr\Controller\Privacy\Settings\Interceptor), Object(Closure))
#3 ...\vendor\magento\framework\Interception\Interceptor.php(153): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->Magento\Framework\Interception\{closure}()
#4 ...\generated\code\Opengento\Gdpr\Controller\Privacy\Settings\Interceptor.php(26): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->___callPlugins('execute', Array, Array)
#5 ...\vendor\magento\framework\App\Action\Action.php(111): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->execute()
#6 ...\vendor\magento\framework\Interception\Interceptor.php(58): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#7 ...\vendor\magento\framework\Interception\Interceptor.php(138): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->___callParent('dispatch', Array)
#8 ...\vendor\magento\framework\Interception\Interceptor.php(153): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#9 ...\generated\code\Opengento\Gdpr\Controller\Privacy\Settings\Interceptor.php(39): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->___callPlugins('dispatch', Array, Array)
#10 ...\vendor\magento\framework\App\FrontController.php(186): Opengento\Gdpr\Controller\Privacy\Settings\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#11 ...\vendor\magento\framework\App\FrontController.php(118): Magento\Framework\App\FrontController->processRequest(Object(Magento\Framework\App\Request\Http), Object(Opengento\Gdpr\Controller\Privacy\Settings\Interceptor))
#12 ...\vendor\magento\framework\Interception\Interceptor.php(58): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#13 ...\vendor\magento\framework\Interception\Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#14 ...\vendor\magento\module-store\App\FrontController\Plugin\RequestPreprocessor.php(99): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#15 ...\vendor\magento\framework\Interception\Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#16 ...\vendor\magento\module-page-cache\Model\App\FrontController\BuiltinPlugin.php(71): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#17 ...\vendor\magento\framework\Interception\Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#18 ...\vendor\magento\framework\Interception\Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#19 ...\generated\code\Magento\Framework\App\FrontController\Interceptor.php(26): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, NULL)
#20 ...\vendor\magento\framework\App\Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#21 ...\vendor\magento\framework\Interception\Interceptor.php(58): Magento\Framework\App\Http->launch()
#22 ...\vendor\magento\framework\Interception\Interceptor.php(138): Magento\Framework\App\Http\Interceptor->___callParent('launch', Array)
#23 ...\vendor\magento\framework\Interception\Interceptor.php(153): Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}()
#24 ...\generated\code\Magento\Framework\App\Http\Interceptor.php(26): Magento\Framework\App\Http\Interceptor->___callPlugins('launch', Array, Array)
#25 ...\vendor\magento\framework\App\Bootstrap.php(263): Magento\Framework\App\Http\Interceptor->launch()
#26 ...\index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#27 {main}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.