среда, 16 июня 2021 г.

Bitrix24-Коробка. Делаем, чтобы письма становились задачами. Простой загрузчик без форм

Сохраняю для себя, может пригодиться этот кусок говнокода.

Оповещения не реализованы. Смотрите по списку литературы - кагбэ не сложно, но просто не нужно в текущей реализации.

#
# Проверим, что модуль задачи активен
#
if (CModule::IncludeModule("tasks")) {
    #
    # Взять ID пользователя по адресу почты
    #
    $email = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']);
    $from=$email;
    $rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("email"=>$from));
    if ($oUser = $rsUser->Fetch())
    $id_created="1";
    $id_created = $oUser["ID"];
    #
    # Добавим задачи этим людям. Первый - исполнитель, остальные - соисполнители.
    #
    $arr_to=explode(";","additional_user_not_listed_here@gmail.com");
    foreach ($arr_to as $to)    {
        if (empty($to)) continue;
        $rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("email"=>$to));
        if ($oUser = $rsUser->Fetch())
        $arr_responsible[] = $oUser["ID"];
    }
    #
    # Заполнить массив аргументов для создания задачи
    #
    $arFields = Array(  
        "TITLE" => "Bitrix24-Support: ".$arMessageFields['SUBJECT'],
        "DESCRIPTION" => htmlspecialcharsBack(TxtToHTML($email."\n".$arMessageFields['BODY'],true,0,"Y","N","Y","Y")),
        "RESPONSIBLE_ID" => $arr_responsible[0],
        "STATUS"=>2,
        "CREATED_BY" => $id_created  );
    #
    # Создать задачу
    #
    $obTask = new CTasks;
    $ID = $obTask->Add($arFields);
    #
    # Список соиссполнителей берем из ответственных
    # Добавим соисполнителей в задачу
    #
    $arr_accomp = array_splice($arr_responsible, 1, (count($arr_responsible)-1));
    #
    # Или вручную назначим исполнителя по UserID
    #
    # $arr_accomp = Array ( 59);
    #
    CTasks::AddAccomplices($ID, $arr_accomp);
    #
    # Список наблюдателей
    # Добавить наблюдателей в задачу
    # То же самое, что с исполнителем
    $arr_auditors= Array ( 6 );
    CTasks::AddAuditors($ID,$arr_auditors);

    #
    #Сохраняем вложения
    #
    $dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID']));
    while ($dbr_attach_arr = $dbr_attach->GetNext()) {
        if ($dbr_attach_arr["FILE_NAME"]=='1.tmp' ||
            preg_match_all('/\\.(?:exe|html|phtml|pl|js|htm|py|php|php4|php3|phtml|shtml)$/i', $dbr_attach_arr["FILE_NAME"], $p_matches, PREG_PATTERN_ORDER))
            continue;
        $attach_id = $dbr_attach_arr["ID"];
        $dbr = CMailAttachment::GetByID($attach_id);
        if($dbr_arr = $dbr->Fetch()) {
            $fname =  $_SERVER['DOCUMENT_ROOT']."/upload/from_mail/".$dbr_attach_arr["FILE_NAME"];
            $handle = fopen($fname, 'wb');
            fwrite($handle, $dbr_arr["FILE_DATA"]);
            fclose($handle);
            $arFile = CFile::MakeFileArray($fname);
            $arFile["old_file"] = "";
            $arFile["del"] = "Y";
            $arFile["MODULE_ID"] = "tasks";
            $storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($id_created);
            $folder = $storage->getFolderForUploadedFiles();
            $file = $folder->uploadFile($arFile, array(
                'NAME' => $arFile["name"],
                'CREATED_BY' => $id_created
                ), array(), true);
            $FILE_ID = $file->getId();
            $oTaskItem = new CTaskItem($ID, $id_created);
        $rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => Array("n$FILE_ID")));
        }
    }
}
#
# Источники информации:
#
# https://dev.1c-bitrix.ru/support/forum/forum23/topic89021/
# https://pai-bx.com/wiki/1c-bitrix/44-kp-create-task-from-email/

Комментариев нет:

Отправить комментарий