Невозможно защитить переведенную страницу в MediaWiki

У меня есть сайт MediaWiki.

На одной странице у меня есть форма, реализованная расширением EmailForm.

Страница должна быть защищена, прежде чем она будет функционировать. Мне также нужно перевести эту страницу на чешский язык.

Поэтому я установил комплект языковых расширений, а затем использовал расширение для перевода, чтобы пометить страницу для перевода.

Я также перевел страницу. Исходная страница работает, но страница с чешским переводом не работает, потому что она не защищена.

Я попытался защитить страницу /cs, но получил следующее сообщение об ошибке:

У вас нет разрешения на изменение уровней защиты для этой страницы по следующим причинам:

- This page cannot be updated manually. This page is a translation of the page [Green Card Request] and the translation can be updated using the translation tool.
- You cannot change the protection levels of this page because you do not have permission to edit it.

Я администратор сайта.

На данный момент я отключил код, реализующий требование защиты, но это не очень хорошее долгосрочное решение.

/*
if ( !($wgTitle->isProtected ('edit')) )
    return ( EMAILFORM_NAME . " is only active on protected pages." );
*/

person Richard Holyoak    schedule 28.08.2015    source источник
comment
Наверное потому, что этот вопрос не о программировании, а о ведении сайта MediaWiki, а значит здесь не по теме   -  person leo    schedule 31.08.2015
comment
Куда мне тогда задать этот вопрос?   -  person Richard Holyoak    schedule 01.09.2015
comment
Я не знаю, есть ли подходящий сайт Stack Exchange. У MediaWiki есть форум: mediawiki.org/wiki/Forum   -  person Pekka    schedule 01.09.2015


Ответы (1)


Если вы уверены, что все переведенные страницы безопасны для использования в качестве форм электронной почты, вы можете изменить код, который вы цитируете, на:

if ( !($wgTitle->isProtected('edit')) &&
     !(TranslatablePage::isTranslationPage($wgTitle)) ) {
    return ( EMAILFORM_NAME . " is only active on protected pages." );
}

Конечно, если вы не обязательно доверяете содержанию всех переведенных страниц, все становится сложнее. По сути, вам нужно выяснить, какие страницы вы делаете достаточно безопасными, и соответствующим образом изменить проверку. Увы, я недостаточно знаком с расширением Translate, чтобы рассказать, как работает его модель привилегий, поэтому не могу дать здесь никаких конкретных предложений.

(Кроме того, конечно, вам нужно будет повторно применять это изменение каждый раз, когда вы обновляете расширение EmailForm, но это относится и к вашему текущему временному исправлению. Полезный способ сохранить такие настройки — сохранить (унифицированный) diff всех сделанных вами изменений и повторно примените их с помощью исправление после каждого обновления. При желании вы также можете использовать git для поддержки локальной ветки MediaWiki с вашими настройками и слияния в изменениях из основной ветки всякий раз, когда выпускается новая версия.)


В конечном счете, я подозреваю, что правильным способом решения этой проблемы было бы исправить расширение Translate, чтобы целевые страницы перевода могли быть защищены обычным способом. В методе PageTranslationHooks::preventDirectEditing() есть белый список разрешенных действий, но я подозреваю, что это может быть не так просто, как добавление protect в этот список, потому что:

  1. IIRC, сама MediaWiki, скорее всего, может предположить, что вы должны иметь возможность редактировать страницу, чтобы защитить ее, и

  2. если вам удалось защитить страницу, это может (или не может) вызвать какое-то странное поведение в расширении Translate.

Тем не менее, должна быть возможность обойти эти проблемы, так или иначе. Даже если вам не хочется пытаться сделать это самостоятельно, вы можете отправить запрос функции об этом (при условии, что кто-то еще этого не сделал, конечно).

person Ilmari Karonen    schedule 10.09.2015