Bitrix24.Tasks: Работа с чеклистами в PHP API (classes/general)

Список публичных методов класса \CTaskCheckListItem 18.0.5

Получение списка чеклистов

/** @var $list array */
$list = \CTaskCheckListItem::getList(['filter'=['TASK_ID'=>1], 'select'=>['ID', 'TITLE'], 'order'=>['SORT_INDEX']]);
foreach($list ... )
{
// same magic
}

REST запрос

// 20190207180803
// http://site.ru/rest/1/********/tasks.task.checklist.list?taskId=1&filter[<SORT_INDEX]=6
{
"result": {
"items": [
{
"ID": "7",
"CREATED_BY": "1",
"TITLE": "test",
"IS_COMPLETE": "Y",
"SORT_INDEX": "3"
},
{
"ID": "8",
"CREATED_BY": "1",
"TITLE": "<a href=\"http://google.ru\" target=\"_blank\">fasdfa</a>",
"IS_COMPLETE": "Y",
"SORT_INDEX": "4"
},
{
"ID": "19",
"CREATED_BY": "1",
"TITLE": "test add new check list item",
"IS_COMPLETE": "N",
"SORT_INDEX": "5"
}
]
},
"time": {
"start": 1549555683.415296,
"finish": 1549555683.489995,
"duration": 0.07469892501831055,
"processing": 0.0047719478607177734,
"date_start": "2019-02-07T18:08:03+02:00",
"date_finish": "2019-02-07T18:08:03+02:00"
}
}

Создание пункта чеклиста

\CTaskCheckListItem::add(CTaskItemInterface $oTaskItem, array $fields)

Первым параметром передается объект конкретной задачи, для того, чтобы прикрепить к ней пункт чеклиста. Вторым параметром передается массив значений этого пункта чеклиста.

Поля fields

TITLE (обязательный) — текст чеклиста. Можно передавать любую строку, кроме пустой строки или строки, содержащей только пробелы.

Если TITLE будет равен === (трем знакам равно), то вместа пункта чеклиста будет разделительная линия

SORT_INDEX — индекс сортировки. целое число. Чем больше, тем ниже в списке.

IS_COMPLETE — флаг о том, что пункт чеклиста уже выполнен.

После успешного создания пункта чеклиста вернется объект \CTaskCheckListItem

Пример

$task = \CTaskItem::getInstance($taskId, $userId);\CTaskCheckListItem::add($task, ['TITLE'=>'First item', 'SORT_INDEX'=>10, 'IS_COMPLETE'=>'N']);\CTaskCheckListItem::add($task, ['TITLE'=>'Second item', 'SORT_INDEX'=>20, 'IS_COMPLETE'=>'N']);\CTaskCheckListItem::add($task, ['TITLE'=>'Third item. Completed', 'SORT_INDEX'=>30, 'IS_COMPLETE'=>'Y']);

События

OnBeforeTaskCheckListItemAdd ($task, $fields)
OnAfterTaskCheckListItemAdd ($task, $oldFields, $newFields)

REST запрос

// 20190207175030
// http://site.ru/rest/1/********/tasks.task.checklist.add?taskId=1&fields[TITLE]=Hello%20world
{
"result": {
"item": [
{
"ID": "1",
"CREATED_BY": "1",
"TASK_ID": "1",
"TITLE": "Hello world",
"IS_COMPLETE": "N",
"SORT_INDEX": "1"
}
]
},
"time": {
"start": 1549554630.441403,
"finish": 1549554630.552115,
"duration": 0.11071205139160156,
"processing": 0.05162310600280762,
"date_start": "2019-02-07T17:50:30+02:00",
"date_finish": "2019-02-07T17:50:30+02:00"
}
}

Редактирование пункта чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
$item->update(['TITLE'=>'title 2']);

События

OnBeforeTaskCheckListItemUpdate ($task, $fields)
OnAfterTaskCheckListItemUpdate ($task, $oldFields, $newFields)

REST запрос

// 20190207175155
// http://site.ru/rest/1/********/tasks.task.checklist.update?taskId=1&checkListItemId=29&fields[TITLE]=Hello%20world
{
"result": {
"item": [
{
"ID": "1",
"CREATED_BY": "1",
"TASK_ID": "1",
"TITLE": "Hello world",
"IS_COMPLETE": "N",
"SORT_INDEX": "1"
}
]
},
"time": {
"start": 1549554715.4373,
"finish": 1549554715.54894,
"duration": 0.11163997650146484,
"processing": 0.038207054138183594,
"date_start": "2019-02-07T17:51:55+02:00",
"date_finish": "2019-02-07T17:51:55+02:00"
}
}

Удаление пункта чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
$item->delete();

События

OnBeforeTaskCheckListItemDelete ($task, $fields)
OnAfterTaskCheckListItemDeete ($task)

