%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/activities/bitrix/requestinformationactivity/ |
| Current File : /home/bitrix/www/bitrix/activities/bitrix/requestinformationactivity/requestinformationactivity.php |
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
class CBPRequestInformationActivity
extends CBPActivity
implements IBPEventActivity, IBPActivityExternalEventListener
{
const ACTIVITY = 'RequestInformationActivity';
const CONTROLS_PREFIX = 'bpriact_';
private $taskId = 0;
private $taskUsers = array();
private $subscriptionId = 0;
private $isInEventActivityMode = false;
private $taskStatus = false;
public function __construct($name)
{
parent::__construct($name);
$this->arProperties = array(
"Title" => "",
"Users" => null,
"Name" => null,
"Description" => null,
"Parameters" => null,
"OverdueDate" => null,
"RequestedInformation" => null,
"ResponcedInformation" => null,
"TaskId" => 0,
"Comments" => "",
"TaskButtonMessage" => "",
"CommentLabelMessage" => "",
"ShowComment" => "Y",
'CommentRequired' => 'N',
"StatusMessage" => "",
"SetStatusMessage" => "Y",
"AccessControl" => "N",
"InfoUser" => null,
"TimeoutDuration" => 0,
"TimeoutDurationType" => "s",
"IsTimeout" => 0,
"Changes" => array(),
'DelegationType' => 0,
);
$this->SetPropertiesTypes(array(
'TaskId' => ['Type' => 'int'],
'Comments' => array(
'Type' => 'string'
),
'InfoUser' => array(
'Type' => 'user'
),
'IsTimeout' => array(
'Type' => 'int',
),
'Changes' => array(
'Type' => 'string',
'Multiple' => true
),
));
}
protected function ReInitialize()
{
parent::ReInitialize();
$this->TaskId = 0;
$this->Comments = '';
$this->InfoUser = null;
$this->IsTimeout = 0;
$this->Changes = array();
}
public function Execute()
{
if ($this->isInEventActivityMode)
return CBPActivityExecutionStatus::Closed;
$this->Subscribe($this);
$this->isInEventActivityMode = false;
return CBPActivityExecutionStatus::Executing;
}
public function Subscribe(IBPActivityExternalEventListener $eventHandler)
{
if ($eventHandler == null)
throw new Exception("eventHandler");
$this->isInEventActivityMode = true;
$arUsersTmp = $this->Users;
if (!is_array($arUsersTmp))
$arUsersTmp = array($arUsersTmp);
$this->WriteToTrackingService(str_replace("#VAL#", "{=user:".implode("}, {=user:", $arUsersTmp)."}", GetMessage("BPRIA_ACT_TRACK1")));
$rootActivity = $this->GetRootActivity();
$documentId = $rootActivity->GetDocumentId();
$arUsers = CBPHelper::ExtractUsers($arUsersTmp, $documentId, false);
$arParameters = $this->Parameters;
if (!is_array($arParameters))
$arParameters = array($arParameters);
$runtime = CBPRuntime::GetRuntime();
$documentService = $runtime->GetService("DocumentService");
$arParameters["DOCUMENT_ID"] = $documentId;
$arParameters["DOCUMENT_URL"] = $documentService->GetDocumentAdminPage($documentId);
$arParameters["DOCUMENT_TYPE"] = $this->GetDocumentType();
$arParameters["FIELD_TYPES"] = $documentService->GetDocumentFieldTypes($arParameters["DOCUMENT_TYPE"]);
$arParameters["REQUEST"] = array();
$arParameters["TaskButtonMessage"] = $this->IsPropertyExists("TaskButtonMessage") ? $this->TaskButtonMessage : GetMessage("BPRIA_ACT_BUTTON1");
if (strlen($arParameters["TaskButtonMessage"]) <= 0)
$arParameters["TaskButtonMessage"] = GetMessage("BPRIA_ACT_BUTTON1");
$arParameters["CommentLabelMessage"] = $this->IsPropertyExists("CommentLabelMessage") ? $this->CommentLabelMessage : GetMessage("BPRIA_ACT_COMMENT");
if (strlen($arParameters["CommentLabelMessage"]) <= 0)
$arParameters["CommentLabelMessage"] = GetMessage("BPRIA_ACT_COMMENT");
$arParameters["ShowComment"] = $this->IsPropertyExists("ShowComment") ? $this->ShowComment : "Y";
if ($arParameters["ShowComment"] != "Y" && $arParameters["ShowComment"] != "N")
$arParameters["ShowComment"] = "Y";
$arParameters["CommentRequired"] = $this->IsPropertyExists("CommentRequired") ? $this->CommentRequired : "N";
$arParameters["AccessControl"] = $this->IsPropertyExists("AccessControl") && $this->AccessControl == 'Y' ? 'Y' : 'N';
$requestedInformation = $this->RequestedInformation;
if ($requestedInformation && is_array($requestedInformation) && count($requestedInformation) > 0)
{
foreach ($requestedInformation as $v)
{
if (CBPHelper::isEmptyValue($v['Default']))
{
$varValue = $this->GetVariable($v['Name']);
if (!CBPDocument::IsExpression($varValue))
{
$v['Default'] = $varValue;
}
}
$arParameters["REQUEST"][] = $v;
}
}
$overdueDate = $this->OverdueDate;
$timeoutDuration = $this->CalculateTimeoutDuration();
if ($timeoutDuration > 0)
{
$overdueDate = ConvertTimeStamp(time() + max($timeoutDuration, CBPSchedulerService::getDelayMinLimit()), "FULL");
}
/** @var CBPTaskService $taskService */
$taskService = $this->workflow->GetService("TaskService");
$this->taskId = $taskService->CreateTask(
array(
"USERS" => $arUsers,
"WORKFLOW_ID" => $this->GetWorkflowInstanceId(),
"ACTIVITY" => static::ACTIVITY,
"ACTIVITY_NAME" => $this->name,
"OVERDUE_DATE" => $overdueDate,
"NAME" => $this->Name,
"DESCRIPTION" => $this->Description,
"PARAMETERS" => $arParameters,
'DELEGATION_TYPE' => (int)$this->DelegationType,
'DOCUMENT_NAME' => $documentService->GetDocumentName($documentId)
)
);
$this->TaskId = $this->taskId;
$this->taskUsers = $arUsers;
if (!$this->IsPropertyExists("SetStatusMessage") || $this->SetStatusMessage == "Y")
{
$message = ($this->IsPropertyExists("StatusMessage") && strlen($this->StatusMessage) > 0) ? $this->StatusMessage : GetMessage("BPRIA_ACT_INFO");
$this->SetStatusTitle($message);
}
if ($timeoutDuration > 0)
{
/** @var CBPSchedulerService $schedulerService */
$schedulerService = $this->workflow->GetService("SchedulerService");
$this->subscriptionId = $schedulerService->SubscribeOnTime($this->workflow->GetInstanceId(), $this->name, time() + $timeoutDuration);
}
$this->workflow->AddEventHandler($this->name, $eventHandler);
}
public function Unsubscribe(IBPActivityExternalEventListener $eventHandler)
{
if ($eventHandler == null)
throw new Exception("eventHandler");
$taskService = $this->workflow->GetService("TaskService");
if ($this->taskStatus === false)
{
$taskService->DeleteTask($this->taskId);
}
else
{
$taskService->Update($this->taskId, array(
'STATUS' => $this->taskStatus
));
}
$timeoutDuration = $this->CalculateTimeoutDuration();
if ($timeoutDuration > 0)
{
$schedulerService = $this->workflow->GetService("SchedulerService");
$schedulerService->UnSubscribeOnTime($this->subscriptionId);
}
$this->workflow->RemoveEventHandler($this->name, $eventHandler);
$this->taskId = 0;
$this->taskUsers = array();
$this->taskStatus = false;
$this->subscriptionId = 0;
}
public function HandleFault(Exception $exception)
{
if ($exception == null)
throw new Exception("exception");
$status = $this->Cancel();
if ($status == CBPActivityExecutionStatus::Canceling)
return CBPActivityExecutionStatus::Faulting;
return $status;
}
public function Cancel()
{
if (!$this->isInEventActivityMode && $this->taskId > 0)
$this->Unsubscribe($this);
return CBPActivityExecutionStatus::Closed;
}
public function OnExternalEvent($eventParameters = array())
{
if ($this->executionStatus == CBPActivityExecutionStatus::Closed)
return;
$timeoutDuration = $this->CalculateTimeoutDuration();
if ($timeoutDuration > 0)
{
if (array_key_exists("SchedulerService", $eventParameters) && $eventParameters["SchedulerService"] == "OnAgent")
{
$this->IsTimeout = 1;
$this->taskStatus = CBPTaskStatus::Timeout;
$this->Unsubscribe($this);
$this->workflow->CloseActivity($this);
return;
}
}
if (!array_key_exists("USER_ID", $eventParameters) || intval($eventParameters["USER_ID"]) <= 0)
return;
if (empty($eventParameters["REAL_USER_ID"]))
$eventParameters["REAL_USER_ID"] = $eventParameters["USER_ID"];
$rootActivity = $this->GetRootActivity();
$arUsers = $this->taskUsers;
if (empty($arUsers)) //compatibility
$arUsers = CBPHelper::ExtractUsers($this->Users, $this->GetDocumentId(), false);
$eventParameters["USER_ID"] = intval($eventParameters["USER_ID"]);
$eventParameters["REAL_USER_ID"] = intval($eventParameters["REAL_USER_ID"]);
if (!in_array($eventParameters["USER_ID"], $arUsers))
return;
$this->Comments = $eventParameters["COMMENT"];
$this->Changes = $this->findRequestChanges($this->RequestedInformation, $eventParameters["RESPONCE"]);
if ($this->IsPropertyExists("InfoUser"))
$this->InfoUser = "user_".$eventParameters["REAL_USER_ID"];
$taskService = $this->workflow->GetService("TaskService");
$taskService->MarkCompleted($this->taskId, $eventParameters["REAL_USER_ID"], CBPTaskUserStatus::Ok);
$this->WriteToTrackingService(
str_replace(
array("#PERSON#", "#COMMENT#"),
array("{=user:user_".$eventParameters["REAL_USER_ID"]."}", (strlen($eventParameters["COMMENT"]) > 0 ? ": ".$eventParameters["COMMENT"] : "")),
GetMessage("BPRIA_ACT_APPROVE_TRACK")
),
$eventParameters["REAL_USER_ID"]
);
$this->ResponcedInformation = $eventParameters["RESPONCE"];
$rootActivity->SetVariables($eventParameters["RESPONCE"]);
$this->taskStatus = CBPTaskStatus::CompleteOk;
$this->Unsubscribe($this);
$this->workflow->CloseActivity($this);
}
protected function OnEvent(CBPActivity $sender)
{
$sender->RemoveStatusChangeHandler(self::ClosedEvent, $this);
$this->workflow->CloseActivity($this);
}
public static function ShowTaskForm($arTask, $userId, $userName = "", $arRequest = null)
{
$form = '';
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$documentService = $runtime->GetService("DocumentService");
if ($arTask["PARAMETERS"] && is_array($arTask["PARAMETERS"]) && count($arTask["PARAMETERS"]) > 0
&& $arTask["PARAMETERS"]["REQUEST"] && is_array($arTask["PARAMETERS"]["REQUEST"]) && count($arTask["PARAMETERS"]["REQUEST"]) > 0)
{
foreach ($arTask["PARAMETERS"]["REQUEST"] as $parameter)
{
if (strlen($parameter["Name"]) <= 0)
continue;
$form .=
'<tr><td valign="top" width="30%" align="right" class="bizproc-field-name">'.($parameter["Required"] ? '<span class="required">*</span><span class="adm-required-field">'.$parameter["Title"].':</span>' : $parameter["Title"].":")
.($parameter["Description"]? '<br/><span class="bizproc-field-description">'.$parameter["Description"].'</span>' : '')
.'</td>'.
'<td valign="top" width="70%" class="bizproc-field-value">';
if ($arRequest === null)
$realValue = $parameter["Default"];
else
$realValue = $arRequest[static::CONTROLS_PREFIX.$parameter["Name"]];
$form .= $documentService->GetFieldInputControl(
$arTask["PARAMETERS"]["DOCUMENT_TYPE"],
$parameter,
array("task_form1", static::CONTROLS_PREFIX.$parameter["Name"]),
$realValue,
false,
true
);
$form .= '</td></tr>';
}
}
if (!array_key_exists("ShowComment", $arTask["PARAMETERS"]) || ($arTask["PARAMETERS"]["ShowComment"] != "N"))
{
$required = '';
if (isset($arTask['PARAMETERS']['CommentRequired']) && $arTask['PARAMETERS']['CommentRequired'] == 'Y')
{
$required = '<span style="color: red">*</span>';
}
$commentText = $arRequest ? $arRequest['task_comment'] : '';
$form .=
'<tr><td valign="top" width="30%" align="right" class="bizproc-field-name">'
.(strlen($arTask["PARAMETERS"]["CommentLabelMessage"]) > 0 ? $arTask["PARAMETERS"]["CommentLabelMessage"] : GetMessage("BPRIA_ACT_COMMENT"))
.$required
.':</td>'.
'<td valign="top" width="70%" class="bizproc-field-value">'.
'<textarea rows="3" cols="50" name="task_comment">'.htmlspecialcharsbx($commentText).'</textarea>'.
'</td></tr>';
}
$buttons =
'<input type="submit" name="approve" value="'.(strlen($arTask["PARAMETERS"]["TaskButtonMessage"]) > 0 ? $arTask["PARAMETERS"]["TaskButtonMessage"] : GetMessage("BPRIA_ACT_BUTTON1")).'"/>';
return array($form, $buttons);
}
public static function getTaskControls($arTask)
{
return array(
'BUTTONS' => array(
array(
'TYPE' => 'submit',
'TARGET_USER_STATUS' => CBPTaskUserStatus::Ok,
'NAME' => 'approve',
'VALUE' => 'Y',
'TEXT' => strlen($arTask["PARAMETERS"]["TaskButtonMessage"]) > 0 ? $arTask["PARAMETERS"]["TaskButtonMessage"] : GetMessage("BPAA_ACT_BUTTON1")
)
)
);
}
protected static function getEventParameters($task, $request)
{
return array(
"COMMENT" => isset($request["task_comment"]) ? trim($request["task_comment"]) : '',
"RESPONCE" => static::getTaskResponse($task),
);
}
protected static function getTaskResponse($task)
{
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$documentService = $runtime->GetService("DocumentService");
$result = array();
if ($task["PARAMETERS"] && is_array($task["PARAMETERS"]) && count($task["PARAMETERS"]) > 0
&& $task["PARAMETERS"]["REQUEST"] && is_array($task["PARAMETERS"]["REQUEST"]) && count($task["PARAMETERS"]["REQUEST"]) > 0)
{
$request = $_REQUEST;
foreach ($_FILES as $k => $v)
{
if (array_key_exists("name", $v))
{
if (is_array($v["name"]))
{
$ks = array_keys($v["name"]);
if (!is_array($request[$k]))
$request[$k] = array();
for ($i = 0, $cnt = count($ks); $i < $cnt; $i++)
{
$ar = array();
foreach ($v as $k1 => $v1)
$ar[$k1] = $v1[$ks[$i]];
$request[$k][] = $ar;
}
}
else
{
$request[$k] = $v;
}
}
}
foreach ($task["PARAMETERS"]["REQUEST"] as $parameter)
{
$arErrorsTmp = array();
$result[$parameter["Name"]] = $documentService->GetFieldInputValue(
$task["PARAMETERS"]["DOCUMENT_TYPE"],
$parameter,
static::CONTROLS_PREFIX.$parameter["Name"],
$request,
$arErrorsTmp
);
if (count($arErrorsTmp) > 0)
{
$m = "";
foreach ($arErrorsTmp as $e)
$m .= $e["message"]."<br />";
throw new CBPArgumentException($m);
}
if (
CBPHelper::getBool($parameter['Required'])
&& CBPHelper::isEmptyValue($result[$parameter['Name']])
)
throw new CBPArgumentNullException($parameter["Name"], str_replace("#PARAM#", htmlspecialcharsbx($parameter["Title"]), GetMessage("BPRIA_ARGUMENT_NULL")));
}
}
return $result;
}
protected static function validateTaskEventParameters($arTask, $eventParameters)
{
if (
isset($arTask['PARAMETERS']['ShowComment'])
&& $arTask['PARAMETERS']['ShowComment'] === 'Y'
&& isset($arTask['PARAMETERS']['CommentRequired'])
&& empty($eventParameters['COMMENT'])
&& $arTask['PARAMETERS']['CommentRequired'] === 'Y'
)
{
$label = strlen($arTask["PARAMETERS"]["CommentLabelMessage"]) > 0 ? $arTask["PARAMETERS"]["CommentLabelMessage"] : GetMessage("BPAR_ACT_COMMENT");
throw new CBPArgumentNullException(
'task_comment',
GetMessage("BPRIA_ACT_COMMENT_ERROR", array(
'#COMMENT_LABEL#' => $label
))
);
}
return true;
}
public static function PostTaskForm($task, $userId, $request, &$errors, $userName = "", $realUserId = null)
{
$errors = array();
try
{
$userId = intval($userId);
if ($userId <= 0)
throw new CBPArgumentNullException("userId");
$arEventParameters = static::getEventParameters($task, $request);
$arEventParameters["USER_ID"]= $userId;
$arEventParameters["REAL_USER_ID"] = $realUserId;
$arEventParameters["USER_NAME"] = $userName;
static::validateTaskEventParameters($task, $arEventParameters);
CBPRuntime::SendExternalEvent($task["WORKFLOW_ID"], $task["ACTIVITY_NAME"], $arEventParameters);
return true;
}
catch (Exception $e)
{
$errors[] = array(
"code" => $e->getCode(),
"message" => $e->getMessage(),
"file" => $e->getFile()." [".$e->getLine()."]",
);
}
return false;
}
public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null)
{
$arErrors = array();
if (!array_key_exists("Users", $arTestProperties))
{
$bUsersFieldEmpty = true;
}
else
{
if (!is_array($arTestProperties["Users"]))
$arTestProperties["Users"] = array($arTestProperties["Users"]);
$bUsersFieldEmpty = true;
foreach ($arTestProperties["Users"] as $userId)
{
if (!is_array($userId) && (strlen(trim($userId)) > 0) || is_array($userId) && (count($userId) > 0))
{
$bUsersFieldEmpty = false;
break;
}
}
}
if ($bUsersFieldEmpty)
$arErrors[] = array("code" => "NotExist", "parameter" => "Users", "message" => GetMessage("BPRIA_ACT_PROP_EMPTY1"));
if (!array_key_exists("Name", $arTestProperties) || strlen($arTestProperties["Name"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "Name", "message" => GetMessage("BPRIA_ACT_PROP_EMPTY4"));
if (!array_key_exists("RequestedInformation", $arTestProperties) || !is_array($arTestProperties["RequestedInformation"]) || count($arTestProperties["RequestedInformation"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "RequestedInformation", "message" => GetMessage("BPRIA_ACT_PROP_EMPTY2"));
return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user));
}
private function findRequestChanges($properties, $values)
{
$result = array();
foreach ($properties as $key => $property)
{
$a = (array) $property['Default'];
$b = (array) (isset($values[$property['Name']]) ? $values[$property['Name']] : null);
if ($a != $b)
$result[$property['Name']] = $property['Title'];
}
return $result;
}
private function CalculateTimeoutDuration()
{
$timeoutDuration = ($this->IsPropertyExists("TimeoutDuration") ? $this->TimeoutDuration : 0);
$timeoutDurationType = ($this->IsPropertyExists("TimeoutDurationType") ? $this->TimeoutDurationType : "s");
$timeoutDurationType = strtolower($timeoutDurationType);
if (!in_array($timeoutDurationType, array("s", "d", "h", "m")))
$timeoutDurationType = "s";
$timeoutDuration = intval($timeoutDuration);
switch ($timeoutDurationType)
{
case 'd':
$timeoutDuration *= 3600 * 24;
break;
case 'h':
$timeoutDuration *= 3600;
break;
case 'm':
$timeoutDuration *= 60;
break;
default:
break;
}
return $timeoutDuration;
}
public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "", $popupWindow = null)
{
$runtime = CBPRuntime::GetRuntime();
$documentService = $runtime->GetService("DocumentService");
$arMap = array(
"Users" => "requested_users",
"OverdueDate" => "requested_overdue_date",
"Name" => "requested_name",
"Description" => "requested_description",
"Parameters" => "requested_parameters",
"RequestedInformation" => "requested_information",
"TaskButtonMessage" => "task_button_message",
"CommentLabelMessage" => "comment_label_message",
"ShowComment" => "show_comment",
'CommentRequired' => 'comment_required',
"StatusMessage" => "status_message",
"SetStatusMessage" => "set_status_message",
'AccessControl' => 'access_control',
"TimeoutDuration" => "timeout_duration",
"TimeoutDurationType" => "timeout_duration_type",
"DelegationType" => "delegation_type",
);
if (!is_array($arWorkflowParameters))
$arWorkflowParameters = array();
if (!is_array($arWorkflowVariables))
$arWorkflowVariables = array();
if (!is_array($arCurrentValues))
{
$arCurrentValues = array();
$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
if (is_array($arCurrentActivity["Properties"]))
{
foreach ($arMap as $k => $v)
{
if (array_key_exists($k, $arCurrentActivity["Properties"]))
{
if ($k == "Users")
$arCurrentValues[$arMap[$k]] = CBPHelper::UsersArrayToString($arCurrentActivity["Properties"][$k], $arWorkflowTemplate, $documentType);
else
$arCurrentValues[$arMap[$k]] = $arCurrentActivity["Properties"][$k];
}
else
{
$arCurrentValues[$arMap[$k]] = "";
}
}
}
else
{
foreach ($arMap as $k => $v)
$arCurrentValues[$arMap[$k]] = "";
}
}
$arFieldTypes = $documentService->GetDocumentFieldTypes($documentType);
unset($arFieldTypes['N:Sequence']);
$arDocumentFields = $documentService->GetDocumentFields($documentType);
$ar = array();
$j = -1;
if (array_key_exists("requested_information", $arCurrentValues) && is_array($arCurrentValues["requested_information"]))
{
for ($i = 0, $cnt = count($arCurrentValues["requested_information"]) + 1; $i < $cnt; $i++)
{
if (strlen($arCurrentValues["requested_information"][$i]["Name"]) <= 0)
continue;
$j++;
$ar[$j] = $arCurrentValues["requested_information"][$i];
$ar[$j]["Required"] = ($ar[$j]["Required"] ? "Y" : "N");
$ar[$j]["Multiple"] = ($ar[$j]["Multiple"] ? "Y" : "N");
}
}
$arCurrentValues["requested_information"] = $ar;
if (strlen($arCurrentValues['comment_label_message']) <= 0)
$arCurrentValues['comment_label_message'] = GetMessage("BPRIA_ACT_COMMENT");
if (strlen($arCurrentValues['task_button_message']) <= 0)
$arCurrentValues['task_button_message'] = GetMessage("BPRIA_ACT_BUTTON1");
if (strlen($arCurrentValues['status_message']) <= 0)
$arCurrentValues['status_message'] = GetMessage("BPRIA_ACT_INFO");
if (strlen($arCurrentValues["timeout_duration_type"]) <= 0)
$arCurrentValues["timeout_duration_type"] = "s";
$javascriptFunctions = $documentService->GetJSFunctionsForFields($documentType, "objFields", $arDocumentFields, $arFieldTypes);
return $runtime->ExecuteResourceFile(
__FILE__,
"properties_dialog.php",
array(
"arCurrentValues" => $arCurrentValues,
"arDocumentFields" => $arDocumentFields,
"arFieldTypes" => $arFieldTypes,
"javascriptFunctions" => $javascriptFunctions,
"formName" => $formName,
"popupWindow" => &$popupWindow,
)
);
}
public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
{
$arErrors = array();
$runtime = CBPRuntime::GetRuntime();
$arMap = array(
"requested_users" => "Users",
"requested_overdue_date" => "OverdueDate",
"requested_name" => "Name",
"requested_description" => "Description",
"requested_parameters" => "Parameters",
"requested_information" => "RequestedInformation",
"task_button_message" => "TaskButtonMessage",
"comment_label_message" => "CommentLabelMessage",
"show_comment" => "ShowComment",
'comment_required' => 'CommentRequired',
"status_message" => "StatusMessage",
"set_status_message" => "SetStatusMessage",
'access_control' => 'AccessControl',
"timeout_duration" => "TimeoutDuration",
"timeout_duration_type" => "TimeoutDurationType",
"delegation_type" => "DelegationType",
);
$arProperties = array();
foreach ($arMap as $key => $value)
{
if ($key == "requested_users")
continue;
$arProperties[$value] = $arCurrentValues[$key];
}
$arProperties["Users"] = CBPHelper::UsersStringToArray($arCurrentValues["requested_users"], $documentType, $arErrors);
if (count($arErrors) > 0)
return false;
$ar = array();
$j = -1;
if (array_key_exists("RequestedInformation", $arProperties) && is_array($arProperties["RequestedInformation"]))
{
foreach ($arProperties["RequestedInformation"] as $arRI)
{
if (strlen($arRI["Name"]) <= 0)
continue;
$j++;
$ar[$j] = $arRI;
$ar[$j]["Required"] = ($arRI["Required"] == "Y");
$ar[$j]["Multiple"] = ($arRI["Multiple"] == "Y");
}
}
$arProperties["RequestedInformation"] = $ar;
$arErrors = self::ValidateProperties($arProperties, new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser));
if (count($arErrors) > 0)
return false;
$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
$arCurrentActivity["Properties"] = $arProperties;
if (is_array($arProperties["RequestedInformation"]))
{
foreach ($arProperties["RequestedInformation"] as $v)
{
$arWorkflowVariables[$v["Name"]] = $v;
$arWorkflowVariables[$v["Name"]]["Name"] = $v["Title"];
}
}
return true;
}
}