|
Добрый день! Возникли некоторые проблемы в написании правила для действия php после получения письма в модуль Почта. Задача состоит в том, что при получение письма на почтовый ящик, Битрикс запускает Бизнес-процесс с данными из письма От кого Код |
---|
$from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']); |
Тема письма Код |
---|
$arMessageFields['TITLE'] |
Тело письма Код |
---|
$arMessageFields['BODY'] |
Первая проблема, не могу сохранить вложение из письма Код |
---|
//добавляем к задаче вложения
$dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID']));
while ($dbr_attach_arr = $dbr_attach->GetNext()) {
$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";
//$fid[] = CFile::SaveFile($arFile, "tasks");
storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($USER_ID);
$folder = $storage->getFolderForUploadedFiles();
$file = $folder->uploadFile($arFile, array(
'NAME' => $arFile["name"],
'CREATED_BY' => $USER->GetID()
), array(), true);
$FILE_ID = $file->getId();
$oTaskItem = new CTaskItem($$ID, $USER->GetID());
$rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => Array("n$FILE_ID")));
}
}
//CTasks::AddFiles($ID, $fid);
|
из Статьи чуть изменил т.е. функционал CTasks::AddFiles($ID, $fid); устарел. Вторая проблема, не запускается бизнес-процесс, могу только добавить запись в инфоблок, как можно решить эту проблему? Код |
---|
if(
CModule::IncludeModule("bizproc")
&&
CModule::IncludeModule("iblock")
){
$arErrorsTmp = array();
$el = new CIBlockElement;
$PROP = array("FILES"=>);
$arLoadProductArray = Array(
"MODIFIED_BY" => $taskUser,
"IBLOCK_SECTION_ID" => false,
"IBLOCK_ID" => 77,
"PROPERTY_VALUES"=> $PROP,
"NAME" => $from.': Обработать письмо '.date('d.m.Y H:i:s'),
"ACTIVE" => "Y",
"PREVIEW_TEXT" => $arMessageFields['TITLE'].$arMessageFields['BODY'],
);
if($PRODUCT_ID = $el->Add($arLoadProductArray)){
$arWorkflowParameters = array('TaskID'=>$ID);
$wfId = CBPDocument::StartWorkflow(
107,
array("bizproc", "CBPVirtualDocument", $PRODUCT_ID),
array_merge($arWorkflowParameters, array("TargetUser" => "user_".$taskUser)),
$arErrorsTmp
);
|
Полный код Код |
---|
if (CModule::IncludeModule("tasks")) {
$from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']);
$USER_GROUP = array(15);
$UFilter = array("ACTIVE" => "Y","GROUPS_ID" => $USER_GROUP);
$sort_by = "ID";
$sort_ord = "ASC";
$dbUsers = CUser::GetList($sort_by, $sort_ord, $UFilter);
while ($arUser = $dbUsers->Fetch()) {
$USERS_for_TASK[] = $arUser["ID"];
}
$filesArr = Array();
$dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID']));
while ($dbr_attach_arr = $dbr_attach->GetNext()) {
$attach_id = $dbr_attach_arr["ID"];
$dbr = CMailAttachment::GetByID($attach_id);
}
if(count($USERS_for_TASK)>0){
$arFields = Array(
"TITLE" => $from.': Обработать письмо от '.date('d.m.Y H:i:s') ,
"DESCRIPTION" => $arMessageFields['TITLE'].$arMessageFields['BODY'],
"RESPONSIBLE_ID" => $USERS_for_TASK[0],
"STATUS" => 2,
"CREATED_BY" => $USERS_for_TASK[0]
);
$obTask = new CTasks;
$ID = $obTask->Add($arFields);
$success = ($ID > 0);
if ($success) {
if (count($USERS_for_TASK) > 1) {
$Accomplices = $USERS_for_TASK;
unset($Accomplices[0]);
CTasks::AddAccomplices($ID, $Accomplices);
}
//добавляем к задаче вложения
$dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID']));
while ($dbr_attach_arr = $dbr_attach->GetNext()) {
$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";
//$fid[] = CFile::SaveFile($arFile, "tasks");
storage = Bitrix\Disk\Driver::getInstance()->getStorageByUserId($USER_ID);
$folder = $storage->getFolderForUploadedFiles();
$file = $folder->uploadFile($arFile, array(
'NAME' => $arFile["name"],
'CREATED_BY' => $USER->GetID()
), array(), true);
$FILE_ID = $file->getId();
$oTaskItem = new CTaskItem($$ID, $USER->GetID());
$rs = $oTaskItem->Update(array("UF_TASK_WEBDAV_FILES" => Array("n$FILE_ID")));
}
}
//CTasks::AddFiles($ID, $fid);
if(CModule::IncludeModule("im")){
foreach ($USERS_for_TASK as $taskUser) {
$TaskLink = $_SERVER['HTTP_HOST'].'/company/personal/user/' . $taskUser . '/tasks/task/view/' . $ID . '/';
$arMessageFields = array(
"TO_USER_ID" => $taskUser, // получатель
"FROM_USER_ID" => 0, // отправитель (может быть >0)
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления
"NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления
"NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр
// текст уведомления на сайте (доступен html и бб-коды)
"NOTIFY_MESSAGE" => '[b]Внимание:[/b] Пришла новая претензия <a href="' . $TaskLink . '">Перейти</a>',
);
CIMNotify::Add($arMessageFields);
}
}
if(
CModule::IncludeModule("bizproc")
&&
CModule::IncludeModule("iblock")
){
$arErrorsTmp = array();
$el = new CIBlockElement;
$PROP = array("FILES"=>);
$arLoadProductArray = Array(
"MODIFIED_BY" => $taskUser,
"IBLOCK_SECTION_ID" => false,
"IBLOCK_ID" => 77,
"PROPERTY_VALUES"=> $PROP,
"NAME" => $from.': Обработать письмо '.date('d.m.Y H:i:s'),
"ACTIVE" => "Y",
"PREVIEW_TEXT" => $arMessageFields['TITLE'].$arMessageFields['BODY'],
);
if($PRODUCT_ID = $el->Add($arLoadProductArray)){
$arWorkflowParameters = array('TaskID'=>$ID);
$wfId = CBPDocument::StartWorkflow(
107,
array("bizproc", "CBPVirtualDocument", $PRODUCT_ID),
array_merge($arWorkflowParameters, array("TargetUser" => "user_".$taskUser)),
$arErrorsTmp
);
} else {
$arErrorsTmp[] = "Error: ".$el->LAST_ERROR;
}
if (count($arErrorsTmp) > 0)
{
foreach ($arErrorsTmp as $e)
$errorMessage .= "[".$e["code"]."] ".$e["message"]."";
$arMessageFields = array(
"TO_USER_ID" => $taskUser, // получатель
"FROM_USER_ID" => 0, // отправитель (может быть >0)
"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM, // тип уведомления
"NOTIFY_MODULE" => "tasks", // модуль запросивший отправку уведомления
"NOTIFY_TAG" => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр
// текст уведомления на сайте (доступен html и бб-коды)
"NOTIFY_MESSAGE" => 'ERROR: '.$errorMessage,
);
CIMNotify::Add($arMessageFields);
}
}
}
}
}
|
|