/** @var array Array of groups allowed to edit this article */
public $mRestrictions = [];
- /** @var string|bool */
+ /**
+ * @var string|bool Comma-separated set of permission keys
+ * indicating who can move or edit the page from the page table, (pre 1.10) rows.
+ * Edit and move sections are separated by a colon
+ * Example: "edit=autoconfirmed,sysop:move=sysop"
+ */
protected $mOldRestrictions = false;
/** @var bool Cascade restrictions on this page to included templates and images? */
public function getFragmentForURL() {
if ( !$this->hasFragment() ) {
return '';
- } elseif ( $this->isExternal() && !$this->getTransWikiID() ) {
+ } elseif ( $this->isExternal()
+ && !self::getInterwikiLookup()->fetch( $this->mInterwiki )->isLocal()
+ ) {
return '#' . Sanitizer::escapeIdForExternalInterwiki( $this->getFragment() );
}
return '#' . Sanitizer::escapeIdForLink( $this->getFragment() );
* Public for usage by LiquidThreads.
*
* @param array $rows Array of db result objects
- * @param string $oldFashionedRestrictions Comma-separated list of page
- * restrictions from page table (pre 1.10)
+ * @param string $oldFashionedRestrictions Comma-separated set of permission keys
+ * indicating who can move or edit the page from the page table, (pre 1.10) rows.
+ * Edit and move sections are separated by a colon
+ * Example: "edit=autoconfirmed,sysop:move=sysop"
*/
public function loadRestrictionsFromRows( $rows, $oldFashionedRestrictions = null ) {
$dbr = wfGetDB( DB_REPLICA );
/**
* Load restrictions from the page_restrictions table
*
- * @param string $oldFashionedRestrictions Comma-separated list of page
- * restrictions from page table (pre 1.10)
+ * @param string $oldFashionedRestrictions Comma-separated set of permission keys
+ * indicating who can move or edit the page from the page table, (pre 1.10) rows.
+ * Edit and move sections are separated by a colon
+ * Example: "edit=autoconfirmed,sysop:move=sysop"
*/
public function loadRestrictions( $oldFashionedRestrictions = null ) {
if ( $this->mRestrictionsLoaded ) {
$blNamespace = "{$prefix}_namespace";
$blTitle = "{$prefix}_title";
+ $pageQuery = WikiPage::getQueryInfo();
$res = $db->select(
- [ $table, 'page' ],
+ [ $table, 'nestpage' => $pageQuery['tables'] ],
array_merge(
[ $blNamespace, $blTitle ],
- WikiPage::selectFields()
+ $pageQuery['fields']
),
[ "{$prefix}_from" => $id ],
__METHOD__,
$options,
- [ 'page' => [
+ [ 'nestpage' => [
'LEFT JOIN',
[ "page_namespace=$blNamespace", "page_title=$blTitle" ]
- ] ]
+ ] ] + $pageQuery['joins']
);
$retVal = [];
$pageId = $this->getArticleID( $flags );
if ( $pageId ) {
$db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA );
- $row = $db->selectRow( 'revision', Revision::selectFields(),
+ $revQuery = Revision::getQueryInfo();
+ $row = $db->selectRow( $revQuery['tables'], $revQuery['fields'],
[ 'rev_page' => $pageId ],
__METHOD__,
[
'ORDER BY' => 'rev_timestamp ASC, rev_id ASC',
- 'IGNORE INDEX' => 'rev_timestamp', // See T159319
- ]
+ 'IGNORE INDEX' => [ 'revision' => 'rev_timestamp' ], // See T159319
+ ],
+ $revQuery['joins']
);
if ( $row ) {
return new Revision( $row );
* on the number of links. Typically called on create and delete.
*/
public function touchLinks() {
- DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'pagelinks' ) );
+ DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'pagelinks', 'page-touch' ) );
if ( $this->getNamespace() == NS_CATEGORY ) {
- DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this, 'categorylinks' ) );
+ DeferredUpdates::addUpdate(
+ new HTMLCacheUpdate( $this, 'categorylinks', 'category-touch' )
+ );
}
}
/**
* Get the last touched timestamp
*
- * @param IDatabase $db Optional db
+ * @param IDatabase|null $db
* @return string|false Last-touched timestamp
*/
public function getTouched( $db = null ) {