diff --git a/src/mibew/libs/classes/Mibew/Controller/Settings/CommonController.php b/src/mibew/libs/classes/Mibew/Controller/Settings/CommonController.php index e891d37b..dfbfb747 100644 --- a/src/mibew/libs/classes/Mibew/Controller/Settings/CommonController.php +++ b/src/mibew/libs/classes/Mibew/Controller/Settings/CommonController.php @@ -94,6 +94,9 @@ class CommonController extends AbstractController $page['availableLocales'] = get_available_locales(); $page['availableChatStyles'] = ChatStyle::getAvailableStyles(); $page['availablePageStyles'] = PageStyle::getAvailableStyles(); + $page['chatStylePreviewPath'] = $this->generateUrl('style_preview', array('type' => 'chat')); + $page['pageStylePreviewPath'] = $this->generateUrl('style_preview', array('type' => 'page')); + $page['invitationStylePreviewPath'] = $this->generateUrl('style_preview', array('type' => 'invitation')); $page['stored'] = $request->query->has('stored'); $page['enabletracking'] = Settings::get('enabletracking'); $page['cron_path'] = cron_get_uri($params['cron_key']); diff --git a/src/mibew/libs/classes/Mibew/Controller/StyleController.php b/src/mibew/libs/classes/Mibew/Controller/StyleController.php new file mode 100644 index 00000000..1dd7b7c3 --- /dev/null +++ b/src/mibew/libs/classes/Mibew/Controller/StyleController.php @@ -0,0 +1,154 @@ +getOperator(); + $class_name = $this->resolveClassName($request->attributes->get('type')); + + $style_list = call_user_func($class_name . '::getAvailableStyles'); + + $preview = $request->query->get('preview'); + if (!in_array($preview, $style_list)) { + $style_names = array_keys($style_list); + $preview = $style_list[$style_names[0]]; + } + + $style = new $class_name($preview); + $screenshots = $this->buildScreenshotList($style); + + $page['formpreview'] = $preview; + $page['formaction'] = $request->getBaseUrl() . $request->getPathInfo(); + $page['availablePreviews'] = $style_list; + $page['screenshotsList'] = $screenshots; + $page['title'] = getlocal('page.preview.title'); + $page['menuid'] = 'styles'; + + $page = array_merge($page, prepare_menu($operator)); + + $page['tabs'] = $this->buildTabs($request); + + return $this->render('style_preview', $page); + } + + /** + * Builds list of the styles tabs. + * + * @param Request $request Current request. + * @return array Tabs list. The keys of the array are tabs titles and the + * values are tabs URLs. + */ + protected function buildTabs(Request $request) + { + $tabs = array(); + $type = $request->attributes->get('type'); + + $tabs[getlocal("page_settings.tab.page_themes")] = ($type != self::TYPE_PAGE) + ? $this->generateUrl('style_preview', array('type' => self::TYPE_PAGE)) + : ''; + + $tabs[getlocal("page_settings.tab.themes")] = ($type != self::TYPE_CHAT) + ? $this->generateUrl('style_preview', array('type' => self::TYPE_CHAT)) + : ''; + + if (Settings::get('enabletracking')) { + $tabs[getlocal("page_settings.tab.invitationthemes")] = ($type != self::TYPE_INVITATION) + ? $this->generateUrl('style_preview', array('type' => self::TYPE_INVITATION)) + : ''; + } + + return $tabs; + } + + /** + * Builds a list of screenshots. + * + * @param StyleInterface $style A style for which screenshots list should be + * built. + * @return array List of available screenshots. Each element is an + * associative array with the following keys: + * - "name": string, name of the screenshot. + * - "file": string, URL of the screenshot. + * - "description" string, screenshots description. + */ + protected function buildScreenshotList(StyleInterface $style) + { + $base_url = $this->getRouter()->getContext()->getBaseUrl(); + $style_config = $style->getConfigurations(); + + $screenshots = array(); + foreach ($style_config['screenshots'] as $name => $desc) { + $screenshots[] = array( + 'name' => $name, + 'file' => ($base_url . '/' + . $style->getFilesPath() . '/screenshots/' + . $name . '.png'), + 'description' => $desc, + ); + } + + return $screenshots; + } + + /** + * Resolves style class name by style type. + * + * @param string $style_type Type of the style. Can be one of + * StyleController::TYPE_* constants. + * @return string Name of the style class + */ + protected function resolveClassName($style_type) + { + switch ($style_type) { + case self::TYPE_CHAT: + $class_name = '\\Mibew\\Style\\ChatStyle'; + break; + case self::TYPE_INVITATION: + $class_name = '\\Mibew\\Style\\InvitationStyle'; + break; + case self::TYPE_PAGE: + $class_name = '\\Mibew\\Style\\PageStyle'; + break; + default: + throw new \RuntimeException('Style type cannot be resolved.'); + break; + } + + return $class_name; + } +} diff --git a/src/mibew/libs/routing.yml b/src/mibew/libs/routing.yml index 3a4bf767..665c19c8 100644 --- a/src/mibew/libs/routing.yml +++ b/src/mibew/libs/routing.yml @@ -530,6 +530,16 @@ statistics: requirements: type: by-date|by-operator|by-page +## Styles +style_preview: + path: /operator/style/{type}/preview + defaults: + _controller: Mibew\Controller\StyleController::previewAction + _access_check: Mibew\AccessControl\Check\PermissionsCheck + _access_permissions: [CAN_ADMINISTRATE] + requirements: + type: chat|invitation|page + ## Translation translation_edit: path: /operator/translation/{string_id}/edit diff --git a/src/mibew/libs/settings.php b/src/mibew/libs/settings.php index 59caabe7..d927d2bc 100644 --- a/src/mibew/libs/settings.php +++ b/src/mibew/libs/settings.php @@ -39,19 +39,7 @@ function setup_settings_tabs($active) getlocal("page_settings.tab.performance") => ($active != 2 ? (MIBEW_WEB_ROOT . "/operator/settings/performance") : ""), - getlocal("page_settings.tab.page_themes") => ($active != 3 - ? (MIBEW_WEB_ROOT . "/operator/page_themes.php") - : ""), - getlocal("page_settings.tab.themes") => ($active != 4 - ? (MIBEW_WEB_ROOT . "/operator/themes.php") - : ""), ); - if (Settings::get('enabletracking')) { - $tabs[getlocal("page_settings.tab.invitationthemes")] = ($active != 5 - ? (MIBEW_WEB_ROOT . "/operator/invitationthemes.php") - : ""); - } - return $tabs; } diff --git a/src/mibew/locales/en/properties b/src/mibew/locales/en/properties index f7394012..58245d3d 100644 --- a/src/mibew/locales/en/properties +++ b/src/mibew/locales/en/properties @@ -256,6 +256,7 @@ menu.main=Main menu.operator=You are {0} menu.profile.content=You can change your personal information on this page. menu.profile=Profile +menu.styles=Styles menu.translate=Localize menu.updates.content=Check for news and updates. menu.updates=Updates @@ -508,7 +509,7 @@ right.main=Main right.other=Other settings.chat.title.description=Name of your company for example. settings.chat.title=Title in the chat window -settings.chatstyle.description=A preview all pages for each style is available here +settings.chatstyle.description=A preview all pages for each style is available here settings.chatstyle=Select a style for your chat windows settings.company.title.description=Enter your company title settings.company.title=Company title @@ -548,7 +549,7 @@ settings.host.description=Destination for your company name or logo link settings.host=URL of your website settings.invitationlifetime.description=Specify the lifetime of invitation in seconds. Default is 60 seconds. settings.invitationlifetime=Invitation lifetime -settings.invitationstyle.description=A preview for invitation style is available here +settings.invitationstyle.description=A preview for invitation style is available here settings.invitationstyle=Select a style for your invitation settings.leavemessage_captcha.description=Protection against automated spam (captcha) settings.leavemessage_captcha=Force visitor to enter a verification code when leaving message @@ -563,7 +564,7 @@ settings.onehostconnections.description=0 allows any number of connections settings.onehostconnections=Max number of threads from one address settings.onlinetimeout.description=Set the number of seconds to show an operator as online. Default is 30 seconds. settings.onlinetimeout=Operator online time threshold -settings.page_style.description=A preview for each style is available here +settings.page_style.description=A preview for each style is available here settings.page_style=Select a style for your operator pages settings.popup_notification.description=Small dialog appears to attract your attention. settings.popup_notification=Enable "Popup dialog notification of the new visitor". diff --git a/src/mibew/operator/invitationthemes.php b/src/mibew/operator/invitationthemes.php deleted file mode 100644 index ca6e4983..00000000 --- a/src/mibew/operator/invitationthemes.php +++ /dev/null @@ -1,59 +0,0 @@ -getConfigurations(); - -$screenshots = array(); -foreach ($style_config['screenshots'] as $name => $desc) { - $screenshots[] = array( - 'name' => $name, - 'file' => (MIBEW_WEB_ROOT . '/' . $invitation_style->getFilesPath() - . '/screenshots/' . $name . '.png'), - 'description' => $desc - ); -} - -$page['formpreview'] = $preview; -$page['availablePreviews'] = $style_list; -$page['screenshotsList'] = $screenshots; -$page['title'] = getlocal("page.preview.title"); -$page['menuid'] = "settings"; - -$page = array_merge($page, prepare_menu($operator)); - -$page['tabs'] = setup_settings_tabs(5); - -$page_style = new PageStyle(PageStyle::getCurrentStyle()); -$page_style->render('invitation_themes', $page); diff --git a/src/mibew/operator/page_themes.php b/src/mibew/operator/page_themes.php deleted file mode 100644 index 03722307..00000000 --- a/src/mibew/operator/page_themes.php +++ /dev/null @@ -1,58 +0,0 @@ -getConfigurations(); - -$screenshots = array(); -foreach ($style_config['screenshots'] as $name => $desc) { - $screenshots[] = array( - 'name' => $name, - 'file' => (MIBEW_WEB_ROOT . '/' . $preview_style->getFilesPath() - . '/screenshots/' . $name . '.png'), - 'description' => $desc, - ); -} - -$page['formpreview'] = $preview; -$page['availablePreviews'] = $style_list; -$page['screenshotsList'] = $screenshots; -$page['title'] = getlocal("page.preview.title"); -$page['menuid'] = "settings"; - -$page = array_merge($page, prepare_menu($operator)); - -$page['tabs'] = setup_settings_tabs(3); - -$page_style = new PageStyle(PageStyle::getCurrentStyle()); -$page_style->render('page_themes', $page); diff --git a/src/mibew/operator/themes.php b/src/mibew/operator/themes.php deleted file mode 100644 index fc080a21..00000000 --- a/src/mibew/operator/themes.php +++ /dev/null @@ -1,60 +0,0 @@ -getConfigurations(); - -$screenshots = array(); -foreach ($style_config['screenshots'] as $name => $desc) { - $screenshots[] = array( - 'name' => $name, - 'file' => (MIBEW_WEB_ROOT . '/' . $chat_style->getFilesPath() - . '/screenshots/' . $name . '.png'), - 'description' => $desc - ); -} - -$page['formpreview'] = $preview; -$page['availablePreviews'] = $style_list; -$page['screenshotsList'] = $screenshots; -$page['title'] = getlocal("page.preview.title"); -$page['menuid'] = "settings"; - -$page = array_merge($page, prepare_menu($operator)); - -$page['tabs'] = setup_settings_tabs(4); - -$page_style = new PageStyle(PageStyle::getCurrentStyle()); -$page_style->render('themes', $page); diff --git a/src/mibew/styles/pages/default/templates_src/server_side/_menu.handlebars b/src/mibew/styles/pages/default/templates_src/server_side/_menu.handlebars index f0720b05..1d7a397d 100644 --- a/src/mibew/styles/pages/default/templates_src/server_side/_menu.handlebars +++ b/src/mibew/styles/pages/default/templates_src/server_side/_menu.handlebars @@ -32,6 +32,7 @@