%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/activities/bitrix/socnetmessageactivity/ |
Current File : //home/bitrix/www/bitrix/activities/bitrix/socnetmessageactivity/socnetmessageactivity.php |
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); class CBPSocNetMessageActivity extends CBPActivity { public function __construct($name) { parent::__construct($name); $this->arProperties = array( "Title" => "", "MessageUserFrom" => "", "MessageUserTo" => "", "MessageText" => "", "MessageFormat" => "", ); } public function Execute() { if (!CModule::IncludeModule("socialnetwork")) return CBPActivityExecutionStatus::Closed; if ($this->MessageFormat == 'robot' && CModule::IncludeModule('im')) { $this->sendRobotMessage(); return CBPActivityExecutionStatus::Closed; } $rootActivity = $this->GetRootActivity(); $documentId = $rootActivity->GetDocumentId(); $arMessageUserFrom = CBPHelper::ExtractUsers($this->MessageUserFrom, $documentId, true); $arMessageUserTo = CBPHelper::ExtractUsers($this->MessageUserTo, $documentId, false); $arMessageFields = array( "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE_TYPE" => SONET_MESSAGE_SYSTEM, "FROM_USER_ID" => $arMessageUserFrom, "MESSAGE" => CBPHelper::ConvertTextForMail($this->MessageText), ); $ar = array(); foreach ($arMessageUserTo as $userTo) { if (in_array($userTo, $ar)) continue; $ar[] = $userTo; $arMessageFields["TO_USER_ID"] = $userTo; CSocNetMessages::Add($arMessageFields); } return CBPActivityExecutionStatus::Closed; } private function sendRobotMessage() { $runtime = CBPRuntime::GetRuntime(); $documentId = $this->GetDocumentId(); /** @var CBPDocumentService $documentService */ $documentService = $runtime->GetService('DocumentService'); $messageText = $this->MessageText; $CCTP = new CTextParser(); $CCTP->allow = array( "HTML" => "N", "USER" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "QUOTE" => "N", "CODE" => "N", "FONT" => "Y", "LIST" => "Y", "SMILES" => "N", "NL2BR" => "Y", "VIDEO" => "N", "TABLE" => "N", "CUT_ANCHOR" => "N", "ALIGN" => "N" ); $attach = new CIMMessageParamAttach(1, '#468EE5'); $attach->AddUser(Array( 'NAME' => GetMessage('BPSNMA_FORMAT_ROBOT'), 'AVATAR' => '/bitrix/images/bizproc/message_robot.png' )); $attach->AddDelimiter(Array('COLOR' => '#c6c6c6')); $attach->AddGrid(Array( Array( "NAME" => $documentService->getDocumentTypeName($this->GetDocumentType()) . ':', "VALUE" => $documentService->getDocumentName($documentId), "LINK" => $documentService->GetDocumentAdminPage($documentId), "DISPLAY" => "COLUMN", "WIDTH" => 60, ), )); $attach->AddDelimiter(); $attach->AddHtml('<span style="color: #6E6E6E">'. $CCTP->convertText(htmlspecialcharsbx($messageText)) .'</span>' ); $arMessageUserFrom = CBPHelper::ExtractUsers($this->MessageUserFrom, $documentId, true); $arMessageUserTo = CBPHelper::ExtractUsers($this->MessageUserTo, $documentId, false); $tagSalt = md5($this->GetWorkflowInstanceId().'|'.$this->GetName()); $arMessageFields = array( "=DATE_CREATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "MESSAGE_TYPE" => IM_MESSAGE_SYSTEM, "MESSAGE_OUT" => CBPHelper::ConvertTextForMail($messageText), "ATTACH" => $attach, 'NOTIFY_TAG' => 'ROBOT|'.implode('|', array_map('strtoupper', $documentId)) .'|'.$tagSalt ); if ($arMessageUserFrom) { $arMessageFields['FROM_USER_ID'] = $arMessageUserFrom; } $ar = array(); foreach ($arMessageUserTo as $userTo) { if (in_array($userTo, $ar)) continue; $ar[] = $userTo; $arMessageFields["TO_USER_ID"] = $userTo; CIMNotify::Add($arMessageFields); } } public static function ValidateProperties($arTestProperties = array(), CBPWorkflowTemplateUser $user = null) { $arErrors = array(); if (empty($arTestProperties["MessageUserTo"])) { $arErrors[] = array("code" => "NotExist", "parameter" => "MessageUserTo", "message" => GetMessage("BPSNMA_EMPTY_TO")); } if (!array_key_exists("MessageText", $arTestProperties) || strlen($arTestProperties["MessageText"]) <= 0) { $arErrors[] = array("code" => "NotExist", "parameter" => "MessageText", "message" => GetMessage("BPSNMA_EMPTY_MESSAGE")); } $from = array_key_exists("MessageUserFrom", $arTestProperties) ? $arTestProperties["MessageUserFrom"] : null; if ($user && $from !== $user->getBizprocId() && !$user->isAdmin()) { $arErrors[] = array("code" => "NotExist", "parameter" => "MessageUserFrom", "message" => GetMessage("BPSNMA_EMPTY_FROM")); } return array_merge($arErrors, parent::ValidateProperties($arTestProperties, $user)); } public static function GetPropertiesDialog($documentType, $activityName, $arWorkflowTemplate, $arWorkflowParameters, $arWorkflowVariables, $arCurrentValues = null, $formName = "") { $dialog = new \Bitrix\Bizproc\Activity\PropertiesDialog(__FILE__, array( 'documentType' => $documentType, 'activityName' => $activityName, 'workflowTemplate' => $arWorkflowTemplate, 'workflowParameters' => $arWorkflowParameters, 'workflowVariables' => $arWorkflowVariables, 'currentValues' => $arCurrentValues )); $user = new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser); $fromDefault = $user->isAdmin() ? null : $user->getBizprocId(); $dialog->setMap(array( 'MessageUserFrom' => array( 'Name' => GetMessage('BPSNMA_FROM'), 'FieldName' => 'message_user_from', 'Type' => 'user', 'Default' => $fromDefault ), 'MessageUserTo' => array( 'Name' => GetMessage('BPSNMA_TO'), 'FieldName' => 'message_user_to', 'Type' => 'user', 'Required' => true, 'Multiple' => true, 'Default' => \Bitrix\Bizproc\Automation\Helper::getResponsibleUserExpression($documentType) ), 'MessageText' => array( 'Name' => GetMessage('BPSNMA_MESSAGE'), 'FieldName' => 'message_text', 'Type' => 'text', 'Required' => true ) )); $dialog->setRuntimeData(array( 'user' => $user )); return $dialog; } public static function GetPropertiesDialogValues($documentType, $activityName, &$arWorkflowTemplate, &$arWorkflowParameters, &$arWorkflowVariables, $arCurrentValues, &$arErrors) { $arErrors = array(); $arMap = array( "message_user_from" => "MessageUserFrom", "message_user_to" => "MessageUserTo", "message_text" => "MessageText", "message_format" => "MessageFormat", ); $arProperties = array(); foreach ($arMap as $key => $value) { if ($key == "message_user_from" || $key == "message_user_to") continue; $arProperties[$value] = (string)$arCurrentValues[$key]; } $user = new CBPWorkflowTemplateUser(CBPWorkflowTemplateUser::CurrentUser); if ($user->isAdmin()) { if (empty($arCurrentValues["message_user_from"])) $arProperties["MessageUserFrom"] = null; else { $arProperties["MessageUserFrom"] = CBPHelper::UsersStringToArray($arCurrentValues["message_user_from"], $documentType, $arErrors); if (count($arErrors) > 0) return false; } } else { $arProperties["MessageUserFrom"] = $user->getBizprocId(); } $arProperties["MessageUserTo"] = CBPHelper::UsersStringToArray($arCurrentValues["message_user_to"], $documentType, $arErrors); if (count($arErrors) > 0) return false; $arErrors = self::ValidateProperties($arProperties, $user); if (count($arErrors) > 0) return false; $arCurrentActivity = &CBPWorkflowTemplateLoader::FindActivityByName($arWorkflowTemplate, $activityName); $arCurrentActivity["Properties"] = $arProperties; return true; } }