PluginProbe
FluentSMTP – WP Mail SMTP Plugin with Amazon SES, SendGrid, Mailgun, Postmark, Cloudflare, toSend, Gmail and Any SMTP / trunk
FluentSMTP – WP Mail SMTP Plugin with Amazon SES, SendGrid, Mailgun, Postmark, Cloudflare, toSend, Gmail and Any SMTP vtrunk
2.4.0 trunk 1.0.1 1.1.0 1.1.1 1.2.0 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.1.2 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.2.71 2.2.72 2.2.73 2.2.80 2.2.81 All 32 releases
fluent-smtp / includes / View / View.php

View.php in FluentSMTP – WP Mail SMTP Plugin with Amazon SES, SendGrid, Mailgun, Postmark, Cloudflare, toSend, Gmail and Any SMTP trunk, at includes/View/View.php

141 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentMail\Includes\View;
4
5 use Exception;
6
7 class View
8 {
9 protected $app;
10
11 protected $path;
12
13 protected $data = [];
14
15 protected static $sharedData = [];
16
17 public function __construct($app)
18 {
19 $this->app = $app;
20 }
21
22 /**
23 * Generate and echo/print a view file
24 * @param string $path
25 * @param array $data
26 * @return void
27 */
28 public function render($path, $data = [])
29 {
30 echo $this->make($path, $data); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
31 }
32
33 /**
34 * Generate a view file
35 * @param string $path
36 * @param array $data
37 * @return string [generated html]
38 * @throws Exception
39 */
40 public function make($path, $data = [])
41 {
42 if (file_exists($this->path = $this->resolveFilePath($path))) {
43 $this->data = $data;
44 return $this;
45 }
46
47 throw new Exception("The view file [{$this->path}] doesn't exists!"); // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped
48 }
49
50 /**
51 * Resolve the view file path
52 * @param string $path
53 * @return string
54 */
55 protected function resolveFilePath($path)
56 {
57 $path = str_replace('.', DIRECTORY_SEPARATOR, $path);
58
59 return $this->app['path.views'] . $path .'.php';
60 }
61
62 /**
63 * Evaluate the view file
64 * @param string $path
65 * @param string $data
66 * @return $this
67 */
68 protected function renderContent()
69 {
70 $renderOutput = function($app) {
71 ob_start() && extract(
72 $this->gatherData(), EXTR_SKIP
73 );
74
75 include $this->path;
76
77 return ltrim(ob_get_clean());
78 };
79
80 return $renderOutput($this->app);
81 }
82
83 /**
84 * Gether shared & view data
85 * @return array
86 */
87 protected function gatherData()
88 {
89 return array_merge(static::$sharedData, $this->data);
90 }
91
92 /**
93 * Share global data for any view
94 * @param string $key
95 * @param mixed $value
96 * @return void
97 */
98 public function share($key, $value)
99 {
100 static::$sharedData[$key] = $value;
101 }
102
103 /**
104 * Provides a fluent interface to set data
105 * @param mixed $key
106 * @param mixed $data
107 * @return $this
108 */
109 public function with($name, $data = [])
110 {
111 if (is_array($name)) {
112 foreach ($name as $key => $value) {
113 $this->__set($key, $value);
114 }
115 } else {
116 $this->__set($name, $data);
117 }
118
119 return $this;
120 }
121
122 /**
123 * Setter for the view
124 * @param string $key
125 * @param mixed $value
126 */
127 public function __set($key, $value)
128 {
129 $this->data[$key] = $value;
130 }
131
132 /**
133 * Dump the view result
134 * @return string
135 */
136 public function __toString()
137 {
138 return $this->renderContent();
139 }
140 }
141