无法保护MediaWiki中的已翻译页面

无法保护MediaWiki中的已翻译页面,mediawiki,mediawiki-extensions,Mediawiki,Mediawiki Extensions,我有一个MediaWiki网站 在一个页面上,我有一个由扩展实现的表单 必须先对页面进行保护,它才能正常工作。我还需要把这一页翻译成捷克语 因此,我安装了,然后使用translate扩展来标记要翻译的页面 我还翻译了这一页。原始页面可以工作,但捷克语翻译的页面无法工作,因为它没有受到保护 我试图保护/cs页面,但收到以下错误消息: 由于以下原因,您无权更改此页面的保护级别: 我是一个网站管理员 目前,我已经禁用了实现保护要求的代码,但这不是一个好的长期解决方案 /* if ( !($wgTitl

我有一个MediaWiki网站

在一个页面上,我有一个由扩展实现的表单

必须先对页面进行保护,它才能正常工作。我还需要把这一页翻译成捷克语

因此,我安装了,然后使用translate扩展来标记要翻译的页面

我还翻译了这一页。原始页面可以工作,但捷克语翻译的页面无法工作,因为它没有受到保护

我试图保护
/cs
页面,但收到以下错误消息:

由于以下原因,您无权更改此页面的保护级别:

我是一个网站管理员

目前,我已经禁用了实现保护要求的代码,但这不是一个好的长期解决方案

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

如果您确信所有翻译的页面都可以安全地用作电子邮件表单,则可以将引用的代码更改为:

if(!($wgtile->isProtected('edit'))&&
!(可翻译页面::isTranslationPage($wgTitle))){
return(EMAILFORM_NAME.“仅在受保护的页面上处于活动状态。”);
}
当然,如果你不一定信任所有翻译页面的内容,那么事情就会变得更复杂。基本上,你必须弄清楚你认为哪些页面足够安全,并相应地修改检查。唉,我对Translate扩展还不太熟悉,不知道它的特权模型是如何工作的,所以我不能在这里给出任何具体的建议

(当然,每次升级EmailForm扩展时都需要重新应用此更改,但当前的临时修复程序也是如此。维护此类自定义的一个有用方法是保留(统一的),并在每次升级后重新应用它。如果您愿意,还可以使用git使用自定义项维护MediaWiki的本地分支,并在发布新版本时从上游合并更改。)


最终,我怀疑处理这个问题的正确方法是修复Translate扩展,以正常方式保护翻译目标页面。PageTranslationHooks::preventDirectEditing()方法中有一个允许操作的白名单,但我怀疑它可能不像向该列表中添加
protect
那样简单,因为:

  • IIRC、MediaWiki本身很可能假设您必须能够编辑页面才能保护它,并且

  • 如果您确实设法保护了页面,这可能(也可能不会)在Translate扩展中触发一些奇怪的行为


  • 尽管如此,还是有可能以这样或那样的方式解决这些问题。即使您不想自己尝试,您也可能想了解它(当然,假设有人还没有这样做)。

    可能是因为这个问题不是关于编程,而是关于维护MediaWiki站点,因此,我不知道是否有一个合适的堆栈交换站点。MediaWiki似乎有一个论坛:
    /*
    if ( !($wgTitle->isProtected ('edit')) )
        return ( EMAILFORM_NAME . " is only active on protected pages." );
    */