Mediawiki-PHP: Проверка принадлежности статьи к категории

#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 — замечательная машина