3namespace Bitrix\Bizproc\Api\Service;
5use Bitrix\Bizproc\FieldType;
6use Bitrix\Main\Config\Option;
7use Bitrix\Main\Localization\Loc;
8use Bitrix\Bizproc\Api\Response\Error;
9use Bitrix\Bizproc\Api\Enum\ErrorMessage;
10use Bitrix\Bizproc\Api\Data\WorkflowTemplateService\WorkflowTemplate;
11use Bitrix\Bizproc\Workflow\Template\WorkflowTemplateDraftTable;
12use Bitrix\Bizproc\Api\Request\WorkflowTemplateService as WorkflowTemplateRequest;
13use Bitrix\Bizproc\Api\Response\WorkflowTemplateService as WorkflowTemplateResponse;
17 private const TRACK_ON_INTERVAL = 7 * 86400;
27 WorkflowTemplateRequest\PrepareParametersRequest
$request
28 ): WorkflowTemplateResponse\PrepareParametersResponse
32 \CBPHelper::parseDocumentId(
$request->complexDocumentType);
36 return WorkflowTemplateResponse\PrepareParametersResponse::createError(
42 foreach (
$request->templateParameters as
$key => $property)
48 if (!empty($value) && isset($value[
'name']))
50 $parameters[
$key] = $value;
51 if (is_array($value[
'name']))
53 $parameters[
$key] = [];
54 \CFile::ConvertFilesToPost($value, $parameters[
$key]);
61 $parameters[
$key] = $value;
66 (
new WorkflowTemplateResponse\PrepareParametersResponse())
67 ->setRawParameters($parameters)
69 \CBPWorkflowTemplateLoader::checkWorkflowParameters(
87 WorkflowTemplateRequest\SetConstantsRequest
$request
88 ): WorkflowTemplateResponse\SetConstantsResponse
92 return WorkflowTemplateResponse\SetConstantsResponse::createError(
new Error(
'negative template id'));
97 return WorkflowTemplateResponse\SetConstantsResponse::createError(
new Error(
'negative user id'));
102 \CBPHelper::parseDocumentId(
$request->complexDocumentType);
110 !\CBPDocument::canUserOperateDocumentType(
117 return WorkflowTemplateResponse\SetConstantsResponse::createError(
new Error(
'access denied'));
120 $constants = \CBPWorkflowTemplateLoader::getTemplateConstants(
$request->templateId);
121 if (!is_array($constants) || !$constants)
123 return WorkflowTemplateResponse\SetConstantsResponse::createOk();
127 new WorkflowTemplateRequest\PrepareParametersRequest(
128 templateParameters: $constants,
129 requestParameters:
$request->requestConstants,
130 complexDocumentType:
$request->complexDocumentType,
134 if (!$preparedResult->isSuccess())
136 return (
new WorkflowTemplateResponse\SetConstantsResponse())->addErrors($preparedResult->getErrors());
139 $preparedConstants = $preparedResult->getParameters();
140 foreach ($constants as
$key => $constant)
142 $constants[
$key][
'Default'] = $preparedConstants[
$key] ??
null;
147 \CBPWorkflowTemplateLoader::update(
$request->templateId, [
'CONSTANTS' => $constants]);
151 return WorkflowTemplateResponse\SetConstantsResponse::createError(
152 new Error(
'something go wrong, try again')
156 return WorkflowTemplateResponse\SetConstantsResponse::createOk();
160 WorkflowTemplateRequest\PrepareStartParametersRequest
$request
161 ): WorkflowTemplateResponse\PrepareStartParametersResponse
165 return WorkflowTemplateResponse\PrepareStartParametersResponse::createError(
166 new Error(
'negative template id')
172 return WorkflowTemplateResponse\PrepareStartParametersResponse::createError(
173 new Error(
'negative target user id')
179 \CBPHelper::parseDocumentId(
$request->complexDocumentType);
187 \CBPWorkflowTemplateLoader::getList(
191 'DOCUMENT_TYPE' =>
$request->complexDocumentType,
203 return WorkflowTemplateResponse\PrepareStartParametersResponse::createError(
204 new Error(
'template not found')
208 $workflowParameters = [];
212 new WorkflowTemplateRequest\PrepareParametersRequest(
219 if (!$preparedParameters->isSuccess())
221 return (
new WorkflowTemplateResponse\PrepareStartParametersResponse())->addErrors(
222 $preparedParameters->getErrors()
226 $workflowParameters = $preparedParameters->getParameters();
229 $workflowParameters[\CBPDocument::PARAM_TAGRET_USER] =
'user_' .
$request->targetUserId;
230 $workflowParameters[\CBPDocument::PARAM_DOCUMENT_EVENT_TYPE] =
$request->eventType;
232 return (
new WorkflowTemplateResponse\PrepareStartParametersResponse())->setParameters($workflowParameters);
236 WorkflowTemplateRequest\SaveTemplateRequest
$request
237 ): WorkflowTemplateResponse\SaveTemplateResponse
239 $response =
new WorkflowTemplateResponse\SaveTemplateResponse();
241 $documentType = $this->getDocumentType(
$request->parameters);
242 if (is_null($documentType))
244 $errorMsg = ErrorMessage::INVALID_PARAM_ARG->getError([
245 '#PARAM#' =>
'DOCUMENT_TYPE',
246 '#VALUE#' => $documentType
253 if (
$request->checkAccess && !$this->accessService->canCreateWorkflow($documentType,
$request->user->getId()))
256 ErrorMessage::ACCESS_DENIED->getError()
278 catch (\Throwable $exception)
280 if (method_exists($exception,
'getErrors'))
282 $errors = $exception->getErrors();
291 $response->addError(
new Error($exception->getMessage(), $exception->getCode()));
300 if (isset(
$fields[
'TRACK_ON']))
303 if (
$fields[
'TRACK_ON'] ===
'Y')
305 $trackOn = (int)Option::get(
'bizproc',
$optionName, 0);
306 if ((time() - self::TRACK_ON_INTERVAL) > $trackOn)
313 Option::delete(
'bizproc', [
'name' =>
$optionName]);
319 WorkflowTemplateRequest\ImportTemplateRequest
$request
320 ): WorkflowTemplateResponse\ImportTemplateResponse
322 $response =
new WorkflowTemplateResponse\ImportTemplateResponse();
324 $documentType = $this->getDocumentType(
$request->parameters);
325 if (is_null($documentType))
327 $errorMsg = ErrorMessage::INVALID_PARAM_ARG->getError([
328 '#PARAM#' =>
'DOCUMENT_TYPE',
329 '#VALUE#' => $documentType
336 if (
$request->checkAccess && !$this->accessService->canCreateWorkflow($documentType,
$request->user->getId()))
339 ErrorMessage::IMPORT_ACCESS_DENIED->getError()
347 if (is_uploaded_file($file[
'tmp_name']))
349 $fileHandle = fopen($file[
'tmp_name'],
'rb');
350 $data = fread($fileHandle, filesize($file[
'tmp_name']));
355 $newTemplateId = \CBPWorkflowTemplateLoader::ImportTemplate(
364 catch (\Throwable $exception)
366 $response->addError(
new Error(preg_replace(
"#[\r\n]+#",
" ", $exception->getMessage())));
370 if ($newTemplateId <= 0)
372 $response->addError(
new Error(Loc::getMessage(
'BIZPROC_LIB_API_WORKFLOW_TEMPLATE_SERVICE_IMPORT_ERROR')));
375 $response->setTemplateId($newTemplateId);
380 private function getDocumentType(
array $parameters): ?
array
382 if (!isset($parameters[
'MODULE_ID'], $parameters[
'ENTITY'], $parameters[
'DOCUMENT_TYPE']))
388 $parameters[
'MODULE_ID'],
389 $parameters[
'ENTITY'],
390 $parameters[
'DOCUMENT_TYPE']
395 WorkflowTemplateRequest\ExportTemplateRequest
$request)
396 : WorkflowTemplateResponse\ExportTemplateResponse
398 $response =
new WorkflowTemplateResponse\ExportTemplateResponse();
400 $documentType = $this->getDocumentType(
$request->parameters);
401 if (is_null($documentType))
403 $errorMsg = ErrorMessage::INVALID_PARAM_ARG->getError([
404 '#PARAM#' =>
'DOCUMENT_TYPE',
405 '#VALUE#' => $documentType
412 if (
$request->checkAccess && !$this->accessService->canCreateWorkflow($documentType,
$request->user->getId()))
415 ErrorMessage::EXPORT_ACCESS_DENIED->getError()
421 $bp = \CBPWorkflowTemplateLoader::ExportTemplate(
$request->id);
430 $response->setTemplateData((
string) $bp);
436 WorkflowTemplateRequest\SaveTemplateRequest
$request
437 ): WorkflowTemplateResponse\SaveTemplateDraftResponse
439 $response =
new WorkflowTemplateResponse\SaveTemplateDraftResponse();
441 $documentType = $this->getDocumentType(
$request->parameters);
442 if (is_null($documentType))
444 $errorMsg = ErrorMessage::INVALID_PARAM_ARG->getError([
445 '#PARAM#' =>
'DOCUMENT_TYPE',
446 '#VALUE#' => $documentType
453 if (
$request->checkAccess && !$this->accessService->canCreateWorkflow($documentType,
$request->user->getId()))
456 ErrorMessage::ACCESS_DENIED->getError()
468 $tpl = \Bitrix\Bizproc\Workflow\Template\Entity\WorkflowTemplateTable::createObject();
479 foreach ($availableFields as $field)
483 $tpl->set($field,
$fields[$field]);
490 $tpl->setDocumentType($documentType);
493 'MODULE_ID' => $tpl->getModuleId(),
494 'ENTITY' => $tpl->getEntity(),
495 'DOCUMENT_TYPE' => $tpl->getDocumentType(),
497 'TEMPLATE_DATA' => $tpl->collectValues(),
498 'USER_ID' =>
$request->user->getId(),
511 catch (\Throwable $exception)
513 $response->addError(
new Error($exception->getMessage(), $exception->getCode()));
520 WorkflowTemplateRequest\LoadTemplateDraftRequest
$request
521 ): WorkflowTemplateResponse\LoadTemplateResponse
523 $response =
new WorkflowTemplateResponse\LoadTemplateResponse();
537 $response->addError(ErrorMessage::GET_DATA_ERROR->getError());
540 $response->setData($draft->collectValues());
542 catch (\Throwable $exception)
544 $response->addError(
new Error($exception->getMessage(), $exception->getCode()));
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
static createFromRequest(SaveTemplateRequest $request)
exportTemplate(WorkflowTemplateRequest\ExportTemplateRequest $request)
loadTemplateDraft(WorkflowTemplateRequest\LoadTemplateDraftRequest $request)
prepareStartParameters(WorkflowTemplateRequest\PrepareStartParametersRequest $request)
setConstants(WorkflowTemplateRequest\SetConstantsRequest $request)
importTemplate(WorkflowTemplateRequest\ImportTemplateRequest $request)
prepareParameters(WorkflowTemplateRequest\PrepareParametersRequest $request)
saveTemplateDraft(WorkflowTemplateRequest\SaveTemplateRequest $request)
__construct(?WorkflowAccessService $accessService=null)
saveTemplate(WorkflowTemplateRequest\SaveTemplateRequest $request)
static createFromThrowable(Throwable $exception)
static getByPrimary($primary, array $parameters=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(empty($signedUserToken)) $key