REST запрос

// 20190207175321
// http://site.ru/rest/1/********/tasks.task.checklist.delete?taskId=1&checkListItemId=29
{
"result": {
"item": true
},
"time": {
"start": 1549554801.140385,
"finish": 1549554801.24166,
"duration": 0.10127520561218262,
"processing": 0.032243967056274414,
"date_start": "2019-02-07T17:53:21+02:00",
"date_finish": "2019-02-07T17:53:21+02:00"
}
}

Проверка доступа к действиям над пунктами чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
$task->isActionAllowed(\CTaskItem::ACTION_CHECKLIST_ADD_ITEMS); // для добавления пункта чеклиста, разрешение стоит спрашивать у задачи, а не у чеклиста!$item = new \CTaskCheckListItem($task, $itemId);
// удаление
$item->isActionAllowed(\CTaskCheckListItem::ACTION_REMOVE);
// сортировка
$item->isActionAllowed(\CTaskCheckListItem::ACTION_REORDER);
// изменение
$item->isActionAllowed(\CTaskCheckListItem::ACTION_MODIFY);
// выполнение
$item->isActionAllowed(\CTaskCheckListItem::ACTION_TOGGLE);

Возможные варианты $actionId:

\CTaskCheckListItem::ACTION_ADD     = 0x01; // добавление
\CTaskCheckListItem::ACTION_MODIFY = 0x02; // изменение
\CTaskCheckListItem::ACTION_REMOVE = 0x03; // удаление
\CTaskCheckListItem::ACTION_TOGGLE = 0x04; // выполнение
\CTaskCheckListItem::ACTION_REORDER = 0x05; // сортировку

Изменение индекса сортировки

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
$newIndex = 19;
$item->setSortIndex($newIndex);

События

OnBeforeTaskCheckListItemSort ($task, $fields)
OnAfterTaskCheckListItemSort ($task, $oldFields, $newFields)

Переместить пункт 5 под 2 пункт чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item5 = new \CTaskCheckListItem($task, $itemId5);
$item2 = new \CTaskCheckListItem($task, $itemId2);
$item5->moveAfterItem($item2->getId());

События

OnCheckListItemMoveItem ($selectedItemId, $insertAfterItemId)

REST запрос

// 20190207175514
// http://site.ru/rest/1/********/tasks.task.checklist.moveafter?taskId=1&checkListItemId=2&afterItemId=6
{
"result": {
"item": [
{
"ID": "2",
"CREATED_BY": "1",
"TASK_ID": "1",
"TITLE": "Hello world",
"IS_COMPLETE": "N",
"SORT_INDEX": "17"
}
]
},
"time": {
"start": 1549555019.965198,
"finish": 1549555020.053995,
"duration": 0.08879685401916504,
"processing": 0.035902976989746094,
"date_start": "2019-02-07T17:56:59+02:00",
"date_finish": "2019-02-07T17:57:00+02:00"
}
}

Выполнен ли пункт чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
echo $item->iSComplete() ? 'Выполнен' : 'Не выполнен';

Выполнить пункт чеклиста

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
echo $item->сomplete();

События

См. метод update

REST запрос

// 20190207175514
// http://site.ru/rest/1/********/tasks.task.checklist.complete?taskId=1&checkListItemId=2
{
"result": {
"item": [
{
"ID": "2",
"CREATED_BY": "1",
"TASK_ID": "1",
"TITLE": "Hello world",
"IS_COMPLETE": "Y",
"SORT_INDEX": "4"
}
]
},
"time": {
"start": 1549554914.300577,
"finish": 1549554914.371372,
"duration": 0.07079505920410156,
"processing": 0.03411412239074707,
"date_start": "2019-02-07T17:55:14+02:00",
"date_finish": "2019-02-07T17:55:14+02:00"
}
}

Пометить пункт чеклиста как не выполненный

В отличии от метода toggle этот метод не переключает выполненный/не выполненный, а принудительно выставляет “не выполненный”

$task = \CTaskItem::getInstance($taskId, $userId);
$item = new \CTaskCheckListItem($task, $itemId);
echo $item->renew();

События

Те же, что и в update

REST запрос

// 20190207175514
// http://site.ru/rest/1/********/tasks.task.checklist.renew?taskId=1&checkListItemId=2
{
"result": {
"item": [
{
"ID": "2",
"CREATED_BY": "1",
"TASK_ID": "1",
"TITLE": "Hello world",
"IS_COMPLETE": "N",
"SORT_INDEX": "4"
}
]
},
"time": {
"start": 1549554914.300577,
"finish": 1549554914.371372,
"duration": 0.07079505920410156,
"processing": 0.03411412239074707,
"date_start": "2019-02-07T17:55:14+02:00",
"date_finish": "2019-02-07T17:55:14+02:00"
}
}

--

--