|
1
|
|
|
<?php |
|
2
|
|
|
/** |
|
3
|
|
|
* Calendar Settings Page |
|
4
|
|
|
* |
|
5
|
|
|
* @package SimpleCalendar/Admin |
|
6
|
|
|
*/ |
|
7
|
|
|
namespace SimpleCalendar\Admin\Pages; |
|
8
|
|
|
|
|
9
|
|
|
use SimpleCalendar\Abstracts\Calendar; |
|
10
|
|
|
use SimpleCalendar\Abstracts\Admin_Page; |
|
11
|
|
|
|
|
12
|
|
|
if ( ! defined( 'ABSPATH' ) ) { |
|
13
|
|
|
exit; |
|
14
|
|
|
} |
|
15
|
|
|
|
|
16
|
|
|
/** |
|
17
|
|
|
* Calendar settings. |
|
18
|
|
|
* |
|
19
|
|
|
* Handles settings for specific calendar types and outputs the markup the settings page. a settings page. |
|
20
|
|
|
* |
|
21
|
|
|
* @since 3.0.0 |
|
22
|
|
|
*/ |
|
23
|
|
|
class Calendars extends Admin_Page { |
|
24
|
|
|
|
|
25
|
|
|
/** |
|
26
|
|
|
* Calendar Types. |
|
27
|
|
|
* |
|
28
|
|
|
* @access private |
|
29
|
|
|
* @var array |
|
30
|
|
|
*/ |
|
31
|
|
|
private $calendar_types = array(); |
|
32
|
|
|
|
|
33
|
|
|
/** |
|
34
|
|
|
* Constructor. |
|
35
|
|
|
* |
|
36
|
|
|
* @since 3.0.0 |
|
37
|
|
|
*/ |
|
38
|
|
View Code Duplication |
public function __construct() { |
|
|
|
|
|
|
39
|
|
|
|
|
40
|
|
|
$this->id = 'calendars'; |
|
41
|
|
|
$this->option_group = 'settings'; |
|
42
|
|
|
$this->label = __( 'Calendars', 'google-calendar-events' ); |
|
43
|
|
|
//$this->description = __( 'Manage calendar preferences and calendar types settings and options.', 'google-calendar-events' ); |
|
|
|
|
|
|
44
|
|
|
|
|
45
|
|
|
$calendars = simcal_get_calendar_types(); |
|
46
|
|
|
$calendar_settings = array(); |
|
47
|
|
|
if ( ! empty( $calendars ) && is_array( $calendars ) ) { |
|
48
|
|
|
foreach ( $calendars as $calendar => $views ) { |
|
49
|
|
|
|
|
50
|
|
|
$calendar_type = simcal_get_calendar( $calendar ); |
|
51
|
|
|
|
|
52
|
|
|
if ( $calendar_type instanceof Calendar ) { |
|
53
|
|
|
$settings = $calendar_type->settings_fields(); |
|
54
|
|
|
if ( ! empty( $settings ) ) { |
|
55
|
|
|
$calendar_settings[ $calendar ] = $settings; |
|
56
|
|
|
} |
|
57
|
|
|
} |
|
58
|
|
|
} |
|
59
|
|
|
} |
|
60
|
|
|
|
|
61
|
|
|
$this->calendar_types = $calendar_settings; |
|
62
|
|
|
$this->sections = $this->add_sections(); |
|
63
|
|
|
$this->fields = $this->add_fields(); |
|
64
|
|
|
} |
|
65
|
|
|
|
|
66
|
|
|
/** |
|
67
|
|
|
* Add sections. |
|
68
|
|
|
* |
|
69
|
|
|
* @since 3.0.0 |
|
70
|
|
|
* |
|
71
|
|
|
* @return array |
|
72
|
|
|
*/ |
|
73
|
|
|
public function add_sections() { |
|
74
|
|
|
|
|
75
|
|
|
$sections = array( |
|
76
|
|
|
'general' => array( |
|
77
|
|
|
'title' => __( 'General', 'google-calendar-events' ), |
|
78
|
|
|
'description' => '', |
|
79
|
|
|
), |
|
80
|
|
|
); |
|
81
|
|
|
|
|
82
|
|
|
$calendar_types = $this->calendar_types; |
|
83
|
|
|
|
|
84
|
|
|
if ( ! empty( $calendar_types ) && is_array( $calendar_types ) ) { |
|
85
|
|
|
foreach ( $calendar_types as $calendar_type => $type ) { |
|
86
|
|
|
|
|
87
|
|
|
$sections[ $calendar_type ] = array( |
|
88
|
|
|
'title' => $type['name'], |
|
89
|
|
|
'description' => $type['description'], |
|
90
|
|
|
); |
|
91
|
|
|
|
|
92
|
|
|
} |
|
93
|
|
|
} |
|
94
|
|
|
|
|
95
|
|
|
arsort( $calendar_types ); |
|
96
|
|
|
|
|
97
|
|
|
return apply_filters( 'simcal_add_' . $this->option_group . '_' . $this->id .'_sections', $sections ); |
|
98
|
|
|
} |
|
99
|
|
|
|
|
100
|
|
|
/** |
|
101
|
|
|
* Add fields. |
|
102
|
|
|
* |
|
103
|
|
|
* @since 3.0.0 |
|
104
|
|
|
* |
|
105
|
|
|
* @return array |
|
106
|
|
|
*/ |
|
107
|
|
|
public function add_fields() { |
|
108
|
|
|
|
|
109
|
|
|
$fields = array(); |
|
110
|
|
|
$feed_types = $this->calendar_types; |
|
111
|
|
|
$this->values = get_option( 'simple-calendar_' . $this->option_group . '_' . $this->id ); |
|
112
|
|
|
|
|
113
|
|
|
foreach ( $this->sections as $section => $contents ) : |
|
114
|
|
|
|
|
115
|
|
|
if ( 'general' == $section ) { |
|
116
|
|
|
|
|
117
|
|
|
$options = array(); |
|
118
|
|
|
$post_types = get_post_types( |
|
119
|
|
|
array( |
|
120
|
|
|
'public' => false, |
|
121
|
|
|
'publicly_queriable' => false, |
|
122
|
|
|
'show_ui' => false, |
|
123
|
|
|
), |
|
124
|
|
|
'objects', |
|
125
|
|
|
'not' |
|
126
|
|
|
); |
|
127
|
|
|
unset( $post_types['attachment'] ); |
|
128
|
|
|
unset( $post_types['calendar'] ); |
|
129
|
|
|
unset( $post_types['gce_feed'] ); |
|
130
|
|
|
foreach ( $post_types as $slug => $post_type ) { |
|
131
|
|
|
$options[ $slug ] = $post_type->label; |
|
132
|
|
|
} |
|
133
|
|
|
asort( $options ); |
|
134
|
|
|
|
|
135
|
|
|
$fields[ $section ][] = array( |
|
136
|
|
|
'type' => 'select', |
|
137
|
|
|
'multiselect' => 'multiselect', |
|
138
|
|
|
'enhanced' => 'enhanced', |
|
139
|
|
|
'title' => __( 'Attach Calendars', 'google-calendar-events' ), |
|
140
|
|
|
'tooltip' => __( 'You can choose on which content types to add the ability to attach calendars.', 'google-calendar-events' ), |
|
141
|
|
|
'name' => 'simple-calendar_' . $this->option_group . '_' . $this->id . '[' . $section . '][attach_calendars_posts]', |
|
142
|
|
|
'id' => 'simple-calendar-' . $this->option_group . '-' . $this->id . '-attach-calendars-posts', |
|
143
|
|
|
'value' => $this->get_option_value( $section, 'attach_calendars_posts' ), |
|
144
|
|
|
'default' => 'post,page', |
|
145
|
|
|
'options' => $options, |
|
146
|
|
|
); |
|
147
|
|
|
|
|
148
|
|
View Code Duplication |
} elseif ( isset( $feed_types[ $section ]['fields'] ) ) { |
|
|
|
|
|
|
149
|
|
|
|
|
150
|
|
|
foreach ( $feed_types[ $section ]['fields'] as $key => $args ) { |
|
151
|
|
|
|
|
152
|
|
|
$fields[ $section ][] = array_merge( $args, array( |
|
153
|
|
|
'name' => 'simple-calendar_' . $this->option_group . '_' . $this->id . '[' . $section . '][' . $key . ']', |
|
154
|
|
|
'id' => 'simple-calendar-' . $this->option_group . '-' . $this->id . '-' . $key, |
|
155
|
|
|
'value' => $this->get_option_value( $section, $key ) |
|
156
|
|
|
) ); |
|
157
|
|
|
|
|
158
|
|
|
} |
|
159
|
|
|
|
|
160
|
|
|
} |
|
161
|
|
|
|
|
162
|
|
|
endforeach; |
|
163
|
|
|
|
|
164
|
|
|
return apply_filters( 'simcal_add_' . $this->option_group . '_' . $this->id . '_fields', $fields ); |
|
165
|
|
|
} |
|
166
|
|
|
|
|
167
|
|
|
} |
|
168
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.