Page MenuHomePhabricator

Wikibase Entity Source Lagacy Configuration Migration Script v0.4

Authored By
toan
Jul 15 2021, 8:02 AM
Size
3 KB
Referenced Files
None
Subscribers
None

Wikibase Entity Source Lagacy Configuration Migration Script v0.4

<?php
namespace Wikibase\Lib\Maintenance;
use Composer\Semver\Constraint\Constraint;
use Composer\Semver\VersionParser;
use Maintenance;
use Wikibase\Client\EntitySourceDefinitionsLegacyClientSettingsParser;
use Wikibase\DataAccess\EntitySource;
use Wikibase\Lib\EntityTypeDefinitions;
use Wikibase\Lib\WikibaseSettings;
use Wikibase\Repo\WikibaseRepo;
$basePath = getenv( 'MW_INSTALL_PATH' );
require_once $basePath . '/maintenance/Maintenance.php';
/**
* Tool for getting new entitySources configuration for upcoming REL1_37 release
*
* Place this script in the extensions/Wikibase folder and executing by running
* php extensions/Wikibase/entitySources.php
* @license GPL-2.0-or-later
*/
class EntitySourcesMigration extends Maintenance {
/**
* @param EntitySource[] $entitySources
*/
function createSettingsFromEntitySources( array $entitySources ): array {
$entitySourceConfig = [];
foreach ( $entitySources as $source ) {
$entityNamespaces = [];
foreach ( $source->getEntityTypes() as $entityType ) {
$entityNamespaces[$entityType] = $source->getEntityNamespaceIds()[$entityType]
. '/' . $source->getEntitySlotNames()[$entityType];
}
$entitySourceConfig[$source->getSourceName()] = [
'entityNamespaces' => $entityNamespaces,
'repoDatabase' => $source->getDatabaseName(),
'baseUri' => $source->getConceptBaseUri(),
'rdfNodeNamespacePrefix' => $source->getRdfNodeNamespacePrefix(),
'rdfPredicateNamespacePrefix' => $source->getRdfPredicateNamespacePrefix(),
'interwikiPrefix' => $source->getInterwikiPrefix(),
];
}
return $entitySourceConfig;
}
private function hasNoEntitySources( $settings ): bool {
return !$settings->hasSetting( 'entitySources' )
|| $settings->hasSetting( 'entitySources' ) && empty( $settings->getSetting( 'entitySources' ) );
}
public function execute() {
$versionParser = new VersionParser();
if ( !$versionParser->parseConstraints( new Constraint( '==', $versionParser->normalize( MW_VERSION ) ) )
->matches( new Constraint( "<", "1.37" ) ) ) {
die( 'This script is intended to run on versions older than 1.37.' );
}
$repoEntitySourceConfig = null;
$clientEntitySourceConfig = null;
$this->output( '// Suggested entitySource configuration to be added in LocalSettings.php:' . "\n\n" );
if ( WikibaseSettings::isRepoEnabled() ) {
$repoSettings = WikibaseSettings::getRepoSettings();
if ( $this->hasNoEntitySources( $repoSettings ) ) {
$repoEntitySourceConfig = $this->createSettingsFromEntitySources(
WikibaseRepo::getDefaultInstance()->getEntitySourceDefinitions()->getSources()
);
$this->output( '$wgWBRepoSettings[\'entitySources\'] = ' );
$this->output( var_export( $repoEntitySourceConfig, true ) );
$this->output( ";\n\n" );
};
}
if ( WikibaseSettings::isClientEnabled() ) {
$clientSettings = WikibaseSettings::getClientSettings();
// REL1_35 and REL1_36 compatible
$entityTypes = require __DIR__ . '/lib/WikibaseLib.entitytypes.php';
$entityTypeDefinitions = new EntityTypeDefinitions( $entityTypes );
if ( $this->hasNoEntitySources( $clientSettings ) ) {
$parser = new EntitySourceDefinitionsLegacyClientSettingsParser();
$sources = $parser->newDefinitionsFromSettings( $clientSettings, $entityTypeDefinitions )->getSources();
$clientEntitySourceConfig = $this->createSettingsFromEntitySources( $sources );
$this->output( '$wgWBClientSettings[\'entitySources\'] = ' );
$this->output( var_export( $clientEntitySourceConfig, true ) );
$this->output( ";\n\n" );
}
}
if ( $clientEntitySourceConfig === null && $repoEntitySourceConfig === null) {
$this->output( "No entitySources suggested as there already exists configuration\n\n" );
}
}
}
$maintClass = EntitySourcesMigration::class;
require_once RUN_MAINTENANCE_IF_MAIN;

File Metadata

Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
9127787
Default Alt Text
Wikibase Entity Source Lagacy Configuration Migration Script v0.4 (3 KB)

Event Timeline