Also don't cast $model to int in LinkCache::addGoodLinkObj(); content
model IDs are non-numeric strings, not integers, so that field was
always populated with the value 0. Because 0 is a falsy value, this
caused subsequent calls to Title::getContentModel() to return the
default model rather than the correct one.
Also (hopefully) fixed every single query that could cause a
LinkCache entry to be added without the content model.
Bug: 69789
Change-Id: I94f06baf406afa538cd2b10139598442f9fc6759
* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
* (bugs 57238, 65206) Blank pages can now be directly created.
* (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
* $wgRunJobsAsync now works with private wikis (e.g. read requires login).
* (bugs 57238, 65206) Blank pages can now be directly created.
+* (bug 69789) Title::getContentModel() now loads from the database when
+ necessary instead of incorrectly returning the default content model.
=== Web API changes in 1.24 ===
* action=parse API now supports prop=modules, which provides the list of
=== Web API changes in 1.24 ===
* action=parse API now supports prop=modules, which provides the list of
* @param array $categories Mapping category name => sort key
*/
public function addCategoryLinks( array $categories ) {
* @param array $categories Mapping category name => sort key
*/
public function addCategoryLinks( array $categories ) {
+ global $wgContLang, $wgContentHandlerUseDB;
if ( !is_array( $categories ) || count( $categories ) == 0 ) {
return;
if ( !is_array( $categories ) || count( $categories ) == 0 ) {
return;
# Fetch existence plus the hiddencat property
$dbr = wfGetDB( DB_SLAVE );
# Fetch existence plus the hiddencat property
$dbr = wfGetDB( DB_SLAVE );
+ $fields = array( 'page_id', 'page_namespace', 'page_title', 'page_len',
+ 'page_is_redirect', 'page_latest', 'pp_value' );
+
+ if ( $wgContentHandlerUseDB ) {
+ $fields[] = 'page_content_model';
+ }
+
$res = $dbr->select( array( 'page', 'page_props' ),
$res = $dbr->select( array( 'page', 'page_props' ),
- array( 'page_id', 'page_namespace', 'page_title', 'page_len',
- 'page_is_redirect', 'page_latest', 'pp_value' ),
$lb->constructSet( 'page', $dbr ),
__METHOD__,
array(),
$lb->constructSet( 'page', $dbr ),
__METHOD__,
array(),
* Get the page's content model id, see the CONTENT_MODEL_XXX constants.
*
* @throws MWException
* Get the page's content model id, see the CONTENT_MODEL_XXX constants.
*
* @throws MWException
+ * @param int $flags A bit field; may be Title::GAID_FOR_UPDATE to select for update
* @return string Content model id
*/
* @return string Content model id
*/
- public function getContentModel() {
- if ( !$this->mContentModel ) {
+ public function getContentModel( $flags = 0 ) {
+ # Calling getArticleID() loads the field from cache as needed
+ if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
$linkCache = LinkCache::singleton();
$this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
}
$linkCache = LinkCache::singleton();
$this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
}
* @return bool|ResultWrapper
*/
public function doQuery() {
* @return bool|ResultWrapper
*/
public function doQuery() {
+ global $wgContentHandlerUseDB;
+
if ( $this->isEmpty() ) {
return false;
}
if ( $this->isEmpty() ) {
return false;
}
$table = 'page';
$fields = array( 'page_id', 'page_namespace', 'page_title', 'page_len',
'page_is_redirect', 'page_latest' );
$table = 'page';
$fields = array( 'page_id', 'page_namespace', 'page_title', 'page_len',
'page_is_redirect', 'page_latest' );
+
+ if ( $wgContentHandlerUseDB ) {
+ $fields[] = 'page_content_model';
+ }
+
$conds = $this->constructSet( 'page', $dbr );
// Do query
$conds = $this->constructSet( 'page', $dbr );
// Do query
* @param int $len Text's length
* @param int $redir Whether the page is a redirect
* @param int $revision Latest revision's ID
* @param int $len Text's length
* @param int $redir Whether the page is a redirect
* @param int $revision Latest revision's ID
- * @param int $model Latest revision's content model ID
+ * @param string|null $model Latest revision's content model ID
*/
public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
*/
public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
- $revision = 0, $model = 0
+ $revision = 0, $model = null
) {
$dbkey = $title->getPrefixedDBkey();
$this->mGoodLinks[$dbkey] = (int)$id;
) {
$dbkey = $title->getPrefixedDBkey();
$this->mGoodLinks[$dbkey] = (int)$id;
'length' => (int)$len,
'redirect' => (int)$redir,
'revision' => (int)$revision,
'length' => (int)$len,
'redirect' => (int)$redir,
'revision' => (int)$revision,
+ 'model' => $model ? (string)$model : null,
}
wfProfileIn( __METHOD__ );
}
wfProfileIn( __METHOD__ );
+ global $wgContLang, $wgContentHandlerUseDB;
$colours = array();
$linkCache = LinkCache::singleton();
$colours = array();
$linkCache = LinkCache::singleton();
+ $fields = array( 'page_id', 'page_namespace', 'page_title',
+ 'page_is_redirect', 'page_len', 'page_latest' );
+
+ if ( $wgContentHandlerUseDB ) {
+ $fields[] = 'page_content_model';
+ }
+
$res = $dbr->select(
'page',
$res = $dbr->select(
'page',
- array( 'page_id', 'page_namespace', 'page_title',
- 'page_is_redirect', 'page_len', 'page_latest' ),
$dbr->makeList( $where, LIST_OR ),
__METHOD__
);
$dbr->makeList( $where, LIST_OR ),
__METHOD__
);
* @param array $colours
*/
protected function doVariants( &$colours ) {
* @param array $colours
*/
protected function doVariants( &$colours ) {
+ global $wgContLang, $wgContentHandlerUseDB;
$linkBatch = new LinkBatch();
$variantMap = array(); // maps $pdbkey_Variant => $keys (of link holders)
$output = $this->parent->getOutput();
$linkBatch = new LinkBatch();
$variantMap = array(); // maps $pdbkey_Variant => $keys (of link holders)
$output = $this->parent->getOutput();
if ( !$linkBatch->isEmpty() ) {
// construct query
$dbr = wfGetDB( DB_SLAVE );
if ( !$linkBatch->isEmpty() ) {
// construct query
$dbr = wfGetDB( DB_SLAVE );
+ $fields = array( 'page_id', 'page_namespace', 'page_title',
+ 'page_is_redirect', 'page_len', 'page_latest' );
+
+ if ( $wgContentHandlerUseDB ) {
+ $fields[] = 'page_content_model';
+ }
+
$varRes = $dbr->select( 'page',
$varRes = $dbr->select( 'page',
- array( 'page_id', 'page_namespace', 'page_title',
- 'page_is_redirect', 'page_len', 'page_latest' ),
$linkBatch->constructSet( 'page', $dbr ),
__METHOD__
);
$linkBatch->constructSet( 'page', $dbr ),
__METHOD__
);