Merge "Change 'editfont' default preference to 'monospace'"
[lhc/web/wiklou.git] / includes / WatchedItem.php
1 <?php
2 /**
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 * http://www.gnu.org/copyleft/gpl.html
17 *
18 * @file
19 * @ingroup Watchlist
20 */
21 use MediaWiki\MediaWikiServices;
22 use MediaWiki\Linker\LinkTarget;
23
24 /**
25 * Representation of a pair of user and title for watchlist entries.
26 *
27 * @author Tim Starling
28 * @author Addshore
29 *
30 * @ingroup Watchlist
31 */
32 class WatchedItem {
33
34 /**
35 * @deprecated since 1.27, see User::IGNORE_USER_RIGHTS
36 */
37 const IGNORE_USER_RIGHTS = User::IGNORE_USER_RIGHTS;
38
39 /**
40 * @deprecated since 1.27, see User::CHECK_USER_RIGHTS
41 */
42 const CHECK_USER_RIGHTS = User::CHECK_USER_RIGHTS;
43
44 /**
45 * @deprecated Internal class use only
46 */
47 const DEPRECATED_USAGE_TIMESTAMP = -100;
48
49 /**
50 * @var bool
51 * @deprecated Internal class use only
52 */
53 public $checkRights = User::CHECK_USER_RIGHTS;
54
55 /**
56 * @var Title
57 * @deprecated Internal class use only
58 */
59 private $title;
60
61 /**
62 * @var LinkTarget
63 */
64 private $linkTarget;
65
66 /**
67 * @var User
68 */
69 private $user;
70
71 /**
72 * @var null|string the value of the wl_notificationtimestamp field
73 */
74 private $notificationTimestamp;
75
76 /**
77 * @param User $user
78 * @param LinkTarget $linkTarget
79 * @param null|string $notificationTimestamp the value of the wl_notificationtimestamp field
80 * @param bool|null $checkRights DO NOT USE - used internally for backward compatibility
81 */
82 public function __construct(
83 User $user,
84 LinkTarget $linkTarget,
85 $notificationTimestamp,
86 $checkRights = null
87 ) {
88 $this->user = $user;
89 $this->linkTarget = $linkTarget;
90 $this->notificationTimestamp = $notificationTimestamp;
91 if ( $checkRights !== null ) {
92 $this->checkRights = $checkRights;
93 }
94 }
95
96 /**
97 * @return User
98 */
99 public function getUser() {
100 return $this->user;
101 }
102
103 /**
104 * @return LinkTarget
105 */
106 public function getLinkTarget() {
107 return $this->linkTarget;
108 }
109
110 /**
111 * Get the notification timestamp of this entry.
112 *
113 * @return bool|null|string
114 */
115 public function getNotificationTimestamp() {
116 // Back compat for objects constructed using self::fromUserTitle
117 if ( $this->notificationTimestamp === self::DEPRECATED_USAGE_TIMESTAMP ) {
118 // wfDeprecated( __METHOD__, '1.27' );
119 if ( $this->checkRights && !$this->user->isAllowed( 'viewmywatchlist' ) ) {
120 return false;
121 }
122 $item = MediaWikiServices::getInstance()->getWatchedItemStore()
123 ->loadWatchedItem( $this->user, $this->linkTarget );
124 if ( $item ) {
125 $this->notificationTimestamp = $item->getNotificationTimestamp();
126 } else {
127 $this->notificationTimestamp = false;
128 }
129 }
130 return $this->notificationTimestamp;
131 }
132
133 /**
134 * Back compat pre 1.27 with the WatchedItemStore introduction
135 * @todo remove in 1.28/9
136 * -------------------------------------------------
137 */
138
139 /**
140 * @return Title
141 * @deprecated Internal class use only
142 */
143 public function getTitle() {
144 if ( !$this->title ) {
145 $this->title = Title::newFromLinkTarget( $this->linkTarget );
146 }
147 return $this->title;
148 }
149
150 /**
151 * @deprecated since 1.27 Use the constructor, WatchedItemStore::getWatchedItem()
152 * or WatchedItemStore::loadWatchedItem()
153 */
154 public static function fromUserTitle( $user, $title, $checkRights = User::CHECK_USER_RIGHTS ) {
155 wfDeprecated( __METHOD__, '1.27' );
156 return new self( $user, $title, self::DEPRECATED_USAGE_TIMESTAMP, (bool)$checkRights );
157 }
158
159 /**
160 * @deprecated since 1.27 Use User::addWatch()
161 * @return bool
162 */
163 public function addWatch() {
164 wfDeprecated( __METHOD__, '1.27' );
165 $this->user->addWatch( $this->getTitle(), $this->checkRights );
166 return true;
167 }
168
169 /**
170 * @deprecated since 1.27 Use User::removeWatch()
171 * @return bool
172 */
173 public function removeWatch() {
174 wfDeprecated( __METHOD__, '1.27' );
175 if ( $this->checkRights && !$this->user->isAllowed( 'editmywatchlist' ) ) {
176 return false;
177 }
178 $this->user->removeWatch( $this->getTitle(), $this->checkRights );
179 return true;
180 }
181
182 /**
183 * @deprecated since 1.27 Use User::isWatched()
184 * @return bool
185 */
186 public function isWatched() {
187 wfDeprecated( __METHOD__, '1.27' );
188 return $this->user->isWatched( $this->getTitle(), $this->checkRights );
189 }
190
191 /**
192 * @deprecated since 1.27 Use WatchedItemStore::duplicateAllAssociatedEntries()
193 */
194 public static function duplicateEntries( Title $oldTitle, Title $newTitle ) {
195 wfDeprecated( __METHOD__, '1.27' );
196 $store = MediaWikiServices::getInstance()->getWatchedItemStore();
197 $store->duplicateAllAssociatedEntries( $oldTitle, $newTitle );
198 }
199
200 }