Dmitry Vorobyev

Календарь отпусков сотрудников из закрытого корпоративного Confluence в iPhone

# Зачем это все и с чего началось

Когда команда начала расти и появилось необходимость, чтобы об отпуске сотрудника знали все, а не только их руководитель, то мы начали вести календарь отпусков в виде wiki-документа в Confluence.

Просто несколько таблиц по кварталам с фамилиями сотрудников, датами начала и окончания отпуска и вероятностью отпуска. То есть заранее можно было сообщить в начале года всем, что ты собираешься в отпуске в конце декабря с вероятностью 50%. 

Потом появился Team Calendar внутри Confluence, но он был воспомогательным средством т.к. не представлял наглядного отображения на одном экране всей картинки. На изменения в нем как-то сложнее было подписаться, чем на wiki-страницу. Хотя при всем этом по нему было удобнее видеть пересечения по отпускам, текущую картинку на сегодняшний день, а так же соединить несколько таких календарей в один.

Желание чтобы из календаря внутри Confluence все попадало прямо в телефон было давно. И свежие изменения в регламенте отпусков, которые сделали Team Calendar более приоритетным, а wiki-документ оставили только для "обратной совместимости", побудили меня воплотить это желание в реальность. 

Team Calendar в Confluence отлично поддерживает экспорт в iCal.

Однако из-за того что по соображениям безопасности сервер живет в локальной сети, то никак связать его с внешним телефоном было нельзя. 

# Подключаем на телефоне

Но во внутренней сети есть мой рабочий компьютер! Я могу экспортировать календарь на него и просто выгружать его на внешний сервис откуда его уже будет забирать iPhone. 

Написал очень простой bat-файл:

call dropbox_set.bat

;wt team vacations
call wget https://wiki.********/rest/calendar-services/1.0/calendar/export/subcalendar/private/********.ics --no-check-certificate -O %DROPBOX_LOCATION%Wiki\Calendar\wt_team_vacations.ics

Который выгружает файл в нужный мне каталог в Dropbox. Через Dropbox получил публичную ссылку на этот файл:

https://www.dropbox.com/s/********/wt_team_vacations.ics?dl=1

Но вбивать ее в телефон долго и неприятно поэтому я сократил ее через bitly.com и полученную короткую ссылку уже без особого труда вбил руками в настройках телефона по первой подсказке из Google:

Осталось сделать так чтобы файл в Dropbox обновлялся. Оказывается у старого замечательного nnCron под Windows появилась вторая жизнь на github. Установил его и с помощью простого nnCron скрипта сделал запуск bat-файла каждый час: 

Time: 0 * * * * *
Action:
SWHide   NormalPriority
START-APP: D:\BAT\wikicalendar2dropbox.bat

Одна проблема. В телефоне в этом календаре события показываются как "Отпуск", а не имя и фамилия сотрудника.

Это легко исправляется небольшой заменой в тексте например таким вот некрасивым кодом, однако работающем в конкретной моей ситуации:

<?php
$content = file_get_contents(  DIR   . '/wt_team_vacations.ics');
// vdm: main replace
$content = preg_replace('/SUMMARY:([^\r\n]+)([\r\n]+.+?ATTENDEE;.+?;CN=)([^;]+)?/ums','SUMMARY:$1 $3$2$3', $content);
// vdm: new line cleanup
$content = preg_replace('/SUMMARY:(.+?)[\r\n]+\s(.+?[A-Z])/ums','SUMMARY:$1$2', $content);
file_put_contents(  DIR   . '/wt_team_vacations.ics', $content);

В результате календарь начинается выглядеть уже корректно: 

За время дебагинга выяснилось, что Dropbox удаляет ссылку на расшаренный файл если сам файл был удален, даже если вместо него загружен новый с таким же именем. Но если файл был отредактирован, то ссылка остается. 

Еще выяснилось что магию с php-скриптом пришлось делать из-за того что тип события в Team Calendar был выбран общим Event. Если создавать событие как Leave, то ничего этого не нужно и информация о том, чей это отпуск в SUMMARY в iCal добавляется автоматически. 

И еще выяснилось, что хоть я и указывал в настройках телефона ссылку на iCal через bitly.com, телефон в итоге сохранил целевую ссылку на Dropbox. То есть идея отдебажить через просмотр количества переходов по ссылке обновляется календарь или нет не сработала. Пришлось убедиться в этом вручную просто добавив информацию о прошедшем отпуске. 

Все работает отлично!!!

# Подключаем на компьютере

В какой-то момент времени основным рабочим компьютером стал Mac и календарь захотелось иметь не только в телефоне, а еще и на компьютере. Для этого пришлось удалить интеграцию на телефоне т.к. она была локальной и на компьютере настроить эту подписку на календарь как iCloud после чего она становится доступной для всех связанных аккаунтов, в том числе и на телефоне. Делается это очень просто по первой инструкции в интернете. 

Теперь можно пользоваться любимым приложением календарем как на компьютере так и на телефоне и видеть там всю необходимую информацию. 

Exit mobile version