Опросы
Примечание
Данное описание актуально для версий Cerebellum от 1.14 и старше.
CRUD-операции с опросами
[AaIi] POST /poll
Создание опроса.
// IN --->
{ "title": "Заголовок опроса", //заголовок опроса
"text": "Поясняющий текст", //описание опроса
"organization_ids": [1, 2], //список id организаций-получателей опроса, необязательное поле
"deadline": "2015-12-12 12:10:00"//срок истечения опроса, по умолчанию - одни сутки, необязательное поле
}
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание", //описание опроса
"deadline": "2015-12-12 12:10:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAI] PUT /poll/:id
Изменение опроса.
Запрос также изменяет значение колонки last_update_date на текущую дату и время.
// IN --->
{ "title": "Измененное название", //заголовок опроса
"text": "Измененное описание", //описание опроса
"deadline": "2015-11-12 18:00:00" //дедлайн
}
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Измененное название", //заголовок опроса
"text": "Измененное описание", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAI] DELETE /poll/:id
Логическое удаление опроса.
// OUT <---
{ "res": "1",
"resText": ""
}
[A] DELETE /poll/:id/hard
Служебный запрос для физического удаления опроса.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAIu] GET /poll/:id
Получение информации по опросу.
// OUT <---
{
"res": 1,
"resText": "",
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
}
}
[CAIu] GET /extended-poll/:id
Получение расширенной информации по опросу.
// OUT <---
{
"res": 1,
"resText": "",
"extended-poll": {
"poll": {
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании", // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
}
}
[t] GET /poll/inbox
Получение списка входящих опросов (текущий пользователь является администратором или инспектором организации-получателя опроса, либо назначенным участником опроса).
Параметры фильтрации:
- done — список опросов, в зависимости от утвержденного голоса моей организации (ACCEPTED, REJECTED, NOT_VOTED — моя организация проголосовала положительно, отрицательно или не проголосовала).
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- voted — список опросов, в зависимости от моего голоса (ACCEPTED, REJECTED, NOT_VOTED — я проголосовал положительно, отрицательно или не проголосовал).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/inbox?expired=true>Deadline=1448632498&responded=ANY
/poll/inbox?ltActivityDate=1448632498&done=REJECTED&voted=ACCEPTED&page=2
/poll/inbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/inbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[t] GET /extended-poll/inbox
Получение списка c расширенной информацией по входящим опросам (текущий пользователь является администратором или инспектором организации-получателя опроса, либо назначенным участником опроса).
Параметры фильтрации:
- done — список опросов, в зависимости от голоса моей организации (ACCEPTED, REJECTED, NOT_VOTED — моя организация проголосовала положительно, отрицательно или не проголосовала).
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- voted — список опросов, в зависимости от моего голоса (ACCEPTED, REJECTED, NOT_VOTED — я проголосовал положительно, отрицательно или не проголосовал).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/inbox?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/inbox?ltActivityDate=1448632498&done=REJECTED&voted=ACCEPTED&page=2
/extended-poll/inbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/inbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
[t] GET /poll/outbox
Получение списка исходящих опросов (созданных текущим пользователем).
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/outbox?expired=true>Deadline=1448632498&responded=ANY
/poll/outbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/outbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[t] GET /extended-poll/outbox
Получение списка с расширенной информацией по исходящим опросам (созданным текущим пользователем).
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/outbox?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/outbox?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/outbox?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
[AI] GET /poll/list
Получение списка всех опросов.
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/poll/list?expired=true>Deadline=1448632498&responded=ANY
/poll/list?ltActivityDate=144863249&page=2
/poll/list?expired=true<UpdateDate=1448632498&page=2&limit=10
/poll/list?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"polls": [// массив опросов
{
"id": "16200", // id опроса
"title": "Опрос", //заголовок опроса
"text": "Описание опроса", //описание опроса
"deadline": "2015-11-12 18:00:00", //дедлайн
"user": { // информация о пользователе, создавшем опрос
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-27 16:15:50.608", //дата создания
"last_update_date": "2015-11-27 16:15:50.608", //дата и время последнего изменения
"last_activity_date": "2015-11-27 16:15:51.246", //дата и время последней активности (любые запросы на добавление/изменение/удаление по комментариям, списку участников, голосованиям, связям)
"done": "ACCEPTED", //"ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала И я администратор или инспектор организаций-участников или участник. Иначе - null.
"voted": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал И я администратор или инспектор организаций-участников или участник. Иначе - null.
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"responded": "NONE", // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех организаций-участников, то ответ - "ALL"; если есть подтвержденный ответ хотя бы от одной - ответ "ANY";
//иначе - ответ "NONE". Значение проставляется ТОЛЬКО ЕСЛИ текущий пользователь создатель опроса, главный администратор или главный инспектор. Иначе - null.
"expired": "f" //"t" или "f", в зависимости от того, прошел ли deadline, или еще нет
},
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице).
}
[AI] GET /extended-poll/list
Получение списка с расширенной информацией по всем опросам.
Параметры фильтрации:
- expired — список опросов, для которых текущее время больше deadline (expired=true), текущее время меньше deadline (expired=false).
- ltDeadline — список опросов, для которых значение deadline меньше переданного значения, формат timestamp.
- gtDeadline — список опросов, для которых значение deadline больше переданного значения, формат timestamp.
- ltUpdateDate — список опросов, для которых значение last_update_date меньше переданного значения, формат timestamp.
- gtUpdateDate — список опросов, для которых значение last_update_date больше переданного значения, формат timestamp.
- ltActivityDate — список опросов, для которых значение last_activity_date меньше переданного значения, формат timestamp.
- gtActivityDate — список опросов, для которых значение last_activity_date больше переданного значения, формат timestamp.
- responded — список опросов, для которых ото всех организаций-участников есть подтвержденный ответ (responded=ALL),
есть подтвержденный ответ хотя бы для одной организации-участника (responded=ANY), нет подтвержденного ответа ни от одной организации-участника (responded=NONE). - page — номер страницы с опросами (по умолчанию page=1).
- limit — количество выгружаемых опросов на одной странице (по умолчанию limit=25).
- offset — номер опроса, начиная с которого необходимо загрузить список опросов.
- sortBy — задает сортировку опросов по указанному полю. По умолчанию сортировка ведется по полю id
- sortDirection — задает порядок сортировки опросов ASC/DESC. По умолчанию сортировка ведется по убыванию (DESC)
//Примеры запросов:
/extended-poll/list?expired=true>Deadline=1448632498&responded=ANY
/extended-poll/list?ltActivityDate=144863249&page=2
/extended-poll/list?expired=true<UpdateDate=1448632498&page=2&limit=10
/extended-poll/list?ltActivityDate=1448632498&page=2&offset=10&sortBy=title&orderBy=ASC
{ "res": "1",
"resText": "",
"extended-polls": [ // массив опросов
{
"poll": {
"id": "1", // id опроса
"title": "Заголовок опроса",
"text": "Поясняющий текст",
"deadline": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
"date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата создания
"user": { // информация о пользователе, создавшем опрос
"id": "23",
"fio": "Абрикосов Апельсин Яблокович"
},
"expired": "t", // "t" или "f", в зависимости от того, прошел ли deadline, или еще нет
"last_update_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС", // дата и время последнего изменения
// (т.е. POST /poll либо PUT /poll/:id)
"last_activity_date": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",// дата и время последней активности
// (любые запросы на добавление/изменение/удаление
// по комментариям, списку участников,
// голосованиям, связям)
"responded": "ANY" // "ANY", "ALL" или "NONE": если есть подтвержденные ответы ото всех
// организаций-участников, то ответ - "ALL"; если есть
// подтвержденный ответ хотя бы от одной - ответ "ANY";
// иначе - ответ "NONE".
// Значение проставляется ТОЛЬКО ЕСЛИ я создатель опроса,
// главный администратор или главный инспектор. Иначе - null.
},
"context": {
"inbound": "YES", // "YES", "NO", в зависимости от того, участвует ли моя организация в опросе. Для пользователей без организации - "NO_ORGANIZATION".
"voted": { // Значение "voted" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, как я проголосовал по опросу (положительно, отрицательно или не проголосовал, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ я проголосовал. Иначе - null.
"comment": "Комментарий при моем голосовании" // или null, если комментарий отсутствует, или я не голосовал
},
"done": { // Значение "done" проставляется ТОЛЬКО ЕСЛИ я администратор или инспектор организаций-участников или участник. Иначе - null.
"value": "ACCEPTED", // "ACCEPTED", "REJECTED" или "NOT_VOTED", в зависимости от того, какой утвержденный ответ дала моя организация (положительный, отрицательный ответ, или не дала утвержденный ответ, соответственно).
// Значение проставляется ТОЛЬКО ЕСЛИ моя организация проголосовала. Иначе - null.
"comment": "Комментарий при голосовании организации" // или null, если комментарий отсутствует, или организация не голосовала
}
},
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
},
...
],
"pages": "13" // общее количество страниц опросов (количество опросов, делённое на количество опросов на одной странице, т.е. 25).
}
Операции назначения опросов
Назначение опросов на организации и пользователей организаций.
Во всех запросах по назначению организаций невозможно убрать одну из организаций-получателей, если по ней есть назначенные участники или комментарии.
[CAI] GET /poll/:id/organization
Получить список организаций-получателей опроса.
// OUT <---
{ "res": "1",
"resText": "",
// список id организаций-получателей опроса
"organizations": [
{
"id": "2", //id организации
"name": "Отдел тестирования" //название организации
},
... //следующие элементы списка организаций
]
}
[CAI] PUT /poll/:id/organization
Изменить список организаций-получателей опроса. Организации, не указанные в списке, удаляются.
// IN --->
{
"organization_ids": ["1", "2", "292"] //новый список организаций
}
// OUT <---
{
"res": 1,
"resText": "",
"organizations": [
{
"id": "1", //id организации
"name": "Население" //название организации
},
... //следующие элементы списка организаций
]
}
[CAIu] GET /poll/:id/organization/:id/user
Получить список пользователей-участников опроса (а также администраторов/инспекторов) внутри организации вместе с их ответами.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
{
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", // дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
},
... //следующие элементы списка участников опроса
]
}
[CAIU] POST /poll/:id/organization/:id/user/:id
Добавить пользователя в список участников опроса. Добавляет системный комментарий в ветку организации.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
Если организация указанного пользователя не входит в число организаций-получателей опроса, либо её id не совпадает с переданным id, получаем 400.
Если указанный пользователь является администратором или инспектором организации, получаем 400.
Выполнение запроса создает запись для указанного пользователя и его организации в таблице голосов, если это не было сделано ранее.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
{
"id": "619",
"fio": "Пользователь Отдела Тестирования T 2"
}
]
}
[CAIU] DELETE /poll/:id/organization/:id/user/:id
Удалить пользователя из списка участников опроса. Добавляет системный комментарий в ветку организации.
Пользователя невозможно удалить, если он уже проголосовал, либо имеет флаг подтверждения.
Если указанная организация не является организацией пользователя, от имени которого выполняется запрос (и это не главный Администратор/Инспектор), получаем 403.
Если указанный пользователь не является участником опроса, получаем 400.
Если указанный пользователь является администратором или инспектором организации, получаем 400.
Выполнение запроса удаляет запись для указанного пользователя и его организации в таблице голосов.
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618",
"fio": "Пользователь Отдела Тестирования"
}
]
}
[CAIU] PUT/poll/:id/organization/:id/user
Изменить список пользователей участников опроса. Справедливы все пункты, которые перечислены выше для добавления/удаления пользователей.
// IN --->
{ // список id пользователей-участников опроса
"user_ids": ["618", "619"]
}
// OUT <---
{
"res": 1,
"resText": "",
"users": [
//список пользователей-участников опроса в указанной организации
{
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
{
"id": "619",
"fio": "Пользователь Отдела Тестирования T 2"
}
]
}
Операции голосования и подтверждения
[u] GET /poll/:id/vote
Узнать ответ текущего пользователя на опрос.
Если текущий пользователь не является администратором/инспектором организации-получателя или участником опроса, то получаем 403.
// OUT <---
{
"res": 1,
"resText": "",
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
[u] POST /poll/:id/vote
Ответить на опрос.
Добавляет системный комментарий в ветку организации:
- Если пользователь не имеет флага подтверждения, при его голосовании в ветку организации добавляется комментарий вида: «Пользователь user дал предварительный отрицательный ответ на опрос».
- Если пользователь имеет флаг подтверждения, при его голосовании в ветку организации добавляется комментарий вида: «Пользователь user дал окончательный отрицательный ответ на опрос».
Если текущий пользователь не является администратором/инспектором организации-получателя или участником опроса, то получаем 403.
Если опрос просрочен, подтвержден, ответ уже был дан нами, получаем 400.
Проставляет голос в таблицу голосов для текущего пользователя. Если пользователь является администратором или инспектором организации, предварительно эта запись создается.
Если пользователь имеет флаг подтверждения, то поле confirmed_date его голоса обновляется в момент голосования.
Комментарий при голосовании не обязателен. Если он есть, то он добавляется в ветку организации. Если комментарий не передан (или передан пустой комментарий), то он не добавляется в ветку организации.
// IN --->
{ "accepted": "t", // "t" в случае положительного ответа, "f" в случае отрицательного
"comment": "Комментарий при голосовании" //комментарий при голосовании, необязательный параметр
}
// OUT <---
{
"res": 1,
"resText": "",
"user": { //данные текущего пользователя
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
[U] POST /poll/:id/user/:id/confirm
Подтвердить ответ указанного пользователя. Добавляет системный комментарий в ветку организации.
Если указанный пользователь является администратором или инспектором организации, то получаем 400 для него создается запись в таблице голосов. Иначе (т.е. имеем дело с обычным пользователем), и записи в таблице голосов для него нет (т.е. он не приглашен), то получаем 400.
Проставляет «флаг подтверждения» для указанного пользователя в таблице голосов. Если от указанного пользователя еще не поступало голоса, то флаг подтверждения передается ему «авансом». Флаг подтверждения можно выставить только один раз. При повторной попытке выставить флаг подтверждения получаем 400.
Ответы на опрос от пользователей внутри организации больше не принимаются, если есть подтвержденный голос от пользователя. При этом неважно, какое из двух событий произошло первым: голосование или его подтверждение. Этот голос считается голосом от организации.
В момент выдачи флага подтверждения проставляется confirmed_date у голоса (независимо от того, проголосовал пользователь или нет):
- Если пользователь проголосовал до выдачи флага, то confirmed_date голоса не меняется (остается такой же, как в момент выдачи флага).
- Если пользователь проголосовал после выдачи флага, то confirmed_date голоса обновляется в момент голосования.
// OUT <---
{
"res": 1,
"resText": ""
}
[CAI] GET /poll/:id/responses
Получить ответы организаций на опрос. Выгружаются только подтвержденные ответы.
// OUT <---
{
"res": 1,
"resText": "",
"responses": [
{
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
},
...//следующие ответы
]
}
[CAI] GET /poll/:id/organization-responses
Получить список организаций-получателей опроса и их ответов.
Выгружаются только подтвержденные ответы. Если от организации нет подтвержденного ответа, выгружается — «response»: null
// OUT <---
{
"res": 1,
"resText": "",
"organizations": [
{
"organization": {
"id": "2", //id организации
"name": "Отдел Тестирования T" //название организации
},
"response": {
"user": {
"id": "618", //id пользователя
"fio": "Пользователь Отдела Тестирования" //ФИО пользователя
},
"confirmed_date": "2015-11-30 10:57:58.949", //дата и время окончательного ответа от организации: если пользователь не имеет флага (confirmed), то null;
//если пользователь сначала проголосовал, затем получил флаг, то проставляется дата выдачи флага; если пользователь сначала получил флаг, затем проголосовал, то проставляется дата голосования;
"comment": "Опциональный комментарий", //комментарий при голосовании
"confirmed": "t", //признак подтвержденного ответа: "t", "f"
"accepted": "t", //ответ пользователя: "t" - положительный ответ, "f" - отрицательный ответ, null - нет ответа.
"dismiss_allowed": "t", //"f" - пользователь - администратор или инспектор, "t" - обычный пользователь
"date": "2015-11-30 10:57:58.892" //дата и время ответа
}
},
{
"organization": {
"id": "3", //id организации
"name": "Отдел Тестирования 2" //название организации
},
"response": null
},
...//следующие организации с их ответами
]
}
Комментарии к опросам
[CAIu] POST /poll/:id/comment
Добавить новый публичный комментарий (такой, для которого thread_id в таблице comments равен NULL).
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9513", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:48:20.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[CAIu] POST /poll/:id/comment/:id/reply
Ответить на существующий публичный комментарий.
Если комментарий, на который мы пытаемся ответить, не является публичным, получаем 400.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9514", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:48:20.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": 9513 //id родительского комментария или null
}
}
[CAIu] GET /poll/:id/comment/:id/reply
Получить список всех ответов на существующий публичный комментарий.
Если указанный комментарий не является публичным, получаем 400.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9514", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9513" //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
[CAIu] GET /poll/:id/comment
Получить список всех публичных комментариев. Сортировка по убыванию поля id.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9513", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9513" //id родительского комментария или null
},
... //следующие элементы списка комментариев
]
}
[AIu] POST /poll/:id/organization/:id/comment
Добавить новый комментарий в ветке определенной организации.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9515", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:49:27.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[AIu] POST /poll/:id/organization/:id/comment/:id/reply
Ответить на существующий комментарий в ветке определенной организации.
Если текущий пользователь — не главный Администратор/Инспектор, и его организация не совпадает с указанной организацией, получаем 403.
Если комментарий, на который мы пытаемся ответить, находится в ветке не той организации, которую мы указываем, либо является публичным, получаем 400.
// IN --->
{
"text": "Комментарий к опросу"
//Он может быть произвольной длины, содержать спецсимволы и переносы строк. Текст комментария не может быть пустым.
}
// OUT <---
{
"res": 1,
"resText": "",
"comment": {
"id": "9515", //id созданного комментария
"user": {
"id": "6", //id создателя комментария
"fio": "Главный Администратор" //ФИО создателя комментария
},
"date": "2015-11-30 11:49:27.657", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
}
}
[AIu] GET /poll/:id/organization/:id/comment/:id/reply
Получить список всех ответов на существующий в ветке определенной организации комментарий .
Если текущий пользователь — не главный Администратор/Инспектор, и его организация не совпадает с указанной организацией, получаем 403.
Если указанный комментарий находится в ветке не той организации, которую мы указываем, либо является публичным, получаем 400.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9516", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": "9515" //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
[AIu] GET /poll/:id/organization/:id/comment
Получить список всех комментариев в ветке определенной организации (если мы имеем к ней доступ). Сортировка по убыванию поля id.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9515", //id комментария
"user": {
"id": "6", //id создателя
"fio": "Главный Администратор" //ФИО создателя
},
"date": "2015-11-30 11:51:46.704", //дата создания комментария
"text": "Комментарий", //текст комментария
"parent_id": null //id родительского комментария или null
},
... //следующие элементы списка ответных комментариев
]
}
Связи с задачами
[CAI] POST /poll/:id/link/issue/:id
Связать с опросом указанную задачу.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAI] DELETE /poll/:id/link/issue/:id
Удалить связь между опросом и указанной задачей. Если связи не существует, пользователь получает 400.
// OUT <---
{ "res": "1",
"resText": ""
}
[CAIu] GET /poll/:id/link/issue
Получить список связанных с опросом задач.
// OUT <---
{
"res": 1,
"resText": "",
"issues": [
{
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"confirmed_comment": null, //комментарий для неутвержденных заданий
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
},
... //следующие элементы списка связанных задач
]
}
[CAIu] GET /poll/:id/link/issue/:id
Получить связанную с опросом задачу.
// OUT <---
{ "res": "1",
"resText": "",
"issue": {
"id": "789249", //id задания
"user_id": "6", //id создателя задания
"user_fio": "Главный Администратор", //ФИО создателя
"title": "Название", //заголовок
"text": "Описание", //описание
"department_id": "3", //id организации создателя (для создателей без организации это значение указывается явно при создании задания)
"department_title": "Власть народу", //название назначенной организации
"department_logo": null, //логотип организации
"deadline": "2015-11-24 16:38:21", //дедлайн
"confirmed": "1", //"1" - утверждено, "2" - не утверждено, "0" - новое
"news_type_default_type": "t", //является ли тип задания типом по умолчанию: "t", "f"
"news_type_id": "1", //id типа задания
"news_type_name": "Аварии", //название типа задания
"news_type_icon": "2.png", //иконка типа задания
"news_type_logo": "2.png", //логотип типа задания
"news_type_news_type_id": "1", //id типа задания
"category_id": "1", //id категории (приоритета)
"category_name": "Плановые", //название категории (приоритета)
"status_name": "рассмотрение", //название статуса
"assigned_change_date": "2015-11-25 15:42:48.907", //дата назначения задания
"restricted": "f", //ограничение доступа: "t", "f"
"notice": "1", //служебное поле в MapAdmin, всегда равно "1"
"num_main_photo": null, //порядковый номер фотографии, которая будет в заголовке.
"archive": "f", //архивное задание: "t", "f"
"system_data": "версия: 1.1.1",
"update_date": "2015-11-25 15:42:49.529", //дата обновления задания
"custom_fields":"{\"Dop_pole_dlya_testov\":{\"field_id\":19,\"value\":\"12345\"}}", //json объект, состоящий из списка дополнительных полей с их значениями
// в формате: "{\"название поля\": {\"field_id\": "id поля", \"value\": \"значение поля\"}}"
"confirmed_comment": null, //комментарий для неутвержденных задания
"assigned_department_name": "Власть народу", //название назначенной организации
"assigned_to_user": "613", //id назначенного пользователя
"assigned_user_fio": "Борисова Алина", //ФИО назначенного пользователя
"assigned_status": "1", //статус: "1" - новый, "2" - назначено, "3" - обратная связь, "4" - выполнено
"assigned_to": "3", //id назначенной организации
"lat": "46.67", //координаты точки - lat
"zoom": null, //зум, на котором будет отображаться точка, можно отправить null, тогда будет взят зум по умолчанию
"lon": "55.56", //координаты точки - lon
"news_date": "2015-12-21 13:05:00" //дата создания задания
}
}
[CAIu] GET /poll/:id/link/issue/:id/comment
Получить список комментариев связанной с опросом задачи.
// OUT <---
{
"res": 1,
"resText": "",
"comments": [
{
"id": "9145", //id комментария
"reference_id": null, //id родительского комментария
"level": "0", //уровень комментария
"date": "2015-11-26 16:01:34.053", //дата создания комментария
"update_text": "Заданию назначили исполнителя: У задания изменился этап работы с рассмотрение на исполнение", //текст обновления (для комментария об обновлении задания)
"comment": "Исполнитель назначен, задача в процессе выполнения", //текст комментария
"visible": "6", //служебное поле для обозначения видимости комментария
"type": "2", //тип комментария: "1" - обычный, "2" - системный
"user_id": "6", //id создателя комментария
"fio": "Главный Администратор", //ФИО создателя комментария
"news_id": "789237" //id задания
}
]
}
[CAIu] GET /poll/:id/link/issue/:id/attachment
Получить список файлов, прикрепленных к задаче, связанной с опросом.
{
"res": 1,
"resText": "",
"sounds": [ //массив JSON-описаний связанных аудио файлов
{
"id": "6231", //id аудио файла
"num": "1", //порядковый номер аудио файла
"name": "Интервью.mp3", //исходное название аудио файла
"description": "", //описание аудио файла
"extension": "mp3", //расширение аудио файла
"file_name": "sounds_306_789237_1.mp3", //название аудио файла на сервере
"link": null //служебное поле, для аудио файлов всегда null
}
... //следующие элементы списка аудио файлов
],
"difvideo": [], //массив JSON-описаний связанных видео файлов (отличных от *.flv форматов)
"files": [ //массив JSON-описаний связанных файлов
{
"id": "6230", //id файла
"num": "1", //порядковый номер файла
"name": "Selenium.txt", //исходное название файла
"description": "", //описание файла
"extension": "txt", //расширение файла
"file_name": "files_306_789237_1.txt", //название файла на сервере
"link": null //служебное поле, для файлов всегда null
},
... //следующие элементы списка видео файлов
],
"videos": [ //массив JSON-описаний связанных видео файлов формата *.flv
{
"id": "6232", //id видео файла
"num": "0", //порядковый номер видео файла
"name": "", //исходное название видео файла
"description": "видео", //описание видео файла
"extension": "flv", //расширение видео файла
"file_name": null, //название видео файла на сервере
"link": "http://www.youtube.com/watch?v=y6ienqB7avY" //ссылка, если видео файл находится не на сервере, или null
},
... //следующие элементы списка видео файлов
],
"photos": [ //массив JSON-описаний связанных фотографий
{
"id": "6229", //id фотографии
"num": "1", //порядковый номер фотографии
"name": "photo_test.jpg", //исходное название фотографии
"description": "", //описание фотографии
"extension": "jpg", //расширение файла фотографии
"file_name": "photo_306_789237_1.jpg", //название файла фотографии на сервере
"link": null //служебное поле, для фотографий всегда null
},
... //следующие элементы списка фотографий
]
}