1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2024-11-24 08:52:18 +02:00
This commit is contained in:
Anton Titovets 2024-02-22 10:33:54 +03:00
commit d98d2cc355
2 changed files with 433 additions and 55 deletions

View File

@ -24,6 +24,116 @@
#Область ПрограммныйИнтерфейс
#Область РаботаСМетаданнымиКалендарей
// Создать календарь.
//
// Параметры:
// Токен - Строка - Токен
// Наименование - Строка - Наименование создаваемого календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура;
Параметры.Вставить("summary", Наименование);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ПолучитьМетаданныеКалендаря(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Изменить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Наименование - Строка - Новое наименование
// Описание - Строка - Новое описание календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ИзменитьМетаданныеКалендаря(Знач Токен, Знач Календарь, Знач Наименование = "", Знач Описание = "") Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Параметры = Новый Структура;
Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование);
КонецЕсли;
Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание);
КонецЕсли;
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Очистить основной календарь.
//
// Параметры:
// Токен - Строка - Токен
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ОчиститьОсновнойКалендарь(Знач Токен) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Ответ = OPI_Инструменты.Post(URL, , Заголовки, Ложь);
Возврат Ответ;
КонецФункции
// Удалить календарь.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область РаботаСоСпискомКалендарей
// Получить список календарей.
@ -66,74 +176,66 @@
КонецФункции
#КонецОбласти
#Область РаботаСКалендарями
// Создать календарь.
//
// Параметры:
// Токен - Строка - Токен
// Наименование - Строка - Наименование создаваемого календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция СоздатьКалендарь(Знач Токен, Знач Наименование) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Параметры = Новый Структура;
Параметры.Вставить("summary", Наименование);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить календарь.
// Получить календарь списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ПолучитьКалендарь(Знач Токен, Знач Календарь) Экспорт
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ПолучитьКалендарьСписка(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Изменить календарь.
// Удалить календарь из списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Наименование - Строка - Новое наименование
// Описание - Строка - Новое описание календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция ИзменитьКалендарь(Знач Токен, Знач Календарь, Знач Наименование = "", Знач Описание = "") Экспорт
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция УдалитьКалендарьИзСписка(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Параметры = Новый Структура;
Возврат Ответ;
КонецФункции
// Изменить календарь списка.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// ОсновнойЦвет - Строка - HEX основного цвета (#ffffff)
// ДополнительныйЦвет - Строка - HEX дополнительного цвета (#ffffff)
// Скрытый - Булево - Скрытый календарь
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ИзменитьКалендарьСписка(Знач Токен
, Знач Календарь
, Знач ОсновнойЦвет
, Знач ДополнительныйЦвет
, Знач Скрытый = Ложь) Экспорт
Если ЗначениеЗаполнено(Наименование) Тогда
Параметры.Вставить("summary", Наименование);
КонецЕсли;
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Календарь + "?colorRgbFormat=true";
Если ЗначениеЗаполнено(Описание) Тогда
Параметры.Вставить("description", Описание);
КонецЕсли;
Параметры = Новый Соответствие;
Параметры.Вставить("hidden" , Скрытый);
Параметры.Вставить("foregroundColor", ОсновнойЦвет);
Параметры.Вставить("backgroundColor", ДополнительныйЦвет);
Ответ = OPI_Инструменты.Put(URL, Параметры, Заголовки);
@ -141,19 +243,130 @@
КонецФункции
// Удалить календарь.
#КонецОбласти
#Область РаботаССобытиями
// Получить описание события.
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Пустой макет события
Функция ПолучитьОписаниеСобытия() Экспорт
Час = 3600;
Событие = Новый Соответствие;
Событие.Вставить("Описание" , ""); // Описание события
Событие.Вставить("Заголовок" , "Новое событие"); // Заголовок события
Событие.Вставить("МестоПроведения" , ""); // Строка описание места проведения
Событие.Вставить("ДатаНачала" , ТекущаяДатаСеанса()); // Дата начала события
Событие.Вставить("ДатаОкончания" , Событие["ДатаНачала"] + Час); // Дата окончания события
Событие.Вставить("МассивURLФайловВложений", Новый Соответствие); // Ключ - название, Значение - URL к файлу
Событие.Вставить("ОтправлятьУведомления" , Истина); // Признак отправки уведомлений участникам
Возврат Событие;
КонецФункции
// Получить список событий.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
//
// Возвращаемое значение:
// Строка, Произвольный, ДвоичныеДанные, Неопределено, HTTPОтвет - ответ сервера Google
Функция УдалитьКалендарь(Знач Токен, Знач Календарь) Экспорт
// Соответствие Из КлючИЗначение - Массив соответствий событий
Функция ПолучитьСписокСобытий(Знач Токен, Знач Календарь) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
МассивСобытий = Новый Массив;
ПолучитьСписокСобытийРекурсивно(Заголовки, Календарь, МассивСобытий);
Возврат МассивСобытий;
КонецФункции
// Создать событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// ОписаниеСобытия - Соответствие Из КлючИЗначение - Описание события. См. ПолучитьОписаниеСобытия
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция СоздатьСобытие(Знач Токен, Знач Календарь, Знач ОписаниеСобытия) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events";
Дата0 = ОписаниеСобытия["ДатаНачала"];
Дата1 = ОписаниеСобытия["ДатаОкончания"];
Вложения = ОписаниеСобытия["МассивURLФайловВложений"];
Вложения = ПреобразоватьВложения(Вложения);
Уведомления = ОписаниеСобытия["ОтправлятьУведомления"];
Параметры = Новый Структура;
Параметры.Вставить("summary" , ОписаниеСобытия["Заголовок"]);
Параметры.Вставить("description", ОписаниеСобытия["Описание"]);
Параметры.Вставить("location" , ОписаниеСобытия["МестоПроведения"]);
Параметры.Вставить("start" , ПреобразоватьДату(Дата0));
Параметры.Вставить("end" , ПреобразоватьДату(Дата1));
Параметры.Вставить("attachments", Вложения);
ПараметрыURL = Новый Структура;
ПараметрыURL.Вставить("sendUpdates" , ?(Уведомления, "all", "none"));
ПараметрыURL.Вставить("supportsAttachments" , ?(Вложения.Количество() > 0, "true", "false"));
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки, Истина);
Возврат Ответ;
КонецФункции
// Получить событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Событие - Строка - ID события
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция ПолучитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь
+ "/events/"
+ Событие;
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Удалить событие.
//
// Параметры:
// Токен - Строка - Токен
// Календарь - Строка - ID календаря
// Событие - Строка - ID события
//
// Возвращаемое значение:
// Строка, Произвольный, HTTPОтвет, ДвоичныеДанные, Неопределено - ответ сервера Google
Функция УдалитьСобытие(Знач Токен, Знач Календарь, Знач Событие) Экспорт
Заголовки = ПолучитьЗаголовокАвторизации(Токен);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Календарь
+ "/events/"
+ Событие;
Ответ = OPI_Инструменты.Delete(URL, , Заголовки);
Возврат Ответ;
@ -174,6 +387,47 @@
КонецФункции
Функция ПреобразоватьДату(Знач Дата)
СтруктураДаты = Новый Структура;
Если Дата = НачалоДня(Дата) Тогда
ФорматДаты = "ДФ=yyyy-MM-dd";
Поле = "date";
Иначе
ФорматДаты = "ДФ=yyyy-MM-ddTHH:mm:ssZ";
Поле = "dateTime";
КонецЕсли;
Дата = Формат(Дата, ФорматДаты);
СтруктураДаты.Вставить(Поле, Дата);
Возврат СтруктураДаты;
КонецФункции
Функция ПреобразоватьВложения(Знач Вложения)
МассивВложений = Новый Массив;
Если ТипЗнч(Вложения) = Тип("Соответствие") Тогда
Для Каждого Вложение Из Вложения Цикл
ТекущеВложение = Новый Структура;
ТекущеВложение.Вставить("title" , Вложение.Ключ);
ТекущеВложение.Вставить("fileUrl", Вложение.Значение);
МассивВложений.Добавить(ТекущеВложение);
КонецЦикла;
КонецЕсли;
Возврат МассивВложений;
КонецФункции
Процедура ПолучитьСписокКалендарейРекурсивно(Знач Заголовки, МассивКалендарей, Страница = "")
Параметры = Новый Структура;
@ -199,4 +453,29 @@
КонецПроцедуры
Процедура ПолучитьСписокСобытийРекурсивно(Знач Заголовки, Знач Календарь, МассивСобытий, Страница = "")
Параметры = Новый Структура;
Если ЗначениеЗаполнено(Страница) Тогда
Параметры.Вставить("pageToken", Страница);
КонецЕсли;
Результат = OPI_Инструменты.Get("https://www.googleapis.com/calendar/v3/calendars/" + Календарь + "/events"
,
, Заголовки);
События = Результат["items"];
Страница = Результат["nextPageToken"];
Для Каждого Событие Из События Цикл
МассивСобытий.Добавить(Событие);
КонецЦикла;
Если События.Количество() > 0 И ЗначениеЗаполнено(Страница) Тогда
ПолучитьСписокСобытийРекурсивно(Заголовки, МассивСобытий, Страница);
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -65,7 +65,9 @@
.ДобавитьСерверныйТест("ГК_ПолучитьТокен" , "Получить токен")
.ДобавитьСерверныйТест("ГК_ОбновитьТокен" , "Обновить токен")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокКалендарей" , "Получить список календарей")
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/удалить календарь");
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьКалендарь" , "Создать/удалить календарь")
.ДобавитьСерверныйТест("ГК_СоздатьУдалитьСобытие" , "Создать/удалить событие")
.ДобавитьСерверныйТест("ГК_ПолучитьСписокСобытий" , "Получить список событий");
КонецПроцедуры
@ -1558,7 +1560,10 @@
НаименованиеИзмененное = Наименование + " (изм.)";
ТипСоответствие = Тип("Соответствие");
ТипСтрока = Тип("Строка");
Description = "description";
Summary = "summary";
Черный = "#000000";
Желтый = "#ffd800";
Результат = OPI_GoogleCalendar.СоздатьКалендарь(Токен, Наименование);
@ -1569,7 +1574,7 @@
Календарь = Результат["id"];
Результат = OPI_GoogleCalendar.ИзменитьКалендарь(Токен
Результат = OPI_GoogleCalendar.ИзменитьМетаданныеКалендаря(Токен
, Календарь
, НаименованиеИзмененное
, Описание);
@ -1577,23 +1582,117 @@
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("description").Равно(Описание)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ПолучитьКалендарь(Токен, Календарь);
Результат = OPI_GoogleCalendar.ПолучитьМетаданныеКалендаря(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("description").Равно(Описание)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ДобавитьКалендарьВСписок(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство(Description).Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ИзменитьКалендарьСписка(Токен, Календарь, Черный, Желтый, Ложь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("foregroundColor").Равно(Черный)
.Свойство("backgroundColor").Равно(Желтый);
Результат = OPI_GoogleCalendar.ПолучитьКалендарьСписка(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(НаименованиеИзмененное)
.Свойство("foregroundColor").Равно(Черный)
.Свойство("backgroundColor").Равно(Желтый);
Результат = OPI_GoogleCalendar.ОчиститьОсновнойКалендарь(Токен);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
Результат = OPI_GoogleCalendar.УдалитьКалендарьИзСписка(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
Результат = OPI_GoogleCalendar.УдалитьКалендарь(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
КонецПроцедуры
Процедура ГК_СоздатьУдалитьСобытие() Экспорт
Токен = ПолучитьПараметр("Google_Token");
Календарь = ПолучитьПараметр("Google_Календарь");
Наименование = "Новое событие";
Описание = "Описание тестового события";
ТипСоответствие = Тип("Соответствие");
ТипСтрока = Тип("Строка");
Summary = "summary";
Час = 3600;
Вложения = Новый Соответствие;
Вложения.Вставить("Картинка1"
, "https://opi.neocities.org/assets/images/logo_long-e8fdcca6ff8b32e679ea49a1ccdd3eac.png");
Вложения.Вставить("Картинка2"
, "https://github.com/Bayselonarrend/OpenIntegrations/raw/main/Media/logo.png?v1");
СоответствиеСобытия = Новый Соответствие;
СоответствиеСобытия.Вставить("Описание" , Описание);
СоответствиеСобытия.Вставить("Заголовок" , Наименование);
СоответствиеСобытия.Вставить("МестоПроведения" , "В офисе");
СоответствиеСобытия.Вставить("ДатаНачала" , ТекущаяДатаСеанса());
СоответствиеСобытия.Вставить("ДатаОкончания" , СоответствиеСобытия["ДатаНачала"] + Час);
СоответствиеСобытия.Вставить("МассивURLФайловВложений" , Вложения);
СоответствиеСобытия.Вставить("ОтправлятьУведомления" , Истина);
Результат = OPI_GoogleCalendar.СоздатьСобытие(Токен, Календарь, СоответствиеСобытия);
Событие = Результат["id"];
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство("description").Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.ПолучитьСобытие(Токен, Календарь, Событие);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип(ТипСоответствие)
.Свойство(Summary).Равно(Наименование)
.Свойство("description").Равно(Описание)
.Свойство("id").ИмеетТип(ТипСтрока).Заполнено();
Результат = OPI_GoogleCalendar.УдалитьСобытие(Токен, Календарь, Событие);
ЮТест.ОжидаетЧто(Результат).НеЗаполнено();
КонецПроцедуры
Процедура ГК_ПолучитьСписокСобытий() Экспорт
Токен = ПолучитьПараметр("Google_Token");
Календарь = ПолучитьПараметр("Google_Календарь");
Результат = OPI_GoogleCalendar.ПолучитьСписокСобытий(Токен, Календарь);
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Массив");
КонецПроцедуры
#КонецОбласти
#КонецОбласти