Completed
Push — master ( f805dd...62b222 )
by
unknown
03:34
created

Calendars::add_sections()   B

Complexity

Conditions 4
Paths 2

Size

Total Lines 26
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 13
nc 2
nop 0
dl 0
loc 26
rs 8.5806
c 1
b 0
f 0
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
	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
			} 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