X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FTitle.php;h=b0df15f044f5494373032ba928aef2b0bc13eadd;hb=0d1487dd630b74f5c21146f9c14a97189eb7dab3;hp=d3cf7d0d3b7cbf35d5ef3c3befa5e9b94c220158;hpb=dd7df34a227f412b81d0c6aff886d7c68f961bb9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index d3cf7d0d3b..b0df15f044 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -96,7 +96,7 @@ class Title { /** @var array Array of groups allowed to edit this article */ public $mRestrictions = array(); - /** @var bool */ + /** @var string|bool */ protected $mOldRestrictions = false; /** @var bool Cascade restrictions on this page to included templates and images? */ @@ -451,6 +451,9 @@ class Title { if ( isset( $row->page_lang ) ) { $this->mDbPageLanguage = (string)$row->page_lang; } + if ( isset( $row->page_restrictions ) ) { + $this->mOldRestrictions = $row->page_restrictions; + } } else { // page not found $this->mArticleID = 0; $this->mLength = 0; @@ -2899,15 +2902,17 @@ class Title { $this->mCascadeRestriction = false; # Backwards-compatibility: also load the restrictions from the page record (old format). + if ( $oldFashionedRestrictions !== null ) { + $this->mOldRestrictions = $oldFashionedRestrictions; + } - if ( $oldFashionedRestrictions === null ) { - $oldFashionedRestrictions = $dbr->selectField( 'page', 'page_restrictions', + if ( $this->mOldRestrictions === false ) { + $this->mOldRestrictions = $dbr->selectField( 'page', 'page_restrictions', array( 'page_id' => $this->getArticleID() ), __METHOD__ ); } - if ( $oldFashionedRestrictions != '' ) { - - foreach ( explode( ':', trim( $oldFashionedRestrictions ) ) as $restrict ) { + if ( $this->mOldRestrictions != '' ) { + foreach ( explode( ':', trim( $this->mOldRestrictions ) ) as $restrict ) { $temp = explode( '=', trim( $restrict ) ); if ( count( $temp ) == 1 ) { // old old format should be treated as edit/move restriction @@ -2920,9 +2925,6 @@ class Title { } } } - - $this->mOldRestrictions = true; - } if ( count( $rows ) ) { @@ -3271,6 +3273,7 @@ class Title { } $this->mRestrictionsLoaded = false; $this->mRestrictions = array(); + $this->mOldRestrictions = false; $this->mRedirect = null; $this->mLength = -1; $this->mLatestID = false; @@ -3417,8 +3420,6 @@ class Title { * @return array Array of Title objects linking here */ public function getLinksFrom( $options = array(), $table = 'pagelinks', $prefix = 'pl' ) { - global $wgContentHandlerUseDB; - $id = $this->getArticleID(); # If the page doesn't exist; there can't be any link from this page @@ -3432,49 +3433,36 @@ class Title { $db = wfGetDB( DB_SLAVE ); } - $namespaceFiled = "{$prefix}_namespace"; - $titleField = "{$prefix}_title"; - - $fields = array( - $namespaceFiled, - $titleField, - 'page_id', - 'page_len', - 'page_is_redirect', - 'page_latest' - ); - - if ( $wgContentHandlerUseDB ) { - $fields[] = 'page_content_model'; - } + $blNamespace = "{$prefix}_namespace"; + $blTitle = "{$prefix}_title"; $res = $db->select( array( $table, 'page' ), - $fields, + array_merge( + array( $blNamespace, $blTitle ), + WikiPage::selectFields() + ), array( "{$prefix}_from" => $id ), __METHOD__, $options, array( 'page' => array( 'LEFT JOIN', - array( "page_namespace=$namespaceFiled", "page_title=$titleField" ) + array( "page_namespace=$blNamespace", "page_title=$blTitle" ) ) ) ); $retVal = array(); - if ( $res->numRows() ) { - $linkCache = LinkCache::singleton(); - foreach ( $res as $row ) { - $titleObj = Title::makeTitle( $row->$namespaceFiled, $row->$titleField ); - if ( $titleObj ) { - if ( $row->page_id ) { - $linkCache->addGoodLinkObjFromRow( $titleObj, $row ); - } else { - $linkCache->addBadLinkObj( $titleObj ); - } - $retVal[] = $titleObj; - } + $linkCache = LinkCache::singleton(); + foreach ( $res as $row ) { + if ( $row->page_id ) { + $titleObj = Title::newFromRow( $row ); + } else { + $titleObj = Title::makeTitle( $row->$blNamespace, $row->$blTitle ); + $linkCache->addBadLinkObj( $titleObj ); } + $retVal[] = $titleObj; } + return $retVal; } @@ -4421,35 +4409,29 @@ class Title { * @return string|null */ public function getNotificationTimestamp( $user = null ) { - global $wgUser, $wgShowUpdatedMarker; + global $wgUser; + // Assume current user if none given if ( !$user ) { $user = $wgUser; } // Check cache first $uid = $user->getId(); + if ( !$uid ) { + return false; + } // avoid isset here, as it'll return false for null entries if ( array_key_exists( $uid, $this->mNotificationTimestamp ) ) { return $this->mNotificationTimestamp[$uid]; } - if ( !$uid || !$wgShowUpdatedMarker || !$user->isAllowed( 'viewmywatchlist' ) ) { - $this->mNotificationTimestamp[$uid] = false; - return $this->mNotificationTimestamp[$uid]; - } // Don't cache too much! if ( count( $this->mNotificationTimestamp ) >= self::CACHE_MAX ) { $this->mNotificationTimestamp = array(); } - $dbr = wfGetDB( DB_SLAVE ); - $this->mNotificationTimestamp[$uid] = $dbr->selectField( 'watchlist', - 'wl_notificationtimestamp', - array( - 'wl_user' => $user->getId(), - 'wl_namespace' => $this->getNamespace(), - 'wl_title' => $this->getDBkey(), - ), - __METHOD__ - ); + + $watchedItem = WatchedItem::fromUserTitle( $user, $this ); + $this->mNotificationTimestamp[$uid] = $watchedItem->getNotificationTimestamp(); + return $this->mNotificationTimestamp[$uid]; }