Нет описания

AutomaticEmails.php 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. namespace MailPoet\AutomaticEmails;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\WP\Functions as WPFunctions;
  5. use MailPoet\WP\Notice;
  6. class AutomaticEmails {
  7. const FILTER_PREFIX = 'mailpoet_automatic_email_';
  8. private $wp;
  9. /** @var array|null */
  10. private $automaticEmails;
  11. public $availableGroups = [
  12. 'WooCommerce',
  13. ];
  14. public function __construct() {
  15. $this->wp = new WPFunctions;
  16. }
  17. public function init() {
  18. foreach ($this->availableGroups as $group) {
  19. $groupClass = sprintf(
  20. '%1$s\%2$s\%2$s',
  21. __NAMESPACE__,
  22. $group
  23. );
  24. if (!class_exists($groupClass)) {
  25. $this->displayGroupWarning($group);
  26. continue;
  27. }
  28. $groupInstance = new $groupClass();
  29. if (method_exists($groupInstance, 'init')) {
  30. $groupInstance->init();
  31. } else {
  32. $this->displayGroupWarning($group);
  33. continue;
  34. }
  35. }
  36. }
  37. public function getAutomaticEmails() {
  38. global $wp_filter; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
  39. if ($this->automaticEmails) {
  40. return $this->automaticEmails;
  41. }
  42. // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
  43. $registeredGroups = preg_grep('!^' . self::FILTER_PREFIX . '(.*?)$!', array_keys($wp_filter));
  44. if (empty($registeredGroups)) return null;
  45. $automaticEmails = [];
  46. foreach ($registeredGroups as $group) {
  47. $automaticEmail = $this->wp->applyFilters($group, []);
  48. if (!$this->validateAutomaticEmailDataFields($automaticEmail) ||
  49. !$this->validateAutomaticEmailEventsDataFields($automaticEmail['events'])
  50. ) {
  51. continue;
  52. }
  53. // keys associative events array by slug
  54. $automaticEmail['events'] = array_column($automaticEmail['events'], null, 'slug');
  55. // keys associative automatic email array by slug
  56. $automaticEmails[$automaticEmail['slug']] = $automaticEmail;
  57. }
  58. $this->automaticEmails = $automaticEmails;
  59. return $automaticEmails;
  60. }
  61. public function getAutomaticEmailBySlug($emailSlug) {
  62. $automaticEmails = $this->getAutomaticEmails();
  63. if (empty($automaticEmails)) return null;
  64. foreach ($automaticEmails as $email) {
  65. if (!empty($email['slug']) && $email['slug'] === $emailSlug) return $email;
  66. }
  67. return null;
  68. }
  69. public function getAutomaticEmailEventBySlug($emailSlug, $eventSlug) {
  70. $automaticEmail = $this->getAutomaticEmailBySlug($emailSlug);
  71. if (empty($automaticEmail)) return null;
  72. foreach ($automaticEmail['events'] as $event) {
  73. if (!empty($event['slug']) && $event['slug'] === $eventSlug) return $event;
  74. }
  75. return null;
  76. }
  77. public function validateAutomaticEmailDataFields(array $automaticEmail) {
  78. $requiredFields = [
  79. 'slug',
  80. 'title',
  81. 'description',
  82. 'events',
  83. ];
  84. foreach ($requiredFields as $field) {
  85. if (empty($automaticEmail[$field])) return false;
  86. }
  87. return true;
  88. }
  89. public function validateAutomaticEmailEventsDataFields(array $automaticEmailEvents) {
  90. $requiredFields = [
  91. 'slug',
  92. 'title',
  93. 'description',
  94. 'listingScheduleDisplayText',
  95. ];
  96. foreach ($automaticEmailEvents as $event) {
  97. $validEvent = array_diff($requiredFields, array_keys($event));
  98. if (!empty($validEvent)) return false;
  99. }
  100. return true;
  101. }
  102. public function unregisterAutomaticEmails() {
  103. global $wp_filter; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
  104. // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
  105. $registeredGroups = preg_grep('!^' . self::FILTER_PREFIX . '(.*?)$!', array_keys($wp_filter));
  106. if (empty($registeredGroups)) return null;
  107. $self = $this;
  108. array_map(function($group) use($self) {
  109. $self->wp->removeAllFilters($group);
  110. }, $registeredGroups);
  111. $this->automaticEmails = null;
  112. }
  113. private function displayGroupWarning($group) {
  114. $notice = sprintf('%s %s',
  115. sprintf(__('%s automatic email group is misconfigured.', 'mailpoet'), $group),
  116. WPFunctions::get()->__('Please contact our technical support for assistance.', 'mailpoet')
  117. );
  118. Notice::displayWarning($notice);
  119. }
  120. }