Mediawiki4Intranet

From Wiki4Intranet
Revision as of 18:38, 21 March 2011 by VitaliyFilippov (Talk | contribs) (Короткие URL)

Jump to: navigation, search

MediaWiki — популярная «вики»-система, написанная на PHP и изначально создававшаяся в качестве «движка» Википедии. Отличается отличной расширяемостью — существует более 1700 расширений к ней.

Mediawiki4Intranet — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.

Содержимое

Сборка состоит из:

  • Кода оригинальной MediaWiki.
  • Установленных расширений.
  • Набора патчей.
  • Нескольких готовых конфигураций для простого создания LocalSettings.php.

MediaWiki

Код MediaWiki берётся из SVN Wikimedia.

Версия Mediawiki4Intranet может отставать от стабильной, ибо различия между версиями MediaWiki не так уж и велики, а вот патчи менять приходится.

Версия MediaWiki, лежащая в основе сборки: 1.16.2 (до недавнего времени 1.14.1).

Патчи

Патчи — это файлы в стандартном Unified diff формате, при применении вносящие изменения в код. В патчи выносятся:

  • Все изменения в код самой MediaWiki.
  • Незначительные изменения расширений, которые «не тянут» на поддержку отдельной версии.

Всего: 34 патча.

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

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

categorytree-empty-bullets
Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории.
cite-reenterability-for-different-parser-objects
Патч расширения Cite, направленный на его реентерабельность.
debug-categorized-specialrecentchanges
Исправление выбора по категориям в «Свежих правках».
discussion-newsection-links
Ссылки на несуществующие страницы обсуждений сделаны по умолчанию ссылками на добавление секции.
dont-call-linkholders-__destruct
Исправление некорректного явного вызова деструктора mLinkHolders в парсере.
dont-suppress-same-user-conflicts
Не игнорировать конфликты редактирования, произошедшие из-под одного юзера.
fix-cannot-redeclare-wfspecialupload
Исправление ошибки «Fatal error: Cannot redeclare wfspecialupload()» при загрузке изображения без авторизации. Плюс поддержка HTTP прокси, заданной в стандартной переменной окружения http_proxy, при загрузке изображений по ссылке.
fix-l10n
Исправление сообщения noarticletext в русском языке, добавление формата даты «YYYY-MM-DD HH:MM:SS» без дурацкого «T» между ними.
fix-pdfhandler
Патч расширения PdfHandler, убрано экранирование $wgPdfProcessor'а, ссылки на PDF-файл с его страниц теперь ведут на саму страницу.
gdalwaysresample-setting
Настройка $wgGDAlwaysResample GD, если true, то миниатюры gif’ок получаются более качественными (они всегда уменьшаются с интерполяцией).
no-session-fail
Ликвидация лишней попытки сохранения и «ошибок потери данных сессии» при переходе на форму редактирования статьи с передачей текста в окно редактирования.
trunk-mediafunctions-for-1.14
Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1.
unauth-save-display-modified-source
Показ изменённого, а не оригинального текста статьи при запрещённой попытке сохранения. Нужен, чтобы пользователь не потерял свои изменения при нажатии «Сохранить», если сохранять ему на самом деле запрещено.
upload-autofill-lowercase-extensions
Автоматическая смена регистра расширения загружаемого файла на нижний. Плюс настройка $wgMaxFilenameLength максимальной длины имени файла в списках файлов с миниатюрами — в оригинале забито гвоздями значение 20, что очень мало, и из-за чего имена файлов часто обрезаются.
wfmsg-dont-clear-stripstate
По умолчанию не очищать $parser->mStripState при дополнительных вызовах parse(). Исправляет некоторое количество ошибок с непонятными длинными иероглифическими маркерами «--……..uniq--» в тексте статьи на месте каких-либо данных. На самом деле причина ошибки более глубока: парсер MediaWiki нереентерабелен, авторы об этом знают и, возможно, когда-нибудь исправят.
bug53818-empty-heading-crutch
Ликвидация пустых заголовков (строк вида ====) из текста статьи, вместо того, чтобы принимать большую часть = за маркеры заголовка, а два внутренних = — за текст заголовка.
fixes-for-php-5.3.0
Исправления предупреждений (warnings) под PHP 5.3 и выше, в некоторых файлах MediaWiki и расширении Interwiki.

Доработки

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

