You are here

protected function ApiSync::getAdminForms in FormAssembly 8

Helper method for getting forms from the admin index.

Throws

\Drupal\formassembly\Exception\FormAssemblyException If the request is not returned in proper form.

\UnexpectedValueException If an http return code other than 200 is received.

\Exception Any exception passed through from getting a token or the request.

1 call to ApiSync::getAdminForms()
ApiSync::getForms in src/ApiSync.php
Get data about available forms.

File

src/ApiSync.php, line 215

Class

ApiSync
Service class for FormAssembly API: Handles form sync.

Namespace

Drupal\formassembly

Code

protected function getAdminForms() {
  $finished = FALSE;
  $url = $this
    ->getUrl('forms');
  $url
    ->setOptions([
    'query' => [
      'access_token' => $this->authorize
        ->getToken(),
      'show' => 50,
      'page' => $this->page,
    ],
  ]);
  $request = $this->httpClient
    ->get($url
    ->toString(TRUE)
    ->getGeneratedUrl());

  // Guzzle throws an Exception on http 400/500 errors.
  // Ensure we have a 200.
  if ($request
    ->getStatusCode() != 200) {
    throw new \UnexpectedValueException('Http return code 200 expected.  Code ' . $request
      ->getStatusCode() . ' received.');
  }
  $raw = $request
    ->getBody()
    ->getContents();

  // Hash request to see if it has changed.
  $current_hash = sha1($raw);
  if ($this->lastHash === $current_hash || empty($raw)) {

    // Observed behavior from formassembly is if n pages are needed to
    // iterate the admin index page n+1 returns the same response as page n.
    // But formassembly advises this could change to page n+1 returns empty.
    // Neither of these responses should be processed and we are finished.
    $finished = TRUE;
    $this->page = 1;
  }
  else {
    $this->lastHash = $current_hash;

    // Process response:
    $response = json_decode($raw, TRUE);

    // If we don't get JSON there is an error.
    if (json_last_error() != JSON_ERROR_NONE) {
      throw new FormAssemblyException('The message body ' . $request
        ->getBody() . ' is not JSON');
    }
    $this
      ->processResponse($response);

    // Increment page:
    ++$this->page;
  }
  return $finished;
}