#php #mediawiki #mediawiki-extensions
#php #mediawiki #mediawiki-расширения
Вопрос:
Я редактирую расширение Mediawiki (PageCreationNotif) для отправки почты при добавлении страницы в определенную категорию. Исходный код расширения находится здесь: https://phabricator.wikimedia.org/diffusion/EPCN/browse/master
Функция, над которой я работаю (onArticleInsertComplete в PageCreationNotif .hooks.php ) принимает ( amp;$article ) в качестве входного параметра. Я хочу выполнить код функции, только если $article принадлежит к категории «Project», уже созданной.
Не могли бы вы предоставить мне правильный фрагмент кода для этого?
Это было бы похоже на (псевдокод):
public static function onArticleInsertComplete(amp;$article){
if( $article.belongsTo(Category.Project) ){
//do stuff
}
}
Заранее благодарю вас.
Ответ №1:
В классе WikiPage нет ничего похожего на belongsTo()
метод, поэтому вам придется самостоятельно перебирать категории, проверяя членство:
public function onArticleInsertComplete( WikiPage amp;$article ) {
$inCat = false;
foreach ( $article->getCategories() as $cat) {
if ( $cat->getText() === "Project" ) {
$inCat = true;
}
}
if ( $inCat ) {
// Send email etc.
}
}
(Код не тестируется.)
Обновление: На самом деле, перечитывая ваш вопрос, я думаю, вам лучше перейти к CategoryAfterPageAdded:
Hooks::register( 'CategoryAfterPageAdded', function( Category $category, WikiPage $page ) {
if ( $category->getTitle()->getBaseText() === 'Project' ) {
// Send email.
}
} );
Комментарии:
1. Спасибо за ваш ответ. К сожалению, код не работает.
2. Я попробовал аналогичную версию самостоятельно несколько дней назад, единственное отличие — «===» вместо «==», но почта не пришла. Возможно, есть какие-то общие шаги расширения, которые я не улавливаю.
3. Я обновил свой ответ. В некоторых ситуациях может возникнуть задержка при добавлении страницы в категорию; убедитесь, что вы запускаете все задания.
4. Большое вам спасибо, это решило проблему!! Mediawiki — замечательная машина