• Модуль: 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;
}