X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FTitle.php;h=3ce775b8bc80d95e94a786c4d3f41689e4878f15;hb=5fee8c2852f15418cc4baff768a5eacd3a3aa6c5;hp=3c51baebe2cc4611d1a266f662af119e9cb99905;hpb=c6adf0408cee1c0be97c222aa2689ec5800a84a4;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index 3c51baebe2..3ce775b8bc 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -835,7 +835,7 @@ class Title implements LinkTarget { /** * Returns the DB name of the distant wiki which owns the object. * - * @return string The DB name + * @return string|false The DB name */ public function getTransWikiID() { if ( !$this->isExternal() ) { @@ -974,7 +974,7 @@ class Title implements LinkTarget { /** * Get the namespace text * - * @return string Namespace text + * @return string|false Namespace text */ public function getNsText() { if ( $this->isExternal() ) { @@ -1233,12 +1233,6 @@ class Title implements LinkTarget { && ( $this->hasContentModel( CONTENT_MODEL_CSS ) || $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) ); - # @note This hook is also called in ContentHandler::getDefaultModel. - # It's called here again to make sure hook functions can force this - # method to return true even outside the MediaWiki namespace. - - Hooks::run( 'TitleIsCssOrJsPage', [ $this, &$isCssOrJsPage ], '1.25' ); - return $isCssOrJsPage; } @@ -1627,7 +1621,7 @@ class Title implements LinkTarget { * * @since 1.19 (r105919) * @param array|string $query - * @param bool $query2 + * @param string|string[]|bool $query2 * @return string */ private static function fixUrlQueryArgs( $query, $query2 = false ) { @@ -1663,8 +1657,8 @@ class Title implements LinkTarget { * * @see self::getLocalURL for the arguments. * @see wfExpandUrl - * @param array|string $query - * @param bool $query2 + * @param string|string[] $query + * @param string|string[]|bool $query2 * @param string $proto Protocol type to use in URL * @return string The URL */ @@ -1681,8 +1675,9 @@ class Title implements LinkTarget { # Finally, add the fragment. $url .= $this->getFragmentForURL(); - - Hooks::run( 'GetFullURL', [ &$this, &$url, $query ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetFullURL', [ &$titleRef, &$url, $query ] ); return $url; } @@ -1696,11 +1691,11 @@ class Title implements LinkTarget { * valid to link, locally, to the current Title. * @see self::newFromText to produce a Title object. * - * @param string|array $query An optional query string, + * @param string|string[] $query An optional query string, * not used for interwiki links. Can be specified as an associative array as well, * e.g., array( 'action' => 'edit' ) (keys and values will be URL-escaped). * Some query patterns will trigger various shorturl path replacements. - * @param array $query2 An optional secondary query array. This one MUST + * @param string|string[]|bool $query2 An optional secondary query array. This one MUST * be an array. If a string is passed it will be interpreted as a deprecated * variant argument and urlencoded into a variant= argument. * This second query argument will be added to the $query @@ -1728,7 +1723,9 @@ class Title implements LinkTarget { $dbkey = wfUrlencode( $this->getPrefixedDBkey() ); if ( $query == '' ) { $url = str_replace( '$1', $dbkey, $wgArticlePath ); - Hooks::run( 'GetLocalURL::Article', [ &$this, &$url ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetLocalURL::Article', [ &$titleRef, &$url ] ); } else { global $wgVariantArticlePath, $wgActionPaths, $wgContLang; $url = false; @@ -1772,8 +1769,9 @@ class Title implements LinkTarget { $url = "{$wgScript}?title={$dbkey}&{$query}"; } } - - Hooks::run( 'GetLocalURL::Internal', [ &$this, &$url, $query ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetLocalURL::Internal', [ &$titleRef, &$url, $query ] ); // @todo FIXME: This causes breakage in various places when we // actually expected a local URL and end up with dupe prefixes. @@ -1781,7 +1779,9 @@ class Title implements LinkTarget { $url = $wgServer . $url; } } - Hooks::run( 'GetLocalURL', [ &$this, &$url, $query ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetLocalURL', [ &$titleRef, &$url, $query ] ); return $url; } @@ -1795,7 +1795,7 @@ class Title implements LinkTarget { * The result obviously should not be URL-escaped, but does need to be * HTML-escaped if it's being output in HTML. * - * @param array $query + * @param string|string[] $query * @param bool $query2 * @param string|int|bool $proto A PROTO_* constant on how the URL should be expanded, * or false (default) for no expansion @@ -1830,7 +1830,9 @@ class Title implements LinkTarget { $query = self::fixUrlQueryArgs( $query, $query2 ); $server = $wgInternalServer !== false ? $wgInternalServer : $wgServer; $url = wfExpandUrl( $server . $this->getLocalURL( $query ), PROTO_HTTP ); - Hooks::run( 'GetInternalURL', [ &$this, &$url, $query ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetInternalURL', [ &$titleRef, &$url, $query ] ); return $url; } @@ -1848,7 +1850,9 @@ class Title implements LinkTarget { public function getCanonicalURL( $query = '', $query2 = false ) { $query = self::fixUrlQueryArgs( $query, $query2 ); $url = wfExpandUrl( $this->getLocalURL( $query ) . $this->getFragmentForURL(), PROTO_CANONICAL ); - Hooks::run( 'GetCanonicalURL', [ &$this, &$url, $query ] ); + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + Hooks::run( 'GetCanonicalURL', [ &$titleRef, &$url, $query ] ); return $url; } @@ -2052,18 +2056,22 @@ class Title implements LinkTarget { private function checkPermissionHooks( $action, $user, $errors, $rigor, $short ) { // Use getUserPermissionsErrors instead $result = ''; - if ( !Hooks::run( 'userCan', [ &$this, &$user, $action, &$result ] ) ) { + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + if ( !Hooks::run( 'userCan', [ &$titleRef, &$user, $action, &$result ] ) ) { return $result ? [] : [ [ 'badaccess-group0' ] ]; } // Check getUserPermissionsErrors hook - if ( !Hooks::run( 'getUserPermissionsErrors', [ &$this, &$user, $action, &$result ] ) ) { + // Avoid PHP 7.1 warning from passing $this by reference + $titleRef = $this; + if ( !Hooks::run( 'getUserPermissionsErrors', [ &$titleRef, &$user, $action, &$result ] ) ) { $errors = $this->resultToError( $errors, $result ); } // Check getUserPermissionsErrorsExpensive hook if ( $rigor !== 'quick' && !( $short && count( $errors ) > 0 ) - && !Hooks::run( 'getUserPermissionsErrorsExpensive', [ &$this, &$user, $action, &$result ] ) + && !Hooks::run( 'getUserPermissionsErrorsExpensive', [ &$titleRef, &$user, $action, &$result ] ) ) { $errors = $this->resultToError( $errors, $result ); } @@ -2409,7 +2417,7 @@ class Title implements LinkTarget { * * @param string $action The action to check * @param bool $short Short circuit on first error - * @return array List of errors + * @return array Array containing an error message key and any parameters */ private function missingPermissionError( $action, $short ) { // We avoid expensive display logic for quickUserCan's and such @@ -2417,19 +2425,7 @@ class Title implements LinkTarget { return [ 'badaccess-group0' ]; } - $groups = array_map( [ 'User', 'makeGroupLinkWiki' ], - User::getGroupsWithPermission( $action ) ); - - if ( count( $groups ) ) { - global $wgLang; - return [ - 'badaccess-groups', - $wgLang->commaList( $groups ), - count( $groups ) - ]; - } else { - return [ 'badaccess-group0' ]; - } + return User::newFatalPermissionDeniedStatus( $action )->getErrorsArray()[0]; } /** @@ -3595,18 +3591,6 @@ class Title implements LinkTarget { ); } - /** - * Move this page without authentication - * - * @deprecated since 1.25 use MovePage class instead - * @param Title $nt The new page Title - * @return array|bool True on success, getUserPermissionsErrors()-like array on failure - */ - public function moveNoAuth( &$nt ) { - wfDeprecated( __METHOD__, '1.25' ); - return $this->moveTo( $nt, false ); - } - /** * Check whether a given move operation would be valid. * Returns true if ok, or a getUserPermissionsErrors()-like array otherwise @@ -3670,9 +3654,12 @@ class Title implements LinkTarget { * @param string $reason The reason for the move * @param bool $createRedirect Whether to create a redirect from the old title to the new title. * Ignored if the user doesn't have the suppressredirect right. + * @param array $changeTags Applied to the entry in the move log and redirect page revision * @return array|bool True on success, getUserPermissionsErrors()-like array on failure */ - public function moveTo( &$nt, $auth = true, $reason = '', $createRedirect = true ) { + public function moveTo( &$nt, $auth = true, $reason = '', $createRedirect = true, + array $changeTags = [] ) { + global $wgUser; $err = $this->isValidMoveOperation( $nt, $auth, $reason ); if ( is_array( $err ) ) { @@ -3686,7 +3673,7 @@ class Title implements LinkTarget { } $mp = new MovePage( $this, $nt ); - $status = $mp->move( $wgUser, $reason, $createRedirect ); + $status = $mp->move( $wgUser, $reason, $createRedirect, $changeTags ); if ( $status->isOK() ) { return true; } else { @@ -3702,24 +3689,32 @@ class Title implements LinkTarget { * @param string $reason The reason for the move * @param bool $createRedirect Whether to create redirects from the old subpages to * the new ones Ignored if the user doesn't have the 'suppressredirect' right + * @param array $changeTags Applied to the entry in the move log and redirect page revision * @return array Array with old page titles as keys, and strings (new page titles) or - * arrays (errors) as values, or an error array with numeric indices if no pages - * were moved + * getUserPermissionsErrors()-like arrays (errors) as values, or a + * getUserPermissionsErrors()-like error array with numeric indices if + * no pages were moved */ - public function moveSubpages( $nt, $auth = true, $reason = '', $createRedirect = true ) { + public function moveSubpages( $nt, $auth = true, $reason = '', $createRedirect = true, + array $changeTags = [] ) { + global $wgMaximumMovedPages; // Check permissions if ( !$this->userCan( 'move-subpages' ) ) { - return [ 'cant-move-subpages' ]; + return [ + [ 'cant-move-subpages' ], + ]; } // Do the source and target namespaces support subpages? if ( !MWNamespace::hasSubpages( $this->getNamespace() ) ) { - return [ 'namespace-nosubpages', - MWNamespace::getCanonicalName( $this->getNamespace() ) ]; + return [ + [ 'namespace-nosubpages', MWNamespace::getCanonicalName( $this->getNamespace() ) ], + ]; } if ( !MWNamespace::hasSubpages( $nt->getNamespace() ) ) { - return [ 'namespace-nosubpages', - MWNamespace::getCanonicalName( $nt->getNamespace() ) ]; + return [ + [ 'namespace-nosubpages', MWNamespace::getCanonicalName( $nt->getNamespace() ) ], + ]; } $subpages = $this->getSubpages( $wgMaximumMovedPages + 1 ); @@ -3728,9 +3723,9 @@ class Title implements LinkTarget { foreach ( $subpages as $oldSubpage ) { $count++; if ( $count > $wgMaximumMovedPages ) { - $retval[$oldSubpage->getPrefixedText()] = - [ 'movepage-max-pages', - $wgMaximumMovedPages ]; + $retval[$oldSubpage->getPrefixedText()] = [ + [ 'movepage-max-pages', $wgMaximumMovedPages ], + ]; break; } @@ -3757,7 +3752,7 @@ class Title implements LinkTarget { # be longer than 255 characters. $newSubpage = Title::makeTitleSafe( $newNs, $newPageName ); - $success = $oldSubpage->moveTo( $newSubpage, $auth, $reason, $createRedirect ); + $success = $oldSubpage->moveTo( $newSubpage, $auth, $reason, $createRedirect, $changeTags ); if ( $success === true ) { $retval[$oldSubpage->getPrefixedText()] = $newSubpage->getPrefixedText(); } else { @@ -4436,7 +4431,7 @@ class Title implements LinkTarget { * Get the last touched timestamp * * @param IDatabase $db Optional db - * @return string Last-touched timestamp + * @return string|false Last-touched timestamp */ public function getTouched( $db = null ) { if ( $db === null ) {