PluginProbe
MainWP Dashboard: Self-hosted WordPress Management for Agencies / 5.1
MainWP Dashboard: Self-hosted WordPress Management for Agencies v5.1
6.2 6.1.8 6.1.7 6.1.6 6.1.5 6.1.4 6.1.3 6.1.2 6.1.1 6.1 6.0.12 6.0.11 4.6.0.1 5.0 5.0.1 5.0.2 5.0.3 5.0.3.1 5.0.3.2 5.1 5.1.1 5.2 5.2.1 5.2.2 5.3 All 153 releases
mainwp / class / class-mainwp-client-handler.php

class-mainwp-client-handler.php in MainWP Dashboard: Self-hosted WordPress Management for Agencies 5.1, at class/class-mainwp-client-handler.php

624 lines 26.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Client Handler.
4 *
5 * @package MainWP/Dashboard
6 */
7
8 namespace MainWP\Dashboard;
9
10 /**
11 * Class MainWP_Client_Handler
12 *
13 * @package MainWP\Dashboard
14 *
15 * @uses \MainWP\Dashboard\MainWP_Client_Handler
16 */
17 class MainWP_Client_Handler { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
18
19 /**
20 * Private static variable to hold the single instance of the class.
21 *
22 * @static
23 *
24 * @var mixed Default null
25 */
26 private static $instance = null;
27
28 /**
29 * Method instance()
30 *
31 * Create a public static instance.
32 *
33 * @static
34 * @return MainWP_Client_Handler
35 */
36 public static function instance() {
37 if ( null === static::$instance ) {
38 static::$instance = new self();
39 }
40 return static::$instance;
41 }
42
43
44 /**
45 * Get default client fields.
46 *
47 * Get default client fields.
48 */
49 public static function get_default_client_fields() {
50
51 return array(
52 'client.name' => array(
53 'title' => esc_html__( 'Client Name (Required)', 'mainwp' ),
54 'desc' => esc_html__( 'Displays the Client name', 'mainwp' ),
55 'db_field' => 'name',
56 ),
57 'client.email' => array(
58 'title' => esc_html__( 'Client email', 'mainwp' ),
59 'desc' => esc_html__( 'Displays the client email', 'mainwp' ),
60 'db_field' => 'client_email',
61 ),
62 'client.phone' => array(
63 'title' => esc_html__( 'Client phone', 'mainwp' ),
64 'desc' => esc_html__( 'Displays the client phone', 'mainwp' ),
65 'db_field' => 'client_phone',
66 ),
67 'client.facebook' => array(
68 'title' => esc_html__( 'Client Facebook', 'mainwp' ),
69 'desc' => esc_html__( 'Displays the client Facebook', 'mainwp' ),
70 'db_field' => 'client_facebook',
71 ),
72 'client.twitter' => array(
73 'title' => esc_html__( 'Client Twitter', 'mainwp' ),
74 'desc' => esc_html__( 'Displays the client Twitter', 'mainwp' ),
75 'db_field' => 'client_twitter',
76 ),
77 'client.instagram' => array(
78 'title' => esc_html__( 'Client Instagram', 'mainwp' ),
79 'desc' => esc_html__( 'Displays the client Instagram', 'mainwp' ),
80 'db_field' => 'client_instagram',
81 ),
82 'client.linkedin' => array(
83 'title' => esc_html__( 'Client LinkedIn', 'mainwp' ),
84 'desc' => esc_html__( 'Displays the client LinkedIn', 'mainwp' ),
85 'db_field' => 'client_linkedin',
86 ),
87 'client.contact.address.1' => array(
88 'title' => esc_html__( 'Client address 1', 'mainwp' ),
89 'desc' => esc_html__( 'Displays the client contact address 1', 'mainwp' ),
90 'db_field' => 'address_1',
91 ),
92 'client.contact.address.2' => array(
93 'title' => esc_html__( 'Client address 2', 'mainwp' ),
94 'desc' => esc_html__( 'Displays the client contact address 2', 'mainwp' ),
95 'db_field' => 'address_2',
96 ),
97 'client.city' => array(
98 'title' => esc_html__( 'Client city', 'mainwp' ),
99 'desc' => esc_html__( 'Displays the client city', 'mainwp' ),
100 'db_field' => 'city',
101 ),
102 'client.state' => array(
103 'title' => esc_html__( 'Client state', 'mainwp' ),
104 'desc' => esc_html__( 'Displays the client state', 'mainwp' ),
105 'db_field' => 'state',
106 ),
107 'client.zip' => array(
108 'title' => esc_html__( 'Client ZIP', 'mainwp' ),
109 'desc' => esc_html__( 'Displays the client ZIP code', 'mainwp' ),
110 'db_field' => 'zip',
111 ),
112 'client.country' => array(
113 'title' => esc_html__( 'Client country', 'mainwp' ),
114 'desc' => esc_html__( 'Displays the client country', 'mainwp' ),
115 'db_field' => 'country',
116 ),
117 'client.note' => array(
118 'title' => esc_html__( 'Client notes', 'mainwp' ),
119 'desc' => esc_html__( 'Displays the client note', 'mainwp' ),
120 'db_field' => 'note',
121 ),
122 'client.suspended' => array(
123 'title' => esc_html__( 'Client status', 'mainwp' ),
124 'desc' => esc_html__( 'Displays the client suspended state', 'mainwp' ),
125 'db_field' => 'suspended',
126 ),
127 'client.created' => array(
128 'title' => esc_html__( 'Added on', 'mainwp' ),
129 'desc' => esc_html__( 'Displays the client added on', 'mainwp' ),
130 'tooltip' => esc_html__( 'Set the date your client was added to your MainWP Dashboard.', 'mainwp' ),
131 'db_field' => 'created',
132 ),
133 );
134 }
135
136 /**
137 * Get default client fields.
138 *
139 * Get default client fields.
140 */
141 public static function get_mini_default_client_fields() {
142
143 return array(
144 'client.name' => array(
145 'title' => esc_html__( 'Client Name (Required)', 'mainwp' ),
146 'desc' => esc_html__( 'Displays the Client name', 'mainwp' ),
147 'db_field' => 'name',
148 ),
149 'client.email' => array(
150 'title' => esc_html__( 'Client email', 'mainwp' ),
151 'desc' => esc_html__( 'Displays the client email', 'mainwp' ),
152 'db_field' => 'client_email',
153 ),
154 'client.phone' => array(
155 'title' => esc_html__( 'Client phone', 'mainwp' ),
156 'desc' => esc_html__( 'Displays the client phone', 'mainwp' ),
157 'db_field' => 'client_phone',
158 ),
159 );
160 }
161
162
163 /**
164 * Get default contact fields.
165 *
166 * Get default contact fields.
167 */
168 public static function get_default_contact_fields() {
169 return array(
170 'client.contact.name' => array(
171 'title' => esc_html__( 'Contact name (Required)', 'mainwp' ),
172 'desc' => esc_html__( 'Displays the client contact name', 'mainwp' ),
173 'db_field' => 'contact_name',
174 ),
175 'contact.email' => array(
176 'title' => esc_html__( 'Contact email (Required)', 'mainwp' ),
177 'desc' => esc_html__( 'Displays the contact email', 'mainwp' ),
178 'db_field' => 'contact_email',
179 ),
180 'contact.role' => array(
181 'title' => esc_html__( 'Contact role', 'mainwp' ),
182 'desc' => esc_html__( 'Displays the contact role', 'mainwp' ),
183 'db_field' => 'contact_role',
184 ),
185 'contact.phone' => array(
186 'title' => esc_html__( 'Contact phone', 'mainwp' ),
187 'desc' => esc_html__( 'Displays the contact phone', 'mainwp' ),
188 'db_field' => 'contact_phone',
189 ),
190 'contact.facebook' => array(
191 'title' => esc_html__( 'Contact Facebook', 'mainwp' ),
192 'desc' => esc_html__( 'Displays the contact Facebook', 'mainwp' ),
193 'db_field' => 'facebook',
194 ),
195 'contact.twitter' => array(
196 'title' => esc_html__( 'Contact Twitter', 'mainwp' ),
197 'desc' => esc_html__( 'Displays the contact Twitter', 'mainwp' ),
198 'db_field' => 'twitter',
199 ),
200 'contact.instagram' => array(
201 'title' => esc_html__( 'Contact Instagram', 'mainwp' ),
202 'desc' => esc_html__( 'Displays the contact Instagram', 'mainwp' ),
203 'db_field' => 'instagram',
204 ),
205 'contact.linkedin' => array(
206 'title' => esc_html__( 'Contact LinkedIn', 'mainwp' ),
207 'desc' => esc_html__( 'Displays the contact LinkedIn', 'mainwp' ),
208 'db_field' => 'linkedin',
209 ),
210 );
211 }
212
213 /**
214 * Get default contact fields.
215 *
216 * Get default contact fields.
217 */
218 public static function get_mini_default_contact_fields() {
219 return array(
220 'client.contact.name' => array(
221 'title' => esc_html__( 'Contact name (Required)', 'mainwp' ),
222 'desc' => esc_html__( 'Displays the client contact name', 'mainwp' ),
223 'db_field' => 'contact_name',
224 ),
225 'contact.email' => array(
226 'title' => esc_html__( 'Contact email (Required)', 'mainwp' ),
227 'desc' => esc_html__( 'Displays the contact email', 'mainwp' ),
228 'db_field' => 'contact_email',
229 ),
230 'contact.role' => array(
231 'title' => esc_html__( 'Contact role', 'mainwp' ),
232 'desc' => esc_html__( 'Displays the contact role', 'mainwp' ),
233 'db_field' => 'contact_role',
234 ),
235 );
236 }
237
238
239 /**
240 * Method get_compatible_tokens().
241 *
242 * Get compatible tokens.
243 */
244 public static function get_compatible_tokens() {
245 return array(
246 'client.contact.name' => 'client.contact.name',
247 'client.email' => 'contact.email',
248 'client.phone' => 'contact.phone',
249 );
250 }
251 /**
252 * Method rest_api_add_client().
253 *
254 * Rest API add client.
255 *
256 * @param array $data fields array.
257 * @param bool $edit Is edit.
258 *
259 * $data fields.
260 * 'client_email'.
261 * 'name'.
262 * 'client_facebook'.
263 * 'client_twitter'.
264 * 'client_instagram'.
265 * 'client_linkedin'.
266 * 'address_1'.
267 * 'address_2'.
268 * 'city'.
269 * 'zip'.
270 * 'state'.
271 * 'note'.
272 * 'selected_sites'.
273 * 'client_id'. - to edit client.
274 *
275 * @throws \Exception Error message.
276 * @return mixed Results.
277 */
278 public static function rest_api_add_client( $data, $edit = false ) { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
279
280 $params = array();
281
282 if ( $edit ) {
283
284 $client_id = isset( $data['client_id'] ) ? intval( $data['client_id'] ) : 0;
285
286 if ( empty( $client_id ) ) { // edit client.
287 return array(
288 'error' => esc_html__( 'Client ID field is required! Please enter a Client ID.', 'mainwp' ),
289 );
290 }
291
292 $params['client_id'] = $client_id;
293
294 if ( isset( $data['name'] ) ) {
295 $params['name'] = sanitize_text_field( wp_unslash( $data['name'] ) );
296 }
297
298 if ( isset( $data['address_1'] ) ) {
299 $params['address_1'] = sanitize_text_field( wp_unslash( $data['address_1'] ) );
300 }
301 if ( isset( $data['address_2'] ) ) {
302 $params['address_2'] = sanitize_text_field( wp_unslash( $data['address_2'] ) );
303 }
304 if ( isset( $data['city'] ) ) {
305 $params['city'] = sanitize_text_field( wp_unslash( $data['city'] ) );
306 }
307 if ( isset( $data['zip'] ) ) {
308 $params['zip'] = sanitize_text_field( wp_unslash( $data['zip'] ) );
309 }
310 if ( isset( $data['state'] ) ) {
311 $params['state'] = sanitize_text_field( wp_unslash( $data['state'] ) );
312 }
313
314 if ( isset( $data['country'] ) ) {
315 $params['country'] = sanitize_text_field( wp_unslash( $data['country'] ) );
316 }
317
318 if ( isset( $data['note'] ) ) {
319 $params['note'] = sanitize_text_field( wp_unslash( $data['note'] ) );
320 }
321
322 if ( isset( $data['client_email'] ) ) {
323 $params['client_email'] = sanitize_text_field( wp_unslash( $data['client_email'] ) );
324 }
325
326 if ( isset( $data['client_phone'] ) ) {
327 $params['client_phone'] = sanitize_text_field( wp_unslash( $data['client_phone'] ) );
328 }
329
330 if ( isset( $data['client_facebook'] ) ) {
331 $params['client_facebook'] = sanitize_text_field( wp_unslash( $data['client_facebook'] ) );
332 }
333
334 if ( isset( $data['client_twitter'] ) ) {
335 $params['client_twitter'] = sanitize_text_field( wp_unslash( $data['client_twitter'] ) );
336 }
337
338 if ( isset( $data['client_instagram'] ) ) {
339 $params['client_instagram'] = sanitize_text_field( wp_unslash( $data['client_instagram'] ) );
340 }
341
342 if ( isset( $data['client_linkedin'] ) ) {
343 $params['client_linkedin'] = sanitize_text_field( wp_unslash( $data['client_linkedin'] ) );
344 }
345
346 if ( isset( $data['created'] ) && is_numeric( $data['created'] ) ) {
347 $params['created'] = intval( $data['created'] );
348 }
349
350 MainWP_DB_Client::instance()->update_client( $params, true );
351
352 if ( isset( $data['selected_sites'] ) && is_array( $data['selected_sites'] ) ) {
353 $selected_sites = array_map( 'sanitize_text_field', wp_unslash( $data['selected_sites'] ) );
354 MainWP_DB_Client::instance()->update_selected_sites_for_client( $client_id, $selected_sites );
355 }
356
357 if ( isset( $data['custom_fields'] ) && is_array( $data['custom_fields'] ) ) {
358 $custom_fields = wp_unslash( $data['custom_fields'] );
359 foreach ( $custom_fields as $field ) {
360 $fie_name = isset( $field['field_name'] ) ? sanitize_text_field( wp_unslash( $field['field_name'] ) ) : '';
361 $fie_value = isset( $field['field_value'] ) ? sanitize_text_field( wp_unslash( $field['field_value'] ) ) : '';
362 $fie_desc = isset( $field['field_desc'] ) ? sanitize_text_field( wp_unslash( $field['field_desc'] ) ) : '';
363 if ( ! empty( $fie_name ) && ! empty( $fie_value ) ) {
364 $get_gen_field = MainWP_DB_Client::instance()->get_client_fields_by( 'field_name', $fie_name, 0 );
365 if ( $get_gen_field ) { // it is general field.
366 if ( ! empty( $fie_desc ) ) {
367 MainWP_DB_Client::instance()->update_client_field(
368 $get_gen_field->field_id,
369 array(
370 'field_desc' => $fie_desc,
371 )
372 );
373 }
374 MainWP_DB_Client::instance()->update_client_field_value( $get_gen_field->field_id, $fie_value, $client_id ); // add or update general field value for the client.
375 } else {
376 $indi_gen_field = MainWP_DB_Client::instance()->get_client_fields_by( 'field_name', $fie_name, $client_id );
377 if ( $indi_gen_field ) { // it is individual field.
378
379 if ( ! empty( $fie_desc ) ) {
380 MainWP_DB_Client::instance()->update_client_field(
381 $indi_gen_field->field_id,
382 array(
383 'field_desc' => $fie_desc,
384 'client_id' => $client_id,
385 )
386 );
387 }
388 MainWP_DB_Client::instance()->update_client_field_value( $indi_gen_field->field_id, $fie_value, $client_id ); // add or update individual field value for the client.
389 }
390 }
391 }
392 }
393 }
394
395 return array(
396 'success' => true,
397 'clientid' => $client_id,
398 );
399
400 } else {
401
402 $params['name'] = isset( $data['name'] ) ? sanitize_text_field( wp_unslash( $data['name'] ) ) : '';
403
404 if ( empty( $params['name'] ) ) {
405 return array(
406 'error' => esc_html__( 'Client name field is required! Please enter a Client name.', 'mainwp' ),
407 );
408 }
409
410 $params['address_1'] = isset( $data['address_1'] ) ? sanitize_text_field( wp_unslash( $data['address_1'] ) ) : '';
411 $params['address_2'] = isset( $data['address_2'] ) ? sanitize_text_field( wp_unslash( $data['address_2'] ) ) : '';
412 $params['city'] = isset( $data['city'] ) ? sanitize_text_field( wp_unslash( $data['city'] ) ) : '';
413 $params['zip'] = isset( $data['zip'] ) ? sanitize_text_field( wp_unslash( $data['zip'] ) ) : '';
414 $params['state'] = isset( $data['state'] ) ? sanitize_text_field( wp_unslash( $data['state'] ) ) : '';
415 $params['country'] = isset( $data['country'] ) ? sanitize_text_field( wp_unslash( $data['country'] ) ) : '';
416 $params['note'] = isset( $data['note'] ) ? sanitize_text_field( wp_unslash( $data['note'] ) ) : '';
417 $params['client_email'] = isset( $data['client_email'] ) ? sanitize_text_field( wp_unslash( $data['client_email'] ) ) : '';
418 $params['client_phone'] = isset( $data['client_phone'] ) ? sanitize_text_field( wp_unslash( $data['client_phone'] ) ) : '';
419 $params['client_facebook'] = isset( $data['client_facebook'] ) ? sanitize_text_field( wp_unslash( $data['client_facebook'] ) ) : '';
420 $params['client_twitter'] = isset( $data['client_twitter'] ) ? sanitize_text_field( wp_unslash( $data['client_twitter'] ) ) : '';
421 $params['client_instagram'] = isset( $data['client_instagram'] ) ? sanitize_text_field( wp_unslash( $data['client_instagram'] ) ) : '';
422 $params['client_linkedin'] = isset( $data['client_linkedin'] ) ? sanitize_text_field( wp_unslash( $data['client_linkedin'] ) ) : '';
423
424 $inserted = MainWP_DB_Client::instance()->update_client( $params );
425
426 if ( empty( $inserted ) ) {
427 return array(
428 'error' => esc_html__( 'Undefined error. Please try again.', 'mainwp' ),
429 );
430 }
431
432 $selected_sites = ( isset( $data['selected_sites'] ) && is_array( $data['selected_sites'] ) ) ? array_map( 'sanitize_text_field', wp_unslash( $data['selected_sites'] ) ) : array();
433
434 MainWP_DB_Client::instance()->update_selected_sites_for_client( $inserted->client_id, $selected_sites );
435
436 return array(
437 'success' => true,
438 'clientid' => $inserted->client_id,
439 );
440 }
441 }
442
443
444 /**
445 * Method get_website_client_tokens_data()
446 *
447 * Get website client tokens.
448 *
449 * @param int $websiteid Website ID.
450 *
451 * @return mixed $result Result of tokens.
452 */
453 public function get_website_client_tokens_data( $websiteid = false ) { // phpcs:ignore -- NOSONAR - complex function. Current complexity is the only way to achieve desired results, pull request solutions appreciated.
454 if ( empty( $websiteid ) ) {
455 return false;
456 }
457 $website = MainWP_DB::instance()->get_website_by_id( $websiteid );
458 if ( empty( $website ) ) {
459 return false;
460 }
461
462 $client_tokens = array();
463
464 $client_tokens['client.site.url'] = $website->url;
465 $client_tokens['client.site.name'] = $website->name;
466
467 // init values.
468 $default_client_fields = static::get_default_client_fields();
469 foreach ( $default_client_fields as $tok_name => $field ) {
470 $client_tokens[ $tok_name ] = ''; // the tokens with empty value will be removed from the report.
471 }
472 $contact_fields = static::get_default_contact_fields();
473 if ( ! empty( $contact_fields ) && is_array( $contact_fields ) ) {
474 foreach ( $contact_fields as $tok_name => $field ) {
475 $client_tokens[ $tok_name ] = ''; // the tokens with empty value will be removed from the report.
476 }
477 }
478
479 $custom_tokens_fields = MainWP_DB_Client::instance()->get_client_fields( true, $website->client_id );
480 if ( ! empty( $custom_tokens_fields ) && is_array( $custom_tokens_fields ) ) {
481 foreach ( $custom_tokens_fields as $fields ) {
482 $client_tokens[ $fields->field_name ] = ''; // the tokens with empty value will be removed from the report.
483 }
484 }
485
486 if ( empty( $website->client_id ) ) {
487 return $client_tokens;
488 }
489
490 $clientid = $website->client_id;
491
492 $client_info = MainWP_DB_Client::instance()->get_wp_client_by( 'client_id', $clientid );
493
494 if ( empty( $client_info ) ) {
495 return $client_tokens;
496 }
497
498 if ( ! empty( $custom_tokens_fields ) && is_array( $custom_tokens_fields ) ) {
499 foreach ( $custom_tokens_fields as $fields ) {
500 $client_tokens[ $fields->field_name ] = $fields->field_value;
501 }
502 }
503
504 foreach ( $default_client_fields as $tok_name => $field ) {
505 $db_field = $field['db_field'];
506 if ( property_exists( $client_info, $db_field ) ) {
507 $client_tokens[ $tok_name ] = $client_info->{$db_field};
508 }
509 }
510
511 if ( ! empty( $contact_fields ) && is_array( $contact_fields ) ) {
512 foreach ( $contact_fields as $tok_name => $field ) {
513 $db_field = isset( $field['db_field'] ) ? $field['db_field'] : '';
514 $val = '' !== $db_field && property_exists( $client_info, $db_field ) ? $client_info->{$db_field} : false;
515 if ( false !== $val ) {
516 $client_tokens[ $tok_name ] = $val;
517 }
518 }
519 }
520 $client_tokens = apply_filters( 'mainwp_clients_website_client_tokens', $client_tokens, $websiteid, $clientid );
521 return $client_tokens;
522 }
523
524 /**
525 * Method get_client_contact_image()
526 *
527 * Get client contact image.
528 *
529 * @param array $item client|contact array data.
530 * @param string $type type of image.
531 * @param string $what image for what.
532 */
533 public static function get_client_contact_image( $item, $type = 'client', $what = 'default' ) {
534
535 if ( empty( $item ) ) {
536 return '';
537 }
538
539 $dirs = MainWP_System_Utility::get_mainwp_dir( 'client-images', true );
540
541 if ( 'client' === $type ) {
542 $image_path = $item['image'];
543 $icon_info = $item['selected_icon_info'];
544 } else {
545 $image_path = $item['contact_image'];
546 $icon_info = $item['contact_icon_info'];
547 }
548
549 if ( 'uploaded_icon' === $what ) {
550 $full_url = '';
551 if ( ! empty( $image_path ) && file_exists( $dirs[0] . $image_path ) ) {
552 $full_url = $dirs[1] . $image_path;
553 }
554 return $full_url; // return path to uploaded icon.
555 }
556
557 $img_cls = 'ui mini circular image';
558 if ( 'card' === $what ) {
559 $img_cls = 'ui medium circular image';
560 }
561
562 $icon_wrapper_attr = ' class="' . $img_cls . '" style="height:auto;display:inline-block;" ';
563 if ( 'display_edit' === $what ) {
564 $icon_wrapper_attr = ' id="mainwp_add_edit_client_upload_custom_icon" style="width:32px;height:auto;display:inline-block;" class="' . esc_attr( $img_cls ) . '" ';
565 if ( 'contact' === $type ) {
566 $icon_wrapper_attr = ' style="width:32px;height:auto;display:inline-block;" class="mainwp_add_edit_contact_upload_custom_icon ' . esc_attr( $img_cls ) . '" ';
567 }
568 }
569
570 $img = '';
571
572 if ( ! empty( $image_path ) && file_exists( $dirs[0] . $image_path ) ) {
573 $full_url = $dirs[1] . $image_path;
574 $img = '<img ' . $icon_wrapper_attr . ' src="' . esc_attr( $full_url ) . '" alt="' . esc_attr( $item['name'] ) . '">';
575 } elseif ( ! empty( $icon_info ) ) {
576 $img = MainWP_Client::get_cust_client_icon( $icon_info, 'display', $what );
577 }
578 return $img;
579 }
580
581
582 /**
583 * Method get_client_image_url()
584 *
585 * Get client icon URL.
586 *
587 * @param string $image_path Client image url path.
588 *
589 * @return mixed $full_url Full image URL.
590 */
591 public static function get_client_image_url( $image_path ) {
592 $full_url = '';
593 if ( ! empty( $image_path ) ) {
594 if ( false !== stripos( $image_path, 'assets/images/demo/clients/' ) || false !== stripos( $image_path, 'assets/images/demo/contacts/' ) ) {
595 $full_url = MAINWP_PLUGIN_URL . $image_path;
596 } else {
597 $dirs = MainWP_System_Utility::get_mainwp_dir( 'client-images', true );
598 if ( file_exists( $dirs[0] . $image_path ) ) {
599 $full_url = $dirs[1] . $image_path;
600 } else {
601 $full_url = '';
602 }
603 }
604 }
605 return $full_url;
606 }
607
608 /**
609 * Method show_notice_existed_contact_emails()
610 */
611 public static function show_notice_existed_contact_emails() {
612 $existed_emails = MainWP_Utility::get_flash_message( 'contact_existed_emails' );
613 if ( ! empty( $existed_emails ) ) {
614 $existed_emails = esc_html( $existed_emails );
615 $existed_emails = str_replace( '|', '<br/>', $existed_emails );
616 ?>
617 <div class="ui yellow message">
618 <?php printf( esc_html__( 'Existed contact emails.%sPlease try again.', 'mainwp' ), '<br/>' . $existed_emails . '</br>' ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
619 </div>
620 <?php
621 }
622 }
623 }
624