From d406f720d88070d8624207da60a558eeb1f412e0 Mon Sep 17 00:00:00 2001 From: Dmitriy Simushev Date: Tue, 17 Dec 2013 15:13:31 +0000 Subject: [PATCH] Add an ability to select style for operator pages --- src/mibew/libs/chat.php | 2 +- src/mibew/libs/classes/settings.php | 1 + src/mibew/libs/common/configurations.php | 7 +- src/mibew/libs/common/request.php | 9 +++ src/mibew/libs/settings.php | 5 +- src/mibew/libs/view.php | 25 +++++-- src/mibew/locales/en/properties | 3 + src/mibew/operator/invitationthemes.php | 2 +- src/mibew/operator/operator_pages_themes.php | 54 +++++++++++++++ src/mibew/operator/settings.php | 24 ++++++- src/mibew/operator/themes.php | 2 +- src/mibew/operator/updates.php | 1 - src/mibew/operator/users.php | 2 +- .../styles/operator_pages/default/config.ini | 7 ++ .../default/screenshots/home.png | Bin 0 -> 14933 bytes .../default/views/operator_pages_themes.php | 63 ++++++++++++++++++ .../operator_pages/default/views/settings.php | 9 +++ 17 files changed, 198 insertions(+), 18 deletions(-) create mode 100644 src/mibew/operator/operator_pages_themes.php create mode 100644 src/mibew/styles/operator_pages/default/screenshots/home.png create mode 100644 src/mibew/styles/operator_pages/default/views/operator_pages_themes.php diff --git a/src/mibew/libs/chat.php b/src/mibew/libs/chat.php index 6ab12c5f..ad9e7981 100644 --- a/src/mibew/libs/chat.php +++ b/src/mibew/libs/chat.php @@ -423,7 +423,7 @@ function setup_chatview(Thread $thread) { = $style_config['mail']['window_params']; // Load core style options - $style_config = get_core_style_config(); + $style_config = get_core_style_config(get_operator_pages_style()); $data['chat']['windowsParams']['history'] = $style_config['history']['window_params']; diff --git a/src/mibew/libs/classes/settings.php b/src/mibew/libs/classes/settings.php index 1cd92808..c4a759db 100644 --- a/src/mibew/libs/classes/settings.php +++ b/src/mibew/libs/classes/settings.php @@ -67,6 +67,7 @@ Class Settings { 'usernamepattern' => '{name}', 'chatstyle' => 'default', 'invitationstyle' => 'default', + 'operator_pages_style' => 'default', 'chattitle' => 'Live Support', 'geolink' => 'http://api.hostip.info/get_html.php?ip={ip}', 'geolinkparams' => 'width=440,height=100,toolbar=0,scrollbars=0,location=0,status=1,menubar=0,resizable=1', diff --git a/src/mibew/libs/common/configurations.php b/src/mibew/libs/common/configurations.php index b6d4af3c..829b95ea 100644 --- a/src/mibew/libs/common/configurations.php +++ b/src/mibew/libs/common/configurations.php @@ -34,12 +34,12 @@ function read_config_file($file) { * * @return array Configuration array */ -function get_core_style_config() { +function get_core_style_config($style) { // Get root dir of mibew messanger $base_path = realpath(dirname(dirname(dirname(__FILE__)))); // Load config - $config = read_config_file($base_path.'/styles/operator_pages/default/config.ini'); + $config = read_config_file($base_path.'/styles/operator_pages/' . $style . '/config.ini'); // Set default values $config = ($config === false) ? array() : $config; @@ -60,7 +60,8 @@ function get_core_style_config() { ), 'ban' => array( 'window_params' => '' - ) + ), + 'screenshots' => array() ); return $config; diff --git a/src/mibew/libs/common/request.php b/src/mibew/libs/common/request.php index 8f38f8c8..8012850f 100644 --- a/src/mibew/libs/common/request.php +++ b/src/mibew/libs/common/request.php @@ -85,4 +85,13 @@ function getchatstyle() return Settings::get('chatstyle'); } +/** + * Returns name of the current operator pages style + * + * @return string + */ +function get_operator_pages_style() { + return Settings::get('operator_pages_style'); +} + ?> \ No newline at end of file diff --git a/src/mibew/libs/settings.php b/src/mibew/libs/settings.php index 1943a401..c0831111 100644 --- a/src/mibew/libs/settings.php +++ b/src/mibew/libs/settings.php @@ -22,10 +22,11 @@ function setup_settings_tabs($active) getlocal("page_settings.tab.main") => $active != 0 ? "$mibewroot/operator/settings.php" : "", getlocal("page_settings.tab.features") => $active != 1 ? "$mibewroot/operator/features.php" : "", getlocal("page_settings.tab.performance") => $active != 2 ? "$mibewroot/operator/performance.php" : "", - getlocal("page_settings.tab.themes") => $active != 3 ? "$mibewroot/operator/themes.php" : "", + getlocal("page_settings.tab.operator_pages_themes") => $active != 3 ? "$mibewroot/operator/operator_pages_themes.php" : "", + getlocal("page_settings.tab.themes") => $active != 4 ? "$mibewroot/operator/themes.php" : "", ); if (Settings::get('enabletracking')) { - $page['tabs'][getlocal("page_settings.tab.invitationthemes")] = ($active != 4 ? "$mibewroot/operator/invitationthemes.php" : ""); + $page['tabs'][getlocal("page_settings.tab.invitationthemes")] = ($active != 5 ? "$mibewroot/operator/invitationthemes.php" : ""); } } diff --git a/src/mibew/libs/view.php b/src/mibew/libs/view.php index 67b52810..f4d0faad 100644 --- a/src/mibew/libs/view.php +++ b/src/mibew/libs/view.php @@ -16,31 +16,46 @@ */ require_once(dirname(__FILE__).'/common/response.php'); +require_once(dirname(__FILE__).'/common/request.php'); + /** * Renders a view for an operator page * - * At the moment all views are stored in /views folder. + * All views are stored in "styles/operator_pages/" folders. * * $view_name param should include neither full view's path nor its extension. * Just view name. For example, to render and output - * 'styles/operator_pages/default/agents.php' view one should use 'agents' as + * "styles/operator_pages/default/agents.php" view one should use "agents" as * the view name. * - * @param string $view_name Name of the view to render + * @param string $view_name Name of the view to render. + * @param string $style_name Name of the style from which a view should + * be rendered. If this param is empty the value from configurations will + * be used. */ -function render_view($view_name) { +function render_view($view_name, $style_name = NULL) { // Code of this function replaces code from the global scope. Thus we need // to import some variables to make them visible to required views. global $page, $mibewroot, $version, $errors; + if (empty($style_name)) { + if (installation_in_progress()) { + // We currently instal Mibew. Thus we cannot use Database and + // Settings classes. Just use "default" style for installation pages. + $style_name = 'default'; + } else { + $style_name = get_operator_pages_style(); + } + } + // Prepare to output html start_html_output(); // Build full view name. Remove '\' and '/' characters form the specified // view name $full_view_name = dirname(dirname(__FILE__)) . - '/styles/operator_pages/default/views/' . + '/styles/operator_pages/' . $style_name . '/views/' . str_replace("/\\", '', $view_name) . '.php'; // Load and execute the view diff --git a/src/mibew/locales/en/properties b/src/mibew/locales/en/properties index 70f09717..fc6351c2 100644 --- a/src/mibew/locales/en/properties +++ b/src/mibew/locales/en/properties @@ -418,6 +418,7 @@ page_settings.intro=Specify options affecting chat window and common system beha page_settings.tab.features=Optional Services page_settings.tab.main=General page_settings.tab.performance=Performance +page_settings.tab.operator_pages_themes=Operator pages themes preview page_settings.tab.themes=Chat themes preview page_settings.tab.invitationthemes=Invitation themes preview pending.errors.network=Network problems detected. Please refresh the page. @@ -559,6 +560,8 @@ 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.operator_pages_style.description=A preview for each style is available here +settings.operator_pages_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". settings.saved=Changes saved diff --git a/src/mibew/operator/invitationthemes.php b/src/mibew/operator/invitationthemes.php index cec06717..c76c509d 100644 --- a/src/mibew/operator/invitationthemes.php +++ b/src/mibew/operator/invitationthemes.php @@ -39,7 +39,7 @@ $page['availablePreviews'] = $stylelist; $page['operatorName'] = (empty($operator['vclocalname'])?$operator['vccommonname']:$operator['vclocalname']); prepare_menu($operator); -setup_settings_tabs(4); +setup_settings_tabs(5); render_view('invitation_themes'); ?> \ No newline at end of file diff --git a/src/mibew/operator/operator_pages_themes.php b/src/mibew/operator/operator_pages_themes.php new file mode 100644 index 00000000..613dd457 --- /dev/null +++ b/src/mibew/operator/operator_pages_themes.php @@ -0,0 +1,54 @@ + $desc) { + $screenshots[] = array( + 'name' => $name, + 'file' => $mibewroot . '/styles/operator_pages/' . $preview + . '/screenshots/' . $name . '.png', + 'description' => $desc + ); +} + +$page['formpreview'] = $preview; +$page['availablePreviews'] = $stylelist; +$page['screenshotsList'] = $screenshots; + +prepare_menu($operator); +setup_settings_tabs(3); +render_view('operator_pages_themes'); + +?> \ No newline at end of file diff --git a/src/mibew/operator/settings.php b/src/mibew/operator/settings.php index 49ff6a47..84036c1e 100644 --- a/src/mibew/operator/settings.php +++ b/src/mibew/operator/settings.php @@ -30,11 +30,22 @@ $page = array('agentId' => ''); $errors = array(); $stylelist = get_style_list(dirname(dirname(__FILE__)).'/styles/dialogs'); +$operator_pages_style_list = get_style_list(dirname(dirname(__FILE__)).'/styles/operator_pages'); $options = array( - 'email', 'title', 'logo', 'hosturl', 'usernamepattern', - 'chatstyle', 'chattitle', 'geolink', 'geolinkparams', - 'sendmessagekey', 'cron_key'); + 'email', + 'title', + 'logo', + 'hosturl', + 'usernamepattern', + 'operator_pages_style', + 'chatstyle', + 'chattitle', + 'geolink', + 'geolinkparams', + 'sendmessagekey', + 'cron_key' +); if (Settings::get('enabletracking')) { $options[] = 'invitationstyle'; @@ -63,6 +74,11 @@ if (isset($_POST['email']) && isset($_POST['title']) && isset($_POST['logo'])) { $params['chatstyle'] = $stylelist[0]; } + $params['operator_pages_style'] = verifyparam("operator_pages_style", "/^\w+$/", $params['operator_pages_style']); + if (!in_array($params['operator_pages_style'], $operator_pages_style_list)) { + $params['operator_pages_style'] = $operator_pages_style_list[0]; + } + if (Settings::get('enabletracking')) { $params['invitationstyle'] = verifyparam("invitationstyle", "/^\w+$/", $params['invitationstyle']); if (!in_array($params['invitationstyle'], $invitationstylelist)) { @@ -103,6 +119,8 @@ $page['formhosturl'] = topage($params['hosturl']); $page['formgeolink'] = topage($params['geolink']); $page['formgeolinkparams'] = topage($params['geolinkparams']); $page['formusernamepattern'] = topage($params['usernamepattern']); +$page['formoperatorpagesstyle'] = $params['operator_pages_style']; +$page['availableOperatorPagesStyles'] = $operator_pages_style_list; $page['formchatstyle'] = $params['chatstyle']; $page['formchattitle'] = topage($params['chattitle']); $page['formsendmessagekey'] = $params['sendmessagekey']; diff --git a/src/mibew/operator/themes.php b/src/mibew/operator/themes.php index fc9fe76c..48048d6e 100644 --- a/src/mibew/operator/themes.php +++ b/src/mibew/operator/themes.php @@ -52,7 +52,7 @@ $page['availablePreviews'] = $stylelist; $page['screenshotsList'] = $screenshots; prepare_menu($operator); -setup_settings_tabs(3); +setup_settings_tabs(4); render_view('themes'); ?> \ No newline at end of file diff --git a/src/mibew/operator/updates.php b/src/mibew/operator/updates.php index d33009af..13bc5723 100644 --- a/src/mibew/operator/updates.php +++ b/src/mibew/operator/updates.php @@ -42,7 +42,6 @@ foreach ($default_extensions as $ext) { } prepare_menu($operator); -setup_settings_tabs(3); render_view('updates'); ?> \ No newline at end of file diff --git a/src/mibew/operator/users.php b/src/mibew/operator/users.php index cd6f40df..7413958f 100644 --- a/src/mibew/operator/users.php +++ b/src/mibew/operator/users.php @@ -45,7 +45,7 @@ $style_config = get_dialogs_style_config(getchatstyle()); $page['chatStyles.chatWindowParams'] = $style_config['chat']['window_params']; // Load core style options -$style_config = get_core_style_config(); +$style_config = get_core_style_config(get_operator_pages_style()); $page['coreStyles.threadTag'] = $style_config['users']['thread_tag']; $page['coreStyles.visitorTag'] = $style_config['users']['visitor_tag']; $page['coreStyles.trackedUserWindowParams'] = $style_config['tracked']['user_window_params']; diff --git a/src/mibew/styles/operator_pages/default/config.ini b/src/mibew/styles/operator_pages/default/config.ini index 606968be..41a9a913 100644 --- a/src/mibew/styles/operator_pages/default/config.ini +++ b/src/mibew/styles/operator_pages/default/config.ini @@ -23,3 +23,10 @@ window_params = "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=640, [ban] ; window_param use as param string in JavaScript window.open method window_params = "toolbar=0,scrollbars=0,location=0,status=1,menubar=0,width=720,height=480,resizable=1" + +; Screenshots section describe all screenshots shiped with style +; Params names should be equals to file names without extension. Pictures +; extension should be '.png' +; Params values should be equals to screenshot desription +[screenshots] +home = "Operator's home page" \ No newline at end of file diff --git a/src/mibew/styles/operator_pages/default/screenshots/home.png b/src/mibew/styles/operator_pages/default/screenshots/home.png new file mode 100644 index 0000000000000000000000000000000000000000..c433ccd0318e24a2ae7eb7b3103987becc1243d2 GIT binary patch literal 14933 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 + + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+ +
+
+ <?php echo($screenshot['name']); ?> +
+
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/src/mibew/styles/operator_pages/default/views/settings.php b/src/mibew/styles/operator_pages/default/views/settings.php index 558802a3..6c5c1e93 100644 --- a/src/mibew/styles/operator_pages/default/views/settings.php +++ b/src/mibew/styles/operator_pages/default/views/settings.php @@ -122,6 +122,15 @@ require_once(dirname(__FILE__).'/inc_errors.php');
+
+ +
+ +
+ +
+
+