Example #1
0
 public function executeComponent()
 {
     $id = $this->getWorkflowId();
     $this->arResult = array('NeedAuth' => $this->isAuthorizationNeeded() ? 'Y' : 'N', 'FatalErrorMessage' => '', 'ErrorMessage' => '');
     if ($id) {
         $workflowState = \CBPStateService::getWorkflowState($id);
         if (!$workflowState) {
             $this->arResult['FatalErrorMessage'] = Loc::getMessage('BPWFI_WORKFLOW_NOT_FOUND');
         } else {
             $this->arResult['WorkflowState'] = $workflowState;
             $this->arResult['WorkflowTrack'] = \CBPTrackingService::DumpWorkflow($id);
             if ($workflowState['STARTED_BY'] && ($photo = $this->getStartedByPhoto($workflowState['STARTED_BY']))) {
                 $this->arResult['startedByPhotoSrc'] = $photo['src'];
             }
             $runtime = CBPRuntime::GetRuntime();
             $runtime->StartRuntime();
             /**
              * @var CBPDocumentService $documentService
              */
             $documentService = $runtime->GetService('DocumentService');
             try {
                 $this->arResult['DOCUMENT_NAME'] = $documentService->getDocumentName($workflowState['DOCUMENT_ID']);
                 $this->arResult['DOCUMENT_ICON'] = $documentService->getDocumentIcon($workflowState['DOCUMENT_ID']);
             } catch (Main\ArgumentException $e) {
                 $this->arResult['FatalErrorMessage'] = $e->getMessage();
             }
         }
     }
     $this->includeComponentTemplate();
     if ($this->arParams['SET_TITLE']) {
         $this->setPageTitle(Loc::getMessage('BPWFI_PAGE_TITLE'));
     }
 }
 public static function GetDocumentNames($ownerTypeID, $ownerID)
 {
     if (!(IsModuleInstalled('bizproc') && CModule::IncludeModule('bizproc'))) {
         return false;
     }
     $ownerTypeID = intval($ownerTypeID);
     $ownerID = intval($ownerID);
     $docName = self::ResolveDocumentName($ownerTypeID);
     if ($docName === '') {
         return array();
     }
     $ownerTypeName = CCrmOwnerType::ResolveName($ownerTypeID);
     if ($ownerTypeName === '') {
         return array();
     }
     /*$arDocumentStates = CBPDocument::GetDocumentStates(
     			array('crm', $docName, $ownerTypeName),
     			array('crm', $docName, $ownerTypeName.'_'.$ownerID)
     		);*/
     $arDocumentStates = CBPStateService::GetDocumentStates(array('crm', $docName, $ownerTypeName . '_' . $ownerID));
     $result = array();
     foreach ($arDocumentStates as $arDocumentState) {
         if ($arDocumentState['ID'] !== '' && $arDocumentState['TEMPLATE_NAME'] !== '') {
             $result[] = $arDocumentState['TEMPLATE_NAME'];
         }
     }
     return $result;
 }
Example #3
0
 protected function getWorkflowStateInfo()
 {
     if (!empty($this->arParams['~WORKFLOW_STATE_INFO']) && is_array($this->arParams['~WORKFLOW_STATE_INFO'])) {
         return $this->arParams['~WORKFLOW_STATE_INFO'];
     }
     return \CBPStateService::getWorkflowStateInfo($this->getWorkflowId());
 }
Example #4
0
 public function OnAfterIBlockElementDelete($fields)
 {
     $errors = array();
     if (Loader::includeModule('socialnetwork')) {
         $states = CBPStateService::getDocumentStates(array('lists', get_called_class(), $fields['ID']));
         foreach ($states as $workflowId => $state) {
             $sourceId = CBPStateService::getWorkflowIntegerId($workflowId);
             $resultQuery = CSocNetLog::getList(array(), array('EVENT_ID' => 'lists_new_element', 'SOURCE_ID' => $sourceId), false, false, array('ID'));
             while ($log = $resultQuery->fetch()) {
                 CSocNetLog::delete($log['ID']);
             }
         }
     }
     CBPDocument::onDocumentDelete(array('lists', get_called_class(), $fields['ID']), $errors);
 }
Example #5
0
 protected function processActionPerformActionBp()
 {
     if (!Loader::includeModule('bizproc')) {
         $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_MODULE_NOT_INSTALLED'))));
     }
     $this->checkRequiredPostParams(array('iblockTypeId', 'iblockId', 'sectionId', 'workflowId', 'elementId', 'action'));
     if ($this->request->getPost('iblockTypeId') == COption::getOptionString('lists', 'livefeed_iblock_type_id')) {
         $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_UNKNOWN_ERROR'))));
     }
     if ($this->errorCollection->hasErrors()) {
         $this->sendJsonErrorResponse();
     }
     $this->iblockTypeId = $this->request->getPost('iblockTypeId');
     $this->iblockId = $this->request->getPost('iblockId');
     $this->sectionId = $this->request->getPost('sectionId');
     $workflowId = $this->request->getPost('workflowId');
     $elementId = $this->request->getPost('elementId');
     $action = $this->request->getPost('action');
     $this->documentStates = CBPDocument::getDocumentStates(BizProcDocument::generateDocumentComplexType($this->iblockTypeId, $this->iblockId), BizProcDocument::getDocumentComplexId($this->iblockTypeId, $elementId));
     if (isset($this->documentStates[$workflowId]['WORKFLOW_STATUS']) && $this->documentStates[$workflowId]['WORKFLOW_STATUS'] !== null) {
         $this->terminateWorkflow($workflowId, $elementId);
     }
     if ($action == 'delete') {
         if (CBPDocument::canUserOperateDocument(CBPCanUserOperateOperation::CreateWorkflow, $this->getUser(), BizProcDocument::getDocumentComplexId($this->iblockTypeId, $elementId), array("DocumentStates" => $this->documentStates))) {
             CBPTaskService::DeleteByWorkflow($workflowId);
             CBPTrackingService::DeleteByWorkflow($workflowId);
             CBPStateService::DeleteWorkflow($workflowId);
         } else {
             $this->errorCollection->add(array(new Error(Loc::getMessage('LISTS_LAC_ACCESS_DENIED'))));
         }
         if ($this->errorCollection->hasErrors()) {
             $this->sendJsonErrorResponse();
         }
     }
     $this->sendJsonSuccessResponse(array('message' => Loc::getMessage('LISTS_LAC_MESSAGE_SUCCESS')));
 }
