mwstake / mediawiki-component-contentprovisioner
提供将内容导入MediaWiki的类和服务
Requires
- composer/installers: ~1.0|~2
- mwstake/mediawiki-componentloader: ~1
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 39.0.0
- mediawiki/minus-x: 1.1.1
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: ^8.5
README
MediaWiki内容提供程序
提供一种机制,允许在 "maintenance/update.php" 期间导入一些任意信息。
此代码旨在在MediaWiki应用程序上下文中执行。没有打算独立使用。
在MediaWiki扩展中使用
MediaWiki 1.35
- 将
"mwstake/mediawiki-component-contentprovisioner": "~1"
添加到您的composer.json
文件的require
部分。
MediaWiki 1.39
- 将
"mwstake/mediawiki-component-contentprovisioner": "~2"
添加到您的composer.json
文件的require
部分。
需要显式初始化。这可以通过以下方式实现:
- 要么在您的
extension.json
/skin.json
中添加"callback": "mwsInitComponents"
- 要么在您的扩展/skins自定义
callback
方法中调用mwsInitComponents();
另请参阅 mwstake/mediawiki-componentloader
.
注册要提供的内容
最初,内容提供程序需要 "manifest" 文件来获取要导入的数据。需要具有以下结构的JSON文件:
{ "Some_page": { "lang": "de", "target_title": "Some_page", "content_path": "/pages/Main/Some_page.wiki", "sha1": "<hash_of_the_content>", "old_sha1": [] }, "Template:Some_template": { "lang": "en", "target_title": "Template:Some_template", "content_path": "/pages/Template/Some_template.wiki", "sha1": "<hash_of_the_content>", "old_sha1": [] } }
在这里,"old_sha1" 键包含先前内容版本的散列。对于已经存在的wiki页面,需要它们来识别它们是否只是过时或被用户添加/更改。
这些文件应以这种方式注册在特定扩展的 "extension.json" 中
{ "attributes": { "MWStakeContentProvisioner": { "ContentManifests": { "DefaultContentProvisioner": [ "extensions/SomeExtension/path/to/manifest.json" ] } } } }
添加到 "DefaultContentProvisioner" 键的manifest将被默认内容提供程序处理。该内容提供程序仅导入manifest提供的相应wiki页面。
所有注册的文件将在下一次更新期间通过 "maintenance/update.php" 处理。
自定义内容提供程序
扩展可以在它们自己的内容提供程序中实现自己的导入逻辑。为此,需要有一个实现 "\MWStake\MediaWiki\Component\ContentProvisioner\IContentProvisioner" 接口的类。
注册自定义内容提供程序
要执行 "update.php",自定义内容提供程序必须以这种方式注册(ObjectFactory规范)
{ "attributes": { "MWStakeContentProvisioner": { "ContentProvisioners": { "ArbitraryContentProvisionerKey": { "class": "\\MediaWiki\\Path\\To\\ArbitraryProvisioner", "args": [ "ManifestsKey" ], "services": [ "ArbitraryService", "SomeOtherService" ] } } } } }
在这里 "ArbitraryContentProvisionerKey" 是一个键,它仅用于识别内容提供程序。它主要用于日志记录。"ManifestsKey" 是一个键,它将帮助识别应由特定内容提供程序处理的manifest。
注册要导入的自定义内容
默认情况下,自定义manifest文件,它将由自定义内容提供程序处理,必须以这种方式注册:
{ "attributes": { "MWStakeContentProvisioner": { "ContentManifests": { "ManifestsKey": [ "extensions/SomeExtension/path1/to/manifest1.json", "extensions/SomeExtension/path2/to/manifest2.json" ] } } } }
在这里 "ManifestsKey" 必须与传递给该内容提供程序的第一个参数相同的值。
跳过内容提供程序
如果某些内容提供程序需要禁用,可以通过 $mwsgContentProvisionerSkip
全局变量来完成。假设有一个以这种方式注册的自定义内容提供程序:
{ "attributes": { "MWStakeContentProvisioner": { "ContentProvisioners": { "ArbitraryContentProvisionerKey": { "class": "\\MediaWiki\\Path\\To\\ArbitraryProvisioner", "args": [ "ManifestsKey" ], "services": [ "ArbitraryService", "SomeOtherService" ] } } } } }
然后可以通过这种方式将其禁用:
$mwsgContentProvisionerSkip[] = 'ArbitraryContentProvisionerKey';
如果需要禁用默认内容提供程序,看起来类似:
$mwsgContentProvisionerSkip[] = 'DefaultContentProvisioner';