- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/document/googlehandler.php
- Класс: BitrixDiskDocumentGoogleHandler
- Вызов: GoogleHandler::listFolder
public function listFolder($path, $folderId)
{
if($path === '/')
{
$folderId = 'root';
}
$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', "Bearer {$this->getAccessToken()}");
if(
$http->get(
self::API_URL_V3 . "/files?q='{$folderId}'+in+parents+and+trashed=false+and+(mimeType+contains+'application/vnd.google-apps.folder'+or+not+mimeType+contains+'application/vnd.google-apps.')&" . http_build_query(array(
'fields' => 'files/id,files/mimeType,files/webViewLink,files/size,files/name,files/version,files/modifiedTime'
))
) === false
)
{
$errorString = implode('; ', array_keys($http->getError()));
$this->errorCollection[] = 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[] = new Error(
'Could not decode response as json', self::ERROR_BAD_JSON
);
return null;
}
if(!isset($items['files']))
{
$this->errorCollection[] = new Error(
'Could not find items in response', self::ERROR_HTTP_LIST_FOLDER
);
return null;
}
$reformatItems = array();
foreach($items['files'] as $item)
{
$isFolder = $item['mimeType'] === 'application/vnd.google-apps.folder';
$dateTime = new DateTime($item['modifiedTime']);
$reformatItems[$item['id']] = array(
'id' => $item['id'],
'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 && empty($item['size']))
{
//Google.Drive doesn't show size of google documents. We should export docs
$reformatItems[$item['id']]['size'] = $reformatItems[$item['id']]['sizeInt'] = '';
}
if(!$isFolder)
{
$reformatItems[$item['id']]['ext'] = getFileExtension($item['name']);
}
}
unset($item);
return $reformatItems;
}