Esempio n. 1
0
 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);
     }
 }