mwstake/mediawiki-component-contentprovisioner

提供将内容导入MediaWiki的类和服务

2.1.4 2024-08-23 09:44 UTC

This package is auto-updated.

Last update: 2024-09-23 10:02:39 UTC


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';