/** * 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; })); }
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(); } }
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; }
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; }
/** * 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'])); }