Example #1
0
 /**
  * Gets fields which Externalizer or Internalizer should modify.
  * @return array
  */
 public function getFieldsForMap()
 {
     return array('ENTITY_TYPE' => array('IN' => function ($externalValue) {
         switch ($externalValue) {
             case 'user':
                 return ProxyType\User::className();
             case 'group':
                 return ProxyType\Group::className();
             case 'common':
                 return ProxyType\Common::className();
         }
         return null;
     }, 'OUT' => function ($internalValue) {
         switch ($internalValue) {
             case ProxyType\User::className():
                 return 'user';
             case ProxyType\Group::className():
                 return 'group';
             case ProxyType\Common::className():
                 return 'common';
             case ProxyType\RestApp::className():
                 return 'restapp';
         }
         return null;
     }));
 }
Example #2
0
 protected function processActionGetListStorage()
 {
     $this->checkRequiredPostParams(array('proxyType'));
     if ($this->errorCollection->hasErrors()) {
         $this->sendJsonErrorResponse();
     }
     $proxyTypePost = $this->request->getPost('proxyType');
     $diskSecurityContext = $this->getSecurityContextByUser($this->getUser());
     $siteId = null;
     $siteDir = null;
     if ($this->request->getPost('siteId')) {
         $siteId = $this->request->getPost('siteId');
     }
     if ($this->request->getPost('siteDir')) {
         $siteDir = rtrim($this->request->getPost('siteDir'), '/');
     }
     $result = array();
     $filterReadableList = array();
     $checkSiteId = false;
     if ($proxyTypePost == 'user') {
         $result['TITLE'] = Loc::getMessage('DISK_AGGREGATOR_USER_TITLE');
         $filterReadableList = array('STORAGE.ENTITY_TYPE' => ProxyType\User::className());
     } elseif ($proxyTypePost == 'group') {
         $checkSiteId = true;
         $result['TITLE'] = Loc::getMessage('DISK_AGGREGATOR_GROUP_TITLE');
         $filterReadableList = array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className());
     }
     foreach (Storage::getReadableList($diskSecurityContext, array('filter' => $filterReadableList)) as $storage) {
         if ($checkSiteId) {
             $groupObject = CSocNetGroup::getList(array(), array('ID' => $storage->getEntityId()), false, false, array('SITE_ID'));
             $group = $groupObject->fetch();
             if (!empty($group) && $group['SITE_ID'] != $siteId) {
                 continue;
             }
         }
         $proxyType = $storage->getProxyType();
         $result['DATA'][] = array("TITLE" => $proxyType->getEntityTitle(), "URL" => $siteDir . $proxyType->getBaseUrlFolderList(), "ICON" => $proxyType->getEntityImageSrc(64, 64));
     }
     if (!empty($result['DATA'])) {
         Collection::sortByColumn($result['DATA'], array('TITLE' => SORT_ASC));
         $this->sendJsonSuccessResponse(array('listStorage' => $result['DATA'], 'title' => $result['TITLE']));
     } else {
         $this->errorCollection->add(array(new Error(Loc::getMessage('DISK_AGGREGATOR_ERROR_COULD_NOT_FIND_DATA'))));
         $this->sendJsonErrorResponse();
     }
 }
