How to become a MediaWiki hacker/zh


 * 以下的一些资料可能会过时或不正确. 如果你熟悉以下的内容，请尝试帮助我们更新这篇文章. 

如何成为一名 MediaWiki 的参与者 会提供有关 MediaWiki 开发的过程的网页链接和相关的解释，并帮助新参于进来的开发者解答一些疑惑. 如果您想帮助我们开发这套系统，但却对不知道如何参与其中，那么这篇文章可以帮助您.

基础知识

 * 邮件列表： 系统开发列表 wikitech-l ， 客户服务列表 mediawiki-l ， SVN 消息列表 mediawiki-cvs ， 升级和补丁列表 wikibugs-l
 * Manual:Database layout 数据表结构
 * BugZilla 是提交 MediaWiki 的bug和功能的地方
 * Security for developers 有关安全的文档
 * Manual:Coding conventions 代码编写格式规范

操作系统
MediaWiki 是 PHP 编写的，并使用 MySQL 作为数据库. 两者都被移植到多种操作系统上，包括但不仅限于，大多数的 UNIX 派生版本和 Microsoft Windows 系统. 因此， MediaWiki 可以被安装到这些系统上. 注意：如果你是用 Windows 系统的话， MediaWiki 中一些依懒于Unix系统工具的功能可能会用不了，或者需要您自己另外下载和安装. 而操作系统本身的bug也可能会影响 MediaWiki 的正常运作，所以您可能需要对您所使用的操作系统平台有所了解.

PHP 编程语言
如果您没有 PHP (超文本预处理器的简称)的开发经验，但懂得用其它种类的面向对象编程语言的话，那么上手学习PHP也很容易.

如果您没有任何关于 PHP 或者其它面向对象编程语言的开发经验的话，您得很熟悉一下有关 类, 对象、 方法, 事件 and 继承等概念

如果你从来没有过编程的经验，可以从 PHP 开始学习编程，尽管它的执行方式比较独特，但它和其它编程语言有很多相似的地方.

PHP 脚本可以通过命令行来或者一些能调用其解析器的图形界面来运行. 以下是一个 Linux/UNIX 系统的例子：

/usr/bin/php -q < phpshell.php

对于一个网站来说，一般当您请求一个后缀为 .php 的文件时，网站服务器就执行这个 PHP 脚本. 具体来说，像这里的 PHP 脚本那样，一个叫Apache的服务器端软件会调用 PHP 解析器来解析并执行 PHP 脚本，最后返回输出结果到浏览器端. PHP 文件可以包含普通的 HTML 代码和 PHP 代码，使得它能够很容易的为静态的页面添加动态的内容.

相关链接

 * PHP 教程 (多语种)
 * The PHP 手册 (多语种)
 * Wikibooks 上的 PHP

数据库
MediaWiki 将 MySQL 作为首选的数据库. 它还支持其他的数据库，例如 PostgreSQL. 开发人员通常尽在 MySQL 上测试而忽略其他数据库，这很容易导致一些简单的操作都不能通过.

安装 MediaWiki
你可以从 SVN 获取到最新的代码，详情请参阅 从 SVN 下载一节.

源代码中的 INSTALL 文件会指导你安装，或者阅读安装指南.

开发 MediaWiki 不需要下载 Wikipedia 的数据库. 使用全新的数据库来开发往往更容易. 如果处于某种原因，确实需要 Wikipedia 的副本，可以从 data dumps 获取.

你可能会看到一个禁止访问数据库的错误窗口，请检查是否在 MediaWiki 安装目录的上层目录创建了一个 AdminSettings.php 的文件（该文件应该与 LocalSettings.php 在同一个目录下）. 你可以自行修改 AdminSettings.php 的内容，确保填写了正确的 MySQL 用户名和密码.

重新创建一次链接表会花费很长时间，尤其是当你安装了英文版的 Wikipedia 数据库.

注意：创建一份公开的 Wikipedia 镜像站点不是一个很好的方式. 如果你确实这么做了，请调整代码，以告知用户正在浏览一个镜像，并且将链接指回原站. 更多内容请访问 Forks and Mirrors.

MediaWiki 代码结构
MediaWiki 的代码又长又难看，所以尽量不要重写. 当你开始进入开发的时候，请将目标定位于完善功能或者修复错误，这些只需要修改少量的代码.

你可以浏览 自动生成的文档. 警告：页面很大，加载会花费一段时间.

了解 MediaWiki 最好的办法就是阅读源码. 可以从下面的这些文档入手：


 * index.php 是主要的起始点，虽然看不出什么都系从这里传进去.
 * Article.php 提供页面查看、删除、回滚、监视以及取消监视的功能. 它还提供了其他的一些处理文章的功能，比如获取特定版本的文章、保存页面.
 * EditPage.php 包含了所有修改功能中接近一半的代码. 这一部分是最接近用户交互的. 其他的修改功能存放在 Article.php 和各个 *Update.php 文件中.
 * Parser.php 的主要作用是将 wiki 语法转换成 HTML 页面. 少量的内容被存放到了 Skin.php 中.
 * Linker.php 提供了生成超链接和图片链接的功能.
 * 绝大多数特殊页面的代码存放在 /specials/ 目录下的 Special*.php 文件中.
 * Database.php 提供了访问数据库需要的代码.
 * OutputPage.php is the home of the OutputPage class, which is an output buffer. Send your text here and it will be sent to stdout just before the script exits.
 * Title.php is all about titles -- and that includes interwiki titles and "#" fragments. There are some functions in here that will fetch information about an article from the database.
 * User.php 包括了用户类，比如用户偏好设定以及权限.
 * UserMailer.php,包括了发送邮件需要的一些静态方法.
 * Setup.php does all sorts of initialisation, and seems to account for a large proportion of running time. Among other things, it initialises lots of global variables, mostly containing objects.
 * DefaultSettings.php 包含了很多全局变量的初始值，这些变量通常不会在LocalSettings.php被复写. 不要调用 方法，该方法会向你调用的全局变量增加初始值.

创建第一个功能
这里包含了一些想法：
 * 添加一些让你感兴趣的功能；
 * 修复一个 烦人的小bug；
 * 在特殊页面中提供一些便捷信息；
 * 写一个 parser hook;
 * 写一个 简单的插件.

寻求更多帮助，请到#mediawiki和其他开发人员交流. 如果你已经有一个清晰的想法，同样，可以在开始实现之前和有经验的开发人员聊聊，尤其是当你不确定你的代码会对系统产生什么影响的时候.

当你准备好实现功能的时候，可以来申请 SVN 写入权限. 或者你可以在 Bugzilla 中发布一个补丁. 这可能是一个很慢的过程，但是坚持这么做一两次，可以证明你的诚意和书写稳定代码的能力. 在提交的时候，请确保你的代码可以很容易的被禁止.

请不要询问访问 Wikimedia 服务器的 shell 权限. shell 权限只会提供给我们真正信任的人们.

测试
在 php.ini 中使用 E_STRICT，这样你就不会看到非重要的警告和提醒.

当增加功能的时候，请不要破坏现有的方法. 通常可以使用自动化测试框架来帮助验证. 不幸的是，适用于 MediaWiki 的测试套件不多. 我们推荐这样三个测试套件：
 * Parse tests
 * PHPUnit-based unit tests
 * Selenium

如果不能书写自动化测试，请执行手工测试. 如果你的代码常常出问题，别人会很反感你，尤其是直到它出现在 Wikipedia 上的时候.

发布补丁
如果你创建并测试了一个补丁，可以通过以下命令获取到修改的地方： svn diff path/to/modified_file.php > my.patch 然后将这个补丁以附件的方式提交.

参考

 * Development policy
 * How to contribute
 * Commit access requests