Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //КАК ПОЛУЧИТЬ КОРНЕВУЮ ПАПКУ ЧЕЛОВЕКА, ГРУППЫ ИЛИ ОБЩУЮ
- //man
- /** @var \Bitrix\Disk\Storage $storage */
- $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId($userId);
- //group
- $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByGroupId($groupId);
- //common $commonId - потенциально это символьный идентификатор хранилища.
- $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByCommonId($commonId);
- //это корневая папка
- $root = $storage->getRootObject();
- //КАК ДОБАВИТЬ ЭЛЕМЕНТ
- //пусть добавим Файл в корневую папку
- $fileArray = \CFile::getFileArray($fileId);
- $fileModel = $root->addFile(array(
- 'NAME' => 'NameOfFile.png',
- 'FILE_ID' => $fileId, //b_file
- 'SIZE' => $fileArray['FILE_SIZE'], //denormalization
- 'CREATED_BY' => $userId,
- ));
- if(!$fileModel)
- {
- //произошла ошибочка
- $root->getErrors();
- }
- $fileModel; //тут уже наполенный объект файла
- //пусть добавим папку
- $subFolderModel = $root->addSubFolder(array('NAME' => 'NameOfFolder', 'CREATED_BY' => $userId));
- if(!$subFolderModel)
- {
- $root->getErrors();
- }
- $subFolderModel; //тут уже наполенный объект папки
- //КАК УДАЛИТЬ ЭЛЕМЕНТ
- //сначала элемент надо загрузить.
- //если ты не знаешь папка это или файл, то
- $fileOrFolder = \Bitrix\Disk\Object::loadById($id);
- /** @var \Bitrix\Disk\Folder $fileOrFolder */
- //если мы хотим переместить его в корзину
- //если хотим удалить от системы
- $userIdDeletedBy = \Bitrix\Disk\SystemUser::SYSTEM_USER_ID;
- if($fileOrFolder->markDeleted($userIdDeletedBy))
- {
- //удачное удаление
- }
- else
- {
- $fileOrFolder->getErrors();
- }
- //КАК ПРОВЕРИТЬ ПРАВА НА ДОСТУП
- //нам необходимо получить контекст от хранилища.
- //от текущего
- $securityContext = $storage->getCurrentUserSecurityContext();
- //или от определенного юзера
- $securityContext = $storage->getSecurityContext($userId);
- //либо если у нас есть только элемент
- $fileOrFolder = \Bitrix\Disk\Object::loadById($id, array('STORAGE'));
- $storage = $fileOrFolder->getStorage();
- $securityContext = $storage->getCurrentUserSecurityContext();
- //проверка определенного действия над объектом. У папки и файла они немного отличаются.
- if($fileOrFolder->canRead($securityContext))
- {
- //wow!
- }
- else
- {
- //die
- }
- //если это списочная выборка, то передаем первым параметром и тогда будут права усекаться на чтение.
- foreach($root->getChildren($securityContext) as $item)
- {
- }
- unset($item);
- //КАК УСТАНОВИТЬ ПРАВА НА ЭЛЕМЕНТ
- //если создается новая папка или новый файл, то при создании права можно передать вторым аргументом
- $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
- $taskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ);
- $subFolderModel = $root->addSubFolder(array('NAME' => 'NameOfFolder', 'CREATED_BY' => $userId), array(
- array(
- 'ACCESS_CODE' => 'U' . $userId,
- 'TASK_ID' => $taskId,
- ),
- array(
- 'ACCESS_CODE' => 'IU' . $userId,
- 'TASK_ID' => $taskId,
- ),
- ));
- //либо
- $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
- //перезаписать права на объект
- $success = $rightsManager->set($fileOrFolder, array(
- array(
- 'ACCESS_CODE' => 'IU' . $userId,
- 'TASK_ID' => $taskId,
- ),
- ));
- if(!$success)
- {
- $rightsManager->getErrors();
- }
- //либо добавить к уже существующим
- $rightsManager->append($fileOrFolder, array(
- array(
- 'ACCESS_CODE' => 'IU' . $userId,
- 'TASK_ID' => $taskId,
- ),
- ));
- //КАК ПОЛУЧИТЬ МЕТКУ МОДИФИКАЦИИ ЭЛЕМЕНТА
- /** @var \Bitrix\Main\Type\DateTime $dateTime */
- $dateTime = $fileOrFolder->getUpdateTime();
- $dateTime->getTimestamp();
- //КАК СКОПИРОВАТЬ ЭЛЕМЕНТ
- //передаём папку, в которою хотим скопировать объект. Юзера, который совершает действие.
- //А последним параметром можно попросить сгенерировать уникальное имя, если будет конфликт
- $success = $fileOrFolder->copyTo(Folder::loadById(100), $userIdUpdater, true);
- if(!$success)
- {
- $fileOrFolder->getErrors();
- }
- //КАК ПЕРЕНЕСТИ ЭЛЕМЕНТ
- //аргументы как у copyTo
- $success = $fileOrFolder->moveTo(Folder::loadById(100), $userIdUpdater);
- if(!$success)
- {
- $fileOrFolder->getErrors();
- }
- //КАК ПОЛУЧИТЬ ПУТЬ К ЭЛЕМЕНТУ
- //пока есть такой метод. Он получает компоненты пути относительно хранилища - аля хлебные крошки.
- //замечу, что сам объект не присутствует тут.
- $crumbs = \Bitrix\Disk\Driver::getInstance()->getUrlManager()->getCrumbs($fileOrFolder);
- $crumbs[] = $fileOrFolder->getName();
- $path = implode('/', $crumbs);
- //КАК ПОЛУЧИТЬ ЭЛЕМЕНТ ПО ПУТИ
- $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();
- //в данный момент надо знать, что ты хочешь получить папку или файл
- $folderId = $urlManager->resolveFolderIdFromPath($storage, '/folder1/folder2');
- $fileId = $urlManager->resolveFileIdFromPath($storage, '/folder1/folder2/img.png');
- //права в данный момент в случае не нахождения он кидает исключение. Но это надо поправить.
- //КАК ПОЛУЧИТЬ ЭЛЕМЕНТЫ НА ЛЮБОЙ УРОВЕНЬ ВЛОЖЕННОСТИ ОТ ТЕКУЩЕГО
- //ПОЛУЧИТЬ ПОДЭЛЕМЕНТЫ ПАПКИ XXX ВПЛОТЬ ДО УРОВНЯ Y (ОТ 0 ДО 100500)
- /** @var Folder $folder */
- $folder = Folder::loadById($folderId, array('STORAGE'));
- $storage = $folder->getStorage();
- /** @var Folder|File $items */
- $items = $folder->getDescendants($storage->getCurrentUserSecurityContext(), array('filter' => array(
- '<PATH_CHILD.DEPTH_LEVEL' => 100500,
- )));
- //КАК ИЗМЕНИТЬ ПАРАМЕТРЫ ЭЛЕМЕНТОВ
- //КАК ИЗМЕНИТЬ ЭЛЕМЕНТ
- //КАК ПОЛУЧИТЬ СВОЙСТВА ЭЛЕМЕНТА
- //Я считаю, что это забота WebDav'a. Правда, конечно, возможность предоставляет Диск :)
- //Вот свойства, которые сейчас есть у Object'a
- /**
- ID
- NAME ->rename()
- TYPE
- CODE
- STORAGE_ID
- REAL_OBJECT_ID
- PARENT_ID ->moveTo()
- CREATE_TIME
- UPDATE_TIME
- DELETE_TIME
- CREATED_BY
- UPDATED_BY
- DELETED_BY
- GLOBAL_CONTENT_VERSION
- FILE_ID ->updateContent(), ->addVersion()
- TYPE_FILE
- SIZE ->updateContent(), ->addVersion()
- EXTERNAL_HASH
- DELETED_TYPE ->markDeleted(), ->restore()
- /**/
- //это обновление контета без создания версии
- $fileModel->updateContent(\CFile::getFileArray($bFileId));
- //это обновление контета с созданием версии
- $fileModel->addVersion(\CFile::getFileArray($bFileId), $createdBy);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement