Completed
Push — master ( a00b53...3dc4d8 )
by
unknown
21:18
created

Calendar::set_events_template()   B

Complexity

Conditions 5
Paths 9

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 22
rs 8.6737
cc 5
eloc 13
nc 9
nop 1
1
<?php
2
/**
3
 * Calendar
4
 *
5
 * @package SimpleCalendar/Calendars
6
 */
7
namespace SimpleCalendar\Abstracts;
8
9
use Carbon\Carbon;
10
use SimpleCalendar\Events\Event;
11
use SimpleCalendar\Events\Event_Builder;
12
use SimpleCalendar\Events\Events;
13
14
if ( ! defined( 'ABSPATH' ) ) {
15
	exit;
16
}
17
18
/**
19
 * The Calendar.
20
 *
21
 * Displays events from events feed.
22
 */
23
abstract class Calendar {
24
25
	/**
26
	 * Calendar Id.
27
	 *
28
	 * @access public
29
	 * @var int
30
	 */
31
	public $id = 0;
32
33
	/**
34
	 * Calendar post object.
35
	 *
36
	 * @access public
37
	 * @var \WP_Post
38
	 */
39
	public $post = null;
40
41
	/**
42
	 * Calendar Type.
43
	 *
44
	 * @access public
45
	 * @var string
46
	 */
47
	public $type = '';
48
49
	/**
50
	 * Calendar Name.
51
	 *
52
	 * @access public
53
	 * @var string
54
	 */
55
	public $name = '';
56
57
	/**
58
	 * Feed type.
59
	 *
60
	 * @access public
61
	 * @var string
62
	 */
63
	public $feed = '';
64
65
	/**
66
	 * Calendar start.
67
	 *
68
	 * @access public
69
	 * @var int
70
	 */
71
	public $start = 0;
72
73
	/**
74
	 * Calendar end.
75
	 *
76
	 * @access public
77
	 * @var int
78
	 */
79
	public $end = 0;
80
81
	/**
82
	 * Static calendar.
83
	 *
84
	 * @access public
85
	 * @var bool
86
	 */
87
	public $static = false;
88
89
	/**
90
	 * Today.
91
	 *
92
	 * @access public
93
	 * @var int
94
	 */
95
	public $today = 0;
96
97
	/**
98
	 * Time now.
99
	 *
100
	 * @access public
101
	 * @var int
102
	 */
103
	public $now = 0;
104
105
	/**
106
	 * Timezone offset.
107
	 *
108
	 * @access public
109
	 * @var int
110
	 */
111
	public $offset = 0;
112
113
	/**
114
	 * Timezone
115
	 *
116
	 * @access public
117
	 * @var string
118
	 */
119
	public $timezone = 'UTC';
120
121
	/**
122
	 * Site timezone.
123
	 *
124
	 * @access public
125
	 * @var string
126
	 */
127
	public $site_timezone = 'UTC';
128
129
	/**
130
	 * Date format.
131
	 *
132
	 * @access public
133
	 * @var string
134
	 */
135
	public $date_format = '';
136
137
	/**
138
	 * Time format.
139
	 *
140
	 * @access public
141
	 * @var string
142
	 */
143
	public $time_format = '';
144
145
	/**
146
	 * Date-time separator.
147
	 *
148
	 * @access public
149
	 * @var string
150
	 */
151
	public $datetime_separator = '@';
152
153
	/**
154
	 * First day of the week.
155
	 *
156
	 * @access public
157
	 * @var int
158
	 */
159
	public $week_starts = 0;
160
161
	/**
162
	 * Events to display.
163
	 *
164
	 * @access public
165
	 * @var array
166
	 */
167
	public $events = array();
168
169
	/**
170
	 * Errors.
171
	 *
172
	 * @access public
173
	 * @var array
174
	 */
175
	protected $errors = array();
176
177
	/**
178
	 * Earliest event.
179
	 *
180
	 * @access public
181
	 * @var int
182
	 */
183
	public $earliest_event = 0;
184
185
	/**
186
	 * Latest event.
187
	 *
188
	 * @access public
189
	 * @var int
190
	 */
191
	public $latest_event = 0;
192
193
	/**
194
	 * Event builder content.
195
	 *
196
	 * @access public
197
	 * @var string
198
	 */
199
	public $events_template = '';
200
201
	/**
202
	 * Calendar Views.
203
	 *
204
	 * The calendar available views.
205
	 *
206
	 * @access public
207
	 * @var array
208
	 */
209
	public $views = array();
210
211
	/**
212
	 * Calendar View.
213
	 *
214
	 * The current view.
215
	 *
216
	 * @access public
217
	 * @var Calendar_View
218
	 */
219
	public $view = null;
220
221
	/**
222
	 * Calendar settings.
223
	 *
224
	 * @access protected
225
	 * @var array
226
	 */
227
	protected $settings = array();
228
229
	/**
230
	 * Constructor.
231
	 *
232
	 * @since 3.0.0
233
	 *
234
	 * @param int|object|\WP_Post|Calendar $calendar
235
	 * @param string $view
236
	 */
237
	public function __construct( $calendar, $view = '' ) {
238
239
		// Set the post object.
240
		$this->set_post_object( $calendar );
241
242
		if ( ! is_null( $this->post ) ) {
243
244
			// Set calendar type and events source.
245
			$this->set_taxonomies();
246
247
			// Set calendar default datetime properties.
248
			$this->set_timezone();
249
			$this->set_start_of_week();
250
			$this->set_static();
251
252
			// Set calendar start.
253
			$this->set_start();
254
255
			// Set the events template.
256
			$this->set_events_template();
257
258
			// Get events source data.
259
			$feed = simcal_get_feed( $this );
260
			if ( $feed instanceof Feed ) {
261
				if ( ! empty( $feed->events ) ) {
262
					if ( is_array( $feed->events ) ) {
263
						$this->set_events( $feed->events );
264
						if ( 'use_calendar' == get_post_meta( $this->id, '_feed_timezone_setting', true ) ) {
265
							$this->timezone = $feed->timezone;
266
							$this->set_start( $feed->timezone );
267
						}
268
					} elseif ( is_string( $feed->events ) ) {
269
						$this->errors[] = $feed->events;
270
					}
271
				}
272
			}
273
274
			// Set general purpose timestamps.
275
			$now = Carbon::now( $this->timezone );
276
			$this->now    = $now->getTimestamp();
277
			$this->today  = $now->startOfDay()->getTimestamp();
278
			$this->offset = $now->getOffset();
279
280
			// Set date time formatting.
281
			$this->set_date_format();
282
			$this->set_time_format();
283
			$this->set_datetime_separator();
284
285
			// Set earliest and latest event timestamps.
286
			if ( $this->events && is_array( $this->events ) ) {
287
				$this->earliest_event = intval( current( array_keys( $this->events ) ) );
288
				$this->latest_event   = intval( key( array_slice( $this->events, -1, 1, true ) ) );
289
			}
290
291
			// Set calendar end.
292
			$this->set_end();
293
294
			// Set view.
295
			if ( ! $view ) {
296
297
				$calendar_view = get_post_meta( $this->id, '_calendar_view', true );
298
				$calendar_view = isset( $calendar_view[ $this->type ] ) ? $calendar_view[ $this->type ] : '';
299
300
				$view = esc_attr( $calendar_view );
301
			}
302
		}
303
304
		// Get view.
305
		$this->view = $this->get_view( $view );
306
	}
307
308
	/**
309
	 * Overloading __isset function with post meta.
310
	 *
311
	 * @since  3.0.0
312
	 *
313
	 * @param  mixed $key Post meta key.
314
	 *
315
	 * @return bool
316
	 */
317
	public function __isset( $key ) {
318
		return metadata_exists( 'post', $this->id, '_' . $key );
319
	}
320
321
	/**
322
	 * Overloading __get function with post meta.
323
	 *
324
	 * @since  3.0.0
325
	 *
326
	 * @param  string $key Post meta key.
327
	 *
328
	 * @return mixed
329
	 */
330
	public function __get( $key ) {
331
		$value = get_post_meta( $this->id, '_' . $key, true );
332
		if ( ! empty( $value ) ) {
333
			$this->$key = $value;
334
		}
335
		return $value;
336
	}
337
338
	/**
339
	 * Set post object and id.
340
	 *
341
	 * @since 3.0.0
342
	 *
343
	 * @param int|object|\WP_Post|Calendar $calendar
344
	 */
345
	public function set_post_object( $calendar ) {
346
		if ( is_numeric( $calendar ) ) {
347
			$this->id   = absint( $calendar );
348
			$this->post = get_post( $this->id );
349
		} elseif ( $calendar instanceof Calendar ) {
350
			$this->id   = absint( $calendar->id );
351
			$this->post = $calendar->post;
352
		} elseif ( $calendar instanceof \WP_Post ) {
353
			$this->id   = absint( $calendar->ID );
354
			$this->post = $calendar;
355
		} elseif ( isset( $calendar->id ) && isset( $calendar->post ) ) {
356
			$this->id   = $calendar->id;
357
			$this->post = $calendar->post;
358
		}
359
	}
360
361
	/**
362
	 * Return the calendar title.
363
	 *
364
	 * @since  3.0.0
365
	 *
366
	 * @return string
367
	 */
368
	public function get_title() {
369
		$title = isset( $this->post->post_title ) ? $this->post->post_title : '';
370
		return apply_filters( 'simcal_calendar_title', $title );
371
	}
372
373
	/**
374
	 * Get the calendar post data.
375
	 *
376
	 * @since  3.0.0
377
	 *
378
	 * @return \WP_Post
379
	 */
380
	public function get_post_data() {
381
		return $this->post;
382
	}
383
384
	/**
385
	 * Set taxonomies.
386
	 *
387
	 * @since 3.0.0
388
	 * @access protected
389
	 */
390
	protected function set_taxonomies() {
391
		// Set calendar type.
392
		if ( $type = wp_get_object_terms( $this->id, 'calendar_type' ) ) {
393
			$this->type = sanitize_title( current( $type )->name );
394
		} else {
395
			$this->type = apply_filters( 'simcal_calendar_default_type', 'default-calendar' );
396
		}
397
		// Set feed type.
398
		if ( $feed_type = wp_get_object_terms( $this->id, 'calendar_feed' ) ) {
399
			$this->feed = sanitize_title( current( $feed_type )->name );
400
		} else {
401
			$this->feed = apply_filters( 'simcal_calendar_default_feed', 'google' );
402
		}
403
	}
404
405
	/**
406
	 * Get events.
407
	 *
408
	 * @since  3.0.0
409
	 *
410
	 * @return Events
411
	 */
412
	public function get_events() {
413
		return new Events( $this->events, $this->timezone );
414
	}
415
416
	/**
417
	 * Set events.
418
	 *
419
	 * @since 3.0.0
420
	 *
421
	 * @param array $array
422
	 */
423
	public function set_events( array $array ) {
424
425
		$events = array();
426
427
		if ( ! empty( $array ) ) {
428
			foreach ( $array as $tz => $e ) {
429
				foreach ( $e as $event ) {
430
					$events[ $tz ][] = $event instanceof Event ? $event : new Event( $event );
431
				}
432
			}
433
		}
434
435
		$this->events = $events;
436
	}
437
438
	/**
439
	 * Get the event builder template.
440
	 *
441
	 * @since  3.0.0
442
	 *
443
	 * @param  string $template
444
	 *
445
	 * @return string
0 ignored issues
show
Documentation introduced by
Should the return type not be string|null?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
446
	 */
447
	public function set_events_template( $template = '' ) {
448
		if ( empty( $template ) ) {
449
			$template = isset( $this->post->post_content ) ? $this->post->post_content : '';
450
		}
451
452
		// TODO: Removed wpautop() call.
453
454
		$event_formatting = get_post_meta( $this->id, '_event_formatting', true );
455
456
		switch( $event_formatting ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
457
			case 'none':
458
				$this->events_template =  wp_kses_post( trim( $template ) );
0 ignored issues
show
introduced by
Expected 1 space after "="; 2 found
Loading history...
459
				break;
460
			case 'no_linebreaks':
461
				$this->events_template =  wpautop( wp_kses_post( trim( $template ) ), false );
0 ignored issues
show
introduced by
Expected 1 space after "="; 2 found
Loading history...
462
				break;
463
			default:
464
				$this->events_template =  wpautop( wp_kses_post( trim( $template ) ), true );
0 ignored issues
show
introduced by
Expected 1 space after "="; 2 found
Loading history...
465
		}
466
467
		//$this->events_template =  wpautop( wp_kses_post( trim( $template ) ), true );
468
	}
469
470
	/**
471
	 * Set the timezone.
472
	 *
473
	 * @since 3.0.0
474
	 *
475
	 * @param string $tz Timezone.
476
	 */
477
	public function set_timezone( $tz = '' ) {
478
479
		$site_tz = esc_attr( simcal_get_wp_timezone() );
480
481
		if ( empty( $tz ) ) {
482
483
			$timezone_setting = get_post_meta( $this->id, '_feed_timezone_setting', true );
484
485
			if ( 'use_site' == $timezone_setting ) {
486
				$tz = $site_tz;
487
			} elseif ( 'use_custom' == $timezone_setting ) {
488
				$custom_timezone = esc_attr( get_post_meta( $this->id, '_feed_timezone', true ) );
489
				// One may be using a non standard timezone in GMT (UTC) offset format.
490
				if ( ( strpos( $custom_timezone, 'UTC+' ) === 0 ) || ( strpos( $custom_timezone, 'UTC-' ) === 0 ) ) {
0 ignored issues
show
introduced by
Found "=== 0". Use Yoda Condition checks, you must
Loading history...
491
					$tz = simcal_get_timezone_from_gmt_offset( substr( $custom_timezone, 3 ) );
492
				} else {
493
					$tz = ! empty( $custom_timezone ) ? $custom_timezone : 'UTC';
494
				}
495
			}
496
497
			$this->timezone = empty( $tz ) ? 'UTC' : $tz;
498
			return;
499
		}
500
501
		$this->site_timezone = $site_tz;
502
		$this->timezone = simcal_esc_timezone( $tz, $this->timezone );
503
	}
504
505
	/**
506
	 * Set date format.
507
	 *
508
	 * @since 3.0.0
509
	 *
510
	 * @param string $format PHP datetime format.
511
	 */
512
	public function set_date_format( $format = '' ) {
513
514
		$date_format_custom = $date_format_default = $format;
515
516
		if ( empty( $date_format_custom ) ) {
517
518
			$date_format_option  = esc_attr( get_post_meta( $this->id, '_calendar_date_format_setting', true ) );
519
			$date_format_default = esc_attr( get_option( 'date_format' ) );
520
			$date_format_custom  = '';
521
522
			if ( 'use_custom' == $date_format_option ) {
523
				$date_format_custom = esc_attr( get_post_meta( $this->id, '_calendar_date_format', true ) );
524
			} elseif ( 'use_custom_php' == $date_format_option ) {
525
				$date_format_custom = esc_attr( get_post_meta( $this->id, '_calendar_date_format_php', true ) );
526
			}
527
		}
528
529
		$this->date_format = $date_format_custom ? $date_format_custom : $date_format_default;
530
	}
531
532
	/**
533
	 * Set time format.
534
	 *
535
	 * @since 3.0.0
536
	 *
537
	 * @param string $format PHP datetime format.
538
	 */
539
	public function set_time_format( $format = '' ) {
540
541
		$time_format_custom = $time_format_default = $format;
542
543
		if ( empty( $time_format_custom ) ) {
544
545
			$time_format_option  = esc_attr( get_post_meta( $this->id, '_calendar_time_format_setting', true ) );
546
			$time_format_default = esc_attr( get_option( 'time_format' ) );
547
			$time_format_custom  = '';
548
549
			if ( 'use_custom' == $time_format_option ) {
550
				$time_format_custom = esc_attr( get_post_meta( $this->id, '_calendar_time_format', true ) );
551
			} elseif ( 'use_custom_php' == $time_format_option ) {
552
				$time_format_custom = esc_attr( get_post_meta( $this->id, '_calendar_time_format_php', true ) );
553
			}
554
		}
555
556
		$this->time_format = $time_format_custom ? $time_format_custom : $time_format_default;
557
	}
558
559
	/**
560
	 * Set date-time separator.
561
	 *
562
	 * @since 3.0.0
563
	 *
564
	 * @param string $separator A UTF8 character used as separator.
565
	 */
566
	public function set_datetime_separator( $separator = '' ) {
567
568
		if ( empty( $separator ) ) {
569
			$separator = get_post_meta( $this->id, '_calendar_datetime_separator', true );
570
		}
571
572
		$this->datetime_separator = esc_attr( $separator );
573
	}
574
575
	/**
576
	 * Set start of week.
577
	 *
578
	 * @since 3.0.0
579
	 *
580
	 * @param int $weekday From 0 (Sunday) to 6 (Friday).
581
	 */
582
	public function set_start_of_week( $weekday = -1 ) {
583
584
		$week_starts = is_int( $weekday ) ? $weekday : -1;
585
586
		if ( $week_starts < 0 || $week_starts > 6 ) {
587
588
			$week_starts_setting = get_post_meta( $this->id, '_calendar_week_starts_on_setting', true );
589
			$week_starts         = intval( get_option( 'start_of_week' ) );
590
591
			if ( 'use_custom' == $week_starts_setting ) {
592
				$week_starts_on = get_post_meta( $this->id, '_calendar_week_starts_on', true );
593
				$week_starts    = is_numeric( $week_starts_on ) ? intval( $week_starts_on ) : $week_starts;
594
			}
595
		}
596
597
		$this->week_starts = $week_starts;
598
	}
599
600
	/**
601
	 * Set calendar start.
602
	 *
603
	 * @since 3.0.0
604
	 *
605
	 * @param int $timestamp
606
	 */
607
	public function set_start( $timestamp = 0 ) {
608
609
		if ( is_int( $timestamp ) && $timestamp !== 0 ) {
0 ignored issues
show
introduced by
Found "!== 0". Use Yoda Condition checks, you must
Loading history...
610
			$this->start = $timestamp;
611
			return;
612
		}
613
614
		$this->start = Carbon::now( $this->timezone )->getTimestamp();
615
616
		$calendar_begins = esc_attr( get_post_meta( $this->id, '_calendar_begins', true ) );
617
		$nth = max( absint( get_post_meta( $this->id, '_calendar_begins_nth', true ) ), 1 );
618
619
		if ( 'today' == $calendar_begins ) {
620
			$this->start = Carbon::today( $this->timezone )->getTimestamp();
621
		} elseif ( 'days_before' == $calendar_begins ) {
622
			$this->start = Carbon::today( $this->timezone )->subDays( $nth )->getTimestamp();
623
		} elseif ( 'days_after' == $calendar_begins ) {
624
			$this->start = Carbon::today( $this->timezone )->addDays( $nth )->getTimestamp();
625
		} elseif ( 'this_week' == $calendar_begins ) {
626
			$week = new Carbon( 'now', $this->timezone );
627
			$week->setWeekStartsAt( $this->week_starts );
628
			$this->start = $week->startOfWeek()->getTimestamp();
629
		} elseif ( 'weeks_before' == $calendar_begins ) {
630
			$week = new Carbon( 'now', $this->timezone );
631
			$week->setWeekStartsAt( $this->week_starts );
632
			$this->start = $week->startOfWeek()->subWeeks( $nth )->getTimestamp();
633
		} elseif ( 'weeks_after' == $calendar_begins ) {
634
			$week = new Carbon( 'now', $this->timezone );
635
			$week->setWeekStartsAt( $this->week_starts );
636
			$this->start = $week->startOfWeek()->addWeeks( $nth )->getTimestamp();
637
		} elseif ( 'this_month' == $calendar_begins ) {
638
			$this->start = Carbon::today( $this->timezone )->startOfMonth()->getTimeStamp();
639
		} elseif ( 'months_before' == $calendar_begins ) {
640
			$this->start = Carbon::today( $this->timezone )->subMonths( $nth )->startOfMonth()->getTimeStamp();
641
		} elseif ( 'months_after' == $calendar_begins ) {
642
			$this->start = Carbon::today( $this->timezone )->addMonths( $nth )->startOfMonth()->getTimeStamp();
643
		} elseif ( 'this_year' == $calendar_begins ) {
644
			$this->start = Carbon::today( $this->timezone )->startOfYear()->getTimestamp();
645
		} elseif ( 'years_before' == $calendar_begins ) {
646
			$this->start = Carbon::today( $this->timezone )->subYears( $nth )->startOfYear()->getTimeStamp();
647
		} elseif ( 'years_after' == $calendar_begins ) {
648
			$this->start = Carbon::today( $this->timezone )->addYears( $nth )->startOfYear()->getTimeStamp();
649
		} elseif ( 'custom_date' == $calendar_begins ) {
650
			if ( $date = get_post_meta( $this->id, '_calendar_begins_custom_date', true ) ) {
651
				$this->start = Carbon::createFromFormat( 'Y-m-d', esc_attr( $date ) )->setTimezone( $this->timezone )->startOfDay()->getTimestamp();
652
			}
653
		}
654
	}
655
656
	/**
657
	 * Set calendar end.
658
	 *
659
	 * @since 3.0.0
660
	 *
661
	 * @param int $timestamp
662
	 */
663
	public function set_end( $timestamp = 0 ) {
664
		$latest = is_int( $timestamp ) && $timestamp !== 0 ? $timestamp : $this->latest_event;
665
		$this->end = $latest > $this->start ? $latest : $this->start;
666
	}
667
668
	/**
669
	 * Set the calendar to static.
670
	 *
671
	 * @since 3.0.0
672
	 *
673
	 * @param string|bool $static
674
	 */
675
	public function set_static( $static = '' ) {
676
677
		if ( ! empty( $static ) && is_bool( $static ) ) {
678
			$this->static = $static;
679
			return;
680
		}
681
682
		if ( 'yes' == get_post_meta( $this->id, '_calendar_is_static', true ) ) {
683
			$this->static = true;
684
			return;
685
		}
686
687
		$this->static = false;
688
	}
689
690
	/**
691
	 * Input fields for settings page.
692
	 *
693
	 * @since 3.0.0
694
	 *
695
	 * @return array
696
	 */
697
	public function settings_fields() {
698
		return $this->settings;
699
	}
700
701
	/**
702
	 * Get a calendar view.
703
	 *
704
	 * @since 3.0.0
705
	 *
706
	 * @param  string $view
707
	 *
708
	 * @return Calendar_View
709
	 */
710
	abstract public function get_view( $view = '' );
711
712
	/**
713
	 * Get event HTML parsed by template.
714
	 *
715
	 * @since  3.0.0
716
	 *
717
	 * @param  Event  $event    Event object to be parsed.
718
	 * @param  string $template (optional) To use another template or a partial.
719
	 *
720
	 * @return string
721
	 */
722
	public function get_event_html( Event $event, $template = '' ) {
723
		$event_builder = new Event_Builder( $event, $this );
724
		// Use the event template to parse tags; if empty, fallback to calendar post content.
725
		$template = empty( $template ) ? ( empty( $event->template ) ? $this->events_template : $event->template ) : $template;
726
		return $event_builder->parse_event_template_tags( $template );
727
	}
728
729
	/**
730
	 * Output the calendar markup.
731
	 *
732
	 * @since 3.0.0
733
	 *
734
	 * @param string $view The calendar view to display.
735
	 */
736
	public function html( $view = '' ) {
737
738
		$view = empty( $view ) ? $this->view : $this->get_view( $view );
739
740
		if ( $view instanceof Calendar_View ) {
741
742
			if ( ! empty( $this->errors ) ) {
743
744
				if ( current_user_can( 'manage_options' )  ) {
745
					echo '<pre><code>';
746
					foreach ( $this->errors as $error ) { echo $error; }
747
					echo '</code></pre>';
748
				}
749
750
			} else {
751
752
				// Get a CSS class from the class name of the calendar view (minus namespace part).
753
				$view_name  = implode( '-', array_map( 'lcfirst', explode( '_', strtolower( get_class( $view ) ) ) ) );
754
				$view_class = substr( $view_name, strrpos( $view_name, '\\' ) + 1 );
755
756
				$calendar_class = trim( implode( ' simcal-', apply_filters( 'simcal_calendar_class', array(
757
					'simcal-calendar',
758
					$this->type,
759
					$view_class,
760
				), $this->id ) ) );
761
762
				echo '<div class="' . $calendar_class . '" '
763
									. 'data-calendar-id="'    . $this->id . '" '
764
									. 'data-timezone="'       . $this->timezone . '" '
765
									. 'data-offset="'         . $this->offset . '" '
766
									. 'data-week-start="'     . $this->week_starts . '" '
767
									. 'data-calendar-start="' . $this->start .'" '
768
									. 'data-calendar-end="'   . $this->end . '" '
769
									. 'data-events-first="'   . $this->earliest_event .'" '
770
									. 'data-events-last="'    . $this->latest_event . '"'
771
									. '>';
772
773
				date_default_timezone_set( $this->timezone );
0 ignored issues
show
introduced by
Using date_default_timezone_set() and similar isn’t allowed, instead use WP internal timezone support.
Loading history...
774
				do_action( 'simcal_calendar_html_before', $this->id );
775
776
				$view->html();
777
778
				do_action( 'simcal_calendar_html_after', $this->id );
779
				date_default_timezone_set( $this->site_timezone );
0 ignored issues
show
introduced by
Using date_default_timezone_set() and similar isn’t allowed, instead use WP internal timezone support.
Loading history...
780
781
				$settings = get_option( 'simple-calendar_settings_calendars' );
782
				$poweredby = isset( $settings['poweredby']['opt_in'] ) ? $settings['poweredby']['opt_in'] : '';
783
784
				if ( 'yes' == $poweredby ) {
785
					$align = is_rtl() ? 'left' : 'right';
786
					echo '<small class="simcal-powered simcal-align-' . $align .'">' .
787
					     sprintf( __( 'Powered by <a href="%s" target="_blank">Simple Calendar</a>', 'google-calendar-events' ), simcal_get_url( 'home' ) ) .
788
					     '</small>';
789
				}
790
791
				echo '</div>';
792
793
			}
794
795
		}
796
797
	}
798
799
}
800