add-hooks
Добавление хуков. Требуется для расширений HttpAuth (для авторизации методом HTTP Basic) и Wikilog (для группировки свежих правок комментариев в блогах по имени поста на странице «улучшенных» свежих правок).
anchor-link-tocnumbers
Поддержка автоматической простановки номеров секций в ссылках на секции текущей страницы. То есть в ссылки вида «[[#Раздел|Раздел]]» будет автоматически добавлен номер секции («2. Раздел»).
category-subcatlist
Патч расширения CategoryTree. Новый метод группировки страниц в категориях — не по первой букве имени, а по другим категориям, в которых они также перечислены. Чтобы включить этот метод, на страницу категории нужно добавить магическое слово __CATEGORYSUBCATLIST__.
detailed-badtitle
Детализация сообщений об ошибках недопустимого имени страницы.
detect-script-allow-html
Разрешение изменения списка тегов, запрещённых в тексте загруженных файлов — настройка $wgForbiddenTagsInUploads.
dot-after-tocnumber
Настройка $wgDotAfterTocnumber, если true, то после номеров разделов в оглавлении ставится точка.
haloacl-rights
Часть расширения HaloACL. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
html-emails
Часть расширения EnotifDiff. Поддержка отправки почты об изменениях и подтверждении e-mail адреса в формате HTML, а не в виде чистого текста.
imagegallery-tell-transform, imagepage-tell-transform
Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
parser-debug-doblocklevels
Разрешать включать <center>...</center> и <blockquote>...</blockquote> внутрь абзаца.
rearrange-editform
Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования под форму редактирования, то есть, за пределы элемента <form>. Что необходимо для того, чтобы текст WikEd'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка $wgNoCopyrightWarnings для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
shift-included-templates-heading-levels
«Сдвиг» уровня заголовков статьи при её включении в подзаголовок. То есть если она включается под заголовком уровня N, то её заголовки 1-го уровня станут (1+N)-ого уровня, 2-го — (2+N), и т. п.
signature-nohyphen
Вставка подписей нажатием кнопки без двух лидирующих минусов «--». Плюс <m>...</m> вместо <math>...</math> на кнопке вставки TeX-формул (обрабатывается расширением MarkupBabel).
transclude-sections
Поддержка включений секций страниц с помощью синтаксиса вида {{:Статья#Секция}}.
translit-upload-filenames
Автоматическое транслитерирование физических имён файлов (то есть имён файлов на диске) с кириллицы на латиницу под Windows.
import-export-images-and-conflicts
Очень сильно улучшенный импорт/экспорт страниц MediaWiki. Отправлен в Wikimedia Bug 22881.

Расширения

Для большинство расширений, присутствующих в SVN Wikimedia, используется их версия, соответствующия версии MediaWiki — например, для версии 1.14.1 расширения берутся из tags/REL1_14_1/extensions. Однако некоторые расширения в 1.14.1 имеют различные неприятные баги, или их там вообще ещё нет, и тогда берётся их trunk-версия (то есть самая новая) из trunk/extensions, возможно, как-то допиливается, например, с помощью патчей, и включается в сборку.

Есть и расширения, которые вообще не попали в SVN, и у которых нет даже своего репозитория с кодом, а есть только где-то выложенные файлики, или даже просто PHP-код на вики-страницах. Такие сохраняются в нашем локальном SVN, там же дорабатываются, и включаются в сборку оттуда. Вообще говоря, у нас есть «супер-система» автоматического объединения кода и патчей из нескольких источников на основе Mercurial и pbranch, но это немного другая история.

Всего: 58.

Неизменённые

То есть просто установленные. Всего: 15.

AllowGetParamsInWikilinks
Разрешение использования URL-параметров (?key=value) во внутренних вики-ссылках.
CharInsert
Поддержка вставки шаблонов <charinsert> для MediaWiki:Edittools. См. также UserMessage.
DeleteBatch
Удаление множества страниц сразу со спецстраницы Служебная:DeleteBatch.
FullLocalImage
Добавление функций {{fullimage:ФАЙЛ}} и {{localimage:ФАЙЛ}}, возвращающих путь хранения файла на сервере (полный в первом случае и относительный во втором).
Google Analytics (trunk)
Гугловский счётчик. Можно подключать на виках, установленных в интернете.
PagedTiffHandler (trunk)
Поддержка TIFF-картинок.
ParserFunctions
Функции парсера типа {{#if:}}, {{#ifeq:}} и т. п. Справка тут.
PreferencesExtension
Расширение, используемое другими расширениями для добавления пользовательских настроек. Нужно в версиях MediaWiki < 1.16.
Renameuser (trunk)
Переименование пользователя с корректным обновлением ссылок на него в БД.
SimpleForms
Поддержка добавления на страницы формочек с целью простого создания новых страниц по шаблону.
StringFunctions
Строковые функции парсера типа {{#sub:}}. В новых версиях объединены с ParserFunctions, но у нас 1.14.1, а там ещё нет.
SyntaxHighlight_GeSHi
Поддержка подсветки синтаксиса в большинстве распространённых языков программирования с помощью GeSHi. Используется тег <source>. И будет использоваться всегда, несмотря на то, что в новых версиях расширения его заменяют <syntaxhighlight> (маразм).
UserMerge (trunk)
Объединение и удаление учётных записей пользователей с корректным изменением ссылок в БД.
WhoIsWatching
Ответ на вопрос «кто наблюдает за данной страницей?» со страницы Служебная:WhoIsWatching.
WikiCategoryTagCloud
Вставка облаков тегов на страницы. Тегами считаются категории.

Отлаженные

То есть установленные и отлаженные или back-портированные. Всего: 15.

Cite
Поддержка сносок на вики-страницах (теги <ref> и <references>). Внесены изменения патчем.
MediaFunctions (trunk)
Поддержка функций для получения информации о загруженных файлах. Внесены изменения патчем для работы trunk’овой версии в 1.14.1.
PdfHandler (trunk)
Медиаобработчик для PDF-файлов. То есть, поддержка загрузки PDF’ок, их постраничного просмотра и вставки страниц PDF как изображений. Иногда может создавать проблемы, ибо ghostscript обрабатывает некоторые PDF’ки с очень большим трудом, потреблением дискового пространства на /tmp и процессорного времени. Внесены изменения патчем.
MultiCategorySearch
Спецстраница Служебная:MultiCategorySearch для поиска страниц, включённых в несколько категорий сразу.
SimpleTable
Поддержка простого (вменяемого) синтаксиса для вставки таблиц — тега <tab>.
Drafts
Поддержка сохранения черновиков в процессе редактирования страниц, плюс авто-сохранение каждую минуту, чтобы не потерять свои труды, если браузер вдруг накроется.
CategoryTree
AJAX-раскрываемые деревья категорий на спецстранице и страницах самих категорий. Внесены изменения патчами для поддержки альтернативной группировки страниц в категории и удаления плюсиков ([+]) у категорий, не содержащих подкатегорий, в деревьях.
AnyWikiDraw
Поддержка вставки рисованных с помощью Java-апплета картинок на вики-страницы. Увы, нетривиальна в эксплуатации, ибо апплет.
OpenID
Поддержка входа в вики по офигически глючной, но самой распространённой технологии единого входа — OpenID.
Interwiki (trunk)
Междувиковые ссылки, включения, редактирование таблиц интервики. Внесены изменения патчем.
reCAPTCHA
Реализация популярной CAPTCHA («Публичного Полностью Автоматического Теста Тьюринга для Различения Компьютера и Человека»), короче говоря, антиспам для вики-систем, установленных в интернете. У нас, кстати, по умолчанию только что зарегистрированные пользователи не могут создавать новые страницы.
SpecialForm
Ещё одно расширение для создания страниц из форм по шаблонам. Вероятно, от него вскоре полностью откажемся в пользу SimpleForms.
SVNIntegration
Не используется и является хорошей «дырой» в subversion, но позволяет вставлять на страницы файлы из Subversion или информацию о них.
PlantUML
Рисование UML-диаграмм с помощью PlantUML.
Workflow
Небольшое расширения для вставки «переключаемых» состояний страниц (можно назвать «информерами»), реализованных через категории.

Доработанные

То есть установленные и сильно доработанные. Всего: 7.

Calendar
Расширение-календарь событий для MediaWiki, на котором каждое событие, либо каждый день с событиями, хранится на вики-странице.
FlvHandler
Поддержка вставки Flash-видеоплееров на страницы с использованием обычного синтаксиса [[Файл:Видео.mp4]]. Поддерживаются видеокодеки FLV+MP3 или H.264+AAC в контейнерах FLV или MP4.
HaloACL, HaloACL (MediaWiki)
Единственное расширение MediaWiki, реализующее работающие права доступа (позволяющее защитить часть страниц от просмотра). 100%-ной гарантии всё равно никогда нет, потому что MediaWiki не создавалась в расчёте на это, и многие её расширения лазают в базу как попало и, соответственно, могут вытащить оттуда любую информацию. Однако в пределах сборки Mediawiki4Intranet HaloACL работает. Тем не менее, качество кода HaloACL оставляет желать сильно лучшего — например, интерфейс зачем-то начудили на Yahoo UI, из-за чего редактирование прав в основном тормозит и тупит, а не работает. Имеется и множество других багов, из-за которых возникают сомнения в том, что авторы его сами используют в том виде, в котором он лежит на SourceForge. У нас часть этих багов исправлена, а права, к счастью, сами задаются вики-страницами, поэтому никто не мешает и создавать их plaintext’ом. В будущем планируется переписать интерфейс HaloACL на «Веб 1.0», немодный, зато очень надёжный :)
MagicNumberedHeadings
Магические слова __NUMBEREDHEADINGS__ и __NONUMBEREDHEADINGS__, принудительно включающие/выключащие нумерацию заголовков на страницах вне зависимости от пользовательских настроек. В оригинальной версии есть только включающее слово.
SphinxSearch
Замена стандартного вики-поиска поиском на основе движка Sphinx. Также см. инструкции по установке: SphinxSearch (Mediawiki4Intranet)#Установка.
SVGEdit
Поддержка браузерного JavaScript-редактора SVG-Edit для редактирования SVG’шек в MediaWiki. Имеет несколько проблем, в частности, открытие не всегда работает по причине какой-то проблемы синхронизации (race condition), которую ни автор, ни мы выловить пока не смогли.
Wikilog
Блоги, форумы, иерархические комментарии, календарик записей на основе MediaWiki, импорт блогов из экспортных файлов blogger.com. Заметка по поводу качества кода: авторы (в основном Juliano F. Ravasi), по-моему, перемудрили с объектной ориентированностью, всё это можно было написать раза в 2 компактнее.

Созданные

То есть созданные в рамках сборки. Всего: 21.

BatchEditor
Расширение для массового редактирования множества страниц с помощью замен строк или регулярных выражений.
BugzillaBuglist
Расширение для включения списков багов из Bugzilla из-под специально заданного пользователя (соответственно, со специально заданными правами). В виде обычных таблиц.
CategoryTemplate
Расширение для быстрого создания страниц в категории по шаблону.
CharInsertList
Расширение, похожее на CharInsert, полезное исключительно для использования с «EditTools», и позволяющее вставлять выпадающие списки для вставки шаблонов, аналогичных CharInsert’овским.
CustisScripts
«композитное» пока-что не разделённое расширение. Включает в себя: WikEd, русскоязычный Викификатор, «автопредпросмотр» AKA Live Preview (показывает в отдельном окне браузера автоматически обновляемый в процессе редактирования предварительный просмотр страницы), плюс несколько изменений CSS стилей.
DocExport
EnotifDiff
отправка почты об изменениях наблюдаемых страниц в формате HTML, опциональное включение в них diff’ов (текстов различий), отправка писем о подтверждении e-mail адресов в формате HTML.
GlobalAuth
поддержка самопального веб-протокола Single Sign-On в MediaWiki (как клиентской, так и серверной стороны).
HttpAuth
поддержка входа в Wiki с использованием HTTP Basic авторизации. Полезно, например, для доступа к RSS/Atom лентам в закрытых с помощью HaloACL вики-системах из читалок.
ListFeed
генерация RSS-лент из вики-списков (* или #).
MarkupBabel
ещё одно «композитное» расширение, включающее поддержку LaTeX-формул, Graphviz-графов, Gnuplot-графиков, процентных диаграмм, UML-схем через UMLGraph.
MediawikiQuizzer
MMHandler
медиаобработчик для вставки Flash-плагина просмотра майндмапов («интеллектуальных карт» или «диаграмм связей») формата *.mm (FreeMind, FreePlane) с помощью обычного синтаксиса вставки изображений [[Файл:Mindmap.mm]].
Polls
S5SlideShow (MWSlideology)
SubPageList2
SiteExport
SWFUpload
UserMagic
UserMessage
WikiBookmarks

Установка

@TODO

Короткие URL

Под «короткими URL» в вики понимаются адреса статей без index.php/ и тем более без index.php?title=, например, такой URL — «короткий»: http://wiki.4intra.net/Mediawiki4Intranet. Настраиваются с помощью следующий директив mod_rewrite:

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]

Всё относительно очевидно, но есть пара нюансов:

  • Флаг [B] в последней строчке важен, так как без него mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (%, / и т. п.) и статьи с названиями, содержащими, например, %, становятся недоступны.
  • В последней строчке обязательно использовать именно index.php?title=$1, а не index.php/$1, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
  • Первые две строчки нужны, чтобы с адресов, содержащих в себе index.php/, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.