Example #1
0
 /**
  * User by user
  *        array(
  *        'IBLOCK_ID' => 16,
  *        'IBLOCK_SECTION_ID' => 162,
  *    );
  *    array(
  *        'NAME' => 'link on folder',
  *        'IBLOCK_ID' => 15,
  *        'ID' => 3574,
  *        'CREATED_BY' => 1,
  *        'CAN_FORWARD' => 1,
  *        'INVITE_USER_ID' => 480,
  *    );
  *
  * @param array  $sectionTargetData
  * @param array  $sectionLinkData
  * @param string $typeLibrary - user, group, shared
  * @return bool|int
  */
 public static function createSymLinkSection(array $sectionTargetData, array $sectionLinkData, $typeLibrary = self::ENTITY_TYPE_USER)
 {
     if (empty($sectionLinkData['IBLOCK_ID']) || empty($sectionLinkData['ID']) || empty($sectionLinkData['NAME']) || empty($sectionLinkData['CREATED_BY'])) {
         return false;
     }
     if (empty($sectionTargetData['IBLOCK_ID']) || empty($sectionTargetData['IBLOCK_SECTION_ID'])) {
         return false;
     }
     $typeLibrary = strtolower($typeLibrary);
     if ($typeLibrary != self::ENTITY_TYPE_USER && $typeLibrary != self::ENTITY_TYPE_GROUP && $typeLibrary != self::ENTITY_TYPE_SHARED) {
         return false;
     }
     if (!CWebDavTools::isIntranetUser($sectionLinkData['INVITE_USER_ID'])) {
         return false;
     }
     $sectionTargetData = array_intersect_key($sectionTargetData, array('IBLOCK_ID' => true, 'IBLOCK_SECTION_ID' => true));
     $additionalData = array(CWebDavIblock::UF_LINK_IBLOCK_ID => $sectionLinkData['IBLOCK_ID'], CWebDavIblock::UF_LINK_SECTION_ID => $sectionLinkData['ID'], CWebDavIblock::UF_LINK_ROOT_SECTION_ID => self::getRootSectionId($sectionLinkData['IBLOCK_ID'], $sectionLinkData['ID'], $typeLibrary), CWebDavIblock::UF_LINK_CAN_FORWARD => $sectionLinkData['CAN_FORWARD'], 'CREATED_BY' => $sectionLinkData['CREATED_BY'], 'MODIFIED_BY' => $sectionLinkData['CREATED_BY'], 'NAME' => $sectionLinkData['NAME']);
     $exists = \Bitrix\Webdav\FolderInviteTable::getRow(array('filter' => array('INVITE_USER_ID' => $sectionLinkData['INVITE_USER_ID'], 'IBLOCK_ID' => $sectionLinkData['IBLOCK_ID'], 'SECTION_ID' => $sectionLinkData['ID']), 'select' => array('ID', 'LINK_SECTION_ID', 'IS_DELETED', 'IS_APPROVED')));
     //rewrite old self-deleted by user invite
     if ($exists && !$exists['IS_DELETED'] && $exists['IS_APPROVED']) {
         return $exists['LINK_SECTION_ID'];
     }
     $section = new CIBlockSection();
     $sectionId = $section->add(array_merge($sectionTargetData, $additionalData));
     if ($typeLibrary == self::ENTITY_TYPE_GROUP) {
         $inviteUserId = $sectionLinkData['CREATED_BY'];
         \Bitrix\Webdav\FolderInviteTable::addIfNonExists(array('INVITE_USER_ID' => $sectionLinkData['CREATED_BY'], 'USER_ID' => $sectionLinkData['CREATED_BY'], 'IBLOCK_ID' => $sectionLinkData['IBLOCK_ID'], 'SECTION_ID' => $sectionLinkData['ID'], 'LINK_SECTION_ID' => $sectionId, 'IS_APPROVED' => true, 'IS_DELETED' => false, 'CAN_FORWARD' => false));
     } elseif ($typeLibrary == self::ENTITY_TYPE_USER) {
         if ($sectionId) {
             $inviteUserId = $sectionLinkData['INVITE_USER_ID'];
             \Bitrix\Webdav\FolderInviteTable::addIfNonExists(array('INVITE_USER_ID' => $sectionLinkData['INVITE_USER_ID'], 'USER_ID' => $sectionLinkData['CREATED_BY'], 'IBLOCK_ID' => $sectionLinkData['IBLOCK_ID'], 'SECTION_ID' => $sectionLinkData['ID'], 'LINK_SECTION_ID' => $sectionId, 'IS_APPROVED' => true, 'IS_DELETED' => false, 'CAN_FORWARD' => false, 'CAN_EDIT' => $sectionLinkData['CAN_EDIT']));
             $rightsLetter = $sectionLinkData['CAN_EDIT'] ? 'W' : 'R';
             CWebDavIblock::appendRightsOnSections(array($sectionLinkData), array($rightsLetter => 'U' . $sectionLinkData['INVITE_USER_ID']));
         }
     }
     if ($sectionId && $inviteUserId) {
         CWebDavDiskDispatcher::sendChangeStatus($inviteUserId, 'symlink');
     }
     return $sectionId;
 }
