PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.1.0
GiveWP – Donation Plugin and Fundraising Platform v3.1.0
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 3 years ago ValueObjects 3 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
290 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 * @since 2.19.6 added debug
13 * @since 2.10.0
14 *
15 * @method error(string $message, string $source, array $context = [])
16 * @method warning(string $message, string $source, array $context = [])
17 * @method notice(string $message, string $source, array $context = [])
18 * @method success(string $message, string $source, array $context = [])
19 * @method info(string $message, string $source, array $context = [])
20 * @method http(string $message, string $source, array $context = [])
21 * @method debug(string $message, string $source, array $context = [])
22 */
23 class LogModel
24 {
25 /**
26 * @var string
27 */
28 private $type;
29
30 /**
31 * @var string
32 */
33 private $message;
34
35 /**
36 * @var string
37 */
38 private $category;
39
40 /**
41 * @var string
42 */
43 private $source;
44
45 /**
46 * @var array
47 */
48 private $context;
49
50 /**
51 * @var int|null
52 */
53 private $id;
54
55 /**
56 * @var string
57 */
58 private $date;
59
60 /**
61 * LogModel constructor.
62 *
63 * @param string $type
64 * @param string $message
65 * @param string $category
66 * @param string $source
67 * @param array $context
68 * @param int|null $logId
69 * @param string $date
70 */
71 public function __construct($type, $message, $category, $source, $context, $logId, $date)
72 {
73 $this->setType($type);
74 $this->setDate($date);
75 $this->category = $category;
76 $this->source = $source;
77 $this->context = $context;
78 $this->message = $message;
79 $this->id = $logId;
80 }
81
82 /**
83 * Set log type
84 * If log type is not supported, it will fallback to NOTICE type
85 *
86 * @param string $type
87 */
88 private function setType($type)
89 {
90 $this->type = in_array($type, LogType::getAll(), true)
91 ? $type
92 : LogType::getDefault();
93 }
94
95 /**
96 * Set log message
97 * If not defined, fallback to default value
98 *
99 * @param string|null $message
100 */
101 private function setMessage($message)
102 {
103 $this->message = is_null($message)
104 ? esc_html__('Something went wrong', 'give')
105 : $message;
106 }
107
108 /**
109 * Set log date
110 *
111 * @param string $date
112 */
113 private function setDate($date)
114 {
115 $this->date = $this->isValidateDate($date)
116 ? $date
117 : date('Y-m-d H:i:s');
118 }
119
120 /**
121 * Set log source
122 * If not defined, fallback to default value
123 *
124 * @param string|null $source
125 */
126 private function setSource($source)
127 {
128 $this->source = is_null($source)
129 ? esc_html__('Give Core', 'give')
130 : $source;
131 }
132
133 /**
134 * Helper method to check if given string is a valid date
135 *
136 * @param string $date
137 * @param string $format
138 *
139 * @return bool
140 */
141 public function isValidateDate($date, $format = 'Y-m-d H:i:s')
142 {
143 $dateTime = DateTime::createFromFormat($format, $date);
144
145 return $dateTime && $dateTime->format($format) === $date;
146 }
147
148 /**
149 * @return int
150 */
151 public function getId()
152 {
153 return $this->id;
154 }
155
156 /**
157 * @return string
158 */
159 public function getType()
160 {
161 return $this->type;
162 }
163
164 /**
165 * @return string
166 */
167 public function getCategory()
168 {
169 return $this->category;
170 }
171
172 /**
173 * @return string
174 */
175 public function getSource()
176 {
177 return $this->source;
178 }
179
180 /**
181 * @return string
182 */
183 public function getMessage()
184 {
185 return $this->message;
186 }
187
188 /**
189 * @return array
190 */
191 public function getContext()
192 {
193 return $this->context;
194 }
195
196 /**
197 * @return string
198 */
199 public function getDate()
200 {
201 return $this->date;
202 }
203
204 /**
205 * Get context data
206 *
207 * @param bool $jsonEncode
208 *
209 * @return string|array
210 */
211 public function getData($jsonEncode = false)
212 {
213 $data = [
214 'message' => $this->getMessage(),
215 'context' => $this->getContext(),
216 ];
217
218 if ($jsonEncode) {
219 return json_encode($data);
220 }
221
222 return $data;
223 }
224
225 /**
226 * @param string $key
227 * @param mixed $value
228 */
229 private function addContext($key, $value)
230 {
231 if (is_array($value) || is_object($value)) {
232 $value = print_r($value, true);
233 }
234 $this->context[$key] = $value;
235 }
236
237 /**
238 * Add supplemental information to existing log.
239 * Supplemental data will be added as a context with a key prefixed with the current timestamp.
240 *
241 * @param string $key
242 * @param string $value
243 */
244 public function addSupplemental($key, $value)
245 {
246 $contextName = sprintf('[%s] %s', date('Y-m-d H:i:s'), $key);
247 $this->addContext($contextName, $value);
248 }
249
250 /**
251 * @param string $type
252 * @param array $args
253 */
254 public function __call($type, $args)
255 {
256 list ($message, $source, $context) = array_pad($args, 3, null);
257
258 $this->setType($type);
259 $this->setMessage($message);
260 $this->setSource($source);
261
262 // Set additional context
263 if (is_array($context)) {
264 foreach ($context as $key => $value) {
265 $this->addContext($key, $value);
266 }
267 }
268
269 $this->save();
270 }
271
272 /**
273 * Save log record
274 */
275 public function save()
276 {
277 /**
278 * var LogRepository $repository
279 */
280 $repository = give(LogRepository::class);
281
282 if ($this->getId()) {
283 $this->date = date('Y-m-d H:i:s');
284 $repository->updateLog($this);
285 } else {
286 $this->id = $repository->insertLog($this);
287 }
288 }
289 }
290