/** * @Route("/folders/{folderId}", name="_folder") * @Template() * * @param Request $request * @param string $folderId * * @return array|RedirectResponse */ public function folderAction(Request $request, $folderId) { if ($folderId === $this->get('google_drive')->getRootFolderId()) { return $this->redirect($this->generateUrl('_files'), 301); } $optParams = new GoogleDriveListParameters(); if ($request->query->has("pageToken")) { $optParams->setPageToken($request->get("pageToken")); } $result = $this->get('google_drive')->getFilesList(false, $optParams, $folderId); $result['pagination'] = $this->get('google_drive')->buildPagination($result['nextPageToken'], $optParams, $this->generateUrl('_folder', array('folderId' => $folderId)), null); $result['folder'] = $this->get('google_drive')->getFile($folderId); //$result['children'] = $this->get('google_drive')->getChildren($folderId); $result['folders'] = $this->get('google_drive')->getFolders($folderId); $result['total'] = count($result['list']); if ($request->query->has("pageToken") && !empty($result['nextPageToken']) && $request->query->get("pageToken") == $result['nextPageToken']) { $result['has_pagination'] = false; } return $result; }
/** * @param bool $noFolder Do not return folder-related infos * * @return array * * @throws \Exception */ protected function getFoundTypes($noFolder = true) { $nextToken = null; $loop = 0; $maxLoop = 10; $maxItemPerLoop = GoogleDriveListParameters::MAX_RESULTS; $optParams = new GoogleDriveListParameters(); $optParams->setMaxResults($maxItemPerLoop); $optParams->setQuery(GoogleDriveListParameters::NO_TRASH); $items = array(); do { $result = $this->service->files->listFiles($optParams->getArray()); $items = array_merge($items, array_values($result->getItems())); //$items += $result->getItems(); $nextToken = $result->getNextPageToken(); $optParams->setPageToken($nextToken); $loop++; if ($maxLoop <= $loop) { // 10 * 1000 files is enough throw new \Exception(sprintf("Preventing too-many API calls : max %d loops occurred of %d items each time ", $loop, $optParams->getMaxResults())); } } while (!empty($nextToken)); $types = array(); foreach ($items as $item) { $types[$item->mimeType] = $item->mimeType; // trick do avoid duplicate entries if ($noFolder && $item->mimeType === self::FOLDER_MIMETYPE) { unset($types[$item->mimeType]); } } return array_values($types); }