X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FTitle.php;h=a705aaa1ebb5dfb5a0d03618f2f2f3e05ad08c2e;hb=2dd32c82ffe5677dec64933c06e0ddbfa2d7c476;hp=79853dfe830bdefcce198cbcf09b5442ac934866;hpb=807d510ad7353ae4adee736eb6f4b34890761114;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index 79853dfe83..a705aaa1eb 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -1,6 +1,6 @@ isExternal() || $proto !== PROTO_RELATIVE ) { $ret = $this->getFullURL( $query, $query2, $proto ); - } elseif ( $this->getPrefixedText() === '' && $this->getFragment() !== '' ) { + } elseif ( $this->getPrefixedText() === '' && $this->hasFragment() ) { $ret = $this->getFragmentForURL(); } else { $ret = $this->getLocalURL( $query, $query2 ) . $this->getFragmentForURL(); @@ -1651,9 +1655,7 @@ class Title { * Get an HTML-escaped version of the URL form, suitable for * using in a link, without a server name or fragment * - * See getLocalURL for the arguments. - * - * @see self::getLocalURL + * @see self::getLocalURL for the arguments. * @param $query string * @param $query2 bool|string * @return String the URL @@ -1668,9 +1670,7 @@ class Title { * Get an HTML-escaped version of the URL form, suitable for * using in a link, including the server name and fragment * - * See getLocalURL for the arguments. - * - * @see self::getLocalURL + * @see self::getLocalURL for the arguments. * @return String the URL * @deprecated since 1.19 */ @@ -1688,9 +1688,7 @@ class Title { * if $wgInternalServer is not set. If the server variable used is * protocol-relative, the URL will be expanded to http:// * - * See getLocalURL for the arguments. - * - * @see self::getLocalURL + * @see self::getLocalURL for the arguments. * @return String the URL */ public function getInternalURL( $query = '', $query2 = false ) { @@ -1709,9 +1707,7 @@ class Title { * * NOTE: Unlike getInternalURL(), the canonical URL includes the fragment * - * See getLocalURL for the arguments. - * - * @see self::getLocalURL + * @see self::getLocalURL for the arguments. * @return string The URL * @since 1.18 */ @@ -1725,9 +1721,7 @@ class Title { /** * HTML-escaped version of getCanonicalURL() * - * See getLocalURL for the arguments. - * - * @see self::getLocalURL + * @see self::getLocalURL for the arguments. * @since 1.18 * @return string * @deprecated since 1.19 @@ -1776,7 +1770,6 @@ class Title { * * @deprecated in 1.19; use userCan(), quickUserCan() or getUserPermissionsErrors() instead * @return Bool - * @todo fold these checks into userCan() */ public function userCanRead() { wfDeprecated( __METHOD__, '1.19' ); @@ -3210,7 +3203,8 @@ class Title { global $wgContLang, $wgLocalInterwiki; # Initialisation - $this->mInterwiki = $this->mFragment = ''; + $this->mInterwiki = ''; + $this->mFragment = ''; $this->mNamespace = $this->mDefaultNamespace; # Usually NS_MAIN $dbkey = $this->mDbkeyform; @@ -3305,10 +3299,6 @@ class Title { break; } while ( true ); - # We already know that some pages won't be in the database! - if ( $this->isExternal() || NS_SPECIAL == $this->mNamespace ) { - $this->mArticleID = 0; - } $fragment = strstr( $dbkey, '#' ); if ( false !== $fragment ) { $this->setFragment( $fragment ); @@ -3378,9 +3368,9 @@ class Title { // there are numerous ways to present the same IP. Having sp:contribs scan // them all is silly and having some show the edits and others not is // inconsistent. Same for talk/userpages. Keep them normalized instead. - $dbkey = ( $this->mNamespace == NS_USER || $this->mNamespace == NS_USER_TALK ) - ? IP::sanitizeIP( $dbkey ) - : $dbkey; + if ( $this->mNamespace == NS_USER || $this->mNamespace == NS_USER_TALK ) { + $dbkey = IP::sanitizeIP( $dbkey ); + } // Any remaining initial :s are illegal. if ( $dbkey !== '' && ':' == $dbkey[0] ) { @@ -3393,6 +3383,11 @@ class Title { $this->mTextform = str_replace( '_', ' ', $dbkey ); + # We already know that some pages won't be in the database! + if ( $this->isExternal() || $this->mNamespace == NS_SPECIAL ) { + $this->mArticleID = 0; + } + return true; } @@ -3871,7 +3866,20 @@ class Title { $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason; } // @todo FIXME: $params? - $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ), $wgUser ); + $logId = $log->addEntry( 'move_prot', $nt, $comment, array( $this->getPrefixedText() ), $wgUser ); + + // reread inserted pr_ids for log relation + $insertedPrIds = $dbw->select( + 'page_restrictions', + 'pr_id', + array( 'pr_page' => $redirid ), + __METHOD__ + ); + $logRelationsValues = array(); + foreach ( $insertedPrIds as $prid ) { + $logRelationsValues[] = $prid->pr_id; + } + $log->addRelations( 'pr_id', $logRelationsValues, $logId ); } # Update watchlists @@ -3886,7 +3894,7 @@ class Title { $dbw->commit( __METHOD__ ); - wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid ) ); + wfRunHooks( 'TitleMoveComplete', array( &$this, &$nt, &$wgUser, $pageid, $redirid, $reason ) ); return true; } @@ -4057,7 +4065,7 @@ class Title { foreach ( $subpages as $oldSubpage ) { $count++; if ( $count > $wgMaximumMovedPages ) { - $retval[$oldSubpage->getPrefixedTitle()] = + $retval[$oldSubpage->getPrefixedText()] = array( 'movepage-max-pages', $wgMaximumMovedPages ); break; @@ -4425,9 +4433,11 @@ class Title { } /** - * Get the number of authors between the given revisions or revision IDs. + * Get the authors between the given revisions or revision IDs. * Used for diffs and other things that really need it. * + * @since 1.23 + * * @param int|Revision $old Old revision or rev ID (first before range by default) * @param int|Revision $new New revision or rev ID (first after range by default) * @param int $limit Maximum number of authors @@ -4436,9 +4446,9 @@ class Title { * 'include_new' Include $new in the range; $old is excluded. * 'include_both' Include both $old and $new in the range. * Unknown option values are ignored. - * @return int Number of revision authors in the range; zero if not both revisions exist + * @return array|null Names of revision authors in the range; null if not both revisions exist */ - public function countAuthorsBetween( $old, $new, $limit, $options = array() ) { + public function getAuthorsBetween( $old, $new, $limit, $options = array() ) { if ( !( $old instanceof Revision ) ) { $old = Revision::newFromTitle( $this, (int)$old ); } @@ -4449,8 +4459,9 @@ class Title { // Add $old->getPage() != $new->getPage() || $old->getPage() != $this->getArticleID() // in the sanity check below? if ( !$old || !$new ) { - return 0; // nothing to compare + return null; // nothing to compare } + $authors = array(); $old_cmp = '>'; $new_cmp = '<'; $options = (array)$options; @@ -4466,12 +4477,19 @@ class Title { } // No DB query needed if $old and $new are the same or successive revisions: if ( $old->getId() === $new->getId() ) { - return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1; + return ( $old_cmp === '>' && $new_cmp === '<' ) ? array() : array( $old->getRawUserText() ); } elseif ( $old->getId() === $new->getParentId() ) { - if ( $old_cmp === '>' || $new_cmp === '<' ) { - return ( $old_cmp === '>' && $new_cmp === '<' ) ? 0 : 1; + if ( $old_cmp === '>=' && $new_cmp === '<=' ) { + $authors[] = $old->getRawUserText(); + if ( $old->getRawUserText() != $new->getRawUserText() ) { + $authors[] = $new->getRawUserText(); + } + } elseif ( $old_cmp === '>=' ) { + $authors[] = $old->getRawUserText(); + } elseif ( $new_cmp === '<=' ) { + $authors[] = $new->getRawUserText(); } - return ( $old->getRawUserText() === $new->getRawUserText() ) ? 1 : 2; + return $authors; } $dbr = wfGetDB( DB_SLAVE ); $res = $dbr->select( 'revision', 'DISTINCT rev_user_text', @@ -4482,7 +4500,29 @@ class Title { ), __METHOD__, array( 'LIMIT' => $limit + 1 ) // add one so caller knows it was truncated ); - return (int)$dbr->numRows( $res ); + foreach ( $res as $row ) { + $authors[] = $row->rev_user_text; + } + return $authors; + } + + /** + * Get the number of authors between the given revisions or revision IDs. + * Used for diffs and other things that really need it. + * + * @param int|Revision $old Old revision or rev ID (first before range by default) + * @param int|Revision $new New revision or rev ID (first after range by default) + * @param int $limit Maximum number of authors + * @param string|array $options (Optional): Single option, or an array of options: + * 'include_old' Include $old in the range; $new is excluded. + * 'include_new' Include $new in the range; $old is excluded. + * 'include_both' Include both $old and $new in the range. + * Unknown option values are ignored. + * @return int Number of revision authors in the range; zero if not both revisions exist + */ + public function countAuthorsBetween( $old, $new, $limit, $options = array() ) { + $authors = $this->getAuthorsBetween( $old, $new, $limit, $options ); + return $authors ? count( $authors ) : 0; } /**