Mediawiki4Intranet
MediaWiki — популярная «вики»-система, написанная на PHP и изначально создававшаяся в качестве «движка» Википедии. Отличается отличной расширяемостью — существует более 1700 расширений к ней.
Mediawiki4Intranet — сборка MediaWiki, содержащая в себе довольно большой набор расширений, полезных для внутрикорпоративной среды и, что очень важно, исправленных и «подруженных» между собой — большая часть ошибок, возникающих при интеграции, исправлена.
Contents
Содержимое
Сборка состоит из:
- Кода оригинальной MediaWiki.
- Установленных расширений.
- Набора патчей.
- Нескольких готовых конфигураций для простого создания LocalSettings.php.
Лицензия распространения большинства этого добра: GPLv2, как и у самой MediaWiki. /* Надеемся, что тивоизация нам всё-таки не грозит :) */
MediaWiki
Код MediaWiki берётся из SVN Wikimedia.
Версия Mediawiki4Intranet может отставать от стабильной, ибо различия между версиями MediaWiki не так уж и велики, а вот патчи менять приходится.
Версия MediaWiki, лежащая в основе сборки: 1.16.2 (до недавнего времени 1.14.1).
Патчи
Патчи — это файлы в стандартном Unified diff формате, при применении вносящие изменения в код. В патчи выносятся:
- Все изменения в код самой MediaWiki.
- Незначительные изменения расширений, которые «не тянут» на поддержку отдельной версии.
Всего: 34 патча.
Исправления багов
То есть патчи, исправляющие какие-либо ошибки. Всего: 17.
Аббр. | Имя | Описание патча |
---|---|---|
CEB | categorytree-empty-bullets | Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории. |
CRDP | cite-reenterability-for-different-parser-objects | Патч расширения Cite, направленный на его реентерабельность. |
DCS | debug-categorized-specialrecentchanges | Исправление выбора по категориям в «Свежих правках». |
DNL | discussion-newsection-links | Ссылки на несуществующие страницы обсуждений сделаны по умолчанию ссылками на добавление секции. |
DCLD | dont-call-linkholders-__destruct | Исправление некорректного явного вызова деструктора mLinkHolders в парсере. |
DSSUC | dont-suppress-same-user-conflicts | Не игнорировать конфликты редактирования, произошедшие из-под одного юзера. |
FCRW | fix-cannot-redeclare-wfspecialupload | Исправление ошибки «Fatal error: Cannot redeclare wfspecialupload()» при загрузке изображения без авторизации. Плюс поддержка HTTP прокси, заданной в стандартной переменной окружения http_proxy, при загрузке изображений по ссылке. |
FL | fix-l10n | Исправление сообщения noarticletext в русском языке, добавление формата даты «YYYY-MM-DD HH:MM:SS» без дурацкого «T» между ними. |
FPH | fix-pdfhandler | Патч расширения PdfHandler, убрано экранирование $wgPdfProcessor'а, ссылки на PDF-файл с его страниц теперь ведут на саму страницу. |
GS | gdalwaysresample-setting | Настройка $wgGDAlwaysResample GD, если true, то миниатюры gif’ок получаются более качественными (они всегда уменьшаются с интерполяцией). |
NSF | no-session-fail | Ликвидация лишней попытки сохранения и «ошибок потери данных сессии» при переходе на форму редактирования статьи с передачей текста в окно редактирования. |
TMF4 | trunk-mediafunctions-for-1.14 | Патч trunk-версии расширения MediaFunctions, позволяющий ей работать в MediaWiki 1.14.1. |
USDMS | unauth-save-display-modified-source | Показ изменённого, а не оригинального текста статьи при запрещённой попытке сохранения. Нужен, чтобы пользователь не потерял свои изменения при нажатии «Сохранить», если сохранять ему на самом деле запрещено. |
UALE | upload-autofill-lowercase-extensions | Автоматическая смена регистра расширения загружаемого файла на нижний. Плюс настройка $wgMaxFilenameLength максимальной длины имени файла в списках файлов с миниатюрами — в оригинале забито гвоздями значение 20, что очень мало, и из-за чего имена файлов часто обрезаются. |
WDCS | wfmsg-dont-clear-stripstate | По умолчанию не очищать $parser->mStripState при дополнительных вызовах parse(). Исправляет некоторое количество ошибок с непонятными длинными иероглифическими маркерами «--……..uniq--» в тексте статьи на месте каких-либо данных. На самом деле причина ошибки более глубока: парсер MediaWiki нереентерабелен, авторы об этом знают и, возможно, когда-нибудь исправят. |
EHC | bug53818-empty-heading-crutch | Ликвидация пустых заголовков (строк вида ====) из текста статьи, вместо того, чтобы принимать большую часть = за маркеры заголовка, а два внутренних = — за текст заголовка. |
FFP3 | fixes-for-php-5.3.0 | Исправления предупреждений (warnings) под PHP 5.3 и выше, в некоторых файлах MediaWiki и расширении Interwiki. |
Доработки
То есть патчи, добавляющие какой-либо новый функционал. Всего: 17.
- AH add-hooks
- Добавление хуков. Требуется для расширений HttpAuth (для авторизации методом HTTP Basic) и Wikilog (для группировки свежих правок комментариев в блогах по имени поста на странице «улучшенных» свежих правок).
- ALT anchor-link-tocnumbers
- Поддержка автоматической простановки номеров секций в ссылках на секции текущей страницы. То есть в ссылки вида «[[#Раздел|Раздел]]» будет автоматически добавлен номер секции («2. Раздел»).
- CSL category-subcatlist
- Патч расширения CategoryTree. Новый метод группировки страниц в категориях — не по первой букве имени, а по другим категориям, в которых они также перечислены. Чтобы включить этот метод, на страницу категории нужно добавить магическое слово __CATEGORYSUBCATLIST__.
- DBT detailed-badtitle
- Детализация сообщений об ошибках недопустимого имени страницы.
- DSAH detect-script-allow-html
- Разрешение изменения списка тегов, запрещённых в тексте загруженных файлов — настройка $wgForbiddenTagsInUploads.
- DAT dot-after-tocnumber
- Настройка $wgDotAfterTocnumber, если true, то после номеров разделов в оглавлении ставится точка.
- HAR haloacl-rights
- Часть расширения HaloACL. Проверки прав доступа к страницам во всём коде MediaWiki. Собственно это и обеспечивает защиту.
- HE html-emails
- Часть расширения EnotifDiff. Поддержка отправки почты об изменениях и подтверждении e-mail адреса в формате HTML, а не в виде чистого текста.
- IGTT imagegallery-tell-transform, imagepage-tell-transform
- Передавать данные о том, откуда вызывается создание миниатюры файла. Нужно для FlvHandler’а, чтобы не вставлять код видеоплеера в галереи файлов и в миниатюры файлов в истории ревизий.
- PDD parser-debug-doblocklevels
- Разрешать включать <center>...</center> и <blockquote>...</blockquote> внутрь абзаца.
- REF rearrange-editform
- Перемещение списков использованных в статье шаблонов и скрытых категорий на странице редактирования под форму редактирования, то есть, за пределы элемента <form>. Что необходимо для того, чтобы текст WikEd'овского AJAX-предпросмотра, то есть HTML-текст статьи, не включался в форму, потому что он сам может включать в себя формы, и тогда их содержимое некорректным образом попадает в форму редактирования, что потенциально приводит к неприятным багам. Плюс настройка $wgNoCopyrightWarnings для отключения предупреждений о копирайте (MediaWiki:Copyrightwarning, MediaWiki:Copyrightwarning2).
- SITHL shift-included-templates-heading-levels
- «Сдвиг» уровня заголовков статьи при её включении в подзаголовок. То есть если она включается под заголовком уровня N, то её заголовки 1-го уровня станут (1+N)-ого уровня, 2-го — (2+N), и т. п.
- SNH signature-nohyphen
- Вставка подписей нажатием кнопки без двух лидирующих минусов «--». Плюс <m>...</m> вместо <math>...</math> на кнопке вставки TeX-формул (обрабатывается расширением MarkupBabel).
- TS transclude-sections
- Поддержка включений секций страниц с помощью синтаксиса вида {{:Статья#Секция}}.
- TUFN translit-upload-filenames
- Автоматическое транслитерирование физических имён файлов (то есть имён файлов на диске) с кириллицы на латиницу под Windows.
- IEIC 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
Установка
Чтобы установить MediaWiki4Intranet, нужно:
- Cклонировать mercurial-репозиторий из Google Code и обновиться до ветки mw4install
- В директории для установки создать папку images, читаемую и записываемую веб-сервером.
- Создать для вики MySQL базу данных и пользователя с полным доступом к ней.
- Запустить вики-установщик из папки config, то есть, зайти на http://server/wiki/config/, ответить на вопросы, исправить недоразумения (если таковые возникнут), выбрать базу MySQL, InnoDB, 4.1/5.0 utf8 binary. Установщик создаст пустую БД и конфиг.
- Удалить конфиг, сгенерированный установщиком — в нём куча опций, которые все уже прописаны в правильные значения в конфигах MediaWiki4Intranet.
- Создать минимальный конфиг MediaWiki4Intranet (LocalSettings.php):
<?php require_once 'custisinstall/ServerSettings.php'; # это под UNIX, либо BaseSettings.php для винды $wgDBname = 'wiki'; # имя БД $wgDBuser = ''; # логин и пароль с полным доступом к этой БД $wgDBpassword = ''; $wgDBadminuser = $wgDBuser; $wgDBadminpassword = $wgDBpassword; $wgScriptPath = '/wiki';
- Запустить php maintenance/update.php из директории установки вики.
Короткие URL
Под «короткими URL» в вики понимаются адреса статей без index.php/ и тем более без index.php?title=, например, такой URL — «короткий»: http://wiki.4intra.net/Mediawiki4Intranet. Настраиваются с помощью конфигурации в LocalSettings.php:
$wgUsePathInfo = true; $wgArticlePath = '/$1';
И дополнительно — директив 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,QSA]
Всё относительно очевидно, но есть пара нюансов:
- В последней строчке обязательно использовать именно index.php?title=$1, а не index.php/$1, так как во втором случае при использовании [B] подстраницы (страницы с / в названии) становятся недоступны.
- Флаг [B] в последней строчке важен. Ибо без [B] mod_rewrite при переписи URL разэкранирует и не экранирует обратно спецсимволы (все, кроме латинских букв и цифр), из-за чего статьи с названиями, содержащими процент (%), становятся недоступны, потому что % в URL-кодировке — спецсимвол, и обязательно должен быть заменён на %25.
- Флаг [QSA] тоже нужен, ибо без него к ?title=$1 не дописываются остальные параметры URL.
- Первые две строчки нужны, чтобы с адресов, содержащих в себе index.php/, перенаправить пользователя на «короткие» — это убирает дублирование страниц, которое не любят поисковики.
Антиспам для публичных Wiki
В публичных Wiki имеют свойство заводиться спамеры, потому что можно легко зарегистрироваться и создать статью.
Поэтому желательно включить расширение reCAPTCHA, распространяемое вместе с MediaWiki4Intranet, получить ключи для своего домена на http://recaptcha.net/api/getkey, и прописать это всё в LocalSettings.php:
require_once('extensions/recaptcha/ReCaptcha.php'); // Sign up for these at http://recaptcha.net/api/getkey $recaptcha_public_key = ''; $recaptcha_private_key = '';
У спамеров есть ещё одно свойство — они регистрируются и сразу начинают создавать статьи. Поэтому, можно запретить создавать статьи после регистрации на какой-то период времени (в тяжёлых случаях можно, например, на 4 суток). Для этого нужно прописать следующие директивы в LocalSettings.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;