X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fmail%2FEmailNotification.php;h=fe24c34ac23d0fad0a7b8022045c497412b17661;hb=e3bd13db0c285f312e31bb1b7271af4628cca80c;hp=9bda12cb4d1e3e5d3ec4d8022078ecfdc353c78c;hpb=87d3bd7afcec9a4149104bf34b892a5e78a73c5c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/mail/EmailNotification.php b/includes/mail/EmailNotification.php index 9bda12cb4d..fe24c34ac2 100644 --- a/includes/mail/EmailNotification.php +++ b/includes/mail/EmailNotification.php @@ -59,7 +59,7 @@ class EmailNotification { protected $subject, $body, $replyto, $from; protected $timestamp, $summary, $minorEdit, $oldid, $composed_common, $pageStatus; - protected $mailTargets = array(); + protected $mailTargets = []; /** * @var Title @@ -72,10 +72,13 @@ class EmailNotification { protected $editor; /** + * @deprecated since 1.27 use WatchedItemStore::updateNotificationTimestamp directly + * * @param User $editor The editor that triggered the update. Their notification * timestamp will not be updated(they have already seen it) * @param LinkTarget $linkTarget The link target of the title to update timestamps for * @param string $timestamp Set the update timestamp to this value + * * @return int[] Array of user IDs */ public static function updateWatchlistTimestamp( @@ -83,47 +86,16 @@ class EmailNotification { LinkTarget $linkTarget, $timestamp ) { - global $wgEnotifWatchlist, $wgShowUpdatedMarker; - - if ( !$wgEnotifWatchlist && !$wgShowUpdatedMarker ) { - return array(); + // wfDeprecated( __METHOD__, '1.27' ); + $config = RequestContext::getMain()->getConfig(); + if ( !$config->get( 'EnotifWatchlist' ) && !$config->get( 'ShowUpdatedMarker' ) ) { + return []; } - - $dbw = wfGetDB( DB_MASTER ); - $res = $dbw->select( array( 'watchlist' ), - array( 'wl_user' ), - array( - 'wl_user != ' . intval( $editor->getID() ), - 'wl_namespace' => $linkTarget->getNamespace(), - 'wl_title' => $linkTarget->getDBkey(), - 'wl_notificationtimestamp IS NULL', - ), __METHOD__ + return WatchedItemStore::getDefaultInstance()->updateNotificationTimestamp( + $editor, + $linkTarget, + $timestamp ); - - $watchers = array(); - foreach ( $res as $row ) { - $watchers[] = intval( $row->wl_user ); - } - - if ( $watchers ) { - // Update wl_notificationtimestamp for all watching users except the editor - $fname = __METHOD__; - $dbw->onTransactionIdle( - function () use ( $dbw, $timestamp, $watchers, $linkTarget, $fname ) { - $dbw->update( 'watchlist', - array( /* SET */ - 'wl_notificationtimestamp' => $dbw->timestamp( $timestamp ) - ), array( /* WHERE */ - 'wl_user' => $watchers, - 'wl_namespace' => $linkTarget->getNamespace(), - 'wl_title' => $linkTarget->getDBkey(), - ), $fname - ); - } - ); - } - - return $watchers; } /** @@ -149,7 +121,15 @@ class EmailNotification { } // update wl_notificationtimestamp for watchers - $watchers = self::updateWatchlistTimestamp( $editor, $title, $timestamp ); + $config = RequestContext::getMain()->getConfig(); + $watchers = []; + if ( $config->get( 'EnotifWatchlist' ) || $config->get( 'ShowUpdatedMarker' ) ) { + $watchers = WatchedItemStore::getDefaultInstance()->updateNotificationTimestamp( + $editor, + $title, + $timestamp + ); + } $sendEmail = true; // $watchers deals with $wgEnotifWatchlist. @@ -173,16 +153,16 @@ class EmailNotification { if ( $sendEmail ) { JobQueueGroup::singleton()->lazyPush( new EnotifNotifyJob( $title, - array( + [ 'editor' => $editor->getName(), - 'editorID' => $editor->getID(), + 'editorID' => $editor->getId(), 'timestamp' => $timestamp, 'summary' => $summary, 'minorEdit' => $minorEdit, 'oldid' => $oldid, 'watchers' => $watchers, 'pageStatus' => $pageStatus - ) + ] ) ); } } @@ -225,9 +205,9 @@ class EmailNotification { $this->composed_common = false; $this->pageStatus = $pageStatus; - $formattedPageStatus = array( 'deleted', 'created', 'moved', 'restored', 'changed' ); + $formattedPageStatus = [ 'deleted', 'created', 'moved', 'restored', 'changed' ]; - Hooks::run( 'UpdateUserMailerFormattedPageStatus', array( &$formattedPageStatus ) ); + Hooks::run( 'UpdateUserMailerFormattedPageStatus', [ &$formattedPageStatus ] ); if ( !in_array( $this->pageStatus, $formattedPageStatus ) ) { throw new MWException( 'Not a valid page status!' ); } @@ -252,11 +232,11 @@ class EmailNotification { if ( $watchingUser->getOption( 'enotifwatchlistpages' ) && ( !$minorEdit || $watchingUser->getOption( 'enotifminoredits' ) ) && $watchingUser->isEmailConfirmed() - && $watchingUser->getID() != $userTalkId + && $watchingUser->getId() != $userTalkId && !in_array( $watchingUser->getName(), $wgUsersNotifiedOnAllChanges ) && !( $wgBlockDisablesLogin && $watchingUser->isBlocked() ) ) { - if ( Hooks::run( 'SendWatchlistEmailNotification', array( $watchingUser, $title, $this ) ) ) { + if ( Hooks::run( 'SendWatchlistEmailNotification', [ $watchingUser, $title, $this ] ) ) { $this->compose( $watchingUser, self::WATCHLIST ); } } @@ -300,7 +280,7 @@ class EmailNotification { ) { if ( !$targetUser->isEmailConfirmed() ) { wfDebug( __METHOD__ . ": talk page owner doesn't have validated email\n" ); - } elseif ( !Hooks::run( 'AbortTalkPageEmailNotification', array( $targetUser, $title ) ) ) { + } elseif ( !Hooks::run( 'AbortTalkPageEmailNotification', [ $targetUser, $title ] ) ) { wfDebug( __METHOD__ . ": talk page update notification is aborted for this user\n" ); } else { wfDebug( __METHOD__ . ": sending talk page update notification\n" ); @@ -327,22 +307,22 @@ class EmailNotification { # named variables when composing your notification emails while # simply editing the Meta pages - $keys = array(); - $postTransformKeys = array(); + $keys = []; + $postTransformKeys = []; $pageTitleUrl = $this->title->getCanonicalURL(); $pageTitle = $this->title->getPrefixedText(); if ( $this->oldid ) { // Always show a link to the diff which triggered the mail. See bug 32210. $keys['$NEWPAGE'] = "\n\n" . wfMessage( 'enotif_lastdiff', - $this->title->getCanonicalURL( array( 'diff' => 'next', 'oldid' => $this->oldid ) ) ) + $this->title->getCanonicalURL( [ 'diff' => 'next', 'oldid' => $this->oldid ] ) ) ->inContentLanguage()->text(); if ( !$wgEnotifImpersonal ) { // For personal mail, also show a link to the diff of all changes // since last visited. $keys['$NEWPAGE'] .= "\n\n" . wfMessage( 'enotif_lastvisited', - $this->title->getCanonicalURL( array( 'diff' => '0', 'oldid' => $this->oldid ) ) ) + $this->title->getCanonicalURL( [ 'diff' => '0', 'oldid' => $this->oldid ] ) ) ->inContentLanguage()->text(); } $keys['$OLDID'] = $this->oldid; @@ -479,24 +459,24 @@ class EmailNotification { # expressed in terms of individual local time of the notification # recipient, i.e. watching user $body = str_replace( - array( '$WATCHINGUSERNAME', + [ '$WATCHINGUSERNAME', '$PAGEEDITDATE', - '$PAGEEDITTIME' ), - array( $wgEnotifUseRealName && $watchingUser->getRealName() !== '' + '$PAGEEDITTIME' ], + [ $wgEnotifUseRealName && $watchingUser->getRealName() !== '' ? $watchingUser->getRealName() : $watchingUser->getName(), $wgContLang->userDate( $this->timestamp, $watchingUser ), - $wgContLang->userTime( $this->timestamp, $watchingUser ) ), + $wgContLang->userTime( $this->timestamp, $watchingUser ) ], $this->body ); - $headers = array(); + $headers = []; if ( $source === self::WATCHLIST ) { $headers['List-Help'] = 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Watchlist'; } - return UserMailer::send( $to, $this->from, $this->subject, $body, array( + return UserMailer::send( $to, $this->from, $this->subject, $body, [ 'replyTo' => $this->replyto, 'headers' => $headers, - ) ); + ] ); } /** @@ -513,17 +493,17 @@ class EmailNotification { } $body = str_replace( - array( '$WATCHINGUSERNAME', + [ '$WATCHINGUSERNAME', '$PAGEEDITDATE', - '$PAGEEDITTIME' ), - array( wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(), + '$PAGEEDITTIME' ], + [ wfMessage( 'enotif_impersonal_salutation' )->inContentLanguage()->text(), $wgContLang->date( $this->timestamp, false, false ), - $wgContLang->time( $this->timestamp, false, false ) ), + $wgContLang->time( $this->timestamp, false, false ) ], $this->body ); - return UserMailer::send( $addresses, $this->from, $this->subject, $body, array( + return UserMailer::send( $addresses, $this->from, $this->subject, $body, [ 'replyTo' => $this->replyto, - ) ); + ] ); } }