- Модуль: lists
- Путь к файлу: ~/bitrix/modules/lists/lib/entity/element.php
- Класс: BitrixListsEntityElement
- Вызов: Element::startBp
private function startBp(int $elementId, int $execType, $changedElementFields = []): void
{
$documentType = BizprocDocument::generateDocumentComplexType(
$this->params["IBLOCK_TYPE_ID"],
$this->iblockId
);
$documentId = BizProcDocument::getDocumentComplexId(
$this->params["IBLOCK_TYPE_ID"],
$elementId
);
$documentStates = CBPWorkflowTemplateLoader::getDocumentTypeStates(
$documentType,
$execType
);
if (is_array($documentStates) && !empty($documentStates))
{
global $USER;
$userId = $USER->getID();
$currentUserGroups = $USER->getUserGroupArray();
if ($this->params["CREATED_BY"] == $userId)
{
$currentUserGroups[] = "author";
}
if ($execType === CBPDocumentEventType::Create)
{
$canWrite = CBPDocument::canUserOperateDocumentType(
CBPCanUserOperateOperation::WriteDocument,
$userId,
$documentType,
[
"AllUserGroups" => $currentUserGroups,
"DocumentStates" => $documentStates
]
);
}
else
{
$canWrite = CBPDocument::canUserOperateDocument(
CBPCanUserOperateOperation::WriteDocument,
$userId,
$documentId,
[
"AllUserGroups" => $currentUserGroups,
"DocumentStates" => $documentStates
]
);
}
if (!$canWrite)
{
$this->errorCollection->setError(
new Error("You do not have enough permissions to edit this record in its current bizproc state")
);
return;
}
$errors = [];
foreach ($documentStates as $documentState)
{
$parameters = CBPDocument::startWorkflowParametersValidate(
$documentState["TEMPLATE_ID"],
$documentState["TEMPLATE_PARAMETERS"],
$documentType,
$errors
);
CBPDocument::startWorkflow(
$documentState["TEMPLATE_ID"],
BizProcDocument::getDocumentComplexId($this->params["IBLOCK_TYPE_ID"], $elementId),
array_merge(
$parameters,
[
CBPDocument::PARAM_TAGRET_USER => "user_" . intval($userId),
CBPDocument::PARAM_MODIFIED_DOCUMENT_FIELDS => $changedElementFields,
]
),
$errors
);
}
foreach($errors as $message)
{
$this->errorCollection->setError(new Error($message));
}
}
}