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