/** * @param UriInterface $url * @param Session $session * * @return Promise * * @resolves bool True if the module was just disconnected, false if it was already disconnected. * * @rejects RequestException * @rejects OxygenPageNotFoundException */ public function disconnectOxygenAsync(UriInterface $url, Session $session) { return $this->client->getAsync($url->withQuery(\GuzzleHttp\Psr7\build_query(['q' => 'admin/config/oxygen/disconnect'])), [RequestOptions::COOKIES => $session->getCookieJar(), RequestOptions::AUTH => $session->getAuthData()])->then(function (ResponseInterface $response) use($url, $session) { $crawler = new Crawler((string) $response->getBody(), (string) $url); try { $form = $crawler->filter('form#oxygen-admin-disconnect')->form(); if ($form->get('oxygen_connected')->getValue() === 'yes') { return $this->client->requestAsync($form->getMethod(), $form->getUri(), [RequestOptions::COOKIES => $session->getCookieJar(), RequestOptions::AUTH => $session->getAuthData(), RequestOptions::HEADERS => ['referer' => $form->getUri()], RequestOptions::FORM_PARAMS => $form->getPhpValues()]); } return false; } catch (\Exception $e) { throw new OxygenPageNotFoundException(); } })->then(function ($result) { if (!$result instanceof ResponseInterface) { // Module was already disconnected. return false; } // Module was successfully disconnected. return true; }); }