Your IP : 3.22.185.143
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
class CBPTaskActivity
extends CBPActivity
{
public function __construct($name)
{
parent::__construct($name);
$this->arProperties = array(
"Title" => "",
"TaskType" => "",
"TaskOwnerId" => "",
"TaskCreatedBy" => "",
"TaskActiveFrom" => "",
"TaskActiveTo" => "",
"TaskName" => "",
"TaskDetailText" => "",
"TaskPriority" => "",
"TaskAssignedTo" => "",
"TaskTrackers" => "",
"TaskForumId" => "",
);
}
private function __GetUsers($arUsersDraft)
{
$arUsers = array();
$rootActivity = $this->GetRootActivity();
$documentId = $rootActivity->GetDocumentId();
$documentService = $this->workflow->GetService("DocumentService");
$arUsersDraft = (is_array($arUsersDraft) ? $arUsersDraft : array($arUsersDraft));
$l = strlen("user_");
foreach ($arUsersDraft as $user)
{
if (substr($user, 0, $l) == "user_")
{
$user = intval(substr($user, $l));
if ($user > 0)
$arUsers[] = $user;
}
else
{
$arDSUsers = $documentService->GetUsersFromUserGroup($user, $documentId);
foreach ($arDSUsers as $v)
{
$user = intval($v);
if ($user > 0)
$arUsers[] = $user;
}
}
}
return $arUsers;
}
public function Execute()
{
if (!CModule::IncludeModule("intranet"))
return CBPActivityExecutionStatus::Closed;
$iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0);
if ($iblockId <= 0)
return CBPActivityExecutionStatus::Closed;
$parentSectionId = 0;
$dbSectionsList = CIBlockSection::GetList(
array(),
array(
"GLOBAL_ACTIVE" => "Y",
"XML_ID" => (($this->TaskType == "group") ? $this->TaskOwnerId : "users_tasks"),
"IBLOCK_ID" => $iblockId,
"SECTION_ID" => 0
),
false
);
if ($arSection = $dbSectionsList->GetNext())
$parentSectionId = $arSection["ID"];
if ($parentSectionId <= 0)
{
$dbSectionsList = CIBlockSection::GetList(
array(),
array(
"GLOBAL_ACTIVE" => "Y",
"XML_ID" => "users_tasks",
"IBLOCK_ID" => $iblockId,
"SECTION_ID" => 0
),
false
);
if ($arSection = $dbSectionsList->GetNext())
$parentSectionId = $arSection["ID"];
}
if ($parentSectionId <= 0)
return CBPActivityExecutionStatus::Closed;
$arTaskCreatedBy = $this->__GetUsers($this->TaskCreatedBy);
$arTaskAssignedTo = $this->__GetUsers($this->TaskAssignedTo);
if (count($arTaskCreatedBy) <= 0 || count($arTaskAssignedTo) <= 0)
return CBPActivityExecutionStatus::Closed;
if ($this->TaskType != "group")
$this->TaskOwnerId = $arTaskAssignedTo[0];
$arTaskTrackers = $this->__GetUsers($this->TaskTrackers);
$arFields = array(
"IBLOCK_SECTION_ID" => $parentSectionId,
"MODIFIED_BY" => $arTaskCreatedBy[0],
"CREATED_BY" => $arTaskCreatedBy[0],
"DATE_CREATE" => date($GLOBALS["DB"]->DateFormatToPHP(FORMAT_DATETIME)),
"ACTIVE_FROM" => $this->TaskActiveFrom,
"ACTIVE_TO" => $this->TaskActiveTo,
"NAME" => $this->TaskName,
"DETAIL_TEXT" => $this->TaskDetailText,
"PROPERTY_TaskPriority" => $this->TaskPriority,
"PROPERTY_TaskAssignedTo" => $arTaskAssignedTo[0],
"PROPERTY_TaskTrackers" => $arTaskTrackers,
);
$taskId = CIntranetTasksDocument::CreateDocument($arFields);
if ($this->TaskType == "group")
{
$pathTemplate = str_replace(
array("#GROUP_ID#", "#TASK_ID#"),
array($this->TaskOwnerId, "{=Document:ID}"),
COption::GetOptionString("intranet", "path_task_group_entry", "/workgroups/group/#GROUP_ID#/tasks/task/view/#TASK_ID#/")
);
}
else
{
$pathTemplate = str_replace(
array("#USER_ID#", "#TASK_ID#"),
array($this->TaskOwnerId, "{=Document:ID}"),
COption::GetOptionString("intranet", "path_task_user_entry", "/company/personal/user/#USER_ID#/tasks/task/view/#TASK_ID#/")
);
}
$pathTemplate = str_replace('#HTTP_HOST#', $_SERVER['HTTP_HOST'], "http://#HTTP_HOST#".$pathTemplate);
$arTemplateStates = CBPWorkflowTemplateLoader::GetDocumentTypeStates(
array("intranet", "CIntranetTasksDocument", "x".$iblockId),
CBPDocumentEventType::Create
);
foreach ($arTemplateStates as $arState)
{
CBPDocument::StartWorkflow(
$arState["TEMPLATE_ID"],
array("intranet", "CIntranetTasksDocument", $taskId),
array(
"OwnerId" => $this->TaskOwnerId,
"TaskType" => $this->TaskType,
"PathTemplate" => $pathTemplate,
"ForumId" => intval($this->TaskForumId),
"IBlockId" => $iblockId,
),
$arErrorsTmp
);
}
return CBPActivityExecutionStatus::Closed;
}
public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null)
{
$arErrors = array();
if (!array_key_exists("TaskAssignedTo", $arTestProperties) || count($arTestProperties["TaskAssignedTo"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "TaskAssignedTo", "message" => GetMessage("BPSNMA_EMPTY_TASKASSIGNEDTO"));
if (!array_key_exists("TaskName", $arTestProperties) || count($arTestProperties["TaskName"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "TaskName", "message" => GetMessage("BPSNMA_EMPTY_TASKNAME"));
if (!array_key_exists("TaskPriority", $arTestProperties) || strlen($arTestProperties["TaskPriority"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "TaskPriority", "message" => GetMessage("BPSNMA_EMPTY_TASKPRIORITY"));
if (!array_key_exists("TaskType", $arTestProperties) || strlen($arTestProperties["TaskType"]) <= 0)
$arErrors[] = array("code" => "NotExist", "parameter" => "TaskType", "message" => GetMessage("BPSNMA_EMPTY_TASKTYPE"));
//if (!array_key_exists("TaskOwnerId", $arTestProperties) || strlen($arTestProperties["TaskOwnerId"]) <= 0)
// $arErrors[] = array("code" => "NotExist", "parameter" => "TaskOwnerId", "message" => GetMessage("BPSNMA_EMPTY_TASKOWNERID"));
return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user));
}
public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "")
{
$runtime = CBPRuntime::GetRuntime();
$arMap = array(
"TaskType" => "task_type",
"TaskOwnerId" => "task_owner_id",
"TaskCreatedBy" => "task_created_by",
"TaskActiveFrom" => "task_active_from",
"TaskActiveTo" => "task_active_to",
"TaskName" => "task_name",
"TaskDetailText" => "task_detail_text",
"TaskPriority" => "task_priority",
"TaskAssignedTo" => "task_assigned_to",
"TaskTrackers" => "task_trackers",
"TaskForumId" => "task_forum_id",
);
if (!is_array($arWorkflowParameters))
$arWorkflowParameters = array();
if (!is_array($arWorkflowVariables))
$arWorkflowVariables = array();
if (!is_array($arCurrentValues))
{
$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
if (is_array($arCurrentActivity["Properties"]))
{
foreach ($arMap as $k => $v)
{
if (array_key_exists($k, $arCurrentActivity["Properties"]))
{
if ($k == "TaskCreatedBy" || $k == "TaskAssignedTo" || $k == "TaskTrackers")
$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]] = "";
}
}
$arGroups = array();
$db = CSocNetGroup::GetList(array("NAME" => "ASC"), array("ACTIVE" => "Y"), false, false, array("ID", "NAME"));
while ($ar = $db->GetNext())
$arGroups[$ar["ID"]] = $ar["NAME"];
$arTaskPriority = array();
$db = CIBlockProperty::GetPropertyEnum("TaskPriority");
while ($ar = $db->GetNext())
$arTaskPriority[$ar["ID"]] = $ar["VALUE"];
$arForums = array();
if (CModule::IncludeModule("forum"))
{
$db = CForumNew::GetListEx();
while ($ar = $db->GetNext())
$arForums[$ar["ID"]] = "[".$ar["ID"]."] ".$ar["NAME"];
}
return $runtime->ExecuteResourceFile(
__FILE__,
"properties_dialog.php",
array(
"arCurrentValues" => $arCurrentValues,
"formName" => $formName,
"arGroups" => $arGroups,
"arTaskPriority" => $arTaskPriority,
"arForums" => $arForums,
)
);
}
public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors)
{
$arErrors = array();
$runtime = CBPRuntime::GetRuntime();
$arMap = array(
"task_type" => "TaskType",
"task_owner_id" => "TaskOwnerId",
"task_created_by" => "TaskCreatedBy",
"task_active_from" => "TaskActiveFrom",
"task_active_to" => "TaskActiveTo",
"task_name" => "TaskName",
"task_detail_text" => "TaskDetailText",
"task_priority" => "TaskPriority",
"task_assigned_to" => "TaskAssignedTo",
"task_trackers" => "TaskTrackers",
"task_forum_id" => "TaskForumId",
);
$arProperties = array();
foreach ($arMap as $key => $value)
{
if ($key == "task_created_by" || $key == "task_assigned_to" || $key == "task_trackers")
continue;
$arProperties[$value] = $arCurrentValues[$key];
}
$arProperties["TaskCreatedBy"] = CBPHelper::UsersStringToArray($arCurrentValues["task_created_by"], $documentType, $arErrors);
if (count($arErrors) > 0)
return false;
$arProperties["TaskAssignedTo"] = CBPHelper::UsersStringToArray($arCurrentValues["task_assigned_to"], $documentType, $arErrors);
if (count($arErrors) > 0)
return false;
$arProperties["TaskTrackers"] = CBPHelper::UsersStringToArray($arCurrentValues["task_trackers"], $documentType, $arErrors);
if (count($arErrors) > 0)
return false;
$arErrors = self::ValidateProperties($arProperties, new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser));
if (count($arErrors) > 0)
return false;
$arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName);
$arCurrentActivity["Properties"] = $arProperties;
return true;
}
}
?>