예제 #1
0
 function GetOperations()
 {
     global $USER;
     static $arOp;
     static $arUsers;
     $userGroups = $USER->GetUserGroupArray();
     $key = implode('-', $userGroups);
     if (!is_array($arOp)) {
         $arOp = array();
     }
     if (!is_array($arOp[$key])) {
         $res = CSticker::GetAccessPermissions();
         $arOp[$key] = array();
         $bDefaultTask = false;
         $count = 0;
         foreach ($res as $group_id => $task_id) {
             if (in_array($group_id, $userGroups)) {
                 $arOp[$key] = array_merge($arOp[$key], CTask::GetOperations($task_id, true));
                 $count++;
             }
         }
         if ($count < count($userGroups)) {
             $defaultAccess = COption::GetOptionString('fileman', 'stickers_default_access', false);
             if ($defaultAccess !== false) {
                 $arOp[$key] = array_merge($arOp[$key], CTask::GetOperations($defaultAccess, true));
             }
         }
     }
     return $arOp[$key];
 }
예제 #2
0
 public static function GetOperations($collectionId, $menu = false)
 {
     global $USER;
     static $oCollections;
     static $arOp;
     $userGroups = $USER->GetUserGroupArray();
     $key = $collectionId . '|' . implode('-', $userGroups);
     if (!is_array($arOp[$key])) {
         if (!is_array($arOp)) {
             $arOp = array();
         }
         if (!is_array($oCollections)) {
             $res = CMedialib::GetCollectionTree(array('menu' => $menu));
             $oCollections = $res['Collections'];
         }
         $userGroups = $USER->GetUserGroupArray();
         $res = CMedialib::GetAccessPermissionsArray($collectionId, $oCollections);
         $arOp[$key] = array();
         foreach ($res as $group_id => $task_id) {
             if (in_array($group_id, $userGroups)) {
                 $arOp[$key] = array_merge($arOp[$key], CTask::GetOperations($task_id, true));
             }
         }
     }
     return $arOp[$key];
 }
