X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FTitle.php;fp=includes%2FTitle.php;h=5e1e8c61156ab55041c88f5833b18575eb06ed9b;hb=3d653e8ab542e502f4dcf574c9e4917cf56a5f8c;hp=16c715d7a779f89946af1f8aa0dca4a68e7b42c9;hpb=2108c55ec531fbf44d0736b2ce5c532d677669da;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Title.php b/includes/Title.php index 16c715d7a7..5e1e8c6115 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -1104,7 +1104,7 @@ class Title implements LinkTarget { /** * Returns true if the title is inside one of the specified namespaces. * - * @param int $namespaces,... The namespaces to check for + * @param int|int[] $namespaces,... The namespaces to check for * @return bool * @since 1.19 */ @@ -2873,23 +2873,6 @@ class Title implements LinkTarget { return $this->mCascadeRestriction; } - /** - * Loads a string into mRestrictions array - * - * @param ResultWrapper $res Resource restrictions as an SQL result. - * @param string $oldFashionedRestrictions Comma-separated list of page - * restrictions from page table (pre 1.10) - */ - private function loadRestrictionsFromResultWrapper( $res, $oldFashionedRestrictions = null ) { - $rows = []; - - foreach ( $res as $row ) { - $rows[] = $row; - } - - $this->loadRestrictionsFromRows( $rows, $oldFashionedRestrictions ); - } - /** * Compiles list of active page restrictions from both page table (pre 1.10) * and page_restrictions table for this existing page. @@ -2973,36 +2956,53 @@ class Title implements LinkTarget { * restrictions from page table (pre 1.10) */ public function loadRestrictions( $oldFashionedRestrictions = null ) { - if ( !$this->mRestrictionsLoaded ) { - $dbr = wfGetDB( DB_REPLICA ); - if ( $this->exists() ) { - $res = $dbr->select( - 'page_restrictions', - [ 'pr_type', 'pr_expiry', 'pr_level', 'pr_cascade' ], - [ 'pr_page' => $this->getArticleID() ], - __METHOD__ - ); + if ( $this->mRestrictionsLoaded ) { + return; + } - $this->loadRestrictionsFromResultWrapper( $res, $oldFashionedRestrictions ); - } else { - $title_protection = $this->getTitleProtection(); - - if ( $title_protection ) { - $now = wfTimestampNow(); - $expiry = $dbr->decodeExpiry( $title_protection['expiry'] ); - - if ( !$expiry || $expiry > $now ) { - // Apply the restrictions - $this->mRestrictionsExpiry['create'] = $expiry; - $this->mRestrictions['create'] = explode( ',', trim( $title_protection['permission'] ) ); - } else { // Get rid of the old restrictions - $this->mTitleProtection = false; - } - } else { - $this->mRestrictionsExpiry['create'] = 'infinity'; + $id = $this->getArticleID(); + if ( $id ) { + $cache = ObjectCache::getMainWANInstance(); + $rows = $cache->getWithSetCallback( + // Page protections always leave a new null revision + $cache->makeKey( 'page-restrictions', $id, $this->getLatestRevID() ), + $cache::TTL_DAY, + function ( $curValue, &$ttl, array &$setOpts ) { + $dbr = wfGetDB( DB_REPLICA ); + + $setOpts += Database::getCacheSetOptions( $dbr ); + + return iterator_to_array( + $dbr->select( + 'page_restrictions', + [ 'pr_type', 'pr_expiry', 'pr_level', 'pr_cascade' ], + [ 'pr_page' => $this->getArticleID() ], + __METHOD__ + ) + ); + } + ); + + $this->loadRestrictionsFromRows( $rows, $oldFashionedRestrictions ); + } else { + $title_protection = $this->getTitleProtection(); + + if ( $title_protection ) { + $now = wfTimestampNow(); + $expiry = wfGetDB( DB_REPLICA )->decodeExpiry( $title_protection['expiry'] ); + + if ( !$expiry || $expiry > $now ) { + // Apply the restrictions + $this->mRestrictionsExpiry['create'] = $expiry; + $this->mRestrictions['create'] = + explode( ',', trim( $title_protection['permission'] ) ); + } else { // Get rid of the old restrictions + $this->mTitleProtection = false; } - $this->mRestrictionsLoaded = true; + } else { + $this->mRestrictionsExpiry['create'] = 'infinity'; } + $this->mRestrictionsLoaded = true; } } @@ -3283,7 +3283,7 @@ class Title implements LinkTarget { * This clears some fields in this object, and clears any associated * keys in the "bad links" section of the link cache. * - * - This is called from WikiPage::doEdit() and WikiPage::insertOn() to allow + * - This is called from WikiPage::doEditContent() and WikiPage::insertOn() to allow * loading of the new page_id. It's also called from * WikiPage::doDeleteArticleReal() *