diff --git a/src/mibew/libs/classes/Mibew/Style/ChatStyle.php b/src/mibew/libs/classes/Mibew/Style/ChatStyle.php
index c75155d9..2f77c694 100644
--- a/src/mibew/libs/classes/Mibew/Style/ChatStyle.php
+++ b/src/mibew/libs/classes/Mibew/Style/ChatStyle.php
@@ -19,7 +19,7 @@ namespace Mibew\Style;
// Import namespaces and classes of the core
use Mibew\Settings;
-use Mibew\TemplateEngine\ChatTemplateEngine;
+use Mibew\Handlebars\HelpersSet;
/**
* Represents a chat style
@@ -29,7 +29,7 @@ class ChatStyle extends AbstractStyle implements StyleInterface
/**
* Template engine for chat templates.
*
- * @var \Mibew\TemplateEngine\ChatTemplateEngine
+ * @var \Handlebars\Handlebars
*/
protected $templateEngine;
@@ -42,10 +42,19 @@ class ChatStyle extends AbstractStyle implements StyleInterface
{
parent::__construct($style_name);
- $this->templateEngine = new ChatTemplateEngine(
- $this->filesPath(),
- $this->name()
+ $templates_loader = new \Handlebars\Loader\FilesystemLoader(
+ MIBEW_FS_ROOT . '/' . $this->filesPath() . '/templates_src/server_side/'
);
+
+ $this->templateEngine = new \Handlebars\Handlebars(array(
+ 'loader' => $templates_loader,
+ 'partials_loader' => $templates_loader,
+ 'helpers' => new \Handlebars\Helpers(HelpersSet::getHelpers())
+ ));
+
+ // Use custom function to escape strings
+ $this->templateEngine->setEscape('safe_htmlspecialchars');
+ $this->templateEngine->setEscapeArgs(array());
}
/**
@@ -70,6 +79,15 @@ class ChatStyle extends AbstractStyle implements StyleInterface
public function render($template_name, $data = array())
{
start_html_output();
+
+ // Pass additional variables to template
+ $data['mibewRoot'] = MIBEW_WEB_ROOT;
+ $data['mibewVersion'] = MIBEW_VERSION;
+ $data['currentLocale'] = CURRENT_LOCALE;
+ $data['rtl'] = (getlocal("localedirection") == 'rtl');
+ $data['stylePath'] = MIBEW_WEB_ROOT . '/' . $this->filesPath();
+ $data['styleName'] = $this->name();
+
echo($this->templateEngine->render($template_name, $data));
}
diff --git a/src/mibew/libs/classes/Mibew/TemplateEngine/ChatTemplateEngine.php b/src/mibew/libs/classes/Mibew/TemplateEngine/ChatTemplateEngine.php
deleted file mode 100644
index 1c01018f..00000000
--- a/src/mibew/libs/classes/Mibew/TemplateEngine/ChatTemplateEngine.php
+++ /dev/null
@@ -1,262 +0,0 @@
-stylePath = $style_path;
- $this->styleName = $style_name;
- }
-
- /**
- * Renders template and returns HTML for it.
- *
- * @param string $template_name Name of a template with neither path nor
- * extension.
- * @param array $data Data for substitutions.
- * @return string Rendered HTML markup.
- */
- public function render($template_name, $data)
- {
- $this->flattenTemplateData = array_flatten_recursive($data);
- $this->templateData = $data;
- $contents = $this->getTemplateFileContent($template_name);
-
- return $this->expandText($contents);
- }
-
- /**
- * Check if condition form conditional construction is true.
- *
- * @param string $condition Condition name. Can be any element name of the
- * template data array.
- */
- public function checkCondition($condition)
- {
- if ($condition == 'errors') {
- return !empty($this->templateData['errors'])
- && is_array($this->templateData['errors']);
- }
-
- return !empty($this->flattenTemplateData[$condition]);
- }
-
- /**
- * Process conditional construction. This function is a callback for
- * "preg_replace_callback" function.
- *
- * @param array $matches matches passed from "preg_replace_callback"
- * function.
- * @return string One of conditional blocks depending of conditional value.
- */
- public function expandCondition($matches)
- {
- $value = $this->checkCondition($matches[2]) ^ ($matches[1] != 'if');
-
- if ($value) {
- return preg_replace_callback(
- self::IF_REGEXP,
- array($this, "expandCondition"),
- $matches[3]
- );
- } elseif (isset($matches[4])) {
- return preg_replace_callback(
- self::IF_REGEXP,
- array($this, "expandCondition"),
- substr($matches[4], strpos($matches[4], "}") + 1)
- );
- }
-
- return "";
- }
-
- /**
- * Replace variables in template with its values. This function is a
- * callback for "preg_replace_callback" function.
- *
- * @param array $matches matches passed from "preg_replace_callback"
- * function.
- * @return string Value of the variable or empty string if the value was not
- * passed in with template data.
- */
- public function expandVar($matches)
- {
- $prefix = $matches[1];
- $var = $matches[2];
-
- if (!$prefix) {
- if ($var == 'mibewroot') {
- return MIBEW_WEB_ROOT;
- } elseif ($var == 'tplroot') {
- return MIBEW_WEB_ROOT . "/" . $this->stylePath;
- } elseif ($var == 'styleid') {
- return $this->styleName;
- } elseif ($var == 'pagination') {
- return generate_pagination(
- MIBEW_WEB_ROOT . '/' . $this->stylePath,
- $this->templateData['pagination']
- );
- } elseif ($var == 'errors' || $var == 'harderrors') {
- $errors_data_exists = !empty($this->templateData['errors'])
- && is_array($this->templateData['errors']);
- if ($errors_data_exists) {
- $result = getlocal("$var.header");
- foreach ($this->templateData['errors'] as $e) {
- $result .= getlocal("errors.prefix")
- . $e
- . getlocal("errors.suffix");
- }
- $result .= getlocal("errors.footer");
-
- return $result;
- }
- }
- } elseif ($prefix == 'msg:' || $prefix == 'msgjs:' || $prefix == 'url:') {
- $message = '';
- if (strpos($var, ",") !== false) {
- $pos = strpos($var, ",");
- $param = substr($var, $pos + 1);
- $var = substr($var, 0, $pos);
- $message = getlocal2($var, array($this->flattenTemplateData[$param]));
- } else {
- $message = getlocal($var);
- }
- if ($prefix == 'msgjs:') {
- return json_encode($message);
- }
- return $message;
- } elseif ($prefix == 'form:') {
- return form_value($this->templateData, $var);
- } elseif ($prefix == 'page:' || $prefix == 'pagejs:') {
- $message = isset($this->flattenTemplateData[$var])
- ? $this->flattenTemplateData[$var]
- : "";
-
- return ($prefix == 'pagejs:') ? json_encode($message) : $message;
- } elseif ($prefix == 'if:' || $prefix == 'else:' || $prefix == 'endif:' || $prefix == 'ifnot:') {
- return "";
- }
-
- return "";
- }
-
- /**
- * Process "include" control structure. This function is a callback for
- * "preg_replace_callback" function.
- *
- * @param array $matches matches passed from "preg_replace_callback"
- * function.
- * @return string Contents of including file
- */
- public function expandInclude($matches)
- {
- $template_name = $matches[1];
-
- return $this->getTemplateFileContent($template_name);
- }
-
- /**
- * Converts all control structures to markup.
- *
- * @param string $text Source text
- * @return string Markup with no control structures
- */
- public function expandText($text)
- {
- $text = preg_replace_callback(
- "/\\\${include:([\w\.]+)}/",
- array($this, "expandInclude"),
- $text
- );
-
- $text = preg_replace_callback(
- self::IF_REGEXP,
- array($this, "expandCondition"),
- $text
- );
-
- return preg_replace_callback(
- "/\\\${(\w+:)?([\w\.,]+)}/",
- array($this, "expandVar"),
- $text
- );
- }
-
- /**
- * Loads content of a template file.
- *
- * @param string $template_name Name of a template file to load.
- * @return string Template file's content.
- *
- * @throws \RuntimeException If there is no such template file or the file
- * is not readable.
- */
- protected function getTemplateFileContent($template_name)
- {
- $full_file_path = MIBEW_FS_ROOT . '/' . $this->stylePath
- . '/templates/' . $template_name . '.tpl';
-
- if (!is_readable($full_file_path)) {
- throw new \RuntimeException(
- 'Cannot load template file: "' . $full_file_path . '"'
- );
- }
-
- return file_get_contents($full_file_path);
- }
-}
diff --git a/src/mibew/styles/dialogs/default/chat.css b/src/mibew/styles/dialogs/default/chat.css
index 88fbaf76..69ee6e24 100644
--- a/src/mibew/styles/dialogs/default/chat.css
+++ b/src/mibew/styles/dialogs/default/chat.css
@@ -104,9 +104,8 @@ img {
text-decoration: none;
}
#page-title {
- position: absolute;
- right: 14px;
- bottom: 5px;
+ float: right;
+ margin-top: 5px;
text-align: right;
}
/* ----------- */
diff --git a/src/mibew/styles/dialogs/default/templates/agentchat.tpl b/src/mibew/styles/dialogs/default/templates/agentchat.tpl
deleted file mode 100644
index 9b720b3f..00000000
--- a/src/mibew/styles/dialogs/default/templates/agentchat.tpl
+++ /dev/null
@@ -1 +0,0 @@
-${include:chat.tpl}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/agentrochat.tpl b/src/mibew/styles/dialogs/default/templates/agentrochat.tpl
deleted file mode 100644
index 9b720b3f..00000000
--- a/src/mibew/styles/dialogs/default/templates/agentrochat.tpl
+++ /dev/null
@@ -1 +0,0 @@
-${include:chat.tpl}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/chat.tpl b/src/mibew/styles/dialogs/default/templates/chat.tpl
deleted file mode 100644
index e006481e..00000000
--- a/src/mibew/styles/dialogs/default/templates/chat.tpl
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
- ${msg:chat.window.title.agent}
-
-
-
- ${page:additional_css}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${page:additional_js}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/error.tpl b/src/mibew/styles/dialogs/default/templates/error.tpl
deleted file mode 100644
index 116df0ce..00000000
--- a/src/mibew/styles/dialogs/default/templates/error.tpl
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- ${msg:chat.error_page.title}
-
-
-
-
-
-
- ${if:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${else:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${endif:company.chatLogoURL}
-
-
${msg:leavemessage.title}
-
-
-
-
-
- ${harderrors}
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/mail.tpl b/src/mibew/styles/dialogs/default/templates/mail.tpl
deleted file mode 100644
index 850d415d..00000000
--- a/src/mibew/styles/dialogs/default/templates/mail.tpl
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- ${msg:chat.window.title.user}
-
-
-
-
-
-
-
-
diff --git a/src/mibew/styles/dialogs/default/templates/mailsent.tpl b/src/mibew/styles/dialogs/default/templates/mailsent.tpl
deleted file mode 100644
index b978fff3..00000000
--- a/src/mibew/styles/dialogs/default/templates/mailsent.tpl
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- ${msg:chat.window.title.user}
-
-
-
-
-
-
- ${if:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${else:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${endif:company.chatLogoURL}
-
-
${msg:chat.mailthread.sent.title}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/nochat.tpl b/src/mibew/styles/dialogs/default/templates/nochat.tpl
deleted file mode 100644
index 54a3317b..00000000
--- a/src/mibew/styles/dialogs/default/templates/nochat.tpl
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- ${msg:chat.window.title.user}
-
-
-
-
-
-
- ${if:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${else:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${endif:company.chatLogoURL}
-
-
${msg:page.chat.old_browser.title}
-
-
-
-
-
- ${msg:page.chat.old_browser.list}
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/redirect.tpl b/src/mibew/styles/dialogs/default/templates/redirect.tpl
deleted file mode 100644
index 9696874c..00000000
--- a/src/mibew/styles/dialogs/default/templates/redirect.tpl
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
- ${msg:chat.window.title.agent}
-
-
-
-
-
-
- ${if:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${else:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${endif:company.chatLogoURL}
-
-
${msg:chat.redirect.title}
-
-
-
-
-
-
- ${if:redirectToAgent}
-
${msg:chat.redirect.operator}
-
- ${page:redirectToAgent}
-
- ${endif:redirectToAgent}
-
-
- ${if:redirectToGroup}
-
${msg:chat.redirect.group}
-
- ${page:redirectToGroup}
-
- ${endif:redirectToGroup}
-
-
%nbsp;
-
${pagination}
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates/redirected.tpl b/src/mibew/styles/dialogs/default/templates/redirected.tpl
deleted file mode 100644
index de11039b..00000000
--- a/src/mibew/styles/dialogs/default/templates/redirected.tpl
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
- ${msg:chat.window.title.user}
-
-
-
-
-
-
- ${if:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${else:company.chatLogoURL}
- ${if:mibewHost}
-
-
-
- ${else:mibewHost}
-
- ${endif:mibewHost}
- ${endif:company.chatLogoURL}
-
-
${msg:chat.redirected.title}
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/_layout.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/_layout.handlebars
new file mode 100644
index 00000000..2f5232bf
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/_layout.handlebars
@@ -0,0 +1,56 @@
+
+
+
+
+ {{#block "windowTitle"}}{{l10n "chat.window.title.user"}}{{/block}}
+
+
+ {{#block "head"}}{{/block}}
+
+
+
+ {{#block "page"}}
+ {{! Logo block}}
+
+
+ {{#if company.chatLogoURL}}
+ {{#if mibewHost}}
+
+
+
+ {{else}}
+
+ {{/if}}
+ {{else}}
+ {{#if mibewHost}}
+
+
+
+ {{else}}
+
+ {{/if}}
+ {{/if}}
+
{{#block "pageTitle"}}{{l10n "chat.window.title.user"}}{{/block}}
+
+
+
+
+ {{! Header block. Contains page description and buttons}}
+
+
+ {{! Main content block}}
+
+ {{#block "content"}} {{/block}}
+
+ {{/block}}
+
+
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/agentchat.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/agentchat.handlebars
new file mode 100644
index 00000000..1f928c3d
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/agentchat.handlebars
@@ -0,0 +1 @@
+{{> chat}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/agentrochat.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/agentrochat.handlebars
new file mode 100644
index 00000000..1f928c3d
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/agentrochat.handlebars
@@ -0,0 +1 @@
+{{> chat}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars
new file mode 100644
index 00000000..c24b263d
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/chat.handlebars
@@ -0,0 +1,116 @@
+{{#extends "_layout"}}
+ {{#override "head"}}
+
+
+ {{additional_css}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{additional_js}}
+
+
+
+
+
+ {{/override}}
+
+ {{#override "page"}}
+
+ {{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/error.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/error.handlebars
new file mode 100644
index 00000000..b415c0d3
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/error.handlebars
@@ -0,0 +1,23 @@
+{{#extends "_layout"}}
+ {{#override "windowTitle"}}{{l10n "chat.error_page.title"}}{{/override}}
+
+ {{#override "pageTitle"}}{{l10n "chat.error_page.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "content"}}
+ {{#if errors}}
+ {{l10n "harderrors.header"}}
+ {{#each errors}}
+ {{l10n "errors.prefix"}}
+ {{{this}}}
+ {{l10n "errors.suffix"}}
+ {{/each}}
+ {{l10n "errors.footer"}}
+ {{/if}}
+ {{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/mail.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/mail.handlebars
new file mode 100644
index 00000000..52795c85
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/mail.handlebars
@@ -0,0 +1,34 @@
+{{#extends "_layout"}}
+ {{#override "pageTitle"}}{{l10n "mailthread.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "message"}}
+
+ {{/override}}
+
+ {{#override "content"}}
+ {{#if errors}}
+ {{l10n "errors.header"}}
+ {{#each errors}}
+ {{l10n "errors.prefix"}}
+ {{{this}}}
+ {{l10n "errors.suffix"}}
+ {{/each}}
+ {{l10n "errors.footer"}}
+ {{/if}}
+ {{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/mailsent.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/mailsent.handlebars
new file mode 100644
index 00000000..71b5a566
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/mailsent.handlebars
@@ -0,0 +1,11 @@
+{{#extends "_layout"}}
+ {{#override "pageTitle"}}{{l10n "chat.mailthread.sent.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "message"}}{{l10n "chat.mailthread.sent.content" email}}{{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/nochat.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/nochat.handlebars
new file mode 100644
index 00000000..5806383c
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/nochat.handlebars
@@ -0,0 +1,15 @@
+{{#extends "_layout"}}
+ {{#override "pageTitle"}}{{l10n "chat.error_page.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "message"}}{{l10n "page.chat.old_browser.problem"}}{{/override}}
+
+ {{#override "content"}}
+ {{l10n "page.chat.old_browser.list"}}
+ {{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/redirect.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/redirect.handlebars
new file mode 100644
index 00000000..69585813
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/redirect.handlebars
@@ -0,0 +1,32 @@
+{{#extends "_layout"}}
+ {{#override "pageTitle"}}{{l10n "chat.redirect.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "message"}}{{l10n "chat.redirect.choose"}}{{/override}}
+
+ {{#override "content"}}
+
+ {{#if redirectToAgent}}
+
{{l10n "chat.redirect.operator"}}
+
+ {{{redirectToAgent}}}
+
+ {{/if}}
+
+
+ {{#if redirectToGroup}}
+
{{l10n "chat.redirect.group"}}
+
+ {{{redirectToGroup}}}
+
+ {{/if}}
+
+
+ {{generatePagination stylePath pagination}}
+ {{/override}}
+{{/extends}}
\ No newline at end of file
diff --git a/src/mibew/styles/dialogs/default/templates_src/server_side/redirected.handlebars b/src/mibew/styles/dialogs/default/templates_src/server_side/redirected.handlebars
new file mode 100644
index 00000000..77e5cc32
--- /dev/null
+++ b/src/mibew/styles/dialogs/default/templates_src/server_side/redirected.handlebars
@@ -0,0 +1,11 @@
+{{#extends "_layout"}}
+ {{#override "pageTitle"}}{{l10n "chat.redirected.title"}}{{/override}}
+
+ {{#override "buttons"}}
+
+
+
+ {{/override}}
+
+ {{#override "message"}}{{message}}{{/override}}
+{{/extends}}
\ No newline at end of file