X-Git-Url: https://git.cyclocoop.org/%242?a=blobdiff_plain;f=includes%2FTitle.php;h=2021e0ab9c0bb1a01f28c61fe7950eb28fc3f051;hb=b675be2083;hp=f291a69b9e8d276b302b9138841af939f686df07;hpb=d3a51a690c977efe2d97f911f279a4ac791a8e83;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index f291a69b9e..2021e0ab9c 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -500,7 +500,7 @@ class Title implements LinkTarget { * @param string $interwiki The interwiki prefix * @return Title The new object */ - public static function &makeTitle( $ns, $title, $fragment = '', $interwiki = '' ) { + public static function makeTitle( $ns, $title, $fragment = '', $interwiki = '' ) { $t = new Title(); $t->mInterwiki = $interwiki; $t->mFragment = $fragment; @@ -1773,12 +1773,13 @@ class Title implements LinkTarget { * * @param array $query * @param bool $query2 - * @param string $proto Protocol to use; setting this will cause a full URL to be used + * @param string|int|bool $proto A PROTO_* constant on how the URL should be expanded, + * or false (default) for no expansion * @see self::getLocalURL for the arguments. * @return string The URL */ - public function getLinkURL( $query = '', $query2 = false, $proto = PROTO_RELATIVE ) { - if ( $this->isExternal() || $proto !== PROTO_RELATIVE ) { + public function getLinkURL( $query = '', $query2 = false, $proto = false ) { + if ( $this->isExternal() || $proto !== false ) { $ret = $this->getFullURL( $query, $query2, $proto ); } elseif ( $this->getPrefixedText() === '' && $this->hasFragment() ) { $ret = $this->getFragmentForURL(); @@ -2270,13 +2271,17 @@ class Title implements LinkTarget { * @return array List of errors */ private function checkUserBlock( $action, $user, $errors, $rigor, $short ) { + global $wgEmailConfirmToEdit, $wgBlockDisablesLogin; // Account creation blocks handled at userlogin. // Unblocking handled in SpecialUnblock if ( $rigor === 'quick' || in_array( $action, [ 'createaccount', 'unblock' ] ) ) { return $errors; } - global $wgEmailConfirmToEdit; + // Optimize for a very common case + if ( $action === 'read' && !$wgBlockDisablesLogin ) { + return $errors; + } if ( $wgEmailConfirmToEdit && !$user->isEmailConfirmed() ) { $errors[] = [ 'confirmedittext' ]; @@ -2318,8 +2323,8 @@ class Title implements LinkTarget { # If the user is allowed to read pages, he is allowed to read all pages $whitelisted = true; } elseif ( $this->isSpecial( 'Userlogin' ) - || $this->isSpecial( 'ChangePassword' ) || $this->isSpecial( 'PasswordReset' ) + || $this->isSpecial( 'Userlogout' ) ) { # Always grant access to the login page. # Even anons need to be able to log in. @@ -2433,6 +2438,7 @@ class Title implements LinkTarget { $checks = [ 'checkPermissionHooks', 'checkReadPermissions', + 'checkUserBlock', // for wgBlockDisablesLogin ]; # Don't call checkSpecialsAndNSPermissions or checkCSSandJSPermissions # here as it will lead to duplicate error messages. This is okay to do @@ -4366,18 +4372,23 @@ class Title implements LinkTarget { return true; // avoid gap locking if we know it's not there } - $method = __METHOD__; - $dbw = wfGetDB( DB_MASTER ); $conds = $this->pageCond(); - $dbw->onTransactionIdle( function () use ( $dbw, $conds, $method, $purgeTime ) { - $dbTimestamp = $dbw->timestamp( $purgeTime ?: time() ); - $dbw->update( - 'page', - [ 'page_touched' => $dbTimestamp ], - $conds + [ 'page_touched < ' . $dbw->addQuotes( $dbTimestamp ) ], - $method - ); - } ); + DeferredUpdates::addUpdate( + new AutoCommitUpdate( + wfGetDB( DB_MASTER ), + __METHOD__, + function ( IDatabase $dbw, $fname ) use ( $conds, $purgeTime ) { + $dbTimestamp = $dbw->timestamp( $purgeTime ?: time() ); + $dbw->update( + 'page', + [ 'page_touched' => $dbTimestamp ], + $conds + [ 'page_touched < ' . $dbw->addQuotes( $dbTimestamp ) ], + $fname + ); + } + ), + DeferredUpdates::PRESEND + ); return true; } @@ -4553,10 +4564,10 @@ class Title implements LinkTarget { * @return bool */ public function canUseNoindex() { - global $wgContentNamespaces, $wgExemptFromUserRobotsControl; + global $wgExemptFromUserRobotsControl; $bannedNamespaces = is_null( $wgExemptFromUserRobotsControl ) - ? $wgContentNamespaces + ? MWNamespace::getContentNamespaces() : $wgExemptFromUserRobotsControl; return !in_array( $this->mNamespace, $bannedNamespaces );