Импорт календаря SugarCRM в Google Календарь

Поскольку вся личная, и немалая часть рабочей инфраструктуры завязана на продукты Google, очень хотелось видеть встречи, дела, звонки, созданные в SugarCRM (Community Edition 6.5), в удобном и привычном календаре Google. Что и удалось сделать, со второго подхода.

К сожалению, из коробки функционал экспорта календаря в формате iCal в Sugar-е не работает. Чтобы его починить, мне пришлось преодолеть проблемы с кодировкой, переносами строк и форматированием самого iCal.

Сначала про то, где взять ссылку на свой iCal-календарь.

  1. Заходим в SugarCRM
  2. Идем в свой профиль (слева-вверху ссылка с вашим именем)
  3. Таб Advanced -> Calendar Options -> iCal integration URL

В теории, добавить Sugar-календарь в Google-календарь просто:

  1. Заходим в Google Календарь
  2. Слева внизу, где написано Другие календари, нажимаем на иконку опций
  3. Выбираем Добавить по ссылке
  4. Вставляем сюда Sugar-овскую ссылку iCal integration URL

На практике это не работает, и вот что нужно сделать, чтобы исправить ситуацию.

  1. Проверьте, что у вашего веб-сервера нет проблем c utf-8. Тут без подробностей.
  2. Чиним сломаную кодировку:
    в файле modules/iCals/HTTP_WebDAV_Server_iCal.php находим определение функции http_GET() и заменяем строчку

     $result = mb_convert_encoding(html_entity_decode($this->vcal_focus->getVcalIcal($this->user_focus, $_REQUEST['num_months']), ENT_QUOTES, $this->cal_charset), $this->cal_encoding);

    на

     $result = html_entity_decode($this->vcal_focus->getVcalIcal($this->user_focus, $_REQUEST['num_months']));
    
  3. Чиним проблему с newline character в тегах iCal и описании сущностей Sugar.
    В файле modules/vCals/vCal.php переписываем функцию create_ical_string_from_array() следующим образом:

    public static function create_ical_string_from_array($ical_array)
    {
        $str = "";
        foreach ($ical_array as $ical) {
            if ($ical[0] == "DESCRIPTION") {
                $ical[1] = str_replace("\r\n", "\\n", $ical[1]);
            }
            $str .= $ical[0] . ":" . $ical[1] . self::EOL;
        }
        return $str;
    }
    

Вот и все, теперь можно импортировать календарь в Календарь!

P.S.

На данный момент интервал обновление календаря никак не настроить. По моему опыту новые события появляются в Google Каледаре через 4-6 часов после их создания в SugarCRM.

Добавить комментарий