Calendar
Расширение-календарь для MediaWiki.
Форкнут из http://www.mediawiki.org/wiki/Extension:Calendar_(Kenyu73).
Позволяет размещать на Wiki-страницах календари событий, подгружающихся с (других) Wiki-страниц. Каждый календарь имеет имя. Идентифицируется календарь именем вики-страницы (ИМЯ) и именем календаря (КАЛЕНДАРЬ), все его события размещаются как вложенные статьи в статью «ИМЯ/КАЛЕНДАРЬ/» и имеют имена вида «YYYY-MM-DD» (Год-Месяц-День) или «YYYY-MM-DD HH Nxx», где HH — час дня (используется исключительно для удобства именования), а Nxx — номер события в часу или на дне. См. ниже параметр «usesectionevents».
Также у расширения есть некоторые расширенные возможности — RSS-подписка на события, повторяющиеся события, несколько видов (день/неделя/месяц/год) и т. п. Также есть некоторые «кривые» и непроверенные (пока что) лично мною фичи — импорт из vCalendar, учёт времени. Лучше не надо его использовать, не хватало ещё из какого-то календаря багзиллу строить.
Contents
Установка
Для установки расширения в свою MediaWiki нужно скопировать файлы расширения в папку extensions/Calendar и добавить в LocalSettings.php следующую строку:
require_once("$IP/extensions/Calendar/Calendar.php");
И далее, по желанию — задать опции.
Начать использовать расширение проще всего так: добавить на любую вики-страницу тег <calendar />. Это создаст на ней календарь с настройками по умолчанию.
Опции для LocalSettings.php
Опция | Описание |
---|---|
$wgRestrictCalendarTo = 'sysop'; | |
$wgCalendarURLPath="/w/extensions/Calendar"; | Переопределяет путь к папке расширения, если она отличается от extensions/Calendar. |
$wgCalendarDisableRedirects=true | Отключить перенаправленные события (disableredirects) везде и глобально. |
$wgCalendarForceNamespace='Calendar' | Разрешить использовать календарь только в одном пространстве имён (предположительно специальном). Для включения этой опции, естественно, также нужно, чтобы это пространство имён и его дуальное «обсуждение» существовали. В простейшем случае, когда на вашей Wiki нет нестандартных пространств имён, это делается так:
$wgExtraNamespaces[100] = "Calendars"; $wgExtraNamespaces[101] = "Calendars_talk"; $wgNamespacesWithSubpages[100] = true; $wgNamespacesWithSubpages[101] = true; |
Изменения
Проведён рефакторинг:
- исправлен стиль кода, части кода переписаны, убраны некоторые костыли.
- убраны нестандартные методы отладки и профилирования (debug.class.php).
- убраны неиспользуемые куски кода.
- убран незадействованный (временно незадействованный?) хук на добавление календаря в MediaWiki:Sidebar в расчёте на то, что при необходимости можно использовать расширения, позволяющие вешать в Sidebar любой вики-код.
- убраны конфликты имён классов со стандартными классами.
- код расширения более корректно растащен по файлам — загружается только тогда, когда нужен.
- файлы переименованы в имена, более стойкие к конфликтам.
- изменён способ именования статей событий, в сторону большей стандартизации — вместо «5.24.2009 -Event1», к тому же изменяющегося в зависимости от настроек, «2009-05-24» и «2009-05-24 N01» — стандартные «SQL-даты».
Изменения в функциональности:
- добавлено отслеживание занятости отдельных часов на дне и добавление событий сразу на определённый час: <calendar addeventsbyhour="8..21" />.
- переделан годовой вид календаря — там теперь AJAX-всплывающие подсказки со списками событий на каждый день, дни покрашены в зависимости от количества событий, а названия месяцев представляют собой ссылки на вид соответствующего месяца в календаре.
- добавлены RSS-ленты событий для всех календарей.
- поддержка вики-разметки в тексте событий — их вики-код теперь не очищается, а парсится.
- сортировка событий по названию в расчёте на то, что в начале названия пишется время события.
- добавлена русская локализация.
-
отключёнпеределан ICAL-импорт как представляющий серьёзную дыру в безопасности (читает название файла из cookie и безусловно удаляет его). Правда всё равно по-извратному, из загруженного в вики файла.
Параметры
Значения параметров, содержащие пробелы, должны окружаться кавычками (").
Значения булевых параметров (да/нет) трактуются точно так же, как PHP трактует значения переменных как true/false. То есть, «0» и "" (пустая строка) — это «нет», а всё остальное (например, «1») — «да».
Параметр | Описание | Пример | Значение по умолчанию |
---|---|---|---|
name=<value> | Имя календаря. Обязательный параметр. Каждый календарь идентифицируется именем страницы, на которую помещён, И значением параметра name. | name="Календарь" | Public |
disableaddevent=1 | Ссылки на добавление событий показаны не будут. | disableaddevent=1 | 0 |
addeventsbyhour=<value> | Вместо одной ссылки «Добавить событие» будут показаны ссылки на добавление событий в отдельные часы дня, которые, более того, ещё и красятся в зависимости от наличия события в этом часу дня. При нажатии по ссылке будет показана форма с заполненным по умолчанию временем вида «12:00-13:00» в начале названия события. Время, естественно, можно менять. При показе списка событий на день эти времена вытаскиваются из названий событий, таким образом отслеживается занятость часов и красятся ссылки на добавление. | addeventsbyhour="8..21" | 0 |
yearoffset=<value> | В выпадающем списке выбора года будут показаны 2*yearoffset+1 лет для выбора — текущий год и по yearoffset в каждую сторону (+/-). | yearoffset=3 | 2 |
date=<value> | Будет показан отдельный день. Возможные значения:
|
date=2010-01-25 | off |
week=1, year=1 | Эти параметры переключают календарь в заданный режим. | year=1 | month=1 |
simplemonth=1 | Показать месяц в виде, аналогичном отдельному месяцу в годовом виде. | simplemonth=1 | 0 |
useeventlist=<value> | Показать список событий на ближайшие useeventlist дней. | useeventlist=30 | 0 |
charlimit=<value> | Максимальная длина названия события в символах. Если название длиннее, в календаре оно обрезается | charlimit=50 | 20 |
usetemplates=1 | Разрешить повторящиеся события. Чтобы создать повторяющееся событие, его надо разместить на странице с именем «Страница/Календарь/XXXX-XX-XX», где 'не обязательно все части даты заменены на цифры. Если оставить вместо года «XXXX» — событие будет повторяться каждый год, если вместо месяца — каждый месяц. Каждый день событие повторять нельзя. | usetemplates=1 | 0 |
subscribe=<value> | Добавить в календарь события из других календарей — список вида «Страница1/Календарь1, Страница2/Календарь2» (страницы и имена календарей через запятую). Добавление событий всё же будет происходить в текущий календарь (не в другие). | subscribe="Main Page/Name, SomePage/Name" | пусто |
fullsubscribe=<value> | Календарь будет полностью копировать другой календарь и события добавляться будут также в другой календарь. | fullsubscribe="Tech Group/Team Calendar" | пусто |
usesectionevents=1 | Если true, события будут добавляться не по одному на страницу, а по нескольку на страницы, соответствующие каждой дате. То есть все события за одну и ту же дату идут на одну и ту же страницу в виде подзаголовков 2-го уровня. На выборку событий значение опции не влияет — в любом случае выбираются и добавленные на отдельные страницы события, и добавленные секциями. | usesectionevents=1 | 0 |
maxdailyevents=<value> | Максимальное количество событий за день на отдельных страницах. Если нужно больше — либо поднимаем лимит, либо используем usesectionevents. | maxdailyevents=10 | 5 |
disablestyles=1 | Не показывать кнопку «стили событий…» | disablestyles=1 | 0 |
lockdown=1 | lockdown=1 | 0 | |
enablesummary=<value> | Показывать тексты событий, ограниченные enablesummary символами, под названиями. | enablesummary=100 | 0 |
useconfigpage=1 | Брать параметры со страницы «Страница/Календарь/config». Туда их следует записывать по одному параметру на строку в виде «ключ=значение», без каких-либо кавычек. Опции, задаваемые в теге, всегда переопределяют опции со страницы конфигурации. Если значение опции «disablelink», кнопка «настройки» показана не будет. | useconfigpage=1 useconfigpage=disablelink |
0 |
css=<value> | Подменить CSS стили календаря собственными. Файл с заданным именем должен лежать в подпапке templates расширения. | css="olive.css" | default.css |
disabletimetrack=1 | Отключить учёт времени. (FIXME) Прим.вред — учёт времени в данном расширении — это нечто адски кривое и костылистое, и лучше его вообще не использовать. | disabletimetrack=1 | 0 |
disablemodes=1 | Не показывать выпадающий список выбора режима показа календаря. | disablemodes=1 | 0 |
monday=1 | Если TRUE, неделя начинается в понедельник, если FALSE, в воскресенье. А когда ей, блин, ещё начинаться. Эфиопы — прим.вред. | monday=1 | 0 |
5dayweek=1 | Если TRUE, выходные не показываются. (отдыхаем!) | 5dayweek=1 | 0 |
ical=<value> | Включить ICAL-импорт. | ical | 0 |
disablerecurrences=1 | Отключить загрузку импортированных из vcalendar RRULE со страниц 'Страница/Календарь/recurrences'. | disablerecurrences=1 | 0 |
disableredirects=1 | Не загружать события с перенаправленных страниц. | disableredirects=1 | 0 (редиректы разрешены) |
disablesectionevents=1 | Отключить загрузку событий из отдельных секций страниц. Иными словами, трактовать каждую страницу как ОДНО событие. | disablesectionevents=1 | 0 (загрузка включена) |
style | Задать CSS-стиль по умолчанию для всех событий. | style="font-size:10px; color: green; font-style:italic" | style="" |
dayofyear=1 | Показывать номер дня в году (1-365) | dayofyear=1 | 0 |
weekofyear=1 | Показывать номер недели в году | weekofyear=1 | 0 |
Подсказки
- Позиция и режим сохраняются
- Когда вы двигаетесь по календарю или переключаете режимы (годовой/месячный/недельный виды), настройка сохраняется у вас в Cookies браузера и при следующем открытии календаря сохраняется и ваша позиция, и режим просмотра календаря.
- RSS-ленты событий
- На все события календаря можно подписаться, кликнув по ссылке «RSS-лента» внизу календаря в месячном или недельном виде, либо выбрав соответствующий пункт из выпадающего при клике по иконке в адресной строке меню.
- События-перенаправления
- Если создать в календаре событие как страницу-перенаправление на другую, даже «некалендарную» — она тоже будет просканирована на наличие событий. Это поведение можно отключить опцией disableredirects.
- Страницы настроек
- Если у вашего календаря стало много настроек, их можно утащить на страницу конфигурации Страница/Календарь/config (см. опцию useconfigpage выше).
Пример
Дополнительно
Ниже представлены части справки оригинального расширения, функциональность в которых могла быть признана по-идиотски реализованной, устаревшей или никому не нужной. Короче говоря, это то, что там по идее осталось, но как работает — никто не проверял, потому что вещи всё-таки извращенческие (например, учёт времени). :)
Recurrence Event
Recurrence type events are traditional repeating yearly events like holidays, birthdays, etc. To create a recurrence event, choose 'add event' and add the following trigger syntax:
##My Birthday
This will convert the event into an vCalendar RRULE event and store it into the 'page/name/recurrence' wiki page. This is also where any ical recurrence events are stored.
Colors and Formatting
- The calendar supports most of the basic MediaWiki text/font properties including the 'ticks' for italic and bold.
- '''<font color=red>vacation</font>'''
- Vacation time!! --> <span style="color:red;background:yellow">Vacation time!!</span>
- Setup the event style' page by adding as many 'styles' as you wish. These styles are based on keyword matches, so be wary of what words you choose… The styles follow standard html/css style properties.
- syntax: keyword:: style1; style2; etc
- myStyle:: color:green; text-decoration:line-through; -->
Whatever - birthday:: color:red; font-style: bold; --> My Birthday
- sick:: color: green;background-color: yellow --> Out Sick today
- vacation:: color: red; font-style: italic --> Vacation to Florida!
- myStyle:: color:green; text-decoration:line-through; -->
- syntax: keyword:: style1; style2; etc
I’m not sure how far and how many variation of the css and/or Wiki formatting will go, but I’ve tested a good portion of the standard text properties. (<div> is giving me an issue at this time though… but <span> works just fine!)
- you can default all events to your style preference by using the style="..." preference. However, individual keyword event styles override the global default.
Time Tracker
You can keep simple time tracking of events by formatting the event as below. This will track any dynamically created event in a simple table below the calendar in full mode only. The event is triggered by prefixing (2) colons followed by the event then (1) colon or (1) dash followed by a numeric value to add.
::Vacation: 8 or ::Vacation -8 ::Team Project 1 - 3 ::Sick : 4
Note that events created using the 'add event' link only track time for that month. If you want to track a years total, you need to enable and use month templates (usetemplates)
vCalendar (iCal) Support
The calendar supports the basic importing of vCalendar formatted files. The import utility is enabled by adding ical or ical=overwrite to your parameter string or config file settings.
The calendar accepts the following vCalendar formats
- DTSTART
- DTEND
- SUMMARY
- DESCRIPTION (not with RRULEs though)
- RRULE
The RRULE evaluates basic calendar event logic only… nothing complex like «every 3rd Monday of every-other month». It does handle typical repeats like Thanksgiving, Mothers Day, etc that required logic like «the 4th Thursday of November» or «the last Monday of March» kinda logic. Basically, it should capture most repeating events like birthdays and holidays.
The RRULE (repeating) events are stored in a subpage called recurrence. Basically, in the following format page/calendarname/recurrence. You can manually edit or delete these as needed. If you use the ical=overwrite option, it deletes the data before writing in the new ical data.
Imported single day events, without the RRULE, are created in the calendar as normal pages in the -Event 0 page for the respective day.