public function process(File $file) { if (null == $file->getGoogleId() || $file->isOperationCreate()) { // create new file $response = $this->googleDriveApi->insertFile($file); // update file with googleId $file->setGoogleId($response['id']); $this->logger->info("File created", ['file' => $file->toArray(), 'response' => $response]); } else { // overwrite existing file try { $response = $this->googleDriveApi->updateFile($file); $this->logger->info("File updated", ['file' => $file->toArray(), 'response' => $response]); } catch (BadResponseException $e) { $statusCode = $e->getResponse()->getStatusCode(); if ($statusCode == 404) { // file not found - create new one and issue a warning $response = $this->googleDriveApi->insertFile($file); $file->setGoogleId($response['id']); $this->logger->info("File not found, created new one", ['file' => $file->toArray(), 'response' => $response]); } else { throw $e; } } } return $file; }
public function remoteFileExists(File $file) { if ($file->getGoogleId() == null) { return false; } try { $remoteFile = $this->getFile($file->getGoogleId()); if ($remoteFile['trashed'] === true) { return false; } return true; } catch (BadResponseException $e) { if ($e->getResponse()->getStatusCode() == 404) { return false; } throw $e; } }
public function process(File $file) { if (null == $file->getGoogleId() || $file->isOperationCreate()) { // create new file $fileRes = $this->googleDriveApi->insertFile($file); // get list of worksheets in file, there shall be only one $sheets = $this->googleDriveApi->getWorksheets($fileRes['id']); $sheet = array_shift($sheets); // update file $file->setGoogleId($fileRes['id']); $file->setSheetId($sheet['wsid']); $this->logger->info("Sheet created", ['file' => $file->toArray()]); } else { if ($file->isOperationUpdate()) { if (null == $file->getSheetId()) { // create new sheet in existing file $response = $this->googleDriveApi->createWorksheet($file); $crawler = new Crawler($response->getBody()->getContents()); $uriArr = explode('/', $crawler->filter('default|id')->text()); $file->setSheetId(array_pop($uriArr)); $this->logger->info("Sheet created in existing file", ['file' => $file->toArray()]); } else { // update content of existing file try { // update metadata first - cols and rows count $this->googleDriveApi->updateWorksheet($file); $this->logger->debug("Worksheet metadata updated", ['file' => $file->toArray()]); // update cells content $timestart = microtime(true); $status = $this->googleDriveApi->updateCells($file); $timeend = microtime(true); $apiCallDuration = $timeend - $timestart; if (count($status['errors'])) { $this->logger->warning("Some cells might not be imported properly", ['errors' => $status['errors']]); } $this->logger->debug("Cells updated", ['file' => $file->toArray(), 'apiCallDuration' => $apiCallDuration, 'status' => $status]); } catch (RequestException $e) { $statusCode = $e->getResponse()->getStatusCode(); if ($statusCode >= 500 && $statusCode < 600) { throw new UserException(sprintf("Google Drive Server Error: %s - %s. Please try again later.", $statusCode, $e->getResponse()->getReasonPhrase()), $e, ['file' => $file->toArray()]); } throw new UserException("Cells update failed: " . $e->getMessage(), $e, ['file' => $file->toArray()]); } $this->logger->info("Sheet updated", ['file' => $file->toArray()]); } } else { // @TODO: append sheet } } return $file; }
public function getCellsFeed(File $file) { return json_decode($this->api->request(sprintf(self::SPREADSHEET_CELL, $file->getGoogleId(), $file->getSheetId()) . '?alt=json', 'GET', ['Accept' => 'application/json', 'Content-Type' => 'application/atom+xml', 'GData-Version' => '3.0'])->getBody(), true); }