serializer = $serializer; $this->extractCookieData = $extractCookieData; $this->extractCategoryData = $extractCategoryData; $this->settingsBarConfig = $settingsBarConfig; $this->filterProvider = $filterProvider; $this->categoryProvider = $categoryProvider; $this->cookieProvider = $cookieProvider; } /** * Get configurations for setting panel. * * @return array */ public function getJsComponentConfig(): array { return [ 'categories' => $this->getCategoriesData(), 'cookies' => $this->getCookiesData(), 'displayStyle' => $this->settingsBarConfig->getDisplayStyle(), 'canShowCookieDetails' => $this->settingsBarConfig->canShowCookieDetails(), 'overview' => [ 'title' => $this->settingsBarConfig->getOverviewTitle(), 'text' => $this->filterProvider->getPageFilter()->filter($this->settingsBarConfig->getOverviewText()), ], 'consentPreferences' => [ 'header' => __($this->settingsBarConfig->getConsentPreferencesHeader()), 'essential_category_status' => __($this->settingsBarConfig->getEssentialCategoryStatus()), 'cookie_details_link' => __($this->settingsBarConfig->getCookieDetailsLinkTitle()), ], 'design' => [ 'textColor' => $this->settingsBarConfig->getTextColor(), 'backgroundColor' => $this->settingsBarConfig->getBackgroundColor(), ], 'acceptButtonConfig' => $this->prepareButtonConfig($this->settingsBarConfig->getAcceptButtonConfig()), 'declineButtonConfig' => $this->prepareButtonConfig($this->settingsBarConfig->getDeclineButtonConfig()), 'confirmButtonConfig' => $this->prepareButtonConfig($this->settingsBarConfig->getConfirmButtonConfig()), ]; } /** * Get js layout. * * @return false|string */ public function getJsLayout() { if (isset($this->jsLayout['components']['pr-cookie-settings-bar'])) { $this->jsLayout['components']['pr-cookie-settings-bar'] = array_merge_recursive( $this->jsLayout['components']['pr-cookie-settings-bar'], $this->getJsComponentConfig() ); } else { $this->jsLayout['components']['pr-cookie-settings-bar'] = $this->getJsComponentConfig(); } return $this->jsLayout ? $this->serializer->serialize($this->jsLayout) : ''; } /** * Get categories data for render. * * @return array[] */ private function getCategoriesData(): array { $extractCategoryData = $this->extractCategoryData; return array_values(array_map(static function (CategoryInterface $category) use ($extractCategoryData) { return $extractCategoryData->execute($category); }, $this->categoryProvider->get())); } /** * Get cookie data for render. * * @return array[] */ private function getCookiesData(): array { $extractCookieData = $this->extractCookieData; return array_values(array_map(static function (CookieInterface $cookie) use ($extractCookieData) { return $extractCookieData->execute($cookie); }, $this->cookieProvider->get())); } /** * Correct button config. * * @param array $config * @return array */ private function prepareButtonConfig(array $config): array { if (isset($config['enabled'])) { $config['enabled'] = (bool) $config['enabled']; } return $config; } }