PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
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 1 month ago UserChanges.php 1 month ago
UserChanges.php
102 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 private function getIdchangeLastViewed() : ?int
53 {
54 return isset($this->user['idchange_last_viewed']) ? intval($this->user['idchange_last_viewed']) : null;
55 }
56 /**
57 * Return true if the changes popup is snoozed
58 *
59 * @return bool If changes were shown to the user in the last 24hrs then this will be true, otherwise false
60 */
61 public function shownRecently() : bool
62 {
63 $lastShown = isset($this->user['ts_changes_shown']) ? $this->user['ts_changes_shown'] : null;
64 if (!$lastShown) {
65 return \false;
66 // Never shown
67 }
68 // Less than 24hrs since last shown
69 return Date::factory('now')->getTimestamp() - Date::factory($lastShown)->getTimestamp() < 86400;
70 }
71 /**
72 * Return an array of changes and update the user's popup last shown timestamp
73 *
74 * @return array
75 */
76 public function getChanges() : array
77 {
78 $usersModel = new UsersModel();
79 $usersModel->updateUserFields($this->user['login'], ['ts_changes_shown' => Date::now()->getDatetime()]);
80 return $this->changesModel->getChangeItems();
81 }
82 /**
83 * Record all changes as read
84 *
85 * @throws \Piwik\Tracker\Db\DbException
86 */
87 public function markChangesAsRead() : void
88 {
89 $changes = $this->changesModel->getChangeItems();
90 $maxId = null;
91 foreach ($changes as $k => $change) {
92 if ($maxId < $change['idchange']) {
93 $maxId = $change['idchange'];
94 }
95 }
96 if ($maxId) {
97 $usersModel = new UsersModel();
98 $usersModel->updateUserFields($this->user['login'], ['idchange_last_viewed' => $maxId]);
99 }
100 }
101 }
102