Advertisement
Guest User

Untitled

a guest
Aug 5th, 2014
928
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.02 KB | None | 0 0
  1.         //КАК ПОЛУЧИТЬ КОРНЕВУЮ ПАПКУ ЧЕЛОВЕКА, ГРУППЫ ИЛИ ОБЩУЮ
  2.         //man
  3.         /** @var \Bitrix\Disk\Storage $storage */
  4.         $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByUserId($userId);
  5.         //group
  6.         $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByGroupId($groupId);
  7.         //common $commonId - потенциально это символьный идентификатор хранилища.
  8.         $storage = \Bitrix\Disk\Driver::getInstance()->getStorageByCommonId($commonId);
  9.  
  10.         //это корневая папка
  11.         $root = $storage->getRootObject();
  12.  
  13.  
  14.         //КАК ДОБАВИТЬ ЭЛЕМЕНТ
  15.         //пусть добавим Файл в корневую папку
  16.         $fileArray = \CFile::getFileArray($fileId);
  17.         $fileModel = $root->addFile(array(
  18.             'NAME' => 'NameOfFile.png',
  19.             'FILE_ID' => $fileId, //b_file
  20.             'SIZE' => $fileArray['FILE_SIZE'], //denormalization
  21.             'CREATED_BY' => $userId,
  22.         ));
  23.  
  24.         if(!$fileModel)
  25.         {
  26.             //произошла ошибочка
  27.             $root->getErrors();
  28.         }
  29.         $fileModel; //тут уже наполенный объект файла
  30.  
  31.         //пусть добавим папку
  32.         $subFolderModel = $root->addSubFolder(array('NAME' => 'NameOfFolder', 'CREATED_BY' => $userId));
  33.         if(!$subFolderModel)
  34.         {
  35.             $root->getErrors();
  36.         }
  37.         $subFolderModel;  //тут уже наполенный объект папки
  38.  
  39.  
  40.         //КАК УДАЛИТЬ ЭЛЕМЕНТ
  41.  
  42.         //сначала элемент надо загрузить.
  43.         //если ты не знаешь папка это или файл, то
  44.         $fileOrFolder = \Bitrix\Disk\Object::loadById($id);
  45.         /** @var \Bitrix\Disk\Folder $fileOrFolder */
  46.         //если мы хотим переместить его в корзину
  47.         //если хотим удалить от системы
  48.         $userIdDeletedBy = \Bitrix\Disk\SystemUser::SYSTEM_USER_ID;
  49.         if($fileOrFolder->markDeleted($userIdDeletedBy))
  50.         {
  51.             //удачное удаление
  52.         }
  53.         else
  54.         {
  55.             $fileOrFolder->getErrors();
  56.         }
  57.  
  58.         //КАК ПРОВЕРИТЬ ПРАВА НА ДОСТУП
  59.  
  60.         //нам необходимо получить контекст от хранилища.
  61.         //от текущего
  62.         $securityContext = $storage->getCurrentUserSecurityContext();
  63.         //или от определенного юзера
  64.         $securityContext = $storage->getSecurityContext($userId);
  65.  
  66.         //либо если у нас есть только элемент
  67.         $fileOrFolder = \Bitrix\Disk\Object::loadById($id, array('STORAGE'));
  68.         $storage = $fileOrFolder->getStorage();
  69.         $securityContext = $storage->getCurrentUserSecurityContext();
  70.  
  71.         //проверка определенного действия над объектом. У папки и файла они немного отличаются.
  72.         if($fileOrFolder->canRead($securityContext))
  73.         {
  74.             //wow!
  75.         }
  76.         else
  77.         {
  78.             //die
  79.         }
  80.  
  81.         //если это списочная выборка, то передаем первым параметром и тогда будут права усекаться на чтение.
  82.         foreach($root->getChildren($securityContext) as $item)
  83.         {
  84.         }
  85.         unset($item);
  86.  
  87.  
  88.         //КАК УСТАНОВИТЬ ПРАВА НА ЭЛЕМЕНТ
  89.  
  90.         //если создается новая папка или новый файл, то при создании права можно передать вторым аргументом
  91.         $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
  92.         $taskId = $rightsManager->getTaskIdByName($rightsManager::TASK_READ);
  93.         $subFolderModel = $root->addSubFolder(array('NAME' => 'NameOfFolder', 'CREATED_BY' => $userId), array(
  94.             array(
  95.                 'ACCESS_CODE' => 'U' . $userId,
  96.                 'TASK_ID' => $taskId,
  97.             ),
  98.             array(
  99.                 'ACCESS_CODE' => 'IU' . $userId,
  100.                 'TASK_ID' => $taskId,
  101.             ),
  102.         ));
  103.  
  104.         //либо
  105.         $rightsManager = \Bitrix\Disk\Driver::getInstance()->getRightsManager();
  106.         //перезаписать права на объект
  107.         $success = $rightsManager->set($fileOrFolder, array(
  108.             array(
  109.                 'ACCESS_CODE' => 'IU' . $userId,
  110.                 'TASK_ID' => $taskId,
  111.             ),
  112.         ));
  113.         if(!$success)
  114.         {
  115.             $rightsManager->getErrors();
  116.         }
  117.  
  118.         //либо добавить к уже существующим
  119.         $rightsManager->append($fileOrFolder, array(
  120.             array(
  121.                 'ACCESS_CODE' => 'IU' . $userId,
  122.                 'TASK_ID' => $taskId,
  123.             ),
  124.         ));
  125.  
  126.  
  127.  
  128.  
  129.         //КАК ПОЛУЧИТЬ МЕТКУ МОДИФИКАЦИИ ЭЛЕМЕНТА
  130.         /** @var \Bitrix\Main\Type\DateTime $dateTime */
  131.         $dateTime = $fileOrFolder->getUpdateTime();
  132.         $dateTime->getTimestamp();
  133.  
  134.         //КАК СКОПИРОВАТЬ ЭЛЕМЕНТ
  135.         //передаём папку, в которою хотим скопировать объект. Юзера, который совершает действие.
  136.         //А последним параметром можно попросить сгенерировать уникальное имя, если будет конфликт
  137.         $success = $fileOrFolder->copyTo(Folder::loadById(100), $userIdUpdater, true);
  138.         if(!$success)
  139.         {
  140.             $fileOrFolder->getErrors();
  141.         }
  142.  
  143.         //КАК ПЕРЕНЕСТИ ЭЛЕМЕНТ
  144.         //аргументы как у copyTo
  145.         $success = $fileOrFolder->moveTo(Folder::loadById(100), $userIdUpdater);
  146.         if(!$success)
  147.         {
  148.             $fileOrFolder->getErrors();
  149.         }
  150.  
  151.         //КАК ПОЛУЧИТЬ ПУТЬ К ЭЛЕМЕНТУ
  152.         //пока есть такой метод. Он получает компоненты пути относительно хранилища - аля хлебные крошки.
  153.         //замечу, что сам объект не присутствует тут.
  154.         $crumbs = \Bitrix\Disk\Driver::getInstance()->getUrlManager()->getCrumbs($fileOrFolder);
  155.         $crumbs[] = $fileOrFolder->getName();
  156.         $path = implode('/', $crumbs);
  157.  
  158.         //КАК ПОЛУЧИТЬ ЭЛЕМЕНТ ПО ПУТИ
  159.         $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager();
  160.         //в данный момент надо знать, что ты хочешь получить папку или файл
  161.         $folderId = $urlManager->resolveFolderIdFromPath($storage, '/folder1/folder2');
  162.         $fileId = $urlManager->resolveFileIdFromPath($storage, '/folder1/folder2/img.png');
  163.         //права в данный момент в случае не нахождения он кидает исключение. Но это надо поправить.
  164.  
  165.  
  166.         //КАК ПОЛУЧИТЬ ЭЛЕМЕНТЫ НА ЛЮБОЙ УРОВЕНЬ ВЛОЖЕННОСТИ ОТ ТЕКУЩЕГО
  167.         //ПОЛУЧИТЬ ПОДЭЛЕМЕНТЫ ПАПКИ XXX ВПЛОТЬ ДО УРОВНЯ Y (ОТ 0 ДО 100500)
  168.         /** @var Folder $folder */
  169.         $folder = Folder::loadById($folderId, array('STORAGE'));
  170.         $storage = $folder->getStorage();
  171.  
  172.         /** @var Folder|File $items */
  173.         $items = $folder->getDescendants($storage->getCurrentUserSecurityContext(), array('filter' => array(
  174.             '<PATH_CHILD.DEPTH_LEVEL' => 100500,
  175.         )));
  176.  
  177.  
  178.         //КАК ИЗМЕНИТЬ ПАРАМЕТРЫ ЭЛЕМЕНТОВ
  179.         //КАК ИЗМЕНИТЬ ЭЛЕМЕНТ
  180.         //КАК ПОЛУЧИТЬ СВОЙСТВА ЭЛЕМЕНТА
  181.         //Я считаю, что это забота WebDav'a. Правда, конечно, возможность предоставляет Диск :)
  182.  
  183.         //Вот свойства, которые сейчас есть у Object'a
  184.         /**
  185.             ID
  186.             NAME ->rename()
  187.             TYPE
  188.             CODE
  189.             STORAGE_ID
  190.             REAL_OBJECT_ID
  191.             PARENT_ID ->moveTo()
  192.  
  193.             CREATE_TIME
  194.             UPDATE_TIME
  195.             DELETE_TIME
  196.             CREATED_BY
  197.             UPDATED_BY
  198.             DELETED_BY
  199.  
  200.             GLOBAL_CONTENT_VERSION
  201.             FILE_ID ->updateContent(), ->addVersion()
  202.             TYPE_FILE
  203.             SIZE ->updateContent(), ->addVersion()
  204.             EXTERNAL_HASH
  205.             DELETED_TYPE ->markDeleted(), ->restore()
  206.         /**/
  207.         //это обновление контета без создания версии
  208.         $fileModel->updateContent(\CFile::getFileArray($bFileId));
  209.         //это обновление контета с созданием версии
  210.         $fileModel->addVersion(\CFile::getFileArray($bFileId), $createdBy);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement