PluginProbe
WebTotem Security / 3.0.2
WebTotem Security v3.0.2
3.0.2 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 All 110 releases
wt-security / lib / Template.php

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

217 lines 6.5 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 $site_created_at = WebTotemOption::getOption('site_created_at');
146 $site_created_at = $site_created_at ? json_decode($site_created_at, true) : [];
147 $site_created_at = (array_key_exists($host['name'], $site_created_at)) ? $site_created_at[$host['name']] : null;
148 $variables['site_created_at'] = $site_created_at ? date('Y-m-d', strtotime($site_created_at)) : null;
149
150 $variables['theme_mode'] = WebTotem::getThemeMode();
151 $variables['notifications'] = WebTotem::getNotifications();
152 $variables['current_year'] = date('Y');
153 $variables['content'] = $page_content;
154
155 return $this->twigRender('layout.html.twig', $variables);
156 }
157
158 /**
159 * String translation.
160 *
161 * @param $string
162 * @param array $params
163 *
164 * @return string
165 */
166 public static function translate($string, array $params = [])
167 {
168
169 global $locale;
170
171 $string = ('en_US' !== $locale) ? translate($string, 'wtotem') : $string;
172
173 if ($params) {
174 foreach ($params as $key => $value) {
175 $string = str_replace($key, $value, $string);
176 }
177 }
178
179 return (string)$string;
180 }
181
182 /**
183 * @param array $params [single, plural, number]
184 *
185 * usage example
186 * {{ plural({'single' : '%s month', 'plural' : '%s months', 'number' : 1}) }}
187 *
188 * @return string
189 */
190 public static function plural(array $params): string
191 {
192
193 $string = _n($params['single'], $params['plural'], $params['number'], 'wtotem');
194 $string = str_replace('%s', $params['number'], $string);
195
196 return (string)$string;
197 }
198
199 /**
200 * Get HTML without Twig
201 *
202 * @return string|bool
203 */
204 public function getHtml($template)
205 {
206 $templatePath = WEBTOTEM_PLUGIN_PATH . '/includes/templates/' . $template . '.html.twig';
207 if (!file_exists($templatePath)) {
208 return FALSE;
209 }
210
211 ob_start();
212 include $templatePath;
213 return ob_get_clean();
214 }
215
216 }
217