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