PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.8.2
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.8.2
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 / core / Changes / UserChanges.php
matomo / app / core / Changes Last commit date
Model.php 3 months ago UserChanges.php 3 months ago
UserChanges.php
103 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\Changes;
10
11 use Piwik\Container\StaticContainer;
12 use Piwik\Date;
13 use Piwik\Plugins\UsersManager\Model as UsersModel;
14 /**
15 * CoreHome user changes class
16 */
17 class UserChanges
18 {
19 private $user;
20 private $changesModel;
21 /**
22 * @param array $user
23 */
24 public function __construct(array $user)
25 {
26 $this->user = $user;
27 $this->changesModel = StaticContainer::get(\Piwik\Changes\Model::class);
28 }
29 /**
30 * Return a value indicating if there are any changes available to show the user
31 *
32 * @return int Changes\Model::NO_CHANGES_EXIST, Changes\Model::CHANGES_EXIST or Changes\Model::NEW_CHANGES_EXIST
33 * @throws \Exception
34 */
35 public function getNewChangesStatus() : int
36 {
37 return $this->changesModel->doChangesExist($this->getIdchangeLastViewed());
38 }
39 /**
40 * Return the count of new changes unseen by the user
41 *
42 * @return int Change count
43 * @throws \Exception
44 */
45 public function getNewChangesCount() : int
46 {
47 return $this->changesModel->getNewChangesCount($this->getIdchangeLastViewed());
48 }
49 /**
50 * Return the key of the last viewed change for the user, if any
51 *
52 */
53 private function getIdchangeLastViewed() : ?int
54 {
55 return isset($this->user['idchange_last_viewed']) ? intval($this->user['idchange_last_viewed']) : null;
56 }
57 /**
58 * Return true if the changes popup is snoozed
59 *
60 * @return bool If changes were shown to the user in the last 24hrs then this will be true, otherwise false
61 */
62 public function shownRecently() : bool
63 {
64 $lastShown = isset($this->user['ts_changes_shown']) ? $this->user['ts_changes_shown'] : null;
65 if (!$lastShown) {
66 return \false;
67 // Never shown
68 }
69 // Less than 24hrs since last shown
70 return Date::factory('now')->getTimestamp() - Date::factory($lastShown)->getTimestamp() < 86400;
71 }
72 /**
73 * Return an array of changes and update the user's popup last shown timestamp
74 *
75 * @return array
76 */
77 public function getChanges() : array
78 {
79 $usersModel = new UsersModel();
80 $usersModel->updateUserFields($this->user['login'], ['ts_changes_shown' => Date::now()->getDatetime()]);
81 return $this->changesModel->getChangeItems();
82 }
83 /**
84 * Record all changes as read
85 *
86 * @throws \Piwik\Tracker\Db\DbException
87 */
88 public function markChangesAsRead() : void
89 {
90 $changes = $this->changesModel->getChangeItems();
91 $maxId = null;
92 foreach ($changes as $k => $change) {
93 if ($maxId < $change['idchange']) {
94 $maxId = $change['idchange'];
95 }
96 }
97 if ($maxId) {
98 $usersModel = new UsersModel();
99 $usersModel->updateUserFields($this->user['login'], ['idchange_last_viewed' => $maxId]);
100 }
101 }
102 }
103