Example #6
0
 } elseif (in_array($action, array("add_comment", "edit_comment", "delete_comment", "file_comment_upload"))) {
     $log_id = $_REQUEST["log_id"];
     if ($arLog = CSocNetLog::GetByID($log_id)) {
         $log_entity_type = $arLog["ENTITY_TYPE"];
         $arListParams = strpos($log_entity_type, "CRM") === 0 && IsModuleInstalled("crm") ? array("IS_CRM" => "Y", "CHECK_CRM_RIGHTS" => "Y") : array("CHECK_RIGHTS" => "Y", "USE_SUBSCRIBE" => "N");
     } else {
         $log_id = 0;
     }
     if (intval($log_id) <= 0 || !($rsLog = CSocNetLog::GetList(array(), array("ID" => $log_id), false, false, array(), $arListParams)) || !($arLog = $rsLog->Fetch())) {
         $arResult["strMessage"] = GetMessage("Log event not found");
     }
     if (!isset($arResult["strMessage"])) {
         $arEntityXMLID = array("tasks" => "TASK", "forum" => "FORUM", "photo_photo" => "PHOTO", "sonet" => "SOCNET", "lists_new_element" => array("WF", "WF", "FORUM|COMMENT"));
         if ($arLog["ENTITY_TYPE"] == "CRMACTIVITY" && CModule::IncludeModule('crm') && ($arActivity = CCrmActivity::GetByID($arLog["ENTITY_ID"], false)) && $arActivity["TYPE_ID"] == CCrmActivityType::Task) {
             $entity_xml_id = "TASK_" . $arActivity["ASSOCIATED_ENTITY_ID"];
         } elseif ($arLog["ENTITY_TYPE"] == "WF" && $arLog["SOURCE_ID"] > 0 && CModule::IncludeModule('bizproc') && ($workflowId = \CBPStateService::getWorkflowByIntegerId($arLog["SOURCE_ID"]))) {
             $entity_xml_id = "WF_" . $workflowId;
         } else {
             $entity_xml_id = array_key_exists($arLog["EVENT_ID"], $arEntityXMLID) && $arLog["SOURCE_ID"] > 0 ? $arEntityXMLID[$arLog["EVENT_ID"]] . "_" . $arLog["SOURCE_ID"] : strtoupper($arLog["EVENT_ID"]) . "_" . $arLog["ID"];
         }
         $arCommentEvent = CSocNetLogTools::FindLogCommentEventByLogEventID($arLog["EVENT_ID"]);
         if (!$arCommentEvent) {
             $arResult["strMessage"] = GetMessage("Comment event not found");
         }
     }
     if (!isset($arResult["strMessage"])) {
         $feature = CSocNetLogTools::FindFeatureByEventID($arCommentEvent["EVENT_ID"]);
         if (array_key_exists("OPERATION_ADD", $arCommentEvent) && $arCommentEvent["OPERATION_ADD"] == "log_rights") {
             $bCanAddComments = CSocNetLogRights::CheckForUser($log_id, $GLOBALS["USER"]->GetID());
         } elseif ($feature && array_key_exists("OPERATION_ADD", $arCommentEvent) && strlen($arCommentEvent["OPERATION_ADD"]) > 0) {
             $bCanAddComments = CSocNetFeaturesPerms::CanPerformOperation($GLOBALS["USER"]->GetID(), $arLog["ENTITY_TYPE"], $arLog["ENTITY_ID"], $feature == "microblog" ? "blog" : $feature, $arCommentEvent["OPERATION_ADD"], $bCurrentUserIsAdmin);
Example #7
0
 function BeforeIndexSocNet($bxSocNetSearch, $fields)
 {
     static $bizprocForumId = false;
     if (!$bizprocForumId) {
         $bizprocForumId = intval(COption::GetOptionString('bizproc', 'forum_id'));
     }
     if ($fields['ENTITY_TYPE_ID'] == 'FORUM_POST' && intval($fields['PARAM1']) == $bizprocForumId && !empty($fields['PARAM2']) && !empty($bxSocNetSearch->_params["PATH_TO_WORKFLOW"]) && CModule::IncludeModule("forum") && CModule::IncludeModule("bizproc")) {
         $topic = CForumTopic::GetByID($fields['PARAM2']);
         if (!empty($topic) && is_array($topic) && !empty($topic["XML_ID"])) {
             if (preg_match('/^WF_([0-9a-f\\.]+)/', $topic["XML_ID"], $match)) {
                 $workflowId = $match[1];
                 $state = CBPStateService::GetStateDocumentId($workflowId);
                 if ($state[0] == 'lists' && $state[1] == 'BizprocDocument' && CModule::IncludeModule('iblock') && intval($state[2]) > 0) {
                     $iblockElementQuery = CIBlockElement::GetList(array(), array("ID" => intval($state[2])), false, false, array("ID", "IBLOCK_ID"));
                     if ($iblockElement = $iblockElementQuery->Fetch()) {
                         $listId = $iblockElement["IBLOCK_ID"];
                         $fields["URL"] = $bxSocNetSearch->Url(str_replace(array("#list_id#", "#workflow_id#"), array($listId, urlencode($workflowId)), $bxSocNetSearch->_params["PATH_TO_WORKFLOW"]), array("MID" => $fields["ENTITY_ID"]), "message" . $fields["ENTITY_ID"]);
                         if (!empty($fields["LID"]) && is_array($fields["LID"])) {
                             foreach ($fields["LID"] as $siteId => $url) {
                                 $fields["LID"][$siteId] = $fields["URL"];
                             }
                         }
                     }
                 }
             }
         }
     }
     return $fields;
 }
Example #8
0
 public function processActionDeleteBizProc()
 {
     $this->checkRequiredPostParams(array('fileId', 'idBizProc'));
     if (!Loader::includeModule("bizproc")) {
         $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_BIZPROC_LOAD')));
     }
     if ($this->errorCollection->hasErrors()) {
         $this->sendJsonErrorResponse();
     }
     $fileId = (int) $this->request->getPost('fileId');
     /** @var File $file */
     $file = File::loadById((int) $fileId);
     if (!$file) {
         $this->errorCollection->addOne(new Error(Loc::getMessage('DISK_FILE_VIEW_ERROR_COULD_NOT_FIND_OBJECT'), self::ERROR_COULD_NOT_FIND_OBJECT));
         $this->sendJsonErrorResponse();
     }
     $documentData = array('DISK' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocument::getDocumentComplexId($fileId)), 'WEBDAV' => array('DOCUMENT_ID' => \Bitrix\Disk\BizProcDocumentCompatible::getDocumentComplexId($fileId)));
     $webdavFileId = $file->getXmlId();
     if (!empty($webdavFileId)) {
         $documentData['OLD_FILE_COMMON'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdav', $webdavFileId));
         $documentData['OLD_FILE_GROUP'] = array('DOCUMENT_ID' => array('webdav', 'CIBlockDocumentWebdavSocnet', $webdavFileId));
     }
     $workflowId = $this->request->getPost('idBizProc');
     foreach ($documentData as $nameModule => $data) {
         $availabilityProcess = CBPDocument::GetDocumentState($data['DOCUMENT_ID'], $workflowId);
         if (!empty($availabilityProcess)) {
             if (CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::CreateWorkflow, $this->getUser()->getId(), $data['DOCUMENT_ID'])) {
                 CBPTrackingService::deleteByWorkflow($workflowId);
                 CBPTaskService::deleteByWorkflow($workflowId);
                 /** @noinspection PhpDynamicAsStaticMethodCallInspection */
                 CBPStateService::deleteWorkflow($workflowId);
             }
         }
     }
     $this->sendJsonSuccessResponse();
 }
Example #9
0
    $dbTask = CBPTaskService::GetList(array(), array("ID" => $taskId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID", 'STATUS', 'USER_STATUS'));
    $arTask = $dbTask->GetNext();
}
if (!$arTask) {
    $workflowId = trim($_REQUEST["workflow_id"]);
    if (strlen($workflowId) > 0) {
        $dbTask = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $workflowId, "USER_ID" => $userId), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", "USER_ID", 'STATUS', 'USER_STATUS'));
        $arTask = $dbTask->GetNext();
    }
}
if (!$arTask) {
    require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
    $APPLICATION->SetTitle(GetMessage("BPAT_NO_TASK"));
    CAdminMessage::ShowMessage(GetMessage("BPAT_NO_TASK") . ". ");
} else {
    $arTask["PARAMETERS"]["DOCUMENT_ID"] = CBPStateService::GetStateDocumentId($arTask['WORKFLOW_ID']);
    $backUrl = "/" . ltrim(trim($_REQUEST["back_url"]), "\\/");
    if (strlen($backUrl) <= 0) {
        $backUrl = "/bitrix/admin/bizproc_task_list.php?lang=" . LANGUAGE_ID;
    }
    if (strlen($backUrl) <= 0 && !empty($arTask["PARAMETERS"]["DOCUMENT_ID"])) {
        $backUrl = CBPDocument::GetDocumentAdminPage($arTask["PARAMETERS"]["DOCUMENT_ID"]);
    }
    $backUrl = CHTTP::urlDeleteParams($backUrl, array('mode'));
    $showType = "Form";
    if ($arTask['STATUS'] > CBPTaskStatus::Running || $arTask['USER_STATUS'] > CBPTaskUserStatus::Waiting) {
        $showType = "Success";
    }
    if ($_SERVER["REQUEST_METHOD"] == "POST" && check_bitrix_sessid()) {
        if ($_POST["action"] == "doTask") {
            $arErrorsTmp = array();
Example #10
0
</span>
		</div>

		<div id="bp-task-tabs-content" class="bp-tab-contents">
			<div id="bp-task-tab-1-content" class="bp-tab-content active">

	<?php 
}
?>
				<?php 
if (!isset($arParams['IFRAME']) || $arParams['IFRAME'] == 'N') {
    // A < E < I < M < Q < U < Y
    // A - NO ACCESS, E - READ, I - ANSWER
    // M - NEW TOPIC
    // Q - MODERATE, U - EDIT, Y - FULL_ACCESS
    $APPLICATION->IncludeComponent("bitrix:forum.comments", "bitrix24", array("FORUM_ID" => CBPHelper::getForumId(), "ENTITY_TYPE" => "WF", "ENTITY_ID" => CBPStateService::getWorkflowIntegerId($arResult["TASK"]['WORKFLOW_ID']), "ENTITY_XML_ID" => "WF_" . $arResult["TASK"]['WORKFLOW_ID'], "PERMISSION" => "Y", "URL_TEMPLATES_PROFILE_VIEW" => "/company/personal/user/#user_id#/", "SHOW_RATING" => "Y", "SHOW_LINK_TO_MESSAGE" => "N", "BIND_VIEWER" => "Y"), false, array('HIDE_ICONS' => 'Y'));
} else {
    ?>
				<iframe
					src="/bitrix/components/bitrix/bizproc.task/comments.php?TASK_ID=<?php 
    echo $arResult['TASK']['ID'];
    ?>
&USER_ID=<?php 
    echo $arParams['USER_ID'];
    ?>
&site_id=<?php 
    echo SITE_ID;
    ?>
&sessid=<?php 
    echo bitrix_sessid();
    ?>
Example #11
0
 public static function deleteSocnetLog(array $listWorkflowId)
 {
     if (CModule::includeModule('socialnetwork')) {
         foreach ($listWorkflowId as $workflowId) {
             $sourceId = CBPStateService::getWorkflowIntegerId($workflowId);
             $resultQuery = CSocNetLog::getList(array(), array('EVENT_ID' => 'lists_new_element', 'SOURCE_ID' => $sourceId), false, false, array('ID'));
             while ($log = $resultQuery->fetch()) {
                 CSocNetLog::delete($log['ID']);
             }
         }
     }
 }
Example #12
0
<?php

require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php";
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/include.php";
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/bizproc/prolog.php";
IncludeModuleLangFile(__FILE__);
/*
$bizprocModulePermissions = $APPLICATION->GetGroupRight("bizproc");
if ($bizprocModulePermissions < "R")
	$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
*/
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
$errorMessage = "";
$ID = trim($_REQUEST["ID"]);
$adminMode = strtoupper($_REQUEST["admin_mode"]) == "Y";
$arWorkflowState = CBPStateService::GetWorkflowState($ID);
if (!is_array($arWorkflowState) || count($arWorkflowState) <= 0) {
    $APPLICATION->SetTitle(GetMessage("BPABL_INVALID_WF"));
    CAdminMessage::ShowMessage(GetMessage("BPABL_INVALID_WF") . ". ");
} else {
    $bCanView = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $arWorkflowState["DOCUMENT_ID"], array("WorkflowId" => $ID, "DocumentStates" => array($ID => $arWorkflowState), "UserGroups" => $GLOBALS["USER"]->GetUserGroupArray()));
    if (!$bCanView) {
        $APPLICATION->SetTitle(GetMessage("BPABL_ERROR"));
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
        echo ShowError(GetMessage("BPABL_NO_PERMS"));
        require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php";
        die;
    }
    $backUrl = "/" . ltrim(trim($_REQUEST["back_url"]), "\\/");
    if (strlen($backUrl) <= 0) {
        $backUrl = CBPDocument::GetDocumentAdminPage($arWorkflowState["DOCUMENT_ID"]);
Example #13
0
        if ($arParams[$name] <= 0) {
            $arParams[$name] = trim($_REQUEST[$nameLower]);
        }
        if ($arParams[$name] <= 0) {
            foreach ($_REQUEST as $key => $value) {
                if (strtolower($key) == $nameLower) {
                    $arParams[$name] = trim($_REQUEST[$key]);
                    break;
                }
            }
        }
    }
}
BPWSInitParam($arParams, "WORKFLOW_ID");
$arResult["NeedAuth"] = "N";
$arResult["FatalErrorMessage"] = "";
$arResult["ErrorMessage"] = "";
global $USER;
if (!$USER->IsAuthorized()) {
    $arResult["NeedAuth"] = "Y";
} elseif (strlen($arParams["WORKFLOW_ID"]) <= 0) {
    $arResult["FatalErrorMessage"] .= "Не указан код рабочего потока" . ". ";
} else {
    $arResult["WorkflowState"] = CBPStateService::GetWorkflowState($arParams["WORKFLOW_ID"]);
    if ($arResult["WorkflowState"]) {
        $arResult["WorkflowTrack"] = CBPTrackingService::DumpWorkflow($arParams["WORKFLOW_ID"]);
    } else {
        $arResult["FatalErrorMessage"] .= "Рабочий поток не найден" . ". ";
    }
}
$this->IncludeComponentTemplate();
Example #14
0
     } else {
         CBPDocument::TerminateWorkflow($_REQUEST["id"], $arParams["DOCUMENT_ID"], $ar);
         if (count($ar) > 0) {
             $str = "";
             foreach ($ar as $a) {
                 $str .= $a["message"];
             }
             $arError[] = array("id" => "stop_bizproc", "text" => $str);
         }
     }
 } elseif ($_REQUEST["action"] == "del_bizproc") {
     if ($arParams["DropWorkflowPermission"] != "Y") {
         $arError[] = array("id" => "access_denied", "text" => GetMessage("BPADH_NO_PERMS"));
     } else {
         CBPTrackingService::DeleteByWorkflow($_REQUEST["id"]);
         CBPStateService::DeleteWorkflow($_REQUEST["id"]);
     }
 } elseif ($_SERVER['REQUEST_METHOD'] == "POST" && intval($_REQUEST["bizproc_index"]) > 0) {
     $arBizProcWorkflowId = array();
     $bizprocIndex = intval($_REQUEST["bizproc_index"]);
     for ($i = 1; $i <= $bizprocIndex; $i++) {
         $bpId = trim($_REQUEST["bizproc_id_" . $i]);
         $bpTemplateId = intval($_REQUEST["bizproc_template_id_" . $i]);
         $bpEvent = trim($_REQUEST["bizproc_event_" . $i]);
         if (strlen($bpEvent) > 0) {
             if (strlen($bpId) > 0) {
                 if (!array_key_exists($bpId, $arDocumentStates)) {
                     continue;
                 }
             } else {
                 if (!array_key_exists($bpTemplateId, $arDocumentStates)) {
Example #15
0
 function InitializeIBlock($taskType, $ownerId, $forumId)
 {
     $iblockId = COption::GetOptionInt("intranet", "iblock_tasks", 0);
     if ($iblockId <= 0) {
         return 0;
     }
     $forumId = intval($forumId);
     $arTasksConverted2BP = array();
     $keyTasksConverted2BP = $iblockId . "_" . $taskType . ($taskType == "group" ? "_" . $ownerId : "");
     global $CACHE_MANAGER;
     if ($CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP")) {
         $arTasksConverted2BP = $CACHE_MANAGER->Get("IntranetTasksConverted2BP");
         if (array_key_exists($keyTasksConverted2BP, $arTasksConverted2BP)) {
             return $arTasksConverted2BP[$keyTasksConverted2BP];
         }
     }
     $globalParentSectionId = 0;
     $dbIBlock = CIBlock::GetList(array(), array("ID" => $iblockId, "ACTIVE" => "Y"));
     if ($arIBlock = $dbIBlock->Fetch()) {
         $arIBlockProperties = array();
         $dbIBlockProps = CIBlock::GetProperties($iblockId);
         while ($arIBlockProps = $dbIBlockProps->Fetch()) {
             $ind = StrLen($arIBlockProps["CODE"]) > 0 ? $arIBlockProps["CODE"] : $arIBlockProps["ID"];
             $arIBlockProperties[StrToUpper($ind)] = $arIBlockProps;
         }
         $arTasksProps = array("TASKPRIORITY" => array("NAME" => GetMessage("INTI_TASKPRIORITY"), "ACTIVE" => "Y", "SORT" => 100, "CODE" => "TaskPriority", "PROPERTY_TYPE" => "L", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId, "VALUES" => array(array("VALUE" => "   " . GetMessage("INTI_TASKPRIORITY_1"), "DEF" => "N", "SORT" => 100, "XML_ID" => "1"), array("VALUE" => "  " . GetMessage("INTI_TASKPRIORITY_2"), "DEF" => "Y", "SORT" => 200, "XML_ID" => "2"), array("VALUE" => " " . GetMessage("INTI_TASKPRIORITY_3"), "DEF" => "N", "SORT" => 300, "XML_ID" => "3"))), "TASKCOMPLETE" => array("NAME" => GetMessage("INTI_TASKCOMPLETE"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskComplete", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKASSIGNEDTO" => array("NAME" => GetMessage("INTI_TASKASSIGNEDTO"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskAssignedTo", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "Y", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKTRACKERS" => array("NAME" => GetMessage("INTI_TASKTRACKERS"), "ACTIVE" => "Y", "SORT" => 400, "CODE" => "TaskTrackers", "PROPERTY_TYPE" => "S", "USER_TYPE" => "UserID", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKALERT" => array("NAME" => GetMessage("INTI_TASKALERT"), "ACTIVE" => "Y", "SORT" => 500, "CODE" => "TaskAlert", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "DEFAULT_VALUE" => "Y", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZE" => array("NAME" => GetMessage("INTI_TASKSIZE"), "ACTIVE" => "Y", "SORT" => 600, "CODE" => "TaskSize", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKSIZEREAL" => array("NAME" => GetMessage("INTI_TASKSIZEREAL"), "ACTIVE" => "Y", "SORT" => 700, "CODE" => "TaskSizeReal", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 5, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFINISH" => array("NAME" => GetMessage("INTI_TASKFINISH"), "ACTIVE" => "Y", "SORT" => 800, "CODE" => "TaskFinish", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "Y", "SEARCHABLE" => "Y", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKFILES" => array("NAME" => GetMessage("INTI_TASKFILES"), "ACTIVE" => "Y", "SORT" => 900, "CODE" => "TaskFiles", "PROPERTY_TYPE" => "F", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "Y", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREPORT" => array("NAME" => GetMessage("INTI_TASKREPORT"), "ACTIVE" => "Y", "SORT" => 1000, "CODE" => "TaskReport", "PROPERTY_TYPE" => "S", "USER_TYPE" => false, "ROW_COUNT" => 10, "COL_COUNT" => 60, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKREMIND" => array("NAME" => GetMessage("INTI_TASKREMIND"), "ACTIVE" => "Y", "SORT" => 300, "CODE" => "TaskRemind", "PROPERTY_TYPE" => "S", "USER_TYPE" => "DateTime", "ROW_COUNT" => 1, "COL_COUNT" => 30, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "VERSION" => array("NAME" => GetMessage("INTI_VERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "VERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId), "TASKVERSION" => array("NAME" => GetMessage("INTI_TASKVERSION"), "ACTIVE" => "Y", "SORT" => 1100, "CODE" => "TASKVERSION", "PROPERTY_TYPE" => "N", "USER_TYPE" => false, "ROW_COUNT" => 1, "COL_COUNT" => 10, "LINK_IBLOCK_ID" => 0, "WITH_DESCRIPTION" => "N", "FILTRABLE" => "N", "SEARCHABLE" => "N", "MULTIPLE" => "N", "MULTIPLE_CNT" => 5, "IS_REQUIRED" => "N", "FILE_TYPE" => "jpg, gif, bmp, png, jpeg", "LIST_TYPE" => "L", "IBLOCK_ID" => $iblockId));
         foreach ($arTasksProps as $propKey => $arProp) {
             if (!array_key_exists($propKey, $arIBlockProperties)) {
                 $ibp = new CIBlockProperty();
                 $ibp->Add($arProp);
             }
         }
         $dbSectionsList = CIBlockSection::GetList(array(), array("GLOBAL_ACTIVE" => "Y", "XML_ID" => $taskType == "group" ? $ownerId : "users_tasks", "IBLOCK_ID" => $iblockId, "SECTION_ID" => 0), false);
         if ($arSection = $dbSectionsList->GetNext()) {
             $globalParentSectionId = $arSection["ID"];
         }
         if ($globalParentSectionId <= 0) {
             if ($taskType == "group") {
                 $folderName = "-";
                 $folderXmlId = $ownerId;
                 if ($arGroup = CSocNetGroup::GetByID($ownerId)) {
                     $folderName = $arGroup["NAME"] . " [" . $ownerId . "]";
                     $folderXmlId = $ownerId;
                 }
             } else {
                 $folderName = "User Tasks";
                 $folderXmlId = "users_tasks";
             }
             $arFields = array("IBLOCK_ID" => $iblockId, "IBLOCK_SECTION_ID" => 0, "ACTIVE" => "Y", "NAME" => $folderName, "XML_ID" => $folderXmlId);
             $iblockSection = new CIBlockSection();
             $globalParentSectionId = $iblockSection->Add($arFields, true);
             CIntranetTasks::InstallDefaultViews($taskType, $ownerId);
         }
         $db = CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => array("intranet", "CIntranetTasksDocument", "x" . $iblockId)), false, false, array("ID"));
         //			while ($ar = $db->Fetch())
         //			{
         //				try
         //				{
         //					CBPWorkflowTemplateLoader::Delete($ar["ID"]);
         //				}
         //				catch(Exception $e)
         //				{
         //					CBPWorkflowTemplateLoader::Update($ar["ID"], array("AUTO_EXECUTE" => 0));
         //				}
         //			}
         $workflowTemplateId = 0;
         if ($ar = $db->Fetch()) {
             $workflowTemplateId = $ar["ID"];
         } else {
             require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template.php";
             $workflowTemplateId = CBPWorkflowTemplateLoader::Add($arFields);
         }
         $arTaskStatusTmp = array();
         $arTaskStatusTmpAlt = array();
         $dbRes = CIBlockProperty::GetPropertyEnum("TaskStatus", array("SORT" => "ASC"), array("IBLOCK_ID" => $iblockId));
         while ($arRes = $dbRes->Fetch()) {
             $arTaskStatusTmp[StrToUpper($arRes["XML_ID"])] = $arRes["ID"];
             $arTaskStatusTmpAlt[$arRes["ID"]] = $arRes["XML_ID"];
         }
         $dbResult = CIBlockElement::GetList(array(), array("IBLOCK_ID" => $iblockId, "INCLUDE_SUBSECTIONS" => "Y", "!PROPERTY_TASKVERSION" => 2), false, false, array("ID", "PROPERTY_TASKSTATUS", "PROPERTY_TASKASSIGNEDTO", "IBLOCK_SECTION_ID"));
         if ($arResult = $dbResult->Fetch()) {
             $arOldTasksWFs = array();
             $arOldTasksSTs = array();
             require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/intranet/classes/general/tasks_wf_template1.php";
             $arOldTasksWFsTmp = array();
             foreach ($arOldTasksWFs as $t1 => $t2) {
                 if (array_key_exists($t1, $arTaskStatusTmp)) {
                     $arOldTasksWFsTmp[$arTaskStatusTmp[$t1]] = $t2;
                 }
             }
             $arOldTasksSTsTmp = array();
             foreach ($arOldTasksSTs as $t1 => $t2) {
                 if (array_key_exists($t1, $arTaskStatusTmp)) {
                     $arOldTasksSTsTmp[$arTaskStatusTmp[$t1]] = $t2;
                 }
             }
             do {
                 $taskTypeTmp = "";
                 $ownerIdTmp = "";
                 $v = CIntranetTasks::PrepareSectionForPrint($arResult["IBLOCK_SECTION_ID"]);
                 foreach ($v as $k1 => $v1) {
                     $taskTypeTmp = $v1["XML_ID"] == "users_tasks" ? "user" : "group";
                     $ownerIdTmp = $taskTypeTmp == "user" ? $arResult["PROPERTY_TASKASSIGNEDTO_VALUE"] : $v1["XML_ID"];
                     break;
                 }
                 if ($taskTypeTmp == "group") {
                     $pathTemplate = str_replace(array("#GROUP_ID#", "#TASK_ID#"), array($ownerIdTmp, "{=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($ownerIdTmp, "{=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);
                 $workflowId = uniqid("", true);
                 if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksWFsTmp)) {
                     $v = $arOldTasksWFsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]];
                     $v = str_replace(array("#TPT_TASK_ID_LEN#", "#TPT_TASK_ID#", "#TPT_WORKFLOW_ID_LEN#", "#TPT_WORKFLOW_ID#", "#TPT_DOCUMENT_LEN1#", "#TPT_DOCUMENT_LEN2#", "#TPT_DOCUMENT_LEN3#", "#TPT_DOCUMENT_ROOT#", "#TPT_OWNER_ID#", "#TPT_TASK_TYPE_LEN#", "#TPT_TASK_TYPE#", "#TPT_PATH_TEMPLATE_LEN#", "#TPT_PATH_TEMPLATE#", "#TPT_FORUM_ID#", "#TPT_IBLOCKID_ID#"), array(strlen($arResult["ID"]), $arResult["ID"], strlen($workflowId), $workflowId, 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 25 + strlen($_SERVER["DOCUMENT_ROOT"]), 34 + strlen($_SERVER["DOCUMENT_ROOT"]), $_SERVER["DOCUMENT_ROOT"], $ownerIdTmp, strlen($taskTypeTmp), $taskTypeTmp, strlen($pathTemplate), $pathTemplate, $forumId, $iblockId), $v);
                     CBPWorkflowPersister::__InsertWorkflowHack($workflowId, $v);
                 }
                 if (array_key_exists($arResult["PROPERTY_TASKSTATUS_ENUM_ID"], $arOldTasksSTsTmp)) {
                     CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["STATE_TITLE"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PARAMS"], $arOldTasksSTsTmp[$arResult["PROPERTY_TASKSTATUS_ENUM_ID"]]["PERMS"]);
                 } else {
                     CBPStateService::__InsertStateHack($workflowId, "intranet", "CIntranetTasksDocument", $arResult["ID"], $workflowTemplateId, $arOldTasksSTs["COMPLETED"]["STATE"], $arOldTasksSTs["COMPLETED"]["STATE_TITLE"], $arOldTasksSTs["COMPLETED"]["PARAMS"], $arOldTasksSTs["COMPLETED"]["PERMS"]);
                 }
                 CIBlockElement::SetPropertyValues($arResult["ID"], $iblockId, 2, "TASKVERSION");
             } while ($arResult = $dbResult->Fetch());
         }
         $arTasksConverted2BP[$keyTasksConverted2BP] = $globalParentSectionId;
         $CACHE_MANAGER->Clean("IntranetTasksConverted2BP");
         $CACHE_MANAGER->Read(2592000, "IntranetTasksConverted2BP");
         $CACHE_MANAGER->Set("IntranetTasksConverted2BP", $arTasksConverted2BP);
     }
     return $globalParentSectionId;
 }
Example #16
0
 /**
  * Метод удаляет все связанные с документом записи.
  *
  * @param array $documentId - код документа в виде массива array(модуль, сущность, код_документа_в_модуле).
  * @param array $arErrors - массив ошибок, которые произошли при удалении в виде array(array("code" => код_ошибки, "message" => сообщение, "file" => путь_к_файлу), ...).
  */
 public static function OnDocumentDelete($documentId, &$arErrors)
 {
     $arErrors = array();
     $arStates = CBPStateService::GetDocumentStates($documentId);
     foreach ($arStates as $workflowId => $arState) {
         $terminate = strlen($arState["ID"]) > 0 && strlen($arState["WORKFLOW_STATUS"]) > 0;
         $errors = static::killWorkflow($workflowId, $terminate, $documentId);
         if ($errors) {
             foreach ($errors as $e) {
                 $arErrors[] = $e;
             }
         }
     }
     CBPStateService::DeleteByDocument($documentId);
     CBPHistoryService::DeleteByDocument($documentId);
 }
Example #17
0
 protected static function onTaskChange($taskId, $taskData, $status)
 {
     $workflowId = isset($taskData['WORKFLOW_ID']) ? $taskData['WORKFLOW_ID'] : null;
     if (!$workflowId) {
         $iterator = CBPTaskService::GetList(array('ID' => 'DESC'), array('ID' => $taskId), false, false, array('WORKFLOW_ID'));
         $row = $iterator->fetch();
         if (!$row) {
             return false;
         }
         $workflowId = $row['WORKFLOW_ID'];
         $taskData['WORKFLOW_ID'] = $workflowId;
     }
     //clean counters cache
     $users = array();
     if (!empty($taskData['USERS'])) {
         $users = $taskData['USERS'];
     }
     if (!empty($taskData['USERS_REMOVED'])) {
         $users = array_merge($users, $taskData['USERS_REMOVED']);
     }
     if (!empty($taskData['USERS_STATUSES'])) {
         $users = array_merge($users, array_keys($taskData['USERS_STATUSES']));
     }
     self::cleanCountersCache($users);
     //ping document
     $runtime = CBPRuntime::GetRuntime();
     $runtime->StartRuntime();
     $documentId = CBPStateService::GetStateDocumentId($workflowId);
     $documentService = $runtime->GetService('DocumentService');
     try {
         $documentService->onTaskChange($documentId, $taskId, $taskData, $status);
     } catch (Exception $e) {
     }
     return true;
 }
Example #18
0
    /*	$arWorkflowTemplate = CBPWorkflowTemplateLoader::GetTemplateState($workflowTemplateId);
    
    	if (!is_array($arWorkflowTemplate["STATE_PERMISSIONS"]) || count($arWorkflowTemplate["STATE_PERMISSIONS"]) <= 0)
    		$arWorkflowTemplate["STATE_PERMISSIONS"]["create"] = array("author");
    
    	$arResult["AllowableOperations"] = CBPDocument::GetAllowableOperations($GLOBALS["USER"]->GetID(), $GLOBALS["USER"]->GetUserGroupArray(), array($arWorkflowTemplate));
    */
    $arResult["AllowAdmin"] = $GLOBALS["USER"]->IsAdmin() || is_array($arParams["ADMIN_ACCESS"]) && count(array_intersect($arParams["ADMIN_ACCESS"], $GLOBALS["USER"]->GetUserGroupArray())) > 0;
    /*	$arResult["AllowCreate"] = ($arResult["AllowAdmin"] || (is_array($arResult["AllowableOperations"]) && in_array("create", $arResult["AllowableOperations"]) || is_array($arWorkflowTemplate["STATE_PERMISSIONS"]["create"]) && in_array("author", $arWorkflowTemplate["STATE_PERMISSIONS"]["create"])));*/
}
if (strlen($arResult["FatalErrorMessage"]) <= 0) {
    if ($_SERVER["REQUEST_METHOD"] == "GET" && strlen($_REQUEST["process_state_event"]) > 0 && check_bitrix_sessid()) {
        $bizprocId = trim($_REQUEST["bizproc_id"]);
        $bizprocEvent = trim($_REQUEST["bizproc_event"]);
        if (strlen($bizprocEvent) > 0) {
            $arState = CBPStateService::GetWorkflowState($bizprocId);
            if (count($arState) > 0) {
                list($dbRecordsList, $dbRecordsList1) = CBPVirtualDocument::GetList(array(), array("IBLOCK_ID" => $arParams["BLOCK_ID"], "ID" => $arState["DOCUMENT_ID"][2]), false, false, array("ID", "IBLOCK_ID", "CREATED_BY"));
                if ($arRecord = $dbRecordsList->Fetch()) {
                    $arCurrentUserGroups = $GLOBALS["USER"]->GetUserGroupArray();
                    if ("user_" . $GLOBALS["USER"]->GetID() == $arRecord["CREATED_BY"]) {
                        $arCurrentUserGroups[] = "author";
                    }
                    $arErrorTmp = array();
                    CBPDocument::SendExternalEvent($bizprocId, $bizprocEvent, array("Groups" => $arCurrentUserGroups, "User" => $GLOBALS["USER"]->GetID()), $arErrorTmp);
                    if (count($arErrorsTmp) > 0) {
                        foreach ($arErrorsTmp as $e) {
                            $arResult["FatalErrorMessage"] .= $e["message"] . ". ";
                        }
                    }
                } else {
Example #19
0
 $hgridColumns = $hgridOptions->GetVisibleColumns();
 $hgridSort = $hgridOptions->GetSorting(array("sort" => array("ID" => "desc")));
 $arResult["H_HEADERS"] = array(array("id" => "MODIFIED", "name" => GetMessage("BPATL_MODIFIED"), "default" => true, "sort" => ""), array("id" => "ACTION_NOTE", "name" => GetMessage("BPATL_DESCRIPTION"), "default" => true, "sort" => ""));
 $arResult["H_SORT"] = $hgridSort["sort"];
 $arResult["H_RECORDS"] = array();
 $arFilter = array("MODIFIED_BY" => $arParams["USER_ID"]);
 if (!empty($arParams["WORKFLOW_ID"])) {
     $arFilter["WORKFLOW_ID"] = $arParams["WORKFLOW_ID"];
 }
 $runtime = CBPRuntime::GetRuntime();
 $runtime->StartRuntime();
 $documentService = $runtime->GetService("DocumentService");
 $dbRecordsList = CBPTrackingService::GetList($hgridSort["sort"], $arFilter);
 while ($arRecord = $dbRecordsList->GetNext()) {
     if (strlen($arRecord["WORKFLOW_ID"]) > 0) {
         $arRecord["STATE"] = CBPStateService::GetWorkflowState($arRecord["WORKFLOW_ID"]);
         $arRecord["DOCUMENT_URL"] = CBPDocument::GetDocumentAdminPage($arRecord["STATE"]["DOCUMENT_ID"]);
         try {
             $dt = $documentService->GetDocumentType($arRecord["STATE"]["DOCUMENT_ID"]);
         } catch (Exception $e) {
         }
         $arRecord["ACTION_NOTE"] = preg_replace_callback("/\\{=([A-Za-z0-9_]+)\\:([A-Za-z0-9_]+)\\}/i", create_function('$matches', 'return __bwl_ParseStringParameterTmp1($matches, array("' . $dt[0] . '", "' . $dt[1] . '", "' . $dt[2] . '"));'), $arRecord["ACTION_NOTE"]);
     }
     $aActions = array();
     if (strlen($arRecord["DOCUMENT_URL"]) > 0) {
         $aActions[] = array("ICONCLASS" => "", "DEFAULT" => false, "TEXT" => GetMessage("BPTL_C_DOCUMENT"), "ONCLICK" => "window.open('" . $arRecord["DOCUMENT_URL"] . "');");
     }
     $arResult["H_RECORDS"][] = array("data" => $arRecord, "actions" => $aActions, "columns" => array(), "editable" => false);
 }
 $arResult["H_ROWS_COUNT"] = $dbRecordsList->SelectedRowsCount();
 $arResult["H_NAV_STRING"] = $dbRecordsList->GetPageNavStringEx($navComponentObject, GetMessage("INTS_TASKS_NAV"), "", false);
Example #20
0
    }
    if ($processes) {
        if (isset($arVariables["mode"])) {
            switch ($arVariables["mode"]) {
                case "catalog":
                    if ($processes) {
                        $componentPage = "catalog_processes";
                    }
                    break;
            }
        }
    }
    $arResult = array("FOLDER" => "", "URL_TEMPLATES" => array("list_field_edit" => $APPLICATION->GetCurPage() . "?mode=field" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#", "list_fields" => $APPLICATION->GetCurPage() . "?mode=fields" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "list_element_edit" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "list_sections" => $APPLICATION->GetCurPage() . "?mode=edit" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "bizproc_log" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["document_state_id"] . "=#document_state_id#", "bizproc_task" => $APPLICATION->GetCurPage() . "?mode=bp&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["task_id"] . "=#task_id#", "bizproc_workflow_start" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_delete" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#", "bizproc_workflow_admin" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#", "bizproc_workflow_edit" => $APPLICATION->GetCurPage() . "?mode=bp" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_vars" => $APPLICATION->GetCurPage() . "?mode=bp_vars" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "bizproc_workflow_constants" => $APPLICATION->GetCurPage() . "?mode=bp_constants" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["ID"] . "=#ID#", "list_file" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#" . "&" . $arVariableAliases["element_id"] . "=#element_id#" . "&" . $arVariableAliases["field_id"] . "=#field_id#" . "&" . $arVariableAliases["file_id"] . "=#file_id#", "list" => $APPLICATION->GetCurPage() . "?mode=view" . "&" . $arVariableAliases["list_id"] . "=#list_id#" . "&" . $arVariableAliases["section_id"] . "=#section_id#", "lists" => $APPLICATION->GetCurPage()), "VARIABLES" => $arVariables, "ALIASES" => $arVariableAliases);
    if ($processes) {
        $arResult["URL_TEMPLATES"]["catalog_processes"] = $APPLICATION->GetCurPage() . "?mode=catalog";
    }
}
$p = strpos($arResult["URL_TEMPLATES"]["bizproc_workflow_delete"], "?");
if ($p === false) {
    $ch = "?";
} else {
    $ch = "&";
}
$arResult["URL_TEMPLATES"]["bizproc_workflow_delete"] .= $ch . "action=del_bizproc";
if (isset($arVariables["document_state_id"]) && !isset($arVariables["element_id"]) && CModule::IncludeModule("bizproc")) {
    $arWorkflowState = CBPStateService::GetWorkflowState($arVariables["document_state_id"]);
    if (is_array($arWorkflowState) && is_array($arWorkflowState["DOCUMENT_ID"])) {
        list(, , $arResult["VARIABLES"]["element_id"]) = CBPHelper::ParseDocumentId($arWorkflowState["DOCUMENT_ID"]);
    }
}
$this->IncludeComponentTemplate($componentPage);
Example #21
0
$dbResultList->NavStart();
$lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("BPATL_NAV")));
while ($arResultItem = $dbResultList->NavNext(true, "f_")) {
    $row =& $lAdmin->AddRow($f_ID, $arResultItem);
    $s = $allowAdminAccess ? "&uid=" . intval($arResultItem["USER_ID"]) : "";
    $row->AddField("ID", '<a href="bizproc_task.php?id=' . $f_ID . $s . '&back_url=' . urlencode($APPLICATION->GetCurPageParam("lang=" . LANGUAGE_ID, array("lang"))) . '" title="' . GetMessage("BPATL_VIEW") . '">' . $f_ID . '</a>');
    $row->AddField("NAME", $f_NAME);
    $description = $f_DESCRIPTION;
    if (strlen($description) > 100) {
        $description = substr($description, 0, 97) . "...";
    }
    $row->AddField("DESCRIPTION", $description);
    $row->AddField("DESCRIPTION_FULL", $f_DESCRIPTION);
    $row->AddField("MODIFIED", $f_MODIFIED);
    if (count(array_intersect($arVisibleColumns, array("WORKFLOW_NAME", "WORKFLOW_STATE"))) > 0) {
        $arState = CBPStateService::GetWorkflowState($arResultItem["WORKFLOW_ID"]);
        $row->AddField("WORKFLOW_NAME", $arState["TEMPLATE_NAME"]);
        $row->AddField("WORKFLOW_STATE", $arState["STATE_TITLE"]);
    }
    if (in_array("USER", $arVisibleColumns)) {
        $dbUserTmp = CUser::GetByID($arResultItem["USER_ID"]);
        if ($arUserTmp = $dbUserTmp->GetNext()) {
            $str = CUser::FormatName(COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID), $arUserTmp, true);
            $str .= " [" . $arResultItem["USER_ID"] . "]";
        } else {
            $str = str_replace("#USER_ID#", $arResultItem["USER_ID"], GetMessage("BPATL_USER_NOT_FOUND"));
        }
        $row->AddField("USER", $str);
    }
    $arActions = array();
    $arActions[] = array("ICON" => "edit", "TEXT" => GetMessage("BPATL_VIEW"), "ACTION" => $lAdmin->ActionRedirect('bizproc_task.php?id=' . $f_ID . $s . '&back_url=' . urlencode($APPLICATION->GetCurPageParam("lang=" . LANGUAGE_ID, array("lang"))) . ''), "DEFAULT" => true);
Example #22
0
     if (count($arState) > 0) {
         CBPDocument::TerminateWorkflow($_REQUEST["stop_bizproc_id"], $arState["DOCUMENT_ID"], $arErrorsTmp);
         if (count($arErrorsTmp) > 0) {
             foreach ($arErrorsTmp as $e) {
                 $arResult["ErrorMessage"] .= $e["message"] . ". ";
             }
         }
     } else {
         $arResult["ErrorMessage"] .= GetMessage("BPWC_WLC_MISSING_BP") . ". ";
     }
     if (strlen($arResult["ErrorMessage"]) <= 0) {
         LocalRedirect($APPLICATION->GetCurPageParam("", array("sessid", "stop_bizproc_id", "delete_bizproc_id")));
     }
 }
 if ($_SERVER["REQUEST_METHOD"] == "GET" && strlen($_REQUEST["delete_bizproc_id"]) > 0 && check_bitrix_sessid() && $arResult["AllowAdmin"]) {
     $arState = CBPStateService::GetWorkflowState($_REQUEST["delete_bizproc_id"]);
     if (count($arState) > 0) {
         $arErrorsTmp = array();
         CBPDocument::OnDocumentDelete($arState["DOCUMENT_ID"], $arErrorsTmp);
         if (count($arErrorsTmp) > 0) {
             foreach ($arErrorsTmp as $e) {
                 $arResult["ErrorMessage"] .= $e["message"] . ". ";
             }
         }
         if (strlen($arResult["ErrorMessage"]) <= 0) {
             CIBlockElement::Delete($arState["DOCUMENT_ID"][2]);
         }
     } else {
         $arResult["ErrorMessage"] .= GetMessage("BPWC_WLC_MISSING_BP") . ". ";
     }
     if (strlen($arResult["ErrorMessage"]) <= 0) {
Example #23
0
if (!$arResult["TASK"] && strlen($arParams["WORKFLOW_ID"]) > 0) {
    $dbTask = CBPTaskService::GetList(array(), array("WORKFLOW_ID" => $arParams["WORKFLOW_ID"], "USER_ID" => $arParams["USER_ID"], 'USER_STATUS' => CBPTaskUserStatus::Waiting), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS", 'IS_INLINE', 'STATUS', 'USER_STATUS', 'DOCUMENT_NAME'));
    $arResult["TASK"] = $dbTask->GetNext();
}
if (!$arResult["TASK"]) {
    ShowError(GetMessage("BPAT_NO_TASK"));
    return false;
}
if ($arResult["TASK"]['STATUS'] > CBPTaskStatus::Running || $arResult["TASK"]['USER_STATUS'] > CBPTaskUserStatus::Waiting) {
    $arResult["ShowMode"] = "Success";
    $arResult['IsComplete'] = true;
}
if ($arResult['ReadOnly'] && isset($arResult['TASK']['PARAMETERS']['AccessControl']) && $arResult['TASK']['PARAMETERS']['AccessControl'] == 'Y') {
    $arResult['TASK']['DESCRIPTION'] = '';
}
$arState = CBPStateService::GetWorkflowState($arResult['TASK']['WORKFLOW_ID']);
if (!$arState) {
    ShowError(GetMessage("BPAT_NO_STATE"));
    // Let`s clean up!
    CBPTaskService::DeleteByWorkflow($arResult['TASK']['WORKFLOW_ID']);
    return false;
}
$arResult['TASK']['PARAMETERS']['DOCUMENT_ID'] = $arState['DOCUMENT_ID'];
$arResult["TASK"]["MODULE_ID"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][0];
$arResult["TASK"]["ENTITY"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][1];
$arResult["TASK"]["DOCUMENT_ID"] = $arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"][2];
$arParams["DOCUMENT_URL"] = trim($arParams["DOCUMENT_URL"]);
if (empty($arParams["DOCUMENT_URL"])) {
    $arParams["DOCUMENT_URL"] = CBPDocument::GetDocumentAdminPage($arResult["TASK"]["PARAMETERS"]["DOCUMENT_ID"]);
} else {
    $arParams["DOCUMENT_URL"] = CComponentEngine::MakePathFromTemplate($arParams["DOCUMENT_URL"], $arResult["TASK"]);
Example #24
0
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die;
}
if (!CModule::IncludeModule('bizproc')) {
    return false;
}
if (!$GLOBALS['USER']->IsAuthorized()) {
    return false;
}
$arParams['WORKFLOW_ID'] = empty($arParams['WORKFLOW_ID']) ? $_REQUEST['WORKFLOW_ID'] : $arParams['WORKFLOW_ID'];
if (!$arParams['WORKFLOW_ID']) {
    return false;
}
$arResult['TASKS'] = CBPViewHelper::getWorkflowTasks($arParams['WORKFLOW_ID'], true, true);
$arResult['WORKFLOW_STATE_INFO'] = CBPStateService::getWorkflowStateInfo($arParams['WORKFLOW_ID']);
$arResult['USER_ID'] = (int) $GLOBALS['USER']->GetId();
if (!empty($arResult['TASKS']['RUNNING'])) {
    foreach ($arResult['TASKS']['RUNNING'] as &$t) {
        if ($t['IS_INLINE'] == 'Y') {
            $controls = CBPDocument::getTaskControls($t);
            $t['BUTTONS'] = $controls['BUTTONS'];
        }
        if (isset($t['PARAMETERS']['AccessControl']) && $t['PARAMETERS']['AccessControl'] == 'Y') {
            $t['DESCRIPTION'] = '';
        }
    }
}
$arResult['noWrap'] = isset($arParams['NOWRAP']) && $arParams['NOWRAP'] == 'Y';
ob_start();
$this->IncludeComponentTemplate();
Example #25
0
 }
 $arParams["USER_ID"] = intVal($GLOBALS["USER"]->GetID());
 $arParams["WORKFLOW_ID"] = empty($arParams["WORKFLOW_ID"]) ? $_REQUEST["WORKFLOW_ID"] : $arParams["WORKFLOW_ID"];
 //***************** URL ********************************************/
 $arResult["back_url"] = urlencode(empty($_REQUEST["back_url"]) ? $APPLICATION->GetCurPageParam() : $_REQUEST["back_url"]);
 /***************** ADDITIONAL **************************************/
 $arParams["PAGE_ELEMENTS"] = intVal(intVal($arParams["PAGE_ELEMENTS"]) > 0 ? $arParams["PAGE_ELEMENTS"] : 50);
 $arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]);
 /***************** STANDART ****************************************/
 $arParams["SET_TITLE"] = $arParams["SET_TITLE"] == "N" ? "N" : "Y";
 //Turn on by default
 /********************************************************************
 					/Input params
 	********************************************************************/
 $arError = array();
 $arResult["arWorkflowState"] = CBPStateService::GetWorkflowState($arParams["ID"]);
 $arParams["DOCUMENT_ID"] = $arResult["arWorkflowState"]["DOCUMENT_ID"];
 $arParams["USER_GROUPS"] = $GLOBALS["USER"]->GetUserGroupArray();
 if (method_exists($arParams["DOCUMENT_ID"][1], "GetUserGroups")) {
     $arParams["USER_GROUPS"] = call_user_func_array(array($arParams["DOCUMENT_ID"][1], "GetUserGroups"), array(null, $arParams["DOCUMENT_ID"], $GLOBALS["USER"]->GetID()));
 }
 if (!is_array($arResult["arWorkflowState"]) || count($arResult["arWorkflowState"]) <= 0) {
     $arError[] = array("id" => "error", "text" => GetMessage("BPABL_INVALID_WF"));
 } else {
     $bCanView = CBPDocument::CanUserOperateDocument(CBPCanUserOperateOperation::ViewWorkflow, $GLOBALS["USER"]->GetID(), $arResult["arWorkflowState"]["DOCUMENT_ID"], array("WorkflowId" => $arParams["ID"], "DocumentStates" => array($arParams["ID"] => $arResult["arWorkflowState"]), "UserGroups" => $arParams["USER_GROUPS"]));
     if (!$bCanView) {
         $arError[] = array("id" => "access denied", "text" => GetMessage("BPABL_NO_PERMS"));
     }
 }
 if (!empty($arError)) {
     $e = new CAdminException($arError);
Example #26
0
    $arResult["H_NAV_STRING"] = $dbRecordsList->GetPageNavStringEx($navComponentObject, GetMessage("INTS_TASKS_NAV"), "", false);
    $arResult["H_NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData();
    $arResult["H_NAV_RESULT"] = $dbRecordsList;
}
if (strlen($arResult["FatalErrorMessage"]) <= 0) {
    if (!$arParams['COUNTERS_ONLY']) {
        if ($arParams["SET_TITLE"] == "Y") {
            $APPLICATION->SetTitle(GetMessage("BPABS_TITLE"));
        }
        if ($arParams["SET_NAV_CHAIN"] == "Y") {
            $APPLICATION->AddChainItem(GetMessage("BPABS_TITLE"));
        }
    }
    $arResult['COUNTERS'] = CBPTaskService::getCounters($targetUserId);
    if ($arParams['COUNTERS_ONLY']) {
        $arResult['COUNTERS_RUNNING'] = CBPStateService::getRunningCounters($targetUserId);
    }
    //counter autofixer
    $currentCounter = (int) CUserCounter::GetValue($targetUserId, 'bp_tasks', '**');
    if (isset($arResult['COUNTERS']['*']) && $currentCounter != $arResult['COUNTERS']['*']) {
        CUserCounter::Set($targetUserId, 'bp_tasks', $arResult['COUNTERS']['*'], '**');
    }
} elseif (!$arParams['COUNTERS_ONLY']) {
    if ($arParams["SET_TITLE"] == "Y") {
        $APPLICATION->SetTitle(GetMessage("BPWC_WLC_ERROR"));
    }
    if ($arParams["SET_NAV_CHAIN"] == "Y") {
        $APPLICATION->AddChainItem(GetMessage("BPWC_WLC_ERROR"));
    }
}
$this->IncludeComponentTemplate();
Example #27
0
 /**
  * Creates new workflow instance from the specified template.
  *
  * @param int $workflowTemplateId - ID of the workflow template
  * @param string $documentId - ID of the document
  * @param mixed $workflowParameters - Optional parameters of the created workflow instance
  * @param array|null $parentWorkflow - Parent Workflow information.
  * @return CBPWorkflow
  * @throws CBPArgumentNullException
  * @throws CBPArgumentOutOfRangeException
  * @throws Exception
  * @throws \Bitrix\Main\ArgumentNullException
  */
 public function CreateWorkflow($workflowTemplateId, $documentId, $workflowParameters = array(), $parentWorkflow = null)
 {
     $workflowTemplateId = intval($workflowTemplateId);
     if ($workflowTemplateId <= 0) {
         throw new Exception("workflowTemplateId");
     }
     $arDocumentId = CBPHelper::ParseDocumentId($documentId);
     $limit = \Bitrix\Main\Config\Option::get("bizproc", "limit_simultaneous_processes", "0");
     if (intval($limit) > 0) {
         if (CBPStateService::CountDocumentWorkflows($documentId) >= $limit) {
             throw new Exception(GetMessage("BPCGDOC_LIMIT_SIMULTANEOUS_PROCESSES", array("#NUM#" => $limit)));
         }
     }
     if (!$this->isStarted) {
         $this->StartRuntime();
     }
     $workflowId = uniqid("", true);
     if ($parentWorkflow) {
         $this->addWorkflowToChain($workflowId, $parentWorkflow);
         if ($this->checkWorkflowRecursion($workflowId, $workflowTemplateId)) {
             throw new Exception(GetMessage("BPCGDOC_WORKFLOW_RECURSION_LOCK"));
         }
     }
     $workflow = new CBPWorkflow($workflowId, $this);
     $loader = CBPWorkflowTemplateLoader::GetLoader();
     list($rootActivity, $workflowVariablesTypes, $workflowParametersTypes) = $loader->LoadWorkflow($workflowTemplateId);
     if ($rootActivity == null) {
         throw new Exception("EmptyRootActivity");
     }
     //if (!is_a($rootActivity, "IBPRootActivity"))
     //	throw new Exception("RootActivityIsNotAIBPRootActivity");
     foreach (GetModuleEvents("bizproc", "OnCreateWorkflow", true) as $arEvent) {
         ExecuteModuleEventEx($arEvent, array($workflowTemplateId, $documentId, &$workflowParameters));
     }
     $workflow->Initialize($rootActivity, $arDocumentId, $workflowParameters, $workflowVariablesTypes, $workflowParametersTypes, $workflowTemplateId);
     $starterUserId = 0;
     if (isset($workflowParameters[CBPDocument::PARAM_TAGRET_USER])) {
         $starterUserId = intval(substr($workflowParameters[CBPDocument::PARAM_TAGRET_USER], strlen("user_")));
     }
     $this->arServices["StateService"]->AddWorkflow($workflowId, $workflowTemplateId, $arDocumentId, $starterUserId);
     $this->arWorkflows[$workflowId] = $workflow;
     return $workflow;
 }
Example #28
0
	/**
	* Метод удаляет все связанные с документом записи.
	*
	* @param array $documentId - код документа в виде массива array(модуль, сущность, код_документа_в_модуле).
	* @param array $arErrors - массив ошибок, которые произошли при удалении в виде array(array("code" => код_ошибки, "message" => сообщение, "file" => путь_к_файлу), ...).
	*/
	public static function OnDocumentDelete($documentId, &$arErrors)
	{
		$arErrors = array();

		$arStates = CBPStateService::GetDocumentStates($documentId);
		foreach ($arStates as $workflowId => $arState)
		{
			if (strlen($arState["ID"]) > 0 && strlen($arState["WORKFLOW_STATUS"]) > 0)
				self::TerminateWorkflow($workflowId, $documentId, $arErrors);

			CBPTrackingService::DeleteByWorkflow($workflowId);
			CBPTaskService::DeleteByWorkflow($workflowId);
		}

		CBPStateService::DeleteByDocument($documentId);
		CBPHistoryService::DeleteByDocument($documentId);
	}
Example #29
0
$arParams["PATH_TO_BIZPROC_EDIT"] = trim($arParams["PATH_TO_BIZPROC_EDIT"]);
if (strlen($arParams["PATH_TO_BIZPROC_EDIT"]) <= 0) {
    $arParams["PATH_TO_BIZPROC_EDIT"] = htmlspecialcharsbx($APPLICATION->GetCurPage() . "?" . $arParams["PAGE_VAR"] . "=bizproc_edit&" . $arParams["TASK_VAR"] . "=#task_id#");
}
if (!$GLOBALS["USER"]->IsAuthorized()) {
    $arResult["NEED_AUTH"] = "Y";
} else {
    if ($arParams["SET_TITLE"] == "Y") {
        $APPLICATION->SetTitle(GetMessage("SONET_BIZPROC_TITLE"));
    }
    if ($arParams["SET_NAV_CHAIN"] != "N") {
        $APPLICATION->AddChainItem(GetMessage("SONET_BIZPROC_TITLE"));
    }
    $dbResultList = CBPTaskService::GetList(array("MODIFIED" => "DESC"), array("USER_ID" => $USER->GetID()), false, false, array("ID", "WORKFLOW_ID", "ACTIVITY", "ACTIVITY_NAME", "MODIFIED", "OVERDUE_DATE", "NAME", "DESCRIPTION", "PARAMETERS"));
    while ($arResultItem = $dbResultList->GetNext()) {
        if (strlen($arResultItem["DESCRIPTION"]) > 100) {
            $arResultItem["DESCRIPTION"] = substr($arResultItem["DESCRIPTION"], 0, 97) . "...";
        }
        $arResultItem["EditUrl"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_BIZPROC_EDIT"], array("task_id" => $arResultItem["ID"]));
        $arResult["TASKS"][] = $arResultItem;
    }
    $dbTracking = CBPTrackingService::GetList(array("MODIFIED" => "DESC"), array("MODIFIED_BY" => $USER->GetID()));
    while ($arTracking = $dbTracking->GetNext()) {
        if (strlen($arTracking["WORKFLOW_ID"]) > 0) {
            $arTracking["STATE"] = CBPStateService::GetWorkflowState($arTracking["WORKFLOW_ID"]);
            $arTracking["STATE"]["Url"] = CBPDocument::GetDocumentAdminPage($arTracking["STATE"]["DOCUMENT_ID"]);
        }
        $arResult["TRACKING"][] = $arTracking;
    }
}
$this->IncludeComponentTemplate();
 /**
  * @param $userId
  * @return bool
  */
 public function canRead($userId)
 {
     if ($this->canRead !== null) {
         return $this->canRead;
     }
     if (($res = $this->getDataToCheck($this->entityId)) && !empty($res)) {
         list($message, $topic) = $res;
         $entityId = null;
         $entityType = null;
         if (!empty($topic["XML_ID"])) {
             $entityId = substr($topic["XML_ID"], strrpos($topic["XML_ID"], "_") + 1);
             $entityType = substr($topic["XML_ID"], 0, strrpos($topic["XML_ID"], "_"));
         }
         switch ($entityType) {
             case "TASK":
                 if (Loader::includeModule("tasks")) {
                     $connector = new TaskConnector($entityId, $this->attachedObject);
                     $this->canRead = $connector->canRead($userId);
                     return $this->canRead;
                 }
                 break;
             case "EVENT":
                 if (Loader::includeModule("calendar")) {
                     $connector = new CalendarEventConnector($entityId, $this->attachedObject);
                     $this->canRead = $connector->canRead($userId);
                     return $this->canRead;
                 }
                 break;
             case "IBLOCK":
                 if ((int) $topic["USER_ID"] > 0 && Loader::includeModule("socialnetwork")) {
                     $codes = array();
                     if (($res = \CSocNetLog::getList(array(), array("SOURCE_ID" => $entityId, "EVENT_ID" => array("photo_photo", "news", "wiki")), false, false, array("ID"))->fetch()) && $res) {
                         $db_res = \CSocNetLogRights::getList(array(), array("LOG_ID" => $res["ID"]));
                         while ($res = $db_res->fetch()) {
                             $codes[] = $res["GROUP_CODE"];
                         }
                     }
                     $this->canRead = $this->canAccess($userId, $codes);
                     return $this->canRead;
                 }
                 $this->canRead = true;
                 return $this->canRead;
             case "MEETING":
                 $this->canRead = (int) $message["FORUM_ID"] == (int) \COption::getOptionInt('meeting', 'comments_forum_id', 0, SITE_ID);
                 return $this->canRead;
             case "TIMEMAN_ENTRY":
                 if (Loader::includeModule("timeman")) {
                     $dbEntry = \CTimeManEntry::getList(array(), array("ID" => $entityId), false, false, array("ID", "USER_ID"));
                     if ($arEntry = $dbEntry->fetch()) {
                         if ($arEntry["USER_ID"] == $userId) {
                             $this->canRead = true;
                             return $this->canRead;
                         } else {
                             $arManagers = \CTimeMan::getUserManagers($arEntry["USER_ID"]);
                             $this->canRead = in_array($userId, $arManagers);
                             return $this->canRead;
                         }
                     }
                 }
                 $this->canRead = false;
                 return $this->canRead;
             case "TIMEMAN_REPORT":
                 if (Loader::includeModule("timeman")) {
                     $dbReport = \CTimeManReportFull::getList(array(), array("ID" => $entityId), array("ID", "USER_ID"));
                     if ($arReport = $dbReport->fetch()) {
                         if ($arReport["USER_ID"] == $userId) {
                             $this->canRead = true;
                             return $this->canRead;
                         } else {
                             $arManagers = \CTimeMan::getUserManagers($arReport["USER_ID"]);
                             $this->canRead = in_array($userId, $arManagers);
                             return $this->canRead;
                         }
                     }
                 }
                 $this->canRead = false;
                 return $this->canRead;
             case "WF":
                 $this->canRead = false;
                 if (Loader::includeModule("bizproc")) {
                     $currentUserId = (int) $this->getUser()->getId();
                     $participants = \CBPTaskService::getWorkflowParticipants($entityId);
                     if (in_array($currentUserId, $participants)) {
                         $this->canRead = true;
                     } else {
                         $state = \CBPStateService::getWorkflowStateInfo($entityId);
                         if ($state && $currentUserId === (int) $state['STARTED_BY']) {
                             $this->canRead = true;
                         }
                     }
                 }
                 return $this->canRead;
         }
         if ((!empty($topic["SOCNET_GROUP_ID"]) || !empty($topic["OWNER_ID"])) && Loader::includeModule("socialnetwork")) {
             if (!empty($topic["SOCNET_GROUP_ID"])) {
                 $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_GROUP, $topic["SOCNET_GROUP_ID"], "forum", "view");
                 return $this->canRead;
             } else {
                 $this->canRead = \CSocNetFeatures::isActiveFeature(SONET_ENTITY_USER, $topic["OWNER_ID"], "forum") && \CSocNetFeaturesPerms::canPerformOperation($userId, SONET_ENTITY_USER, $topic["OWNER_ID"], "forum", "view");
                 return $this->canRead;
             }
         }
         if ($message) {
             $user = $this->getUser();
             if ($user && $userId == $user->getId()) {
                 $userGroups = $user->getUserGroupArray();
             } else {
                 $userGroups = array(2);
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             if (\CForumUser::isAdmin($userId, $userGroups)) {
                 $this->canRead = true;
                 return $this->canRead;
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             $perms = \CForumNew::getUserPermission($message["FORUM_ID"], $userGroups);
             if ($perms >= "Y") {
                 $this->canRead = true;
                 return $this->canRead;
             }
             if ($perms < "E" || $perms < "Q" && $message["APPROVED"] != "Y") {
                 $this->canRead = false;
                 return $this->canRead;
             }
             /** @noinspection PhpDynamicAsStaticMethodCallInspection */
             $forum = \CForumNew::getByID($message["FORUM_ID"]);
             $this->canRead = $forum["ACTIVE"] == "Y";
             return $this->canRead;
         }
     }
     $this->canRead = false;
     return $this->canRead;
 }