Difference between revisions of "Mediawiki4Intranet"

From Wiki4Intranet
Jump to: navigation, search
(Патчи)
(Патчи)
Line 1: Line 1:
[http://mediawiki.org/ MediaWiki] — популярная [[WikiWiki|«вики»-система]], написанная на PHP и изначально создававшаяся в качестве «движка» [http://wikipedia.org/ Википедии]. Отличается отличной расширяемостью — существует более 1700 расширений к ней.
 
 
<big>'''Mediawiki4Intranet'''</big> — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.
 
 
= Содержимое =
 
 
Сборка состоит из:
 
* Кода оригинальной MediaWiki.
 
* Установленных расширений.
 
* Набора патчей.
 
* Нескольких готовых конфигураций для простого создания <tt>LocalSettings.php</tt>.
 
 
Лицензия распространения большинства этого добра: GPLv2, как и у самой MediaWiki. /* Надеемся, что тивоизация нам всё-таки не грозит :) */
 
 
== MediaWiki ==
 
 
Код MediaWiki берётся из [http://svn.wikimedia.org/svnroot/mediawiki/ SVN Wikimedia].
 
 
Версия Mediawiki4Intranet может отставать от стабильной, ибо различия между версиями MediaWiki не так уж и велики, а вот патчи менять приходится.
 
 
Версия MediaWiki, лежащая в основе сборки: '''1.16.2''' (до недавнего времени 1.14.1).
 
 
 
== Патчи ==
 
== Патчи ==
  
Line 80: Line 58:
 
IEIC | 2009-05-13 | import-export-images-and-conflicts | [[MW_Import&Export|Очень сильно улучшенный импорт/экспорт]] страниц MediaWiki. Отправлен в [https://bugzilla.wikimedia.org/show_bug.cgi?id=22881 Wikimedia Bug 22881].
 
IEIC | 2009-05-13 | import-export-images-and-conflicts | [[MW_Import&Export|Очень сильно улучшенный импорт/экспорт]] страниц MediaWiki. Отправлен в [https://bugzilla.wikimedia.org/show_bug.cgi?id=22881 Wikimedia Bug 22881].
 
IAR | 2011-02-25 | intraacl-rights | Часть расширения [[IntraACL]]. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
 
IAR | 2011-02-25 | intraacl-rights | Часть расширения [[IntraACL]]. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
LSA | 2011-03-23 | lcstore-accel | Поддержка кэширования локализации (LocalisationCache) в PHP ускорителе типа XCache. Странно, что этого нет в оригинале.
+
LSA | 2011-03-23 | lcstore-accel | Поддержка кэширования локализации (LocalisationCache) в PHP ускорителе типа XCache. Странно, что этого нет в оригинале.
LPWC | 2011-03-23 | longpagewarning-config | Поддержка настройки лимита размера статьи, по истечении которого показывается предупреждение [[MediaWiki:Longpagewarning]]. Баг такой у разработчиков mediawiki стоит, но решение они для него предложили очень странное — убрали нафиг проверку и разрешили делать эту проверку на уровне функций парсера. Глупость.
+
LPWC | 2011-03-23 | longpagewarning-config | Поддержка настройки лимита размера статьи, по истечении которого показывается предупреждение [[MediaWiki:Longpagewarning]]. Баг такой у разработчиков mediawiki стоит, но решение они для него предложили очень странное — убрали нафиг проверку и разрешили делать эту проверку на уровне функций парсера. Глупость.
 
PDD | 2011-02-11<br />&larr; 2010-07-26 | parser-debug-doblocklevels | Разрешать включать <tt><nowiki><center>...</center></nowiki></tt> и <tt><nowiki><blockquote>...</blockquote></nowiki></tt> внутрь абзаца. Две даты добавления — потому что патч, по сути, имел две версии — первая добавляла тупой хак, местами ломавший тесты, а вторая включает почти полностью переписанный корректный метод doBlockLevels().
 
PDD | 2011-02-11<br />&larr; 2010-07-26 | parser-debug-doblocklevels | Разрешать включать <tt><nowiki><center>...</center></nowiki></tt> и <tt><nowiki><blockquote>...</blockquote></nowiki></tt> внутрь абзаца. Две даты добавления — потому что патч, по сути, имел две версии — первая добавляла тупой хак, местами ломавший тесты, а вторая включает почти полностью переписанный корректный метод doBlockLevels().
 
REF | 2010-12-14 | rearrange-editform | Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования '''под форму редактирования''', то есть, за пределы элемента &lt;form>. Что необходимо для того, чтобы текст <tt>[[wikipedia:User:Cacycle/wikEd|WikEd]]</tt>'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка <tt>$wgNoCopyrightWarnings</tt> для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
 
REF | 2010-12-14 | rearrange-editform | Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования '''под форму редактирования''', то есть, за пределы элемента &lt;form>. Что необходимо для того, чтобы текст <tt>[[wikipedia:User:Cacycle/wikEd|WikEd]]</tt>'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка <tt>$wgNoCopyrightWarnings</tt> для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
Line 102: Line 80:
 
TMF4 | 2009-11-24 | trunk-mediafunctions-for-1.14 | Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1.
 
TMF4 | 2009-11-24 | trunk-mediafunctions-for-1.14 | Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1.
 
</tab>
 
</tab>
 
== Расширения ==
 
 
Для большинство расширений, присутствующих в [http://svn.wikimedia.org/svnroot/mediawiki/ SVN Wikimedia], используется их версия, соответствующия версии MediaWiki — например, для версии 1.14.1 расширения берутся из [http://svn.wikimedia.org/svnroot/mediawiki/tags/REL1_14_1/extensions tags/REL1_14_1/extensions]. Однако некоторые расширения в 1.14.1 имеют различные неприятные баги, или их там вообще ещё нет, и тогда берётся их '''trunk'''-версия (то есть самая новая) из [http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions trunk/extensions], возможно, как-то допиливается, например, с помощью патчей, и включается в сборку.
 
 
Есть и расширения, которые вообще не попали в SVN, и у которых нет даже своего репозитория с кодом, а есть только где-то выложенные файлики, или даже просто PHP-код на вики-страницах. Такие сохраняются в нашем локальном SVN, там же дорабатываются, и включаются в сборку оттуда. Вообще говоря, у нас есть ''«супер-система»'' автоматического объединения кода и патчей из нескольких источников на основе [http://mercurial.selenic.com/ Mercurial] и [http://arrenbrecht.ch/mercurial/pbranch/ pbranch], но это немного другая история.
 
 
Всего: 58.
 
 
=== Неизменённые ===
 
 
То есть просто установленные. Всего: 15.
 
 
; [[mediawikiwiki:Extension:AllowGetParamsInWikilinks|AllowGetParamsInWikilinks]]: Разрешение использования URL-параметров (?key=value) во внутренних вики-ссылках.
 
; [[mediawikiwiki:Extension:CharInsert|CharInsert]]: Поддержка вставки шаблонов <tt>&lt;charinsert></tt> для [[MediaWiki:Edittools]]. См. также [[UserMessage]].
 
; [[mediawikiwiki:Extension:DeleteBatch|DeleteBatch]]: Удаление множества страниц сразу со спецстраницы [[Служебная:DeleteBatch]].
 
; [[mediawikiwiki:Extension:Full Local Image|FullLocalImage]]: Добавление функций <tt><nowiki>{{fullimage:ФАЙЛ}}</nowiki></tt> и <tt><nowiki>{{localimage:ФАЙЛ}}</nowiki></tt>, возвращающих путь хранения файла на сервере (полный в первом случае и относительный во втором).
 
; [[mediawikiwiki:Extension:Google Analytics|Google Analytics]] (trunk): Гугловский счётчик. Можно подключать на виках, установленных в интернете.
 
; [[mediawikiwiki:Extension:PagedTiffHandler|PagedTiffHandler]] (trunk): Поддержка TIFF-картинок.
 
; [[mediawikiwiki:Extension:ParserFunctions|ParserFunctions]]: Функции парсера типа <tt><nowiki>{{#if:}}</nowiki></tt>, <tt><nowiki>{{#ifeq:}}</nowiki></tt> и т. п. '''[[mediawikiwiki:Help:Extension:ParserFunctions|Справка тут]].'''
 
; [[mediawikiwiki:Extension:PreferencesExtension|PreferencesExtension]]: Расширение, используемое другими расширениями для добавления пользовательских настроек. Нужно в версиях MediaWiki < 1.16.
 
; [[mediawikiwiki:Extension:Renameuser|Renameuser]] (trunk): Переименование пользователя с корректным обновлением ссылок на него в БД.
 
; [[mediawikiwiki:Extension:SimpleForms|SimpleForms]]: Поддержка добавления на страницы формочек с целью простого создания новых страниц по шаблону.
 
; [[mediawikiwiki:Extension:StringFunctions|StringFunctions]]: Строковые функции парсера типа <tt><nowiki>{{#sub:}}</nowiki></tt>. В новых версиях объединены с ParserFunctions, но у нас 1.14.1, а там ещё нет.
 
; [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi|SyntaxHighlight_GeSHi]]: Поддержка подсветки синтаксиса в большинстве распространённых языков программирования с помощью [http://qbnz.com/highlighter/ GeSHi]. Используется тег '''<tt>&lt;source&gt;</tt>'''. И будет использоваться всегда, несмотря на то, что в новых версиях расширения его заменяют <tt>&lt;syntaxhighlight&gt;</tt> (маразм).
 
; [[mediawikiwiki:Extension:UserMerge|UserMerge]] (trunk): Объединение и удаление учётных записей пользователей с корректным изменением ссылок в БД.
 
; [[mediawikiwiki:Extension:WhoIsWatching|WhoIsWatching]]: Ответ на вопрос «кто наблюдает за данной страницей?» со страницы [[Служебная:WhoIsWatching]].
 
; [[mediawikiwiki:Extension:WikiCategoryTagCloud|WikiCategoryTagCloud]]: Вставка облаков тегов на страницы. Тегами считаются категории.
 
 
=== Отлаженные ===
 
 
То есть установленные и отлаженные или back-портированные. Всего: 15.
 
 
; [[mediawikiwiki:Extension:Cite|Cite]]: Поддержка сносок на вики-страницах (теги <tt>&lt;ref&gt;</tt> и <tt>&lt;references&gt;</tt>). Внесены изменения '''патчем'''.
 
; [[mediawikiwiki:Extension:MediaFunctions|MediaFunctions]] (trunk): Поддержка функций для получения информации о загруженных файлах. Внесены изменения '''патчем''' для работы trunk’овой версии в 1.14.1.
 
; [[mediawikiwiki:Extension:PdfHandler|PdfHandler]] (trunk): Медиаобработчик для PDF-файлов. То есть, поддержка загрузки PDF’ок, их постраничного просмотра и вставки страниц PDF как изображений. Иногда может создавать проблемы, ибо ghostscript обрабатывает некоторые PDF’ки с очень большим трудом, потреблением дискового пространства на <tt>/tmp</tt> и процессорного времени. Внесены изменения '''патчем'''.
 
; [[mediawikiwiki:Extension:MultiCategorySearch|MultiCategorySearch]]: Спецстраница [[Служебная:MultiCategorySearch]] для поиска страниц, включённых в несколько категорий сразу.
 
; [[mediawikiwiki:Extension:SimpleTable|SimpleTable]]: Поддержка простого (вменяемого) синтаксиса для вставки таблиц — тега <tt>&lt;tab></tt>.
 
; [[mediawikiwiki:Extension:Drafts|Drafts]]: Поддержка сохранения черновиков в процессе редактирования страниц, плюс авто-сохранение каждую минуту, чтобы не потерять свои труды, если браузер вдруг накроется.
 
; [[mediawikiwiki:Extension:CategoryTree|CategoryTree]]: AJAX-раскрываемые деревья категорий на [[Служебная:CategoryTree|спецстранице]] и страницах самих категорий. Внесены изменения '''патчами''' для поддержки альтернативной группировки страниц в категории и удаления плюсиков ([+]) у категорий, не содержащих подкатегорий, в деревьях.
 
; [[mediawikiwiki:Extension:AnyWikiDraw|AnyWikiDraw]]: Поддержка вставки рисованных с помощью Java-апплета картинок на вики-страницы. Увы, нетривиальна в эксплуатации, ибо апплет.
 
; [[mediawikiwiki:Extension:OpenID|OpenID]]: Поддержка входа в вики по офигически глючной, но самой распространённой технологии единого входа — [http://www.openid.net OpenID].
 
; [[mediawikiwiki:Extension:Interwiki|Interwiki]] (trunk): Междувиковые ссылки, включения, редактирование таблиц интервики. Внесены изменения '''патчем'''.
 
; [[mediawikiwiki:Extension:reCAPTCHA|reCAPTCHA]]: Реализация популярной [[rupedia:CAPTCHA|CAPTCHA]] («Публичного Полностью Автоматического Теста Тьюринга для Различения Компьютера и Человека»), короче говоря, антиспам для вики-систем, установленных в интернете. У нас, кстати, по умолчанию только что зарегистрированные пользователи не могут создавать новые страницы.
 
; [[mediawikiwiki:Extension:SpecialForm|SpecialForm]]: Ещё одно расширение для создания страниц из форм по шаблонам. Вероятно, от него вскоре полностью откажемся в пользу SimpleForms.
 
; [[mediawikiwiki:Extension:SVNIntegration|SVNIntegration]]: Не используется и является хорошей «дырой» в subversion, но позволяет вставлять на страницы файлы из Subversion или информацию о них.
 
; [[mediawikiwiki:Extension:PlantUML|PlantUML]]: Рисование UML-диаграмм с помощью [http://plantuml.sourceforge.net/ PlantUML].
 
; [[mediawikiwiki:Extension:Workflow|Workflow]]: Небольшое расширения для вставки «переключаемых» состояний страниц (можно назвать «информерами»), реализованных через категории.
 
 
=== Доработанные ===
 
 
То есть установленные и сильно доработанные. Всего: 7.
 
 
; [[Calendar (MediaWiki)|Calendar]]: Расширение-календарь событий для MediaWiki, на котором каждое событие, либо каждый день с событиями, хранится на вики-странице.
 
; [[FlvHandler (MediaWiki)|FlvHandler]]: Поддержка вставки Flash-видеоплееров на страницы с использованием обычного синтаксиса <tt><nowiki>[[Файл:Видео.mp4]]</nowiki></tt>. Поддерживаются видеокодеки FLV+MP3 или H.264+AAC в контейнерах FLV или MP4.
 
; [[mediawikiwiki:Extension:Halo Access Control List|HaloACL]], [[HaloACL (MediaWiki)]]: Единственное расширение MediaWiki, реализующее работающие права доступа (позволяющее защитить часть страниц от просмотра). 100%-ной гарантии всё равно никогда нет, потому что MediaWiki не создавалась в расчёте на это, и многие её расширения лазают в базу как попало и, соответственно, могут вытащить оттуда любую информацию. Однако в пределах сборки [[Mediawiki4Intranet]] HaloACL работает. Тем не менее, качество кода HaloACL оставляет желать сильно лучшего — например, интерфейс зачем-то начудили на Yahoo UI, из-за чего редактирование прав в основном тормозит и тупит, а не работает. Имеется и множество других багов, из-за которых возникают сомнения в том, что авторы его сами используют в том виде, в котором он лежит на SourceForge. У нас часть этих багов исправлена, а права, к счастью, сами задаются вики-страницами, поэтому никто не мешает и создавать их plaintext’ом. В будущем планируется переписать интерфейс HaloACL на «Веб 1.0», немодный, зато очень надёжный :)
 
; [[mediawikiwiki:Extension:MagicNumberedHeadings|MagicNumberedHeadings]]: Магические слова <tt>&#x5F;_NUMBEREDHEADINGS__</tt> и <tt>&#x5F;_NONUMBEREDHEADINGS__</tt>, принудительно включающие/выключащие нумерацию заголовков на страницах вне зависимости от пользовательских настроек. В оригинальной версии есть только включающее слово.
 
; [[mediawikiwiki:Extension:SphinxSearch|SphinxSearch]]: Замена стандартного вики-поиска поиском на основе движка [http://sphinxsearch.com/ Sphinx]. Также см. инструкции по установке: [[SphinxSearch (Mediawiki4Intranet)#Установка]].
 
; [[mediawikiwiki:Extension:SVGEdit|SVGEdit]]: Поддержка браузерного JavaScript-редактора [http://code.google.com/p/svg-edit/ SVG-Edit] для редактирования SVG’шек в MediaWiki. Имеет несколько проблем, в частности, открытие не всегда работает по причине какой-то проблемы синхронизации (race condition), которую ни автор, ни мы выловить пока не смогли.
 
; [[mediawikiwiki:Extension:Wikilog|Wikilog]]: Блоги, форумы, иерархические комментарии, календарик записей на основе MediaWiki, импорт блогов из экспортных файлов [http://blogger.com blogger.com]. Заметка по поводу качества кода: авторы (в основном Juliano F. Ravasi), по-моему, перемудрили с объектной ориентированностью, всё это можно было написать раза в 2 компактнее.
 
 
=== Созданные ===
 
 
То есть созданные в рамках сборки. Всего: 21.
 
 
; [[BatchEditor (MediaWiki)|BatchEditor]]: Расширение для массового редактирования множества страниц с помощью замен строк или регулярных выражений.
 
; [[BugzillaBuglist (MediaWiki)|BugzillaBuglist]]: Расширение для включения списков багов из [[Bugzilla]] из-под специально заданного пользователя (соответственно, со специально заданными правами). В виде обычных таблиц.
 
; [[CategoryTemplate (MediaWiki)|CategoryTemplate]]: Расширение для быстрого создания страниц в категории по шаблону.
 
; [[CharInsertList (MediaWiki)|CharInsertList]]: Расширение, похожее на [[mediawikiwiki:Extension:CharInsert|CharInsert]], полезное исключительно для использования с «EditTools», и позволяющее вставлять выпадающие списки для вставки шаблонов, аналогичных CharInsert’овским.
 
; CustisScripts: «композитное» пока-что не разделённое расширение. Включает в себя: <tt>[[wikipedia:User:Cacycle/wikEd|WikEd]]</tt>, русскоязычный <tt>[[rupedia:Википедия:Викификатор|Викификатор]]</tt>, «автопредпросмотр» AKA Live Preview (показывает в отдельном окне браузера автоматически обновляемый в процессе редактирования предварительный просмотр страницы), плюс несколько изменений CSS стилей.
 
; DocExport:
 
; [[EnotifDiff (MediaWiki)|EnotifDiff]]: отправка почты об изменениях наблюдаемых страниц в формате HTML, опциональное включение в них diff’ов (текстов различий), отправка писем о подтверждении e-mail адресов в формате HTML.
 
; [[GlobalAuth (MediaWiki)|GlobalAuth]]: поддержка [[Глобальная авторизация в веб-системах|самопального веб-протокола Single Sign-On]] в MediaWiki (как клиентской, так и серверной стороны).
 
; [[HttpAuth (MediaWiki)|HttpAuth]]: поддержка входа в Wiki с использованием HTTP Basic авторизации. Полезно, например, для доступа к RSS/Atom лентам в закрытых с помощью HaloACL вики-системах из читалок.
 
; [[ListFeed (MediaWiki)|ListFeed]]: генерация RSS-лент из вики-списков (* или #).
 
; [[MarkupBabel (MediaWiki)|MarkupBabel]]: ещё одно «композитное» расширение, включающее поддержку [[lib:TeX|LaTeX]]-формул, [[Graphviz]]-графов, [[Gnuplot]]-графиков, процентных диаграмм, UML-схем через [http://www.umlgraph.org/ UMLGraph].
 
; [[MediawikiQuizzer]]:
 
; [[MMHandler (MediaWiki)|MMHandler]]: медиаобработчик для вставки Flash-плагина просмотра [[rupedia:Диаграмма связей|майндмапов]] («интеллектуальных карт» или «диаграмм связей») формата <tt>*.mm</tt> ([http://freemind.sourceforge.net/ FreeMind], [http://freeplane.sourceforge.net/ FreePlane]) с помощью обычного синтаксиса вставки изображений <tt><nowiki>[[Файл:Mindmap.mm]]</nowiki></tt>.
 
; Polls:
 
; [[S5SlideShow]] (MWSlideology):
 
; [[SubPageList2]]:
 
; [[SiteExport]]:
 
; [[SWFUpload]]:
 
; UserMagic:
 
; [[UserMessage]]:
 
; [[WikiBookmarks]]:
 
 
= Установка =
 
 
Чтобы установить '''MediaWiki4Intranet''', нужно:
 
* Cклонировать [http://code.google.com/p/mediawiki4intranet/source/ mercurial-репозиторий из Google Code] и обновиться до ветки [http://code.google.com/p/mediawiki4intranet/source/browse/?r=mw4install mw4install]
 
* В директории для установки создать папку <tt>images</tt>, читаемую и записываемую веб-сервером.
 
* Создать для вики MySQL базу данных и пользователя с полным доступом к ней.
 
* Запустить вики-установщик из папки <tt>config</tt>, то есть, зайти на <tt>http://server/wiki/config/</tt>, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
 
* '''Удалить''' конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
 
* Создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php):
 
<code-php>
 
<?php
 
require_once 'custisinstall/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды
 
$wgDBname = 'wiki'; # имя БД
 
$wgDBuser = ''; # логин и пароль с полным доступом к этой БД
 
$wgDBpassword = '';
 
$wgDBadminuser = $wgDBuser;
 
$wgDBadminpassword = $wgDBpassword;
 
$wgScriptPath = '/wiki';
 
</code-php>
 
* Запустить <tt>php maintenance/update.php</tt> из директории установки вики.
 
 
== Короткие URL ==
 
 
Под «короткими URL» в вики понимаются адреса статей без <tt>index.php/</tt> и тем более без <tt>index.php?title=</tt>, например, такой URL — «короткий»: '''<tt>http://wiki.4intra.net/Mediawiki4Intranet</tt>'''. Настраиваются с помощью конфигурации в '''LocalSettings.php''':
 
 
<code-php>
 
$wgUsePathInfo = true;
 
$wgArticlePath = '/$1';
 
</code-php>
 
 
И дополнительно — директив mod_rewrite:
 
 
<pre>
 
RewriteCond %{THE_REQUEST} ^\S+\s*/*index.php/
 
RewriteRule ^index.php/(.*)$ /$1 [R=301,L,NE]
 
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteCond %{REQUEST_FILENAME} !-d
 
RewriteRule ^(.*)$ index.php?title=$1 [L,B,QSA]
 
</pre>
 
 
Всё относительно очевидно, но есть пара нюансов:
 
* В последней строчке обязательно использовать именно <tt>index.php?title=$1</tt>, а не <tt>index.php/$1</tt>, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
 
* Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.
 
* Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.
 
* Первые две строчки нужны, чтобы с адресов, содержащих в себе <tt>index.php/</tt>, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.
 
 
== Антиспам для публичных Wiki ==
 
 
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.
 
 
Поэтому желательно включить расширение '''reCAPTCHA''', распространяемое вместе с MediaWiki4Intranet, получить ключи для своего домена на http://recaptcha.net/api/getkey, и прописать это всё в '''LocalSettings.php''':
 
 
<code-php>
 
require_once('extensions/recaptcha/ReCaptcha.php');
 
// Sign up for these at http://recaptcha.net/api/getkey
 
$recaptcha_public_key = '';
 
$recaptcha_private_key = '';
 
</code-php>
 
 
У спамеров есть ещё одно свойство — они регистрируются и сразу начинают создавать статьи. Поэтому, можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток). Для этого нужно прописать следующие директивы в '''LocalSettings.php''':
 
 
<code-php>
 
// Время, в течение которого запрещено создавать статьи (например, 4 суток * 86400 секунд в сутках)
 
$wgAutoConfirmAge = 86400 * 4;
 
 
$wgGroupPermissions['*']['edit'] = false;
 
$wgGroupPermissions['*']['delete'] = false;
 
$wgGroupPermissions['*']['undelete'] = false;
 
$wgGroupPermissions['*']['createpage'] = false;
 
$wgGroupPermissions['*']['createtalk'] = false;
 
$wgGroupPermissions['user']['createpage'] = false;
 
$wgGroupPermissions['user']['createtalk'] = false;
 
$wgGroupPermissions['autoconfirmed']['createpage'] = true;
 
$wgGroupPermissions['autoconfirmed']['createtalk'] = true;
 
$wgGroupPermissions['sysop']['createpage'] = true;
 
$wgGroupPermissions['sysop']['createtalk'] = true;
 
$wgGroupPermissions['bureaucrat']['createpage'] = true;
 
$wgGroupPermissions['bureaucrat']['createtalk'] = true;
 
</code-php>
 

Revision as of 11:23, 30 March 2011

Патчи

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

В MediaWiki4Intranet патчи хранятся в Feature Branches, то есть, в Mercurial-репозитории есть ветка «mediawiki-x.xx» (например, mediawiki-1.16), содержащая оригинальный код MediaWiki (плюс расширения, в которые изменения вносятся только патчами), по ветке на каждый патч, и ветка «all», содержащая все патчи, объединённые вместе. Для удобства объединений используется расширение Mercurial pbranch.

Какие плюсы это даёт:

  • Патчи не смешиваются, поэтому поддерживается высокий порядок — можно взять отдельный патч и отправить в upstream или, например, удалить.
  • Если патчи экспортировать в Unified diff-формате, между ними гарантированно не возникнет конфликтов, так как ещё на стадии объединения конфликты либо устраняются, либо вносится зависимость между патчами.

А единственный минус — высокая сложность графа ветвлений в Mercurial-репозитории.

Ветки отдельных патчей отпочкованы от оригинальной, и все изменения, вносимые этими патчами, просто фиксируются в соответствующие ветки. Обновления кода MediaWiki и расширений коммитятся в «оригинальную» ветку и merge’атся в ветки патчей, а затем и в ветку «all».

Далее ко всему этому безобразию, тоже отдельной веткой (mw4i-ext), добавляются SVN-репозиторий, содержащий собственные и сильно доработанные расширения, инструменты и конфигурационные файлы; после чего ветки all и mw4i-ext объединяются в «установочную» ветку mw4install.

Всего: 35 патчей.

Исправления багов

То есть патчи, исправляющие какие-либо ошибки. Всего: 17.

Аббр. Дата добавления Имя Описание патча
CEB 2010-02-03 categorytree-empty-bullets Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории.
CRNR 2011-03-28 cite-refsnoreferences Патч расширения Cite + в код MediaWiki, в большей части случаев исправляющий ошибку «Ошибка цитирования: для несуществующего тега <ref> не найдено тега <references />», некорректно возникающую при использовании расширений, которые сами где-нибудь используют парсер без сброса состояния.
DCS 2009-11-24 debug-categorized-specialrecentchanges Исправление выбора по категориям в «Свежих правках».
DNL 2009-08-12 discussion-newsection-links Ссылки на несуществующие страницы обсуждений сделаны по умолчанию ссылками на добавление секции.
DCLD 2009-11-11 dont-call-linkholders-__destruct Исправление некорректного явного вызова деструктора mLinkHolders в парсере.
DSSUC 2010-03-26 dont-suppress-same-user-conflicts Не игнорировать конфликты редактирования, произошедшие из-под одного юзера.
FL 2010-12-29 fix-l10n Исправление сообщения noarticletext в русском языке, добавление формата даты «YYYY-MM-DD HH:MM:SS» без дурацкого «T» между ними.
FPH 2010-12-14 fix-pdfhandler Патч расширения PdfHandler, убрано экранирование $wgPdfProcessor'а, ссылки на PDF-файл с его страниц теперь ведут на саму страницу.
GS 2009-11-19 gdalwaysresample-setting Настройка $wgGDAlwaysResample GD, если true, то миниатюры gif’ок получаются более качественными (они всегда уменьшаются с интерполяцией).
NSF 2010-06-25 no-session-fail Ликвидация лишней попытки сохранения и «ошибок потери данных сессии» при переходе на форму редактирования статьи с передачей текста в окно редактирования.
USDMS 2009-06-03 unauth-save-display-modified-source Показ изменённого, а не оригинального текста статьи при запрещённой попытке сохранения. Нужен, чтобы пользователь не потерял свои изменения при нажатии «Сохранить», если сохранять ему на самом деле запрещено.
UALE 2009-12-21 upload-autofill-lowercase-extensions Автоматическая смена регистра расширения загружаемого файла на нижний. Плюс настройка $wgMaxFilenameLength максимальной длины имени файла в списках файлов с миниатюрами — в оригинале забито гвоздями значение 20, что очень мало, и из-за чего имена файлов часто обрезаются.
WDCS 2009-12-14 wfmsg-dont-clear-stripstate По умолчанию не очищать $parser->mStripState при дополнительных вызовах parse(). Исправляет некоторое количество ошибок с непонятными длинными иероглифическими маркерами «--……..uniq--» в тексте статьи на месте каких-либо данных. На самом деле причина ошибки более глубока: парсер MediaWiki нереентерабелен, авторы об этом знают и, возможно, когда-нибудь исправят.
EHC 2009-09-11 bug53818-empty-heading-crutch Ликвидация пустых заголовков (строк вида ====) из текста статьи, вместо того, чтобы принимать большую часть = за маркеры заголовка, а два внутренних = — за текст заголовка.
FFP3 2009-08-12 fixes-for-php-5.3.0 Исправления предупреждений (warnings) под PHP 5.3 и выше, в некоторых файлах MediaWiki и расширении Interwiki.

Доработки

То есть патчи, добавляющие какой-либо новый функционал. Всего: 17.

Аббр. Дата добавления Имя Описание патча
AH 2010-07-23 add-hooks Добавление хуков. Требуется для расширений HttpAuth (для авторизации методом HTTP Basic) и Wikilog (для группировки свежих правок комментариев в блогах по имени поста на странице «улучшенных» свежих правок).
ALT 2009-11-20 anchor-link-tocnumbers Поддержка автоматической простановки номеров секций в ссылках на секции текущей страницы. То есть в ссылки вида «[[#РазделРаздел]]» будет автоматически добавлен номер секции («2. Раздел»).
CSL 2010-03-25 category-subcatlist Патч расширения CategoryTree. Новый метод группировки страниц в категориях — не по первой букве имени, а по другим категориям, в которых они также перечислены. Чтобы включить этот метод, на страницу категории нужно добавить магическое слово __CATEGORYSUBCATLIST__.
DBT 2010-05-21 detailed-badtitle Детализация сообщений об ошибках недопустимого имени страницы.
DSAH 2009-10-23 detect-script-allow-html Разрешение изменения списка тегов, запрещённых в тексте загруженных файлов — настройка $wgForbiddenTagsInUploads.
DAT 2009-08-07 dot-after-tocnumber Настройка $wgDotAfterTocnumber, если true, то после номеров разделов в оглавлении ставится точка.
EP 2011-02-18 env-proxy Поддержка настроек HTTP прокси, заданных в стандартных переменных окружения http_proxy, http_no_proxy, при загрузке изображений по URL.
FVS 2011-02-11 fix-vector-skin Небольшая доработка и исправление скина Vector — возвращение возможности поместить поле поиска в левую панель через MediaWiki:Sidebar (что за тупость — удалять возможность). Плюс увеличение ширины верхнего поля поиска.
HE 2010-04-21 html-emails Часть расширения EnotifDiff. Поддержка отправки почты об изменениях и подтверждении e-mail адреса в формате HTML, а не в виде чистого текста.
ITF 2011-02-11 imagethumb-transform-flags Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
IEIC 2009-05-13 import-export-images-and-conflicts Очень сильно улучшенный импорт/экспорт страниц MediaWiki. Отправлен в Wikimedia Bug 22881.
IAR 2011-02-25 intraacl-rights Часть расширения IntraACL. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
LSA 2011-03-23 lcstore-accel Поддержка кэширования локализации (LocalisationCache) в PHP ускорителе типа XCache. Странно, что этого нет в оригинале.
LPWC 2011-03-23 longpagewarning-config Поддержка настройки лимита размера статьи, по истечении которого показывается предупреждение MediaWiki:Longpagewarning. Баг такой у разработчиков mediawiki стоит, но решение они для него предложили очень странное — убрали нафиг проверку и разрешили делать эту проверку на уровне функций парсера. Глупость.
PDD 2011-02-11
← 2010-07-26
parser-debug-doblocklevels Разрешать включать <center>...</center> и <blockquote>...</blockquote> внутрь абзаца. Две даты добавления — потому что патч, по сути, имел две версии — первая добавляла тупой хак, местами ломавший тесты, а вторая включает почти полностью переписанный корректный метод doBlockLevels().
REF 2010-12-14 rearrange-editform Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования под форму редактирования, то есть, за пределы элемента <form>. Что необходимо для того, чтобы текст WikEd'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка $wgNoCopyrightWarnings для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
SHL 2009-06-18 shift-included-templates-heading-levels «Сдвиг» уровня заголовков статьи при её включении в подзаголовок. То есть если она включается под заголовком уровня N, то её заголовки 1-го уровня станут (1+N)-ого уровня, 2-го — (2+N), и т. п.
SNH 2009-05-13 signature-nohyphen Вставка подписей нажатием кнопки без двух лидирующих минусов «--». Плюс <m>...</m> вместо <math>...</math> на кнопке вставки TeX-формул (обрабатывается расширением MarkupBabel).
TFN 2009-05-13 translit-upload-filenames Автоматическое транслитерирование физических имён файлов (то есть имён файлов на диске) с кириллицы на латиницу под Windows.
TS 2010-10-15 transclude-sections Поддержка включений секций страниц с помощью синтаксиса вида {{:Статья#Секция}}.

Устаревшие патчи

Под устаревшими понимаются патчи, более не нужные в связи с обновлением лежащего в основе кода. По сути, это означает, что данный патч либо исправлял какой-то баг, который исправили уже и сами авторы, либо был сам принят в состав MediaWiki (таких пока что, правда, нет), либо был переименован.

Аббр. Дата добавления Имя Описание патча
CRDP 2010-01-12 cite-reenterability-for-different-parser-objects Патч расширения Cite, направленный на его реентерабельность.
FCRW 2009-05-13 fix-cannot-redeclare-wfspecialupload Исправление ошибки «Fatal error: Cannot redeclare wfspecialupload()» при загрузке изображения без авторизации. Плюс поддержка HTTP прокси, заданной в стандартной переменной окружения http_proxy, при загрузке изображений по ссылке.
HAR 2010-04-27 haloacl-rights /* переименован в intraacl-rights */ Часть расширения HaloACL. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
IGTT 2009-09-11 imagegallery-tell-transform, imagepage-tell-transform /* патчи объединены в imagethumb-transform-flags */ Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
TMF4 2009-11-24 trunk-mediafunctions-for-1.14 Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1.