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

Я редактирую расширение Mediawiki (PageCreationNotif) для отправки почты, когда страница добавляется в определенную категорию. Исходный код расширения находится здесь: https://phabricator.wikimedia.org/diffusion/EPCN/browse/master/

Функция, над которой я работаю (onArticleInsertComplete в PageCreationNotif.hooks.php), принимает ( &$article ) в качестве входного параметра. Я хочу выполнить код функции, только если $ article принадлежит уже созданной категории «Проект».

Не могли бы вы предоставить мне правильный фрагмент кода для этого?

Это было бы так (псевдокод):

public static function onArticleInsertComplete(&$article){

    if( $article.belongsTo(Category.Project) ){
        //do stuff
    }
}

Заранее спасибо.


person Bobby    schedule 22.10.2016    source источник
comment
Почему минус?   -  person Sam Wilson    schedule 23.10.2016


Ответы (1)


В классе WikiPage нет ничего похожего на метод belongsTo(), поэтому вам придется самостоятельно перебирать категории, проверяя членство:

public function onArticleInsertComplete( WikiPage &$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.
    }
} );
person Sam Wilson    schedule 23.10.2016
comment
Спасибо за ваш ответ. К сожалению, код не работает. - person Bobby; 23.10.2016
comment
Я попробовал аналогичную версию несколько дней назад, единственная разница в том, что === вместо ==, но почта не пришла. Может есть какие-то общие шаги расширения, которые я не улавливаю. - person Bobby; 23.10.2016
comment
Я обновил свой ответ. В некоторых случаях может быть задержка при добавлении страницы в категорию; убедитесь, что вы запускаете все задания. - person Sam Wilson; 23.10.2016
comment
Большое спасибо, это решило проблему!! Медиавики — замечательная машина - person Bobby; 24.10.2016