Page MenuHomePhabricator

PHP Notice: Use of undefined constant CT_MODE_PAGES - assumed 'CT_MODE_PAGES' since MW 1.28+
Open, Needs TriagePublic

Description

Under MW 1.27 and earlier, the extension works like a charm, when upgrading to MW 1.28:

MediaWiki1.28.0
PHP7.0.13 (apache2handler)
MariaDB10.1.19-MariaDB
ICU58.1
  • Special:Category tree: interface changed and there is a message at the bottom 'Category ⧼rootcategory⧽ not found'. It was not there in 1.27
  • there was message PHP Notice: Use of undefined constant CT_MODE_PAGES - assumed 'CT_MODE_PAGES' already during running of update it script. It refers to the definition $wgCategoryTreeMaxDepth = array(CT_MODE_PAGES => 3); in LocalSettings.php. as advised in mw:Extension:CategoryTree#Configuration. It was not there in 1.27.
  • Downgrade to the version of extension generated for 1.27:
  • Special:Category tree: Interface is to previous version.
    • Category field is prefilled with ⧼rootcategory⧽, it was not there before.
  • <categorytree mode=pages depth=3>Contents</categorytree> works fine under 1.27, under 1.28 it does not show the pages.

Event Timeline

Pspviwki created this task.Dec 3 2016, 4:06 PM
Restricted Application added a subscriber: Aklapper. · View Herald TranscriptDec 3 2016, 4:06 PM
Pspviwki updated the task description. (Show Details)Dec 4 2016, 11:31 AM
Ciencia_Al_Poder added a subscriber: Ciencia_Al_Poder.

Constants are defined in CategoryTree.php, but they aren't available in LocalSettings.php, even using them after wfLoadExtension( 'CategoryTree' );

This looks like a limitation in extension registration system. Or at least I wasn't able to find how to do this in the schema documentation (thus adding MediaWiki-Configuration project)

In ExtensionRegistry.php I see there's this code:

		foreach ( $info['defines'] as $name => $val ) {
			define( $name, $val );
		}

Maybe defining them in extension.json inside a "defines" section may work, but it's undocumented at best

It looks like they're not going to support constants at all, and this configuration should be changed to use string keys like $wgCategoryTreeMaxDepth = [ 'pages' => 2, 'all' => 2, 'categories' => 3 ];

freephile renamed this task from PHP Notice: Use of undefined constant CT_MODE_PAGES - assumed 'CT_MODE_PAGES' under MW 1.28 to PHP Notice: Use of undefined constant CT_MODE_PAGES - assumed 'CT_MODE_PAGES' since MW 1.28+.Dec 27 2018, 7:49 PM

@freephile: Which most recent version did you test, as you edited the summary to state that it's 1.28+?

I've observed this in 1.28 (I think 1.29) 1.30 1.31.

In ExtensionRegistry.php I see there's this code:

		foreach ( $info['defines'] as $name => $val ) {
			define( $name, $val );
		}

Maybe defining them in extension.json inside a "defines" section may work, but it's undocumented at best

I tried this approach in 1.31 and it didn't appear to change the result (still getting warnings). I believe somebody else said that it's because the code is evaluated too late to be available in LocalSettings.php

TheDJ added a subscriber: TheDJ.EditedDec 28 2018, 8:39 AM

It looks like they're not going to support constants at all, and this configuration should be changed to use string keys like $wgCategoryTreeMaxDepth = [ 'pages' => 2, 'all' => 2, 'categories' => 3 ];

This is sort of correct. The documentation of the extension desperately needs updating to reflect this. The new values can be seen in https://gerrit.wikimedia.org/r/#/c/mediawiki/extensions/CategoryTree/+/268624/

$wgCategoryTreeMaxDepth = [ 10 => 2, 20 => 2, 0 => 3 ];

There is also discussion how these probably should be changed to strings instead of vague numbers: https://gerrit.wikimedia.org/r/#/c/mediawiki/extensions/CategoryTree/+/293318/

Was part of T87888: Convert CategoryTree to use extension registration