Example #2
0
 private static function EnsureSharedFileSectionCreated($blockID, $siteID = SITE_ID)
 {
     $siteID = strval($siteID);
     $blockID = intval($blockID);
     if ($blockID <= 0 || $siteID === '') {
         return 0;
     }
     $blockSection = new CIBlockSection();
     $dbSections = $blockSection->GetList(array(), array('XML_ID' => 'VI_CALLS', 'IBLOCK_ID' => $blockID, 'CHECK_PERMISSIONS' => 'N'), false, array('ID'));
     $arSection = $dbSections->Fetch();
     if (is_array($arSection)) {
         $blockSectionID = intval($arSection['ID']);
     }
     if ($blockSectionID <= 0) {
         $dbSite = CSite::GetByID($siteID);
         $arSite = $dbSite->Fetch();
         IncludeModuleLangFile(__FILE__, $arSite && isset($arSite['LANGUAGE_ID']) ? $arSite['LANGUAGE_ID'] : false);
         $blockSectionID = $blockSection->Add(array('IBLOCK_ID' => $blockID, 'ACTIVE' => 'Y', 'NAME' => GetMessage('VI_DISK_CALL_RECORD_SECTION'), 'IBLOCK_SECTION_ID' => 0, 'CHECK_PERMISSIONS' => 'N', 'XML_ID' => 'VI_CALLS'));
         if (CIBlock::GetArrayByID($blockID, "RIGHTS_MODE") === "E") {
             $rightObject = CWebDavIblock::_get_ib_rights_object('IBLOCK', 0, $blockID);
             $existsRights = $rightObject->GetRights();
             $rs = CTask::GetList(array("LETTER" => "asc"), array("MODULE_ID" => "iblock", "BINDING" => "iblock", "SYS" => "Y"));
             $arTasks = array();
             while ($ar = $rs->Fetch()) {
                 $arTasks[$ar["NAME"]] = $ar["ID"];
             }
             $newRights = array();
             $i = 0;
             foreach ($existsRights as $existsRight) {
                 $newRights['n' . $i] = array('GROUP_CODE' => $existsRight['GROUP_CODE'], 'TASK_ID' => $arTasks['iblock_deny']);
                 $i++;
             }
             $rightObject = CWebDavIblock::_get_ib_rights_object('SECTION', $blockSectionID, $blockID);
             $rightObject->SetRights($newRights);
             $rights['n' . $i] = array('GROUP_CODE' => '', 'TASK_ID' => $arTasks['iblock_deny']);
             CWebDavIblock::appendRightsOnSections(array(array('ID' => $blockSectionID, 'IBLOCK_ID' => $blockID)), array('W' => array('G1')));
         }
     }
     return $blockSectionID;
 }