http://habrahabr.ru/post/243195/
Как обычно происходит с коробочными продуктами, не все решения устраивают, и приходится улучшать бизнес-процессы при помощи внешних инструментов. В нашем случае трудоемко было работать с встроенным календарем. Основная проблема заключалась в том, что нельзя было одновременно ставить задачу и смотреть занятость сотрудников – при этом возникали сложности у двух смежных отделов.
Мы решили внедрить гугл календарь:
До этого с API Гугла я не работал, поэтому первым делом по поиску нашел
документацию, удобно, что там же сразу была указана ссылка на GIT исходников.
Первые грабли: в указанной документации описаны объекты, которые сейчас в исходниках завернуты в другие объекты. Изучив код и поискав решения в интернете, я написал код подключения к календарю и добавил первый календарь.
«Здорово, как быстро все получилось! У нас почти все готово, осталось немного: добавить все нужные нам календари и закинуть в них события», подумал я и открыл интерфейс календаря в браузере.
И тут меня поджидали вторые грабли: в интерфейсе я не обнаружил добавленных календарей. Как понять, где они пропали? Я написал код, который возвращал список созданных календарей. Оказалось, их там было уже штук 10. Как же так — все работает, календари создаются и даже возвращаются. А в интерфейсе их нет как не было…
OK Google, что я делаю не так?
Пришлось опять копать. Нашел: календари добавляются в сервисный аккаунт (147837410720-t2rf13ce77not3h58ubgсme3q682nr54@developer.gserviceaccount.com). Для того чтобы календари были видны, их, оказывается, необходимо было добавить к основному.
Добавляем следующим образом : $service = GoogleAuth::getInstance();
$scope = new Google_Service_Calendar_AclRuleScope();
$scope->setType('user');
$scope->setValue('Ваш основной емаил@gmail.com');
$rule = new Google_Service_Calendar_AclRule();
$rule->setRole('owner');
$rule->setScope($scope);
$result = $service->acl->insert($calId, $rule);
Я расслабился и наслаждался, календари создавались, события записывались, все работало как часы. Но и тут меня поджидали очередные грабли!
Внезапно в один тяжелый понедельник Гугл перестал принимать токен, выдавая ошибку (invalid_grant). Искали два дня всем отделом черную кошку в темной комнате. Нашли. Недавняя смена времени на зимнее время привела к отставанию нашего сервака от реального времени, и Гуглу это не нравилось. После корректировки времени все заработало.
Пока календари работают, с интересом ждем очередных грабель от Гугла.
Буду рад, если данным постом кому-нибудь помогу сократить время на поиск решения проблем.