PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.10.2
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.10.2
5.12.0 5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / plugins / UsersManager / UserNotifications / UserNotifierTask.php
matomo / app / plugins / UsersManager / UserNotifications Last commit date
InactiveUsersEmailNotification.php 7 months ago InactiveUsersNotificationProvider.php 7 months ago UserEmailNotification.php 7 months ago UserNotification.php 7 months ago UserNotificationInterface.php 7 months ago UserNotificationProvider.php 7 months ago UserNotificationProviderInterface.php 4 months ago UserNotifierTask.php 7 months ago
UserNotifierTask.php
75 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\Plugins\UsersManager\UserNotifications;
10
11 use Exception;
12 use Piwik\Container\StaticContainer;
13 use Piwik\Date;
14 use Piwik\Log\LoggerInterface;
15 use Piwik\Option;
16 use Piwik\Plugin\Manager as PluginManager;
17 use Piwik\Scheduler\Schedule\Monthly;
18 use Piwik\Scheduler\Task;
19 /**
20 * Send user notifications for each provider
21 */
22 class UserNotifierTask extends Task
23 {
24 public const LAST_RUN_TIME_OPTION_NAME = 'UserNotifier.lastRunTime';
25 public function __construct()
26 {
27 $monthlyOnFirst = new Monthly();
28 $monthlyOnFirst->setDay(1);
29 parent::__construct($this, 'dispatchNotifications', null, $monthlyOnFirst);
30 }
31 /**
32 * Get a list of providers (class names) that may provide user notifications to be dispatched
33 *
34 * @return array
35 */
36 private function getUserNotificationProviderClasses() : array
37 {
38 return PluginManager::getInstance()->findMultipleComponents('UserNotifications', \Piwik\Plugins\UsersManager\UserNotifications\UserNotificationProviderInterface::class);
39 }
40 /**
41 * Dispatch notifications for each provider and its users
42 */
43 public function dispatchNotifications()
44 {
45 $container = StaticContainer::getContainer();
46 $logger = $container->get(LoggerInterface::class);
47 try {
48 Option::set(self::LAST_RUN_TIME_OPTION_NAME, (string) Date::factory('today')->getTimestamp());
49 $notificationsToDispatchCount = 0;
50 $notificationsDispatchedCount = 0;
51 foreach ($this->getUserNotificationProviderClasses() as $providerClass) {
52 /** @var UserNotificationProviderInterface $provider */
53 $provider = $container->get($providerClass);
54 $providerUserNotificationsForDispatch = $provider->getUserNotificationsForDispatch();
55 $notificationsToDispatchCount += count($providerUserNotificationsForDispatch);
56 foreach ($providerUserNotificationsForDispatch as $userNotification) {
57 $dispatched = $userNotification->dispatch();
58 if ($dispatched) {
59 $provider->setUserNotificationDispatched($userNotification->getUsers());
60 $notificationsDispatchedCount++;
61 }
62 }
63 }
64 if ($notificationsToDispatchCount) {
65 $logger->info("Number of user notifications dispatched: {number} of {total}.", ['number' => $notificationsDispatchedCount, 'total' => $notificationsToDispatchCount]);
66 } else {
67 $logger->info("No user notifications to dispatch, task rescheduled.");
68 }
69 } catch (Exception $ex) {
70 $container->get(LoggerInterface::class)->error($ex);
71 throw $ex;
72 }
73 }
74 }
75