Example #3
0
 protected function getUserGroupWithStorage()
 {
     if (!\CBXFeatures::isFeatureEnabled("Workgroups")) {
         return array();
     }
     if (!Loader::includeModule('socialnetwork')) {
         return array();
     }
     $userId = $this->getUser()->getId();
     $currentPossibleUserGroups = $currentUserGroups = array();
     $cache = Cache::createInstance();
     $cacheTtl = defined('BX_COMP_MANAGED_CACHE') ? 3153600 : 3600 * 4;
     $cachePath = "/disk/uf/{$userId}";
     if ($cache->initCache($cacheTtl, 'group_storage_list_' . SITE_ID . '_' . $userId, $cachePath)) {
         list($currentUserGroups) = $cache->getVars();
     } else {
         $cache->startDataCache();
         $taggedCache = Application::getInstance()->getTaggedCache();
         $taggedCache->startTagCache($cachePath);
         $diskSecurityContext = new DiskSecurityContext($userId);
         $storages = Storage::getReadableList($diskSecurityContext, array('filter' => array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className())));
         foreach ($storages as $storage) {
             $currentPossibleUserGroups[$storage->getEntityId()] = $storage;
         }
         unset($storage);
         $query = \CSocNetUserToGroup::getList(array('GROUP_NAME' => 'ASC'), array('USER_ID' => $userId, 'GROUP_ID' => array_keys($currentPossibleUserGroups)), false, false, array('GROUP_ID', 'GROUP_NAME', 'GROUP_ACTIVE', 'GROUP_CLOSED', 'ROLE'));
         while ($row = $query->getNext()) {
             if ($row['GROUP_ACTIVE'] == 'Y' && $row['GROUP_CLOSED'] == 'N' && $row['ROLE'] != SONET_ROLES_BAN && $row['ROLE'] != SONET_ROLES_REQUEST && isset($currentPossibleUserGroups[$row['GROUP_ID']])) {
                 $taggedCache->registerTag("sonet_features_G_{$row['GROUP_ID']}");
                 $taggedCache->registerTag("sonet_group_{$row['GROUP_ID']}");
                 $currentUserGroups[$row['GROUP_ID']] = array('STORAGE' => $currentPossibleUserGroups[$row['GROUP_ID']], 'NAME' => $row['GROUP_NAME']);
             }
         }
         $taggedCache->registerTag("sonet_user2group_U{$userId}");
         $taggedCache->endTagCache();
         $cache->endDataCache(array($currentUserGroups));
     }
     return $currentUserGroups;
 }
Example #4
0
 protected function getUserGroupWithStorage()
 {
     if (!\CBXFeatures::isFeatureEnabled("Workgroups")) {
         return array();
     }
     if (!Loader::includeModule('socialnetwork')) {
         return array();
     }
     $userId = $this->getUser()->getId();
     $currentPossibleUserGroups = $currentUserGroups = array();
     $diskSecurityContext = new DiskSecurityContext($this->getUser()->getId());
     $storages = Storage::getReadableList($diskSecurityContext, array('filter' => array('STORAGE.ENTITY_TYPE' => ProxyType\Group::className())));
     foreach ($storages as $storage) {
         $currentPossibleUserGroups[$storage->getEntityId()] = $storage;
     }
     unset($storage);
     $query = \CSocNetUserToGroup::getList(array('GROUP_NAME' => 'ASC'), array('USER_ID' => $userId, 'GROUP_ID' => array_keys($currentPossibleUserGroups)), false, false, array('GROUP_ID', 'GROUP_NAME', 'GROUP_ACTIVE', 'GROUP_CLOSED', 'ROLE'));
     while ($row = $query->getNext()) {
         if ($row['GROUP_ACTIVE'] == 'Y' && $row['GROUP_CLOSED'] == 'N' && $row['ROLE'] != SONET_ROLES_BAN && $row['ROLE'] != SONET_ROLES_REQUEST && isset($currentPossibleUserGroups[$row['GROUP_ID']])) {
             $currentUserGroups[$row['GROUP_ID']] = array('STORAGE' => $currentPossibleUserGroups[$row['GROUP_ID']], 'NAME' => $row['GROUP_NAME']);
         }
     }
     return $currentUserGroups;
 }
