34 PageUpdatedEvent::TYPE
45 'class' => self::class,
53 'TalkPageNotificationManager'
56 PageUpdatedEvent::TYPE
78 $this->changeTagsStore = $changeTagsStore;
79 $this->userEditTracker = $userEditTracker;
80 $this->permissionManager = $permissionManager;
81 $this->wikiPageFactory = $wikiPageFactory;
82 $this->hookRunner =
new HookRunner( $hookContainer );
83 $this->userNameUtils = $userNameUtils;
84 $this->talkPageNotificationManager = $talkPageNotificationManager;
103 $talkPageNotificationManager
105 $ingress->initSubscriber( self::OBJECT_SPEC );
119 $this->updateRecentChangesAfterPageUpdated(
127 } elseif ( $event->
getTags() ) {
128 $this->updateChangeTagsAfterPageUpdated(
137 $this->updateUserEditTrackerAfterPageUpdated(
142 $this->updateNewTalkAfterPageUpdated( $event );
145 private function updateChangeTagsAfterPageUpdated( array $tags,
int $revId ) {
146 $this->changeTagsStore->addTags( $tags,
null, $revId );
149 private function updateRecentChangesAfterPageUpdated(
150 RevisionRecord $newRevisionRecord,
151 ?RevisionRecord $oldRevisionRecord,
155 ?EditResult $editResult
158 if ( !$oldRevisionRecord ) {
159 RecentChange::notifyNew(
160 $newRevisionRecord->getTimestamp(),
161 $newRevisionRecord->getPage(),
162 $newRevisionRecord->isMinor(),
163 $newRevisionRecord->getUser( RevisionRecord::RAW ),
164 $newRevisionRecord->getComment( RevisionRecord::RAW )->text,
167 $newRevisionRecord->getSize(),
168 $newRevisionRecord->getId(),
174 RecentChange::notifyEdit(
175 $newRevisionRecord->getTimestamp(),
176 $newRevisionRecord->getPage(),
177 $newRevisionRecord->isMinor(),
178 $newRevisionRecord->getUser( RevisionRecord::RAW ),
179 $newRevisionRecord->getComment( RevisionRecord::RAW )->text,
180 $oldRevisionRecord->getId(),
181 $newRevisionRecord->getTimestamp(),
184 $oldRevisionRecord->getSize(),
185 $newRevisionRecord->getSize(),
186 $newRevisionRecord->getId(),
194 private function updateUserEditTrackerAfterPageUpdated( UserIdentity $author ) {
195 $this->userEditTracker->incrementUserEditCount( $author );
203 private function updateNewTalkAfterPageUpdated( PageUpdatedEvent $event ) {
207 $page = $event->getPage();
208 $revRecord = $event->getNewRevision();
209 $recipientName = $page->getDBkey();
210 $recipientName = $this->userNameUtils->isIP( $recipientName )
212 : $this->userNameUtils->getCanonical( $page->getDBkey() );
214 if ( $event->isContentChange()
216 && !( $revRecord->isMinor()
217 && $this->permissionManager->userHasRight(
218 $event->getAuthor(),
'nominornewtalk' ) )
219 && $recipientName != $event->getAuthor()->getName()
221 $recipient = User::newFromName( $recipientName,
false );
223 wfDebug( __METHOD__ .
": invalid username" );
225 $wikiPage = $this->wikiPageFactory->newFromTitle( $page );
230 if ( $this->hookRunner->onArticleEditUpdateNewTalk( $wikiPage, $recipient ) ) {
231 if ( $this->userNameUtils->isIP( $recipientName ) ) {
233 $this->talkPageNotificationManager->setUserHasNewMessages( $recipient, $revRecord );
234 } elseif ( $recipient->isRegistered() ) {
235 $this->talkPageNotificationManager->setUserHasNewMessages( $recipient, $revRecord );
237 wfDebug( __METHOD__ .
": don't need to notify a nonexistent user" );