]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - includes/WatchedItem.php
MediaWiki 1.30.2-scripts2
[autoinstallsdev/mediawiki.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 }