Example #5
0
 /**
  * Returns storage by group id.
  * If storage doesn't exist returns null.
  *
  * @param integer $groupId Id of group.
  * @return null|Storage
  */
 public function getStorageByGroupId($groupId)
 {
     return Storage::load(array('MODULE_ID' => self::INTERNAL_MODULE_ID, 'ENTITY_TYPE' => ProxyType\Group::className(), 'ENTITY_ID' => (int) $groupId), array('ROOT_OBJECT'));
 }
 protected function moveGroupStorageFromIblock(array $iblock)
 {
     $this->log(array(__METHOD__, 'start', $iblock['ID']));
     $iblockId = (int) $iblock['ID'];
     $sqlHelper = $this->sqlHelper;
     $siteId = $sqlHelper->forSql($iblock['LID']);
     $proxyType = $sqlHelper->forSql(ProxyType\Group::className());
     if ($this->isMysql) {
         $sql = "\n\t\t\t\tINSERT IGNORE INTO b_disk_storage (NAME, MODULE_ID, ENTITY_TYPE, ENTITY_ID, ENTITY_MISC_DATA, ROOT_OBJECT_ID, USE_INTERNAL_RIGHTS, SITE_ID, XML_ID)\n\t\t\t\tSELECT NAME, 'disk', '{$proxyType}', SOCNET_GROUP_ID, null, ID, 1, '{$siteId}', ID\n\t\t\t\tFROM b_iblock_section sec\n\t\t\t\tWHERE IBLOCK_ID = {$iblockId} AND SOCNET_GROUP_ID IS NOT NULL AND (IBLOCK_SECTION_ID = 0 OR IBLOCK_SECTION_ID IS NULL)\n\t\t\t\t\tAND EXISTS(SELECT * FROM b_sonet_group sg WHERE sg.ID=sec.SOCNET_GROUP_ID )\n\t\t\t";
     }
     if ($this->isOracle || $this->isMssql) {
         $sql = "\n\t\t\t\tINSERT INTO b_disk_storage (NAME, MODULE_ID, ENTITY_TYPE, ENTITY_ID, ENTITY_MISC_DATA, ROOT_OBJECT_ID, USE_INTERNAL_RIGHTS, SITE_ID, XML_ID)\n\t\t\t\tSELECT NAME, 'disk', '{$proxyType}', SOCNET_GROUP_ID, null, ID, 1, '{$siteId}', ID\n\t\t\t\tFROM b_iblock_section sec\n\t\t\t\tWHERE IBLOCK_ID = {$iblockId} AND SOCNET_GROUP_ID IS NOT NULL AND (IBLOCK_SECTION_ID = 0 OR IBLOCK_SECTION_ID IS NULL)\n\t\t\t\t\tAND EXISTS(SELECT * FROM b_sonet_group sg WHERE sg.ID=sec.SOCNET_GROUP_ID )\n\t\t\t\t\tAND NOT EXISTS(SELECT * FROM b_disk_storage WHERE MODULE_ID = 'disk' AND ENTITY_TYPE = '{$proxyType}' AND ENTITY_ID = " . $sqlHelper->getIsNullFunction('SOCNET_GROUP_ID', 0) . ")\n\t\t\t";
     }
     $this->connection->queryExecute($sql);
     if ($this->isMssql) {
         $this->connection->queryExecute('SET IDENTITY_INSERT b_disk_object ON');
     }
     $this->connection->queryExecute("\n\t\t\tINSERT INTO b_disk_object (ID, REAL_OBJECT_ID, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_SECTION_ID, WEBDAV_IBLOCK_ID)\n\t\t\tSELECT sec.ID, sec.ID,  sec.NAME, 2, null, storage.ID, null, sec.DATE_CREATE, sec.DATE_CREATE, " . $sqlHelper->getIsNullFunction('sec.CREATED_BY', 0) . ", null, sec.ID, sec.ID, sec.IBLOCK_ID\n\t\t\tFROM b_iblock_section sec\n\t\t\t\tINNER JOIN b_disk_storage storage ON storage.ROOT_OBJECT_ID = sec.ID\n\t\t\tWHERE sec.IBLOCK_ID = {$iblockId} AND SOCNET_GROUP_ID IS NOT NULL AND (sec.IBLOCK_SECTION_ID = 0 OR sec.IBLOCK_SECTION_ID IS NULL)\n\t\t");
     $this->connection->queryExecute("\n\t\t\tINSERT INTO b_disk_object (ID, REAL_OBJECT_ID, NAME, TYPE, CODE, STORAGE_ID, PARENT_ID, CREATE_TIME, UPDATE_TIME, CREATED_BY, UPDATED_BY, XML_ID, WEBDAV_SECTION_ID, WEBDAV_IBLOCK_ID)\n\t\t\tSELECT sec.ID, sec.ID, " . $this->getConcatFunction('sec.NAME', "'_'", 'ib.LID') . ", 2, 'FROM_SITE_MOVED', ds.ID, ds.ROOT_OBJECT_ID, sec.DATE_CREATE, sec.DATE_CREATE, " . $sqlHelper->getIsNullFunction('sec.CREATED_BY', 0) . ", null, sec.ID, sec.ID, sec.IBLOCK_ID\n\t\t\tFROM b_iblock_section sec\n\t\t\t\tINNER JOIN b_disk_storage ds ON ds.ENTITY_ID = sec.SOCNET_GROUP_ID AND ds.ENTITY_TYPE='{$proxyType}'\n\t\t\t\tINNER JOIN b_iblock ib ON sec.IBLOCK_ID=ib.ID\n\t\t\t\tINNER JOIN b_sonet_group sg ON sg.ID=sec.SOCNET_GROUP_ID\n\t\t\tWHERE sec.IBLOCK_ID = {$iblockId} AND sec.SOCNET_GROUP_ID IS NOT NULL AND (sec.IBLOCK_SECTION_ID = 0 OR sec.IBLOCK_SECTION_ID IS NULL)\n\t\t\t\tAND  NOT EXISTS(SELECT 'x' FROM b_disk_storage ds1 WHERE ds1.ROOT_OBJECT_ID=sec.ID)\n\t\t");
     if ($this->isMssql) {
         $this->connection->queryExecute('SET IDENTITY_INSERT b_disk_object OFF');
     }
     if ($this->runWorkWithBizproc) {
         $classDocument = $sqlHelper->forSql(\Bitrix\Disk\BizProcDocumentCompatible::className());
         if ($this->isOracle) {
             $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_bp_workflow_template (ID, MODULE_ID, ENTITY, DOCUMENT_TYPE, AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE)\n\t\t\t\t\tSELECT SQ_B_BP_WORKFLOW_TEMPLATE.nextval, 'disk', '{$classDocument}', " . $this->getConcatFunction("'STORAGE_'", 's.ID') . ", t.AUTO_EXECUTE, t.NAME, t.DESCRIPTION, t.TEMPLATE, t.PARAMETERS, t.VARIABLES, t.MODIFIED, t.USER_ID, t.SYSTEM_CODE, t.ACTIVE\n\t\t\t\t\t\tFROM b_bp_workflow_template t\n\t\t\t\t\t\tINNER JOIN b_disk_storage s ON s.ENTITY_TYPE = '{$proxyType}' AND t.DOCUMENT_TYPE = " . $this->getConcatFunction("'iblock_{$iblockId}_group_'", 's.ENTITY_ID') . "\n\t\t\t\t\t\tWHERE t.MODULE_ID = 'webdav' AND t.ENTITY = 'CIBlockDocumentWebdavSocnet'\n\t\t\t\t");
         } else {
             $this->connection->queryExecute("\n\t\t\t\t\tINSERT INTO b_bp_workflow_template (MODULE_ID, ENTITY, DOCUMENT_TYPE, AUTO_EXECUTE, NAME, DESCRIPTION, TEMPLATE, PARAMETERS, VARIABLES, MODIFIED, USER_ID, SYSTEM_CODE, ACTIVE)\n\t\t\t\t\tSELECT 'disk', '{$classDocument}', " . $this->getConcatFunction("'STORAGE_'", 's.ID') . ", t.AUTO_EXECUTE, t.NAME, t.DESCRIPTION, t.TEMPLATE, t.PARAMETERS, t.VARIABLES, t.MODIFIED, t.USER_ID, t.SYSTEM_CODE, t.ACTIVE\n\t\t\t\t\t\tFROM b_bp_workflow_template t\n\t\t\t\t\t\tINNER JOIN b_disk_storage s ON s.ENTITY_TYPE = '{$proxyType}' AND t.DOCUMENT_TYPE = " . $this->getConcatFunction("'iblock_{$iblockId}_group_'", 's.ENTITY_ID') . "\n\t\t\t\t\t\tWHERE t.MODULE_ID = 'webdav' AND t.ENTITY = 'CIBlockDocumentWebdavSocnet'\n\t\t\t\t");
         }
         $dbRes = CIBlockSection::GetList(array(), array('IBLOCK_ID' => $iblockId, '!SOCNET_GROUP_ID' => false, '=UF_USE_BP' => 'Y', 'SECTION_ID' => 0), false, array('ID', 'UF_USE_BP'));
         if ($dbRes) {
             $miscData = $this->connection->getSqlHelper()->forSql(serialize(array('BIZPROC_ENABLED' => true)));
             $rootObjectIdArray = array();
             while ($res = $dbRes->Fetch()) {
                 $rootObjectIdArray[$res['ID']] = intval($res['ID']);
             }
             if ($rootObjectIdArray) {
                 $rootObjectIds = implode(",", $rootObjectIdArray);
                 $this->connection->queryExecute("UPDATE b_disk_storage SET ENTITY_MISC_DATA='{$miscData}' WHERE ROOT_OBJECT_ID IN ({$rootObjectIds})");
             }
         }
     }
     $this->log(array(__METHOD__, 'finish', $iblock['ID']));
 }