Under MW 1.34, SMW 3.1.3, PHP 7.4.2., if $wgDebugLogFile is set, Special:SemanticMediaWiki shows:
[2519cf1878e5e4af3d237d77] /%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:SemanticMediaWiki Error from line 177 of /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Specials/Admin/MaintenanceTaskHandler.php: Cannot instantiate abstract class LoggedUpdateMaintenance
Backtrace:
#0 /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Specials/Admin/MaintenanceTaskHandler.php(108): SMW\MediaWiki\Specials\Admin\MaintenanceTaskHandler->buildHTML()
#1 /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Specials/SpecialAdmin.php(135): SMW\MediaWiki\Specials\Admin\MaintenanceTaskHandler->getHtml()
#2 /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Specials/SpecialAdmin.php(119): SMW\MediaWiki\Specials\SpecialAdmin->buildHTML()
#3 /var/www/wiki/w/includes/specialpage/SpecialPage.php(575): SMW\MediaWiki\Specials\SpecialAdmin->execute()
#4 /var/www/wiki/w/includes/specialpage/SpecialPageFactory.php(611): SpecialPage->run()
#5 /var/www/wiki/w/includes/MediaWiki.php(296): MediaWiki\Special\SpecialPageFactory->executePath()
#6 /var/www/wiki/w/includes/MediaWiki.php(900): MediaWiki->performRequest()
#7 /var/www/wiki/w/includes/MediaWiki.php(527): MediaWiki->main()
#8 /var/www/wiki/w/index.php(44): MediaWiki->run()
#9 {main}
Note that SMW 3.1.x does not officially support MW 1.34. See https://github.com/SemanticMediaWiki/SemanticMediaWiki/blob/master/docs/COMPATIBILITY.md
[2519cf1878e5e4af3d237d77] /%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:SemanticMediaWiki Error from line 177 of /var/www/wiki/w/extensions/SemanticMediaWiki/src/MediaWiki/Specials/Admin/MaintenanceTaskHandler.php: Cannot instantiate abstract class LoggedUpdateMaintenance
I have no idea what "Cannot instantiate abstract class LoggedUpdateMaintenance" is supposed to mean but my guess is that it is either caused by MW 1.34 or PHP 7.4 or both of them. In general, neither MW 1.34 nor PHP 7.4 are supported.
PS: I have no plans to update my development environment to verify the issue. I'm running PHP 7.3 and MW 1.33 where the issue does not appear hence I'm unable to examine the exact cause.
Maybe instead of $mainClass = new $class; use the ReflectionClass to verify that it is a Maintenance script which hopefully avoids the LoggedUpdateMaintenance issue.
The following is untested!
@@ -174,13 +174,15 @@ class MaintenanceTaskHandler extends TaskHandler implements ActionableTask {
// Auto-discover the class name!
$classes = get_declared_classes();
$class = end( $classes );
- $mainClass = new $class;
+ $reflectionClass = new \ReflectionClass( $class );
- if ( !$mainClass instanceof \Maintenance ) {
+ if (
+ !$reflectionClass->getParentClass() ||
+ $reflectionClass->getParentClass()->getName() !== 'Maintenance' ) {
continue;
}
This patch seems to work, thank you.
This patch seems to work, thank you.
@kghbln maybe someone pack this into a PR and have it run through the test suite.