예제 #3
0
 function CanUserOperateDocumentType($operation, $userId, $documentType, $arParameters = array())
 {
     $documentType = trim($documentType);
     if (strlen($documentType) <= 0) {
         return false;
     }
     $arParameters["IBlockId"] = intval(substr($documentType, strlen("iblock_")));
     if (!array_key_exists("IBlockRightsMode", $arParameters)) {
         $arParameters["IBlockRightsMode"] = CIBlock::GetArrayByID($arParameters["IBlockId"], "RIGHTS_MODE");
     }
     if ($arParameters["IBlockRightsMode"] === "E") {
         if ($operation === CBPCanUserOperateOperation::CreateWorkflow) {
             return CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "iblock_rights_edit");
         } elseif ($operation === CBPCanUserOperateOperation::WriteDocument) {
             return CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "section_element_bind");
         } elseif ($operation === CBPCanUserOperateOperation::ViewWorkflow || $operation === CBPCanUserOperateOperation::StartWorkflow) {
             if (!array_key_exists("WorkflowId", $arParameters)) {
                 return false;
             }
             if ($operation === CBPCanUserOperateOperation::ViewWorkflow && !CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "element_read")) {
                 return false;
             }
             if ($operation === CBPCanUserOperateOperation::StartWorkflow && !CIBlockRights::UserHasRightTo($arParameters["IBlockId"], $arParameters["IBlockId"], "section_element_bind")) {
                 return false;
             }
             $userId = intval($userId);
             if (!array_key_exists("AllUserGroups", $arParameters)) {
                 if (!array_key_exists("UserGroups", $arParameters)) {
                     $arParameters["UserGroups"] = CUser::GetUserGroup($userId);
                 }
                 $arParameters["AllUserGroups"] = $arParameters["UserGroups"];
                 $arParameters["AllUserGroups"][] = "Author";
             }
             if (!array_key_exists("DocumentStates", $arParameters)) {
                 if ($operation === CBPCanUserOperateOperation::StartWorkflow) {
                     $arParameters["DocumentStates"] = CBPWorkflowTemplateLoader::GetDocumentTypeStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]));
                 } else {
                     $arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]), null);
                 }
             }
             if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
                 $arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
             } else {
                 return false;
             }
             $arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
             if (!is_array($arAllowableOperations)) {
                 return false;
             }
             if ($operation === CBPCanUserOperateOperation::ViewWorkflow && in_array("read", $arAllowableOperations) || $operation === CBPCanUserOperateOperation::StartWorkflow && in_array("write", $arAllowableOperations)) {
                 return true;
             }
             $chop = $operation === CBPCanUserOperateOperation::ViewWorkflow ? "element_read" : "section_element_bind";
             foreach ($arAllowableOperations as $op) {
                 $ar = CTask::GetOperations($op, true);
                 if (in_array($chop, $ar)) {
                     return true;
                 }
             }
         }
         return false;
     }
     if (!array_key_exists("IBlockPermission", $arParameters)) {
         if (CModule::IncludeModule('lists')) {
             $arParameters["IBlockPermission"] = CLists::GetIBlockPermission($arParameters["IBlockId"], $userId);
         } else {
             $arParameters["IBlockPermission"] = CIBlock::GetPermission($arParameters["IBlockId"], $userId);
         }
     }
     if ($arParameters["IBlockPermission"] <= "R") {
         return false;
     } elseif ($arParameters["IBlockPermission"] >= "W") {
         return true;
     }
     $userId = intval($userId);
     if (!array_key_exists("AllUserGroups", $arParameters)) {
         if (!array_key_exists("UserGroups", $arParameters)) {
             $arParameters["UserGroups"] = CUser::GetUserGroup($userId);
         }
         $arParameters["AllUserGroups"] = $arParameters["UserGroups"];
         $arParameters["AllUserGroups"][] = "Author";
     }
     if (!array_key_exists("DocumentStates", $arParameters)) {
         $arParameters["DocumentStates"] = CBPDocument::GetDocumentStates(array("iblock", "CIBlockDocument", "iblock_" . $arParameters["IBlockId"]), null);
     }
     if (array_key_exists("WorkflowId", $arParameters)) {
         if (array_key_exists($arParameters["WorkflowId"], $arParameters["DocumentStates"])) {
             $arParameters["DocumentStates"] = array($arParameters["WorkflowId"] => $arParameters["DocumentStates"][$arParameters["WorkflowId"]]);
         } else {
             return false;
         }
     }
     $arAllowableOperations = CBPDocument::GetAllowableOperations($userId, $arParameters["AllUserGroups"], $arParameters["DocumentStates"]);
     if (!is_array($arAllowableOperations)) {
         return false;
     }
     $r = false;
     switch ($operation) {
         case CBPCanUserOperateOperation::ViewWorkflow:
             $r = in_array("read", $arAllowableOperations);
             break;
         case CBPCanUserOperateOperation::StartWorkflow:
             $r = in_array("write", $arAllowableOperations);
             break;
         case CBPCanUserOperateOperation::CreateWorkflow:
             $r = in_array("write", $arAllowableOperations);
             break;
         case CBPCanUserOperateOperation::WriteDocument:
             $r = in_array("write", $arAllowableOperations);
             break;
         case CBPCanUserOperateOperation::ReadDocument:
             $r = false;
             break;
         default:
             $r = false;
     }
     return $r;
 }
예제 #4
0
	</tr>
	<?php 
$tabControl->BeginNextTab();
?>
	<tr>
		<td colspan="2" align="center">
		<table border="0" cellpadding="5" cellspacing="0" align="center">
			<tr>
				<td width="10%" align="center">&nbsp;</td>
				<td width="90%">&nbsp;</td>
			</tr>
			<?php 
if (isset($_POST['OPERATION_ID'])) {
    $arTaskOperations = $_POST['OPERATION_ID'];
} else {
    $arTaskOperations = CTask::GetOperations($ID);
}
$ind = -1;
foreach ($arOperations as $name => $arOperation) {
    $ind++;
    ?>
				<tr id="operation_row_<?php 
    echo $ind;
    ?>
" 
				<?php 
    echo $arOperation["MODULE_ID"] != $str_MODULE_ID || $arOperation["BINDING"] != $str_BINDING ? 'style="display: none"' : '';
    ?>
>
					<td align="right" style="padding: 0 10px 0 10px">
						<input type="checkbox" name="OPERATION_ID[]" id="OPERATION_ID_<?php 
예제 #5
0
파일: options.php 프로젝트: ASDAFF/open_bx
</b></td>
		<td width="50%">
		<script>var arSubordTasks = [];</script>
		<?
		$arTasksInModule = CTask::GetTasksInModules(true,$module_id,'module');
		$nID = COperation::GetIDByName('edit_subordinate_users');
		$arTasks = $arTasksInModule['main'];
		echo SelectBoxFromArray("GROUP_DEFAULT_TASK", $arTasks, htmlspecialcharsbx($GROUP_DEFAULT_TASK));

		$show_subord = false;
		$arTaskIds = $arTasks['reference_id'];
		$arSubordTasks = Array();
		$l = count($arTaskIds);
		for ($i=0;$i<$l;$i++)
		{
			$arOpInTask = CTask::GetOperations($arTaskIds[$i]);
			if (in_array($nID,$arOpInTask))
			{
				$arSubordTasks[] = $arTaskIds[$i];
				?><script>
				arSubordTasks.push(<?php 
echo $arTaskIds[$i];
?>
);
				</script><?
			}
		}

		?>
		<script>
		var taskSelectOnchange = function(select)
예제 #6
0
 function GetFileOperations($arPath, $arGroups = false)
 {
     global $APPLICATION;
     $ar = $APPLICATION->GetFileAccessPermission($arPath, $arGroups, true);
     $arFileOperations = array();
     for ($i = 0, $len = count($ar); $i < $len; $i++) {
         $arFileOperations = array_merge($arFileOperations, CTask::GetOperations($ar[$i], true));
     }
     $arFileOperations = array_values(array_unique($arFileOperations));
     return $arFileOperations;
 }
예제 #7
0
        } else {
            //2) protect groups with iblock_% operations
            $arOperations = CTask::GetOperations($arRight['TASK_ID'], true);
            foreach ($arOperations as $operation) {
                if (preg_match("/^iblock_(?!admin)/", $operation)) {
                    unset($arResult["RIGHTS"][$RIGHT_ID]);
                    $arResult["SELECTED"][$arRight["GROUP_CODE"]] = true;
                    break;
                }
            }
        }
    }
    $arResult["TASKS"] = CIBlockRights::GetRightsList();
    foreach ($arResult["TASKS"] as $TASK_ID => $label) {
        //2) protect tasks with iblock_% operations
        $arOperations = CTask::GetOperations($TASK_ID, true);
        foreach ($arOperations as $operation) {
            if (preg_match("/^iblock_(?!admin)/", $operation)) {
                unset($arResult["TASKS"][$TASK_ID]);
                break;
            }
        }
    }
}
$arResult["VARS_FROM_FORM"] = $bVarsFromForm;
$arResult["FORM_DATA"] = array();
foreach ($data as $key => $value) {
    $arResult["FORM_DATA"]["~" . $key] = $value;
    if (is_array($value)) {
        foreach ($value as $key1 => $value1) {
            if (is_array($value1)) {
예제 #8
0
	public static function GeneratePHPInstall($arValues)
	{
		$str = '';
		$arDefValues = $arValues["default"]["options"];
		$arInfo = CControllerGroupSettings::GetData();

		if(isset($arValues["default"]["modules"]))
		{
			$vArr = '';
			foreach($arInfo as $module_id=>$arProp)
			{
				if($module_id == 'main')
					continue;

				if(in_array($module_id, $arValues["default"]["modules"]))
					$vArr .= '"'.$module_id.'"=>"Y", ';
				else
					$vArr .= '"'.$module_id.'"=>"N", ';
			}
			$str .= 'CControllerClient::SetModules(Array('.$vArr.'));'."\r\n";
		}
		else
			$str .= 'CControllerClient::RestoreModules();'."\r\n";

		foreach($arInfo as $mname=>$arProp)
		{
				if(!is_array($arProp["options"]) || count($arProp["options"])<=0)
					continue;
				$arOptions = $arProp["options"];
				foreach($arOptions as $id=>$arOptionParams)
				{
					if(isset($arDefValues[$mname][$id]))
						$str .= 'CControllerClient::SetOptionString("'.EscapePHPString($mname).'", "'.EscapePHPString($id).'", "'.EscapePHPString($arDefValues[$mname][$id]).'");'."\r\n";
					elseif(substr($id, 0, 2)!='__')
						$str .= 'CControllerClient::RestoreOption("'.EscapePHPString($mname).'", "'.EscapePHPString($id).'");'."\r\n";
				}
		}

		$arSecurity = $arValues["default"]["security"];
		if($arSecurity["limit_admin"] == "Y")
			$str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "Y");'."\r\n";
		else
			$str .= 'CControllerClient::SetOptionString("main", "~controller_limited_admin", "N");'."\r\n";

		$subordinate_id = COperation::GetIDByName('edit_subordinate_users');

		$arGroups = Array();
		$arUniqTasks = Array();
		if(is_array($arSecurity["groups"]))
		{
			foreach($arSecurity["groups"] as $group_id=>$arPermissions)
			{
				$arDefinedPermissions = Array();
				$arUnDefinedPermissions = Array();
				$bSubOrdGroups = false;
				foreach($arInfo as $module_id=>$arProp)
				{
					if(isset($arPermissions[$module_id]))
					{
						$arDefinedPermissions[$module_id] = $arPermissions[$module_id];

						$task_id = $arPermissions[$module_id];

						if(strlen($task_id)>1 && (!is_array($arUniqTasks[$module_id]) || !in_array($task_id, $arUniqTasks[$module_id])))
						{
							$arUniqTasks[$module_id][] = $task_id;
							$dbr_task = CTask::GetList(Array(), Array('NAME'=>$task_id, 'MODULE_ID'=>$module_id, "BINDING" => 'module'));
							if($ar_task = $dbr_task->Fetch())
							{
								if($module_id == 'main' || $ar_task['SYS']!='Y')
								{
									$arOperations = CTask::GetOperations($ar_task["ID"], true);

									if($ar_task['SYS']!='Y')
									{
										$str .= 'CControllerClient::SetTaskSecurity('.CControllerGroupSettings::__PHPToString($task_id).', '.CControllerGroupSettings::__PHPToString($module_id).', '.CControllerGroupSettings::__PHPToString($arOperations).', '.CControllerGroupSettings::__PHPToString($ar_task["LETTER"]).');'."\r\n";
									}

									if($module_id == 'main' && in_array('edit_subordinate_users', $arOperations))
									{
										$bSubOrdGroups = true;
									}
								}
							}
						}
					}
					else
						$arUnDefinedPermissions[] = $module_id;
				}

				$str .= 'CControllerClient::RestoreGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arUnDefinedPermissions).');'."\r\n";

				if($bSubOrdGroups)
				{
					$arSGroupsTmp = preg_split("/[\r\n,;]+/", $arSecurity["subord_groups"][$group_id]);
					$arSGroups = array();
					foreach($arSGroupsTmp as $sGroupTmp)
					{
						$sGroupTmp = trim($sGroupTmp);
						if ($sGroupTmp != '')
							$arSGroups[] = $sGroupTmp;
					}

					$str .= 'CControllerClient::SetGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arDefinedPermissions).', '.CControllerGroupSettings::__PHPToString($arSGroups).');'."\r\n";
				}
				else
					$str .= 'CControllerClient::SetGroupSecurity('.CControllerGroupSettings::__PHPToString($group_id).', '.CControllerGroupSettings::__PHPToString($arDefinedPermissions).');'."\r\n";

				$arGroups[] = $group_id;
			}
		}

		$str .= 'CControllerClient::RestoreSecurity('.CControllerGroupSettings::__PHPToString($arGroups).');'."\r\n";

		$arThirdSettings = CControllerGroupSettings::Get3rdPartyOptions();
		foreach($arThirdSettings as $obOption)
		{
			$str .= $obOption->GetOptionPHPCode($arValues);
		}

		return $str;
	}
예제 #9
0
 public static function GetOperations($sectId, $userId = false)
 {
     global $USER;
     if (!$userId) {
         $userId = intVal($USER->GetId());
     }
     $arCodes = array();
     $rCodes = CAccess::GetUserCodes($userId);
     while ($code = $rCodes->Fetch()) {
         $arCodes[] = $code['ACCESS_CODE'];
     }
     if (!in_array('G2', $arCodes)) {
         $arCodes[] = 'G2';
     }
     $key = $sectId . '|' . implode(',', $arCodes);
     if (self::$bClearOperationCache || !is_array(self::$arOp[$key])) {
         if (!isset(self::$Permissions[$sectId])) {
             self::GetArrayPermissions(array($sectId));
         }
         $perms = self::$Permissions[$sectId];
         self::$arOp[$key] = array();
         if (is_array($perms)) {
             foreach ($perms as $code => $taskId) {
                 if (in_array($code, $arCodes)) {
                     self::$arOp[$key] = array_merge(self::$arOp[$key], CTask::GetOperations($taskId, true));
                 }
             }
         }
     }
     return self::$arOp[$key];
 }
예제 #10
0
 public static function MergeRights($IBLOCK_TYPE_ID, $DB, $POST)
 {
     $arResult = array();
     //1) Put into result protected from changes rights
     $arListsPerm = CLists::GetPermission($IBLOCK_TYPE_ID);
     foreach ($DB as $RIGHT_ID => $arRight) {
         //1) protect groups from module settings
         if (preg_match("/^G(\\d)\$/", $arRight["GROUP_CODE"], $match) && is_array($arListsPerm) && in_array($match[1], $arListsPerm)) {
             $arResult[$RIGHT_ID] = $arRight;
         } else {
             //2) protect groups with iblock_% operations
             $arOperations = CTask::GetOperations($arRight['TASK_ID'], true);
             foreach ($arOperations as $operation) {
                 if (preg_match("/^iblock_(?!admin)/", $operation)) {
                     $arResult[$RIGHT_ID] = $arRight;
                     break;
                 }
             }
         }
     }
     //2) Leave in POST only safe rights
     foreach ($POST as $RIGHT_ID => $arRight) {
         //1) protect groups from module settings
         if (preg_match("/^G(\\d)\$/", $arRight["GROUP_CODE"], $match) && is_array($arListsPerm) && in_array($match[1], $arListsPerm)) {
             unset($POST[$RIGHT_ID]);
         } else {
             //2) protect groups with iblock_% operations
             $arOperations = CTask::GetOperations($arRight['TASK_ID'], true);
             foreach ($arOperations as $operation) {
                 if (preg_match("/^iblock_(?!admin)/", $operation)) {
                     unset($POST[$RIGHT_ID]);
                     break;
                 }
             }
         }
     }
     //3) Join POST to result
     foreach ($POST as $RIGHT_ID => $arRight) {
         foreach ($arResult as $RIGHT_ID2 => $arRight2) {
             if ($arRight["GROUP_CODE"] == $arRight2["GROUP_CODE"]) {
                 unset($arResult[$RIGHT_ID2]);
             }
         }
         $arResult[$RIGHT_ID] = $arRight;
     }
     return $arResult;
 }
예제 #11
0
	public static function _update($RIGHT_ID, $GROUP_CODE, $bInherit, $TASK_ID)
	{
		global $DB;
		$RIGHT_ID = intval($RIGHT_ID);
		$arOperations = CTask::GetOperations($TASK_ID, /*$return_names=*/true);

		$strUpdate = $DB->PrepareUpdate("b_iblock_right", array(
			//"GROUP_CODE" => $GROUP_CODE,
			"DO_INHERIT" => $bInherit? "Y": "N",
			"TASK_ID" => $TASK_ID,
			"OP_SREAD" => in_array("section_read", $arOperations)? "Y": "N",
			"OP_EREAD" => in_array("element_read", $arOperations)? "Y": "N",
		));
		$DB->Query("UPDATE b_iblock_right SET ".$strUpdate." WHERE ID = ".$RIGHT_ID);
	}
예제 #12
0
 static function GetReaders($ID, $iblockID = null)
 {
     static $arValidTasks = null;
     static $readersCache = array();
     $arReaders = array();
     $ID = (int) $ID;
     if ($ID <= 0) {
         return $arReaders;
     }
     if (isset($readersCache[$ID])) {
         return $readersCache[$ID];
     }
     if ($arValidTasks == null) {
         $arTasks = CWebDavIblock::GetTasks();
         $arValidTasks = array();
         foreach ($arTasks as $taskLetter => $taskID) {
             $arOperations = CTask::GetOperations($taskID, true);
             if (array_search('element_read', $arOperations) !== false) {
                 $arValidTasks[$taskID] = true;
             }
         }
     }
     if ($iblockID === null) {
         $rElement = CIBlockElement::GetList(array(), array('ID' => $ID, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'IBLOCK_ID'));
         if ($rElement && ($arElement = $rElement->Fetch())) {
             $iblockID = $arElement['IBLOCK_ID'];
         }
     }
     $iblockID = (int) $iblockID;
     if ($iblockID <= 0) {
         return $arReaders;
     }
     $bSocNet = CModule::IncludeModule('socialnetwork');
     if (CIBlock::GetArrayByID($iblockID, "RIGHTS_MODE") === "E") {
         $ibRights = new CIBlockElementRights($iblockID, $ID);
         $arRights = $ibRights->GetRights();
         foreach ($arRights as $rightID => $arRight) {
             if (isset($arValidTasks[$arRight['TASK_ID']])) {
                 $arReaders[] = $arRight['GROUP_CODE'];
                 if ($bSocNet && preg_match('/^SG(\\d+)_[' . SONET_ROLES_OWNER . SONET_ROLES_MODERATOR . SONET_ROLES_USER . ']$/', $arRight['GROUP_CODE'], $matches)) {
                     $arReaders[] = "SG" . $matches[1];
                 }
             }
         }
     } else {
         $gr_res = CIBlock::GetGroupPermissions($iblockID);
         foreach ($gr_res as $group_id => $perm) {
             if ($perm >= 'R') {
                 $arReaders[] = 'G' . $group_id;
             }
         }
     }
     $readersCache[$ID] = array_unique($arReaders);
     return $readersCache[$ID];
 }
예제 #13
0
 public static function GetOperations($xmlId, $userId = false)
 {
     if ($userId === false) {
         $userId = CCalendar::GetCurUserId();
     }
     $arCodes = array();
     $rCodes = CAccess::GetUserCodes($userId);
     while ($code = $rCodes->Fetch()) {
         $arCodes[] = $code['ACCESS_CODE'];
     }
     if (!in_array('G2', $arCodes)) {
         $arCodes[] = 'G2';
     }
     $key = $xmlId . '|' . implode(',', $arCodes);
     if (!is_array(self::$arOp[$key])) {
         if (!isset(self::$Permissions[$xmlId])) {
             self::GetArrayPermissions(array($xmlId));
         }
         $perms = self::$Permissions[$xmlId];
         self::$arOp[$key] = array();
         if (is_array($perms)) {
             foreach ($perms as $code => $taskId) {
                 if (in_array($code, $arCodes)) {
                     self::$arOp[$key] = array_merge(self::$arOp[$key], CTask::GetOperations($taskId, true));
                 }
             }
         }
     }
     return self::$arOp[$key];
 }
}
IncludeModuleLangFile(__FILE__);
require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/controller/include.php";
$err_mess = "File: " . __FILE__ . "<br>Line: ";
$arThirdSettings = CControllerGroupSettings::Get3rdPartyOptions();
$subordinate_id = COperation::GetIDByName('edit_subordinate_users');
$arMainSubordinateTask = array();
$db_task = CTask::GetList(array("MODULE_ID" => "asc", "LETTER" => "asc"), array("BINDING" => 'module'));
while ($ar_task = $db_task->GetNext()) {
    if (!isset($arTasksModules[$ar_task['MODULE_ID']])) {
        $arTasksModules[$ar_task['MODULE_ID']] = array("reference" => array(), "reference_id" => array());
    }
    $arTasksModules[$ar_task['MODULE_ID']]["reference"][] = '[' . ($ar_task['LETTER'] ? $ar_task['LETTER'] : '..') . '] ' . CTask::GetLangTitle($ar_task['NAME']);
    $arTasksModules[$ar_task['MODULE_ID']]["reference_id"][] = $ar_task['NAME'];
    if ($ar_task['MODULE_ID'] == 'main') {
        $arOpInTask = CTask::GetOperations($ar_task['ID']);
        if (in_array($subordinate_id, $arOpInTask)) {
            $arMainSubordinateTask[] = $ar_task['NAME'];
        }
    }
}
if ($REQUEST_METHOD == "POST" && $COUNTER_UPDATE_PERIOD_TYPE != '' && (strlen($save) > 0 || strlen($apply) > 0) && $MOD_RIGHT >= "W") {
    if ($COUNTER_UPDATE_PERIOD_TYPE == 'H') {
        $COUNTER_UPDATE_PERIOD = $COUNTER_UPDATE_PERIOD * 60;
    } elseif ($COUNTER_UPDATE_PERIOD_TYPE == 'D') {
        $COUNTER_UPDATE_PERIOD = $COUNTER_UPDATE_PERIOD * 60 * 24;
    } elseif ($COUNTER_UPDATE_PERIOD_TYPE == 'W') {
        $COUNTER_UPDATE_PERIOD = $COUNTER_UPDATE_PERIOD * 60 * 24 * 7;
    } elseif ($COUNTER_UPDATE_PERIOD_TYPE == 'N') {
        $COUNTER_UPDATE_PERIOD = $COUNTER_UPDATE_PERIOD * 60 * 24 * 30;
    }
예제 #15
0
 public static function SetMove($DOCUMENT_ID, $STATUS_ID, $OLD_STATUS_ID, $LOG_ID)
 {
     $err_mess = CAllWorkflow::err_mess() . "<br>Function: SetMove<br>Line: ";
     global $DB, $USER, $APPLICATION;
     $DOCUMENT_ID = intval($DOCUMENT_ID);
     $STATUS_ID = intval($STATUS_ID);
     $OLD_STATUS_ID = intval($OLD_STATUS_ID);
     $LOG_ID = intval($LOG_ID);
     $arFields = array("TIMESTAMP_X" => $DB->GetNowFunction(), "DOCUMENT_ID" => $DOCUMENT_ID, "OLD_STATUS_ID" => $OLD_STATUS_ID, "STATUS_ID" => $STATUS_ID, "LOG_ID" => $LOG_ID, "USER_ID" => intval($USER->GetID()));
     $DB->Insert("b_workflow_move", $arFields, $err_mess . __LINE__);
     if ($STATUS_ID != $OLD_STATUS_ID) {
         CTimeZone::Disable();
         $d = CWorkflow::GetByID($DOCUMENT_ID);
         CTimeZone::Enable();
         if ($dr = $d->Fetch()) {
             $STATUS_ID = $dr["STATUS_ID"];
             // document creator
             $ENTERED_BY_USER_ID = $dr["ENTERED_BY"];
             // gather email of the workflow admins
             $WORKFLOW_ADMIN_GROUP_ID = COption::GetOptionInt("workflow", "WORKFLOW_ADMIN_GROUP_ID", 0);
             $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tU.ID,\n\t\t\t\t\t\tU.EMAIL\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_user U,\n\t\t\t\t\t\tb_user_group UG\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tUG.GROUP_ID = {$WORKFLOW_ADMIN_GROUP_ID}\n\t\t\t\t\t\tand U.ID = UG.USER_ID\n\t\t\t\t\t\tand U.ACTIVE = 'Y'\n\t\t\t\t";
             $a = $DB->Query($strSql, false, $err_mess . __LINE__);
             $arAdmin = array();
             while ($ar = $a->Fetch()) {
                 $arAdmin[$ar["ID"]] = $ar["EMAIL"];
             }
             // gather email for BCC
             $arBCC = array();
             // gather all who changed doc in its current status
             $strSql = "\n\t\t\t\t\tSELECT\n\t\t\t\t\t\tUSER_ID\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_workflow_move\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tDOCUMENT_ID = {$DOCUMENT_ID}\n\t\t\t\t\t\tand OLD_STATUS_ID = {$STATUS_ID}\n\t\t\t\t";
             $z = $DB->Query($strSql, false, $err_mess . __LINE__);
             while ($zr = $z->Fetch()) {
                 $arBCC[$zr["EMAIL"]] = $zr["EMAIL"];
             }
             // gather all editors
             // in case status have notifier flag
             $strSql = "\n\t\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t\tUG.USER_ID\n\t\t\t\t\t\t,U.EMAIL\n\t\t\t\t\tFROM\n\t\t\t\t\t\tb_workflow_status S,\n\t\t\t\t\t\tb_workflow_status2group SG,\n\t\t\t\t\t\tb_user U,\n\t\t\t\t\t\tb_user_group UG\n\t\t\t\t\tWHERE\n\t\t\t\t\t\tS.ID = {$STATUS_ID}\n\t\t\t\t\t\tand S.NOTIFY = 'Y'\n\t\t\t\t\t\tand SG.STATUS_ID = S.ID\n\t\t\t\t\t\tand SG.PERMISSION_TYPE = '2'\n\t\t\t\t\t\tand UG.GROUP_ID = SG.GROUP_ID\n\t\t\t\t\t\tand U.ID = UG.USER_ID\n\t\t\t\t\t\tand U.ACTIVE = 'Y'\n\t\t\t\t";
             $z = $DB->Query($strSql, false, $err_mess . __LINE__);
             while ($zr = $z->Fetch()) {
                 if (!array_key_exists($zr["EMAIL"], $arBCC)) {
                     $grp = array();
                     $rs = $USER->GetUserGroupList($zr["USER_ID"]);
                     while ($ar = $rs->Fetch()) {
                         $grp[] = $ar["GROUP_ID"];
                     }
                     $arTasks = $APPLICATION->GetFileAccessPermission($dr["FILENAME"], $grp, true);
                     foreach ($arTasks as $task_id) {
                         $arOps = CTask::GetOperations($task_id, true);
                         if (in_array("fm_edit_in_workflow", $arOps)) {
                             $arBCC[$zr["EMAIL"]] = $zr["EMAIL"];
                             break;
                         }
                     }
                 }
             }
             unset($arBCC[$dr["EUSER_EMAIL"]]);
             if (array_key_exists($dr["ENTERED_BY"], $arAdmin)) {
                 $dr["EUSER_NAME"] .= " (Admin)";
             }
             // it is not new doc
             if ($OLD_STATUS_ID > 0) {
                 if (array_key_exists($dr["MODIFIED_BY"], $arAdmin)) {
                     $dr["MUSER_NAME"] .= " (Admin)";
                 }
                 $q = CWorkflowStatus::GetByID($OLD_STATUS_ID);
                 $qr = $q->Fetch();
                 // send change notification
                 $arEventFields = array("ID" => $dr["ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "PREV_STATUS_ID" => $OLD_STATUS_ID, "PREV_STATUS_TITLE" => $qr["TITLE"], "STATUS_ID" => $dr["STATUS_ID"], "STATUS_TITLE" => $dr["STATUS_TITLE"], "DATE_ENTER" => $dr["DATE_ENTER"], "ENTERED_BY_ID" => $dr["ENTERED_BY"], "ENTERED_BY_NAME" => $dr["EUSER_NAME"], "ENTERED_BY_EMAIL" => $dr["EUSER_EMAIL"], "DATE_MODIFY" => $dr["DATE_MODIFY"], "MODIFIED_BY_ID" => $dr["MODIFIED_BY"], "MODIFIED_BY_NAME" => $dr["MUSER_NAME"], "FILENAME" => $dr["FILENAME"], "SITE_ID" => $dr["SITE_ID"], "TITLE" => $dr["TITLE"], "BODY_HTML" => $dr["BODY_TYPE"] == "html" ? $dr["BODY"] : TxtToHtml($dr["BODY"]), "BODY_TEXT" => $dr["BODY_TYPE"] == "text" ? $dr["BODY"] : HtmlToTxt($dr["BODY"]), "BODY" => $dr["BODY"], "BODY_TYPE" => $dr["BODY_TYPE"], "COMMENTS" => $dr["COMMENTS"]);
                 CEvent::Send("WF_STATUS_CHANGE", $dr["SITE_ID"], $arEventFields);
             } else {
                 // it was new one
                 $arEventFields = array("ID" => $dr["ID"], "ADMIN_EMAIL" => implode(",", $arAdmin), "BCC" => implode(",", $arBCC), "STATUS_ID" => $dr["STATUS_ID"], "STATUS_TITLE" => $dr["STATUS_TITLE"], "DATE_ENTER" => $dr["DATE_ENTER"], "ENTERED_BY_ID" => $dr["ENTERED_BY"], "ENTERED_BY_NAME" => $dr["EUSER_NAME"], "ENTERED_BY_EMAIL" => $dr["EUSER_EMAIL"], "FILENAME" => $dr["FILENAME"], "SITE_ID" => $dr["SITE_ID"], "TITLE" => $dr["TITLE"], "BODY_HTML" => $dr["BODY_TYPE"] == "html" ? $dr["BODY"] : TxtToHtml($dr["BODY"]), "BODY_TEXT" => $dr["BODY_TYPE"] == "text" ? $dr["BODY"] : HtmlToTxt($dr["BODY"]), "BODY" => $dr["BODY"], "BODY_TYPE" => $dr["BODY_TYPE"], "COMMENTS" => $dr["COMMENTS"]);
                 CEvent::Send("WF_NEW_DOCUMENT", $dr["SITE_ID"], $arEventFields);
             }
         }
     }
 }