* Can this title have a corresponding talk page?
*
* @see MWNamespace::hasTalkNamespace
+ * @since 1.30
*
* @return bool True if this title either is a talk page or can have a talk page associated.
*/
*
* @since 1.30
*
- * @return Title The object for the talk page,
+ * @return Title|null The object for the talk page,
* or null if no associated talk page can exist, according to canHaveTalkPage().
*/
public function getTalkPageIfDefined() {
if ( $this->mTitleProtection === null ) {
$dbr = wfGetDB( DB_REPLICA );
+ $commentStore = new CommentStore( 'pt_reason' );
+ $commentQuery = $commentStore->getJoin();
$res = $dbr->select(
- 'protected_titles',
+ [ 'protected_titles' ] + $commentQuery['tables'],
[
'user' => 'pt_user',
- 'reason' => 'pt_reason',
'expiry' => 'pt_expiry',
'permission' => 'pt_create_perm'
- ],
+ ] + $commentQuery['fields'],
[ 'pt_namespace' => $this->getNamespace(), 'pt_title' => $this->getDBkey() ],
- __METHOD__
+ __METHOD__,
+ [],
+ $commentQuery['joins']
);
// fetchRow returns false if there are no rows.
$row = $dbr->fetchRow( $res );
if ( $row ) {
- $row['expiry'] = $dbr->decodeExpiry( $row['expiry'] );
+ $this->mTitleProtection = [
+ 'user' => $row['user'],
+ 'expiry' => $dbr->decodeExpiry( $row['expiry'] ),
+ 'permission' => $row['permission'],
+ 'reason' => $commentStore->getComment( $row )->text,
+ ];
+ } else {
+ $this->mTitleProtection = false;
}
- $this->mTitleProtection = $row;
}
return $this->mTitleProtection;
}