PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.19.4
GiveWP – Donation Plugin and Fundraising Platform v2.19.4
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 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.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Log / LogModel.php
give / src / Log Last commit date
Admin 4 years ago Commands 4 years ago Helpers 4 years ago Migrations 4 years ago ValueObjects 4 years ago Assets.php 4 years ago Log.php 4 years ago LogFactory.php 4 years ago LogModel.php 4 years ago LogRepository.php 4 years ago LogServiceProvider.php 4 years ago
LogModel.php
288 lines
1 <?php
2
3 namespace Give\Log;
4
5 use DateTime;
6 use Give\Log\ValueObjects\LogType;
7
8 /**
9 * Class LogModel
10 * @package Give\Log
11 *
12 * @method error(string $message, string $source, array $context = [])
13 * @method warning(string $message, string $source, array $context = [])
14 * @method notice(string $message, string $source, array $context = [])
15 * @method success(string $message, string $source, array $context = [])
16 * @method info(string $message, string $source, array $context = [])
17 * @method http(string $message, string $source, array $context = [])
18 *
19 * @since 2.10.0
20 */
21 class LogModel
22 {
23 /**
24 * @var string
25 */
26 private $type;
27
28 /**
29 * @var string
30 */
31 private $message;
32
33 /**
34 * @var string
35 */
36 private $category;
37
38 /**
39 * @var string
40 */
41 private $source;
42
43 /**
44 * @var array
45 */
46 private $context;
47
48 /**
49 * @var int|null
50 */
51 private $id;
52
53 /**
54 * @var string
55 */
56 private $date;
57
58 /**
59 * LogModel constructor.
60 *
61 * @param string $type
62 * @param string $message
63 * @param string $category
64 * @param string $source
65 * @param array $context
66 * @param int|null $logId
67 * @param string $date
68 */
69 public function __construct($type, $message, $category, $source, $context, $logId, $date)
70 {
71 $this->setType($type);
72 $this->setDate($date);
73 $this->category = $category;
74 $this->source = $source;
75 $this->context = $context;
76 $this->message = $message;
77 $this->id = $logId;
78 }
79
80 /**
81 * Set log type
82 * If log type is not supported, it will fallback to NOTICE type
83 *
84 * @param string $type
85 */
86 private function setType($type)
87 {
88 $this->type = in_array($type, LogType::getAll(), true)
89 ? $type
90 : LogType::getDefault();
91 }
92
93 /**
94 * Set log message
95 * If not defined, fallback to default value
96 *
97 * @param string|null $message
98 */
99 private function setMessage($message)
100 {
101 $this->message = is_null($message)
102 ? esc_html__('Something went wrong', 'give')
103 : $message;
104 }
105
106 /**
107 * Set log date
108 *
109 * @param string $date
110 */
111 private function setDate($date)
112 {
113 $this->date = $this->isValidateDate($date)
114 ? $date
115 : date('Y-m-d H:i:s');
116 }
117
118 /**
119 * Set log source
120 * If not defined, fallback to default value
121 *
122 * @param string|null $source
123 */
124 private function setSource($source)
125 {
126 $this->source = is_null($source)
127 ? esc_html__('Give Core', 'give')
128 : $source;
129 }
130
131 /**
132 * Helper method to check if given string is a valid date
133 *
134 * @param string $date
135 * @param string $format
136 *
137 * @return bool
138 */
139 public function isValidateDate($date, $format = 'Y-m-d H:i:s')
140 {
141 $dateTime = DateTime::createFromFormat($format, $date);
142
143 return $dateTime && $dateTime->format($format) === $date;
144 }
145
146 /**
147 * @return int
148 */
149 public function getId()
150 {
151 return $this->id;
152 }
153
154 /**
155 * @return string
156 */
157 public function getType()
158 {
159 return $this->type;
160 }
161
162 /**
163 * @return string
164 */
165 public function getCategory()
166 {
167 return $this->category;
168 }
169
170 /**
171 * @return string
172 */
173 public function getSource()
174 {
175 return $this->source;
176 }
177
178 /**
179 * @return string
180 */
181 public function getMessage()
182 {
183 return $this->message;
184 }
185
186 /**
187 * @return array
188 */
189 public function getContext()
190 {
191 return $this->context;
192 }
193
194 /**
195 * @return string
196 */
197 public function getDate()
198 {
199 return $this->date;
200 }
201
202 /**
203 * Get context data
204 *
205 * @param bool $jsonEncode
206 *
207 * @return string|array
208 */
209 public function getData($jsonEncode = false)
210 {
211 $data = [
212 'message' => $this->getMessage(),
213 'context' => $this->getContext(),
214 ];
215
216 if ($jsonEncode) {
217 return json_encode($data);
218 }
219
220 return $data;
221 }
222
223 /**
224 * @param string $key
225 * @param mixed $value
226 */
227 private function addContext($key, $value)
228 {
229 if (is_array($value) || is_object($value)) {
230 $value = print_r($value, true);
231 }
232 $this->context[$key] = $value;
233 }
234
235 /**
236 * Add supplemental information to existing log.
237 * Supplemental data will be added as a context with a key prefixed with the current timestamp.
238 *
239 * @param string $key
240 * @param string $value
241 */
242 public function addSupplemental($key, $value)
243 {
244 $contextName = sprintf('[%s] %s', date('Y-m-d H:i:s'), $key);
245 $this->addContext($contextName, $value);
246 }
247
248 /**
249 * @param string $type
250 * @param array $args
251 */
252 public function __call($type, $args)
253 {
254 list ($message, $source, $context) = array_pad($args, 3, null);
255
256 $this->setType($type);
257 $this->setMessage($message);
258 $this->setSource($source);
259
260 // Set additional context
261 if (is_array($context)) {
262 foreach ($context as $key => $value) {
263 $this->addContext($key, $value);
264 }
265 }
266
267 $this->save();
268 }
269
270 /**
271 * Save log record
272 */
273 public function save()
274 {
275 /**
276 * var LogRepository $repository
277 */
278 $repository = give(LogRepository::class);
279
280 if ($this->getId()) {
281 $this->date = date('Y-m-d H:i:s');
282 $repository->updateLog($this);
283 } else {
284 $this->id = $repository->insertLog($this);
285 }
286 }
287 }
288