PluginProbe
WebTotem Security / 3.0.0
WebTotem Security v3.0.0
3.0.1 3.0.0 trunk 1.0 1.1 1.2 1.3 1.3.1 1.3.2 1.3.3 2.0 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.1 2.2.2 2.2.3 2.2.4 All 109 releases
wt-security / lib / Template.php

Template.php in WebTotem Security 3.0.0, at lib/Template.php

228 lines 6.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('WEBTOTEM_INIT') || WEBTOTEM_INIT !== true) {
4 if (!headers_sent()) {
5 header('HTTP/1.1 403 Forbidden');
6 }
7 die("Protected By WebTotem!");
8 }
9
10 use Twig\Error\LoaderError;
11 use Twig\Error\RuntimeError;
12 use Twig\Error\SyntaxError;
13 use \Twig\Loader\FilesystemLoader;
14 use \Twig\Environment;
15
16 /**
17 * Read, parse and handle everything related with the templates.
18 */
19 class WebTotemTemplate
20 {
21
22 protected $loader;
23 protected $page_nonce;
24 protected $images_path;
25 protected $menu_url;
26 protected $domain;
27
28 function __construct()
29 {
30 if (class_exists('\Twig\Loader\FilesystemLoader')) {
31 $this->loader = new FilesystemLoader(WEBTOTEM_PLUGIN_PATH . '/includes/templates/');
32 }
33 $this->page_nonce = wp_create_nonce('wtotem_page_nonce');
34 $this->images_path = WebTotem::getImagePath('');
35 $this->menu_url = WebTotem::adminURL('admin.php?page=wtotem');
36 $this->domain = WEBTOTEM_SITE_DOMAIN;
37 }
38
39 /**
40 * Rendering a template using twig and filling in data.
41 *
42 * @param string $template
43 * @param array $variables
44 *
45 * @return bool|string
46 * @throws LoaderError
47 * @throws RuntimeError
48 * @throws SyntaxError
49 */
50 public function twigRender($template, $variables = [])
51 {
52
53 $twig = new Environment($this->loader);
54
55 if (!file_exists(WEBTOTEM_PLUGIN_PATH . '/includes/templates/' . $template)) {
56 WebTotemOption::setNotification('error', __('There is no template: ', 'wtotem') . $template);
57 return FALSE;
58 }
59
60 // Default values of some variables
61 $variables['images_path'] = $this->images_path;
62 $variables['days'] = (isset($variables['days'])) ? $variables['days'] : 7;
63 $variables['page_nonce'] = $this->page_nonce;
64 $variables['menu_url'] = $this->menu_url;
65 $variables['domain'] = $this->domain;
66 $variables['user_email'] = WebTotem::getUserEmail();
67
68 if (WebTotem::isMultiSite()) {
69 // $variables['is_multisite'] = WebTotem::isMultiSite();
70 // $variables['is_super_admin'] = is_super_admin();
71 // $variables['hid'] = (WebTotemRequest::get('hid')) ? '&hid=' . WebTotemRequest::get('hid') : '';
72 $variables['is_multisite'] = false;
73 $variables['is_super_admin'] = is_super_admin();
74 }
75
76 $twig->addFilter(new \Twig\TwigFilter('trans', array($this, 'translate')));
77 $twig->addFunction(new \Twig\TwigFunction('plural', array($this, 'plural')));
78 $twig->addFilter(new \Twig\TwigFilter('t', array($this, 'translate')));
79
80 return $twig->render($template, $variables);
81 }
82
83 /**
84 * Page rendering based on array data.
85 *
86 * @param $params
87 *
88 * @return bool|string
89 * @throws LoaderError
90 * @throws RuntimeError
91 * @throws SyntaxError
92 */
93 public function arrayRender($params)
94 {
95
96 $render = '';
97 if (is_array($params)) {
98
99 if (array_key_exists('template', $params)) {
100 $template = $params['template'] . '.html.twig';
101 $variables = (isset($params['variables'])) ? $params['variables'] : [];
102
103 $render = $this->twigRender($template, $variables) ?: '';
104 } else {
105 foreach ($params as $param) {
106 $template = $param['template'] . '.html.twig';
107 $variables = (isset($param['variables'])) ? $param['variables'] : [];
108
109 $render .= $this->twigRender($template, $variables) ?: '';
110 }
111 }
112
113 }
114
115 return $render;
116 }
117
118 /**
119 * Generate a page based on a basic template and content.
120 *
121 * @param $page_content
122 *
123 * @return bool|string
124 * @throws LoaderError
125 * @throws RuntimeError
126 * @throws SyntaxError
127 */
128 public function baseTemplate($page_content)
129 {
130
131 if (WebTotemRequest::get('hid')) {
132 WebTotemOption::setSessionOptions(['host_id' => WebTotemRequest::get('hid')]);
133 $host = WebTotemOption::getHost(WebTotemRequest::get('hid'));
134 } else {
135 $host = WebTotemAPI::siteInfo();
136 }
137
138 $variables['menu_url'] = WebTotem::adminURL('admin.php?page=wtotem');
139
140 $page = str_replace(['wtotem', '_'], '', WebTotemRequest::get('page'));
141 $page = $page ?: 'dashboard';
142 $variables['is_active'][$page] = 'wtotem_nav__link_active';
143 $variables['page'] = $page;
144
145 if ($page != 'activation') {
146 $user_feedback = WebTotemAPI::getFeedback();
147 if(is_array($user_feedback) and array_key_exists('score', $user_feedback)){
148 $variables['user_feedback'] = (bool)$user_feedback['score'];
149 } else {
150 $variables['user_feedback'] = true;
151 }
152 } else {
153 $variables['user_feedback'] = true;
154 }
155
156 $site_created_at = WebTotemOption::getOption('site_created_at');
157 $site_created_at = $site_created_at ? json_decode($site_created_at, true) : [];
158 $site_created_at = (array_key_exists($host['name'], $site_created_at)) ? $site_created_at[$host['name']] : null;
159 $variables['site_created_at'] = $site_created_at ? date('Y-m-d', strtotime($site_created_at)) : null;
160
161 $variables['theme_mode'] = WebTotem::getThemeMode();
162 $variables['notifications'] = WebTotem::getNotifications();
163 $variables['current_year'] = date('Y');
164 $variables['content'] = $page_content;
165
166 return $this->twigRender('layout.html.twig', $variables);
167 }
168
169 /**
170 * String translation.
171 *
172 * @param $string
173 * @param array $params
174 *
175 * @return string
176 */
177 public static function translate($string, array $params = [])
178 {
179
180 global $locale;
181
182 $string = ('en_US' !== $locale) ? translate($string, 'wtotem') : $string;
183
184 if ($params) {
185 foreach ($params as $key => $value) {
186 $string = str_replace($key, $value, $string);
187 }
188 }
189
190 return (string)$string;
191 }
192
193 /**
194 * @param array $params [single, plural, number]
195 *
196 * usage example
197 * {{ plural({'single' : '%s month', 'plural' : '%s months', 'number' : 1}) }}
198 *
199 * @return string
200 */
201 public static function plural(array $params): string
202 {
203
204 $string = _n($params['single'], $params['plural'], $params['number'], 'wtotem');
205 $string = str_replace('%s', $params['number'], $string);
206
207 return (string)$string;
208 }
209
210 /**
211 * Get HTML without Twig
212 *
213 * @return string|bool
214 */
215 public function getHtml($template)
216 {
217 $templatePath = WEBTOTEM_PLUGIN_PATH . '/includes/templates/' . $template . '.html.twig';
218 if (!file_exists($templatePath)) {
219 return FALSE;
220 }
221
222 ob_start();
223 include $templatePath;
224 return ob_get_clean();
225 }
226
227 }
228