- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/document/yandexdiskhandler.php
- Класс: BitrixDiskDocumentYandexDiskHandler
- Вызов: YandexDiskHandler::listFolder
public function listFolder($path, $folderId)
{
if($path === '/')
{
$folderId = urlencode('/');
}
else
{
$folderId = $this->getForApiDecodedId($folderId);
}
$http = new HttpClient(array(
'socketTimeout' => 10,
'streamTimeout' => 30,
'version' => HttpClient::HTTP_1_1,
));
$http->setHeader('Content-Type', 'application/json; charset=UTF-8');
$http->setHeader('Authorization', "OAuth {$this->getAccessToken()}");
if($http->get(self::API_URL_V1 . "/resources?path={$folderId}&limit=200") === false)
{
$errorString = implode('; ', array_keys($http->getError()));
$this->errorCollection->add(array(
new Error($errorString, self::ERROR_HTTP_LIST_FOLDER)
));
return null;
}
if(!$this->checkHttpResponse($http))
{
return null;
}
$items = Json::decode($http->getResult());
if($items === null)
{
$this->errorCollection->add(array(
new Error('Could not decode response as json', self::ERROR_BAD_JSON)
));
return null;
}
if(!isset($items['_embedded']['items']))
{
$this->errorCollection->add(array(
new Error('Could not find items in response', self::ERROR_HTTP_LIST_FOLDER)
));
return null;
}
$reformatItems = array();
foreach($items['_embedded']['items'] as $item)
{
$isFolder = $item['type'] === 'dir';
$dateTime = new DateTime($item['modified']);
$itemPath = mb_substr($item['path'], 5); //disk:
$pseudoId = base64_encode($itemPath);
$reformatItems[$pseudoId] = array(
'id' => $pseudoId,
'name' => $item['name'],
'type' => $isFolder? 'folder' : 'file',
'size' => $isFolder? '' : CFile::formatSize($item['size']),
'sizeInt' => $isFolder? '' : $item['size'],
'modifyBy' => '',
'modifyDate' => $dateTime->format('d.m.Y'),
'modifyDateInt' => $dateTime->getTimestamp(),
'provider' => static::getCode(),
);
if(!$isFolder)
{
$reformatItems[$pseudoId]['storage'] = '';
$reformatItems[$pseudoId]['ext'] = getFileExtension($item['name']);
}
}
unset($item);
return $reformatItems;
}