function __wd_get_root_section($IBLOCK_ID, $object, $object_id) { $result = CIBlockWebdavSocnet::GetSectionID($IBLOCK_ID, $object, $object_id); if (intval($result) > 0) { return $result; } else { __wd_check_uf_use_bp_property($arParams["IBLOCK_ID"]); $arFields = array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "SOCNET_GROUP_ID" => false, "IBLOCK_SECTION_ID" => 0, "UF_USE_BP" => "N"); if ($object == "user") { $dbUser = CUser::GetByID($object_id); $arUser = $dbUser->Fetch(); $arFields["NAME"] = trim($arUser['LAST_NAME'] . " " . $arUser['FIRST_NAME']); $arFields["NAME"] = trim(!empty($arFields["NAME"]) ? $arFields["NAME"] : $arUser['LOGIN']); $arFields['CREATED_BY'] = $arUser['ID']; $arFields['MODIFIED_BY'] = $arUser['ID']; if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'U' . $object_id, 'TASK_ID' => $arTasks['X'])); } } else { /* $res = CSocNetGroup::GetByID($arResult["VARIABLES"]["group_id"]); if (!$res) { $arParams["ERROR_MESSAGE"] = GetMessage("SONET_GROUP_NOT_EXISTS"); return 0; } */ $arFields["SOCNET_GROUP_ID"] = $object_id; //$arGroup = CSocNetGroup::GetByID($object_id); $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $object_id; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => (int) $object_id), false, false, array("ID", "SITE_ID", "NAME")); if ($arGroup = $dbGroup->Fetch()) { $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $arGroup["NAME"]; } if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_A', 'TASK_ID' => $arTasks['X']), 'n1' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_E', 'TASK_ID' => $arTasks['W']), 'n2' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_K', 'TASK_ID' => $arTasks['W'])); } } if (\Bitrix\Main\Config\Option::get('disk', 'successfully_converted', false) && CModule::includeModule('disk')) { \Bitrix\Disk\Driver::getInstance()->addGroupStorage($arFields["SOCNET_GROUP_ID"]); } $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"]; $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_" . $IBLOCK_ID . "_SECTION", $arFields); $bs = new CIBlockSection(); $sectionID = $bs->Add($arFields); if (!$sectionID) { $arParams["ERROR_MESSAGE"] = $bs->LAST_ERROR; return 0; } WDClearComponentCache(array("webdav.element.edit", "webdav.element.hist", "webdav.element.upload", "webdav.element.view", "webdav.menu", "webdav.section.edit", "webdav.section.list")); return true; /* if ($ob->workflow == 'bizproc') { __wd_create_default_bp_user_and_groups($arBizProcParameters); } */ } }
protected static function groupSectionCreate($groupId) { $groupLib = CWebDavIblock::LibOptions('group_files', false, SITE_ID); if (!$groupLib || !isset($groupLib['id']) || !($iblockId = intval($groupLib['id']))) { return false; } $result = CIBlockWebdavSocnet::GetSectionID($iblockId, 'group', $groupId); if (intval($result) > 0) { return $result; } $dbRes = CUserTypeEntity::GetList(array($by => $order), array("ENTITY_ID" => "IBLOCK_" . $iblockId . "_SECTION", "FIELD_NAME" => "UF_USE_BP")); if (!$dbRes || !($res = $dbRes->GetNext())) { $arFields = array("ENTITY_ID" => "IBLOCK_" . $iblockId . "_SECTION", "FIELD_NAME" => "UF_USE_BP", "USER_TYPE_ID" => "string", "MULTIPLE" => "N", "MANDATORY" => "N", "SETTINGS" => array("DEFAULT_VALUE" => "Y")); $arFieldName = array(); $rsLanguage = CLanguage::GetList($by, $order, array()); while ($arLanguage = $rsLanguage->Fetch()) { $dir = str_replace(array("\\", "//"), "/", dirname(__FILE__)); $dirs = explode("/", $dir); array_pop($dirs); $file = trim(implode("/", $dirs) . "/lang/" . $arLanguage["LID"] . "/include/webdav_settings.php"); $tmp_mess = __IncludeLang($file, true); $arFieldName[$arLanguage["LID"]] = empty($tmp_mess["SONET_UF_USE_BP"]) ? "Use Business Process" : $tmp_mess["SONET_UF_USE_BP"]; } $arFields["EDIT_FORM_LABEL"] = $arFieldName; $obUserField = new CUserTypeEntity(); $obUserField->Add($arFields); $GLOBALS["USER_FIELD_MANAGER"]->arFieldsCache = array(); } $arFields = array("IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "SOCNET_GROUP_ID" => false, "IBLOCK_SECTION_ID" => 0, "UF_USE_BP" => "N"); $arFields["SOCNET_GROUP_ID"] = $groupId; $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $groupId; $dbGroup = CSocNetGroup::GetList(array(), array("ID" => (int) $groupId), false, false, array("ID", "SITE_ID", "NAME")); if ($arGroup = $dbGroup->Fetch()) { $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . $arGroup["NAME"]; } if (CIBlock::GetarrayByID($iblockId, "RIGHTS_MODE") === "E") { $arTasks = CWebDavIblock::GetTasks(); $arFields['RIGHTS'] = array('n0' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_A', 'TASK_ID' => $arTasks['X']), 'n1' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_E', 'TASK_ID' => $arTasks['W']), 'n2' => array('GROUP_CODE' => 'SG' . $arFields["SOCNET_GROUP_ID"] . '_K', 'TASK_ID' => $arTasks['W'])); } $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"]; $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_" . $iblockId . "_SECTION", $arFields); $bs = new CIBlockSection(); $sectionId = $bs->Add($arFields); if (!$sectionId) { return false; } return $sectionId; }
public static function UpdateUFRights($files, $rights, $ufEntity = array()) { static $arTasks = null; if (!is_array($rights) || sizeof($rights) <= 0) { return false; } if ($files === null || $files === false) { return false; } if (!is_array($files)) { $files = array($files); } if (sizeof($files) <= 0) { return false; } if (!CModule::IncludeModule('iblock') || !CModule::IncludeModule('webdav')) { return false; } $arFiles = array(); foreach ($files as $id) { $id = intval($id); if (intval($id) > 0) { $arFiles[] = $id; } } if (sizeof($arFiles) <= 0) { return false; } if ($arTasks == null) { $arTasks = CWebDavIblock::GetTasks(); } $arCodes = array(); foreach ($rights as $value) { if (substr($value, 0, 2) === 'SG') { $arCodes[] = $value . '_K'; } $arCodes[] = $value; } $arCodes = array_unique($arCodes); $i = 0; $arViewRights = $arEditRights = array(); $curUserID = 'U' . $GLOBALS['USER']->GetID(); foreach ($arCodes as $right) { if ($curUserID == $right) { // do not override owner's rights continue; } $key = 'n' . $i++; $arViewRights[$key] = array('GROUP_CODE' => $right, 'TASK_ID' => $arTasks['R']); } $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array('ID' => $arFiles, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW')); $iblockIds = array(); if ($dbWDFile) { while ($arWDFile = $dbWDFile->Fetch()) { $id = $arWDFile['ID']; if ($arWDFile['WF_NEW'] == 'Y') { $ibe->Update($id, array('BP_PUBLISHED' => 'Y')); } if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $ibRights = CWebDavIblock::_get_ib_rights_object('ELEMENT', $id, $arWDFile['IBLOCK_ID']); $ibRights->SetRights(CWebDavTools::appendRights($ibRights, $arViewRights, $arTasks)); if (empty($iblockIds[$arWDFile['IBLOCK_ID']])) { $iblockIds[$arWDFile['IBLOCK_ID']] = $arWDFile['IBLOCK_ID']; } } } global $CACHE_MANAGER; foreach ($iblockIds as $iblockId) { $CACHE_MANAGER->ClearByTag('iblock_id_' . $iblockId); } unset($iblockId); } }
function _updateRights($files, $rights, $ufEntity = array()) { static $arIBlock = array(); static $op_X = 'element_rights_edit'; static $arTasks = null; if (!is_array($rights) || sizeof($rights) <= 0) { return false; } if ($files === null || $files === false) { return false; } if (!is_array($files)) { $files = array($files); } if (sizeof($files) <= 0) { return false; } if (!CModule::IncludeModule('iblock')) { return false; } $arFiles = array(); foreach ($files as $id) { $id = intval($id); if (intval($id) > 0) { $arFiles[] = $id; } } if (sizeof($arFiles) <= 0) { return false; } $arFiles = array_unique($arFiles); if ($arTasks == null) { $arTasks = CWebDavIblock::GetTasks(); } $i = 0; $arViewRights = $arEditRights = array(); $curUserID = 'U' . $GLOBALS['USER']->GetID(); foreach ($rights as $right) { if ($curUserID == $right) { // do not override owner's rights continue; } $key = 'n' . $i++; $arViewRights[$key] = array('GROUP_CODE' => $right, 'TASK_ID' => $arTasks['R']); $arEditRights[$key] = array('GROUP_CODE' => $right, 'TASK_ID' => $arTasks['W']); } $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array('ID' => $arFiles, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW')); $iblockIds = array(); if ($dbWDFile) { if (!empty($ufEntity['ENTITY_VALUE_ID'])) { //hack you CIBlockWebdavSocnet::storeFileIdsByComment($ufEntity['ENTITY_VALUE_ID'], $arFiles); } while ($arWDFile = $dbWDFile->Fetch()) { $id = $arWDFile['ID']; if ($arWDFile['WF_NEW'] == 'Y') { $ibe->Update($id, array('BP_PUBLISHED' => 'Y')); } if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $dropped = false; $ibRights = CWebDavIblock::_get_ib_rights_object('ELEMENT', $id, $arWDFile['IBLOCK_ID']); // change rights on comment files if they are 'attached to the post' $dropped = static::_isDropped($arWDFile['IBLOCK_ID'], $arWDFile['IBLOCK_SECTION_ID']); $canEditFiles = static::isAllowEditAttachedFiles($ufEntity); if ($dropped || $ibRights->UserHasRightTo($arWDFile['IBLOCK_ID'], $id, 'element_edit')) { $ibRights->SetRights(static::appendRights($ibRights, $canEditFiles ? $arEditRights : $arViewRights, $arTasks)); } else { $ibRights->SetRights(static::appendRights($ibRights, $arViewRights, $arTasks)); } if (empty($iblockIds[$arWDFile['IBLOCK_ID']])) { $iblockIds[$arWDFile['IBLOCK_ID']] = $arWDFile['IBLOCK_ID']; } } } global $CACHE_MANAGER; foreach ($iblockIds as $iblockId) { $CACHE_MANAGER->ClearByTag('iblock_id_' . $iblockId); } unset($iblockId); } }
/** * Add rights for reading files by given users. * @deprecated */ private static function addFilesRights($taskId, $arFilesIds) { $arFilesIds = array_unique(array_filter($arFilesIds)); // Nothing to do? if (empty($arFilesIds)) { return; } if (!CModule::IncludeModule('webdav')) { return; } $arRightsTasks = CWebDavIblock::GetTasks(); // tasks-operations $oTask = new CTaskItem((int) $taskId, 1); $arTask = $oTask->getData(false); $arTaskMembers = array_unique(array_merge(array($arTask['CREATED_BY'], $arTask['RESPONSIBLE_ID']), $arTask['AUDITORS'], $arTask['ACCOMPLICES'])); $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array('ID' => $arFilesIds, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'SECTION_ID', 'IBLOCK_ID', 'WF_NEW')); if ($dbWDFile) { $i = 0; $arRightsForTaskMembers = array(); foreach ($arTaskMembers as $userId) { // For intranet users and their managers $arRightsForTaskMembers['n' . $i++] = array('GROUP_CODE' => 'IU' . $userId, 'TASK_ID' => $arRightsTasks['R']); // For extranet users $arRightsForTaskMembers['n' . $i++] = array('GROUP_CODE' => 'U' . $userId, 'TASK_ID' => $arRightsTasks['R']); } $iNext = $i; while ($arWDFile = $dbWDFile->Fetch()) { if (!$arWDFile['IBLOCK_ID']) { continue; } $fileId = $arWDFile['ID']; if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $ibRights = new CIBlockElementRights($arWDFile['IBLOCK_ID'], $fileId); $arCurRightsRaw = $ibRights->getRights(); // Preserve existing rights $i = $iNext; $arRights = $arRightsForTaskMembers; foreach ($arCurRightsRaw as $arRightsData) { $arRights['n' . $i++] = array('GROUP_CODE' => $arRightsData['GROUP_CODE'], 'TASK_ID' => $arRightsData['TASK_ID']); } $ibRights->setRights($arRights); } } } }
function SetUFRights($files, $rights) { static $arTasks = null; if (!CModule::IncludeModule('iblock') || !CModule::IncludeModule('webdav')) { return; } if (!is_array($rights) || count($rights) <= 0) { return false; } if ($files === null || $files === false) { return false; } if (!is_array($files)) { $files = array($files); } $arFiles = array(); foreach ($files as $id) { $id = intval($id); if (intval($id) > 0) { $arFiles[] = $id; } } if (count($arFiles) <= 0) { return false; } if ($arTasks == null) { $arTasks = CWebDavIblock::GetTasks(); } $arCodes = array(); foreach ($rights as $value) { if (substr($value, 0, 2) === 'SG') { $arCodes[] = $value . '_K'; } $arCodes[] = $value; } $arCodes = array_unique($arCodes); $i = 0; $arViewRights = array(); $curUserID = 'U' . $GLOBALS['USER']->GetID(); foreach ($arCodes as $right) { if ($curUserID == $right) { // do not override owner's rights continue; } $key = "n" . $i++; $arViewRights[$key] = array("GROUP_CODE" => $right, "TASK_ID" => $arTasks["R"]); } $ibe = new CIBlockElement(); $dbWDFile = $ibe->GetList(array(), array("ID" => $arFiles, "SHOW_NEW" => "Y"), false, false, array("ID", "NAME", "SECTION_ID", "IBLOCK_ID", "WF_NEW")); $iblockIds = array(); if ($dbWDFile) { while ($arWDFile = $dbWDFile->Fetch()) { $id = $arWDFile["ID"]; if ($arWDFile["WF_NEW"] == "Y") { $ibe->Update($id, array("BP_PUBLISHED" => "Y")); } if (CIBlock::GetArrayByID($arWDFile['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $ibRights = CWebDavIblock::_get_ib_rights_object("ELEMENT", $id, $arWDFile["IBLOCK_ID"]); $ibRights->SetRights(CWebDavTools::appendRights($ibRights, $arViewRights, $arTasks)); if (empty($iblockIds[$arWDFile["IBLOCK_ID"]])) { $iblockIds[$arWDFile["IBLOCK_ID"]] = $arWDFile["IBLOCK_ID"]; } } } global $CACHE_MANAGER; foreach ($iblockIds as $iblockId) { $CACHE_MANAGER->ClearByTag("iblock_id_" . $iblockId); } unset($iblockId); } }
public static final function removeRightsOnSections(array $sections, array $rights) { $tasks = CWebDavIblock::GetTasks(); $reformatRights = array(); $i = 0; foreach ($rights as $letter => $groupCodes) { if (!is_array($groupCodes)) { $groupCodes = array($groupCodes); } foreach ($groupCodes as $groupCode) { $reformatRights['n' . $i] = array('GROUP_CODE' => $groupCode, 'TASK_ID' => $tasks[$letter]); $i++; } unset($groupCode); } unset($right); foreach ($sections as $section) { $sectionId = (int) $section['ID']; if ($sectionId <= 0) { continue; } if (CIBlock::GetArrayByID($section['IBLOCK_ID'], "RIGHTS_MODE") === "E") { $rightObject = CWebDavIblock::_get_ib_rights_object('SECTION', $sectionId, $section['IBLOCK_ID']); $rightObject->SetRights(CWebDavTools::removeRights($rightObject, $reformatRights, $tasks)); } } unset($section); }
$arResult['ENTITY_NAME'] = $arIB['NAME']; $arResult['ENTITY_PARENTS'][] = $arIB['IBLOCK_SECTION_ID']; } } if (sizeof($arResult['ENTITY_PARENTS']) > 0 && intval($arResult['ENTITY_PARENTS'][0]) > 0) { $dbChain = CIBlockSection::GetNavChain($arParams['IBLOCK_ID'], $arResult['ENTITY_PARENTS'][0]); if ($dbChain) { while ($arChain = $dbChain->Fetch()) { $arResult['ENTITY_PARENTS'][] = $arChain['IBLOCK_SECTION_ID']; } } } } if ($USER->CanDoOperation('webdav_change_settings') || $obIBlockRights && $obIBlockRights->UserHasRightTo($arParams['IBLOCK_ID'], $arParams['ENTITY_ID'], $checkOP)) { $arTasks = CIBlockRights::GetRightsList(); $arTaskLetters = CWebDavIblock::GetTasks(); //bad hack. It's not public rights. if (isset($arTaskLetters['S'])) { unset($arTasks[$arTaskLetters['S']]); } if (isset($arTaskLetters['T'])) { unset($arTasks[$arTaskLetters['T']]); } $arResult['PERMISSIONS'] = $arTasks; if (!$bCreate) { $arRightParams = array("count_overwrited" => true); if (!empty($arResult['ENTITY_PARENTS'])) { $arRightParams['parents'] = $arResult['ENTITY_PARENTS']; } $arCurrent = $obIBlockRights->GetRights($arRightParams); foreach ($arCurrent as $arRightSet) {