Difference between revisions of "Mediawiki4Intranet"

From Wiki4Intranet
Jump to: navigation, search
(Исправления багов)
(Исправления багов)
Line 34: Line 34:
 
То есть патчи, исправляющие какие-либо ошибки. Всего: 17.
 
То есть патчи, исправляющие какие-либо ошибки. Всего: 17.
  
<tab sep="bar" class="wikitable" head="left">
+
<tab sep="bar" class="wikitable" head="topleft">
 +
Аббр. | Имя | Описание патча
 
CEB | categorytree-empty-bullets | Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории.
 
CEB | categorytree-empty-bullets | Патч расширения CategoryTree, чтобы оно не предлагало разворачивать пустые на самом деле категории.
 
CRDP | cite-reenterability-for-different-parser-objects | Патч расширения Cite, направленный на его реентерабельность.
 
CRDP | cite-reenterability-for-different-parser-objects | Патч расширения Cite, направленный на его реентерабельность.

Revision as of 09:08, 30 March 2011

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

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

Содержимое

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

  • Кода оригинальной 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;