wp = $wp; $this->settings = $settings; } public function getCaptchaUrl(array $data) { return $this->getUrl(CaptchaEndpoint::ACTION_RENDER, $data); } public function getCaptchaUrlForMPForm(string $sessionId) { $data = [ 'captcha_session_id' => $sessionId, 'referrer_form' => self::REFERER_MP_FORM, ]; return $this->getCaptchaUrl($data); } public function getCaptchaImageUrl(int $width, int $height, string $sessionId) { return $this->getUrl( CaptchaEndpoint::ACTION_IMAGE, [ 'width' => $width, 'height' => $height, 'captcha_session_id' => $sessionId, ] ); } public function getCaptchaAudioUrl(string $sessionId) { return $this->getUrl( CaptchaEndpoint::ACTION_AUDIO, [ 'cacheBust' => time(), 'captcha_session_id' => $sessionId, ] ); } private function getUrl(string $action, array $data) { $post = $this->wp->getPost($this->settings->get('subscription.pages.captcha')); $url = $this->wp->getPermalink($post); $params = [ Router::NAME, 'endpoint=' . CaptchaEndpoint::ENDPOINT, 'action=' . $action, 'data=' . Router::encodeRequestData($data), ]; $url .= (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . join('&', $params); return $url; } }