Нема описа

SubscriberPersonalDataEraser.php 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace MailPoet\Subscribers;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Models\Subscriber;
  5. use MailPoet\Models\SubscriberCustomField;
  6. class SubscriberPersonalDataEraser {
  7. public function erase($email) {
  8. if (empty($email)) {
  9. return [
  10. 'items_removed' => false,
  11. 'items_retained' => false,
  12. 'messages' => [],
  13. 'done' => true,
  14. ];
  15. }
  16. $subscriber = Subscriber::findOne(trim($email));
  17. $itemRemoved = false;
  18. $itemsRetained = true;
  19. if ($subscriber) {
  20. $this->eraseCustomFields($subscriber->id());
  21. $this->anonymizeSubscriberData($subscriber);
  22. $itemRemoved = true;
  23. $itemsRetained = false;
  24. }
  25. return [
  26. 'items_removed' => $itemRemoved,
  27. 'items_retained' => $itemsRetained,
  28. 'messages' => [],
  29. 'done' => true,
  30. ];
  31. }
  32. private function eraseCustomFields($subscriberId) {
  33. $customFields = SubscriberCustomField::where('subscriber_id', $subscriberId)->findMany();
  34. foreach ($customFields as $customField) {
  35. $customField->value = '';
  36. $customField->save();
  37. }
  38. }
  39. private function anonymizeSubscriberData($subscriber) {
  40. $subscriber->email = sprintf('deleted-%s@site.invalid', bin2hex(random_bytes(12))); // phpcs:ignore
  41. $subscriber->firstName = 'Anonymous';
  42. $subscriber->lastName = 'Anonymous';
  43. $subscriber->status = Subscriber::STATUS_UNSUBSCRIBED;
  44. $subscriber->subscribedIp = '0.0.0.0';
  45. $subscriber->confirmedIp = '0.0.0.0';
  46. $subscriber->save();
  47. }
  48. }