~canonical-sysadmins/wordpress/4.7.2

« back to all changes in this revision

Viewing changes to wp-includes/class-wp-customize-panel.php

  • Committer: Jacek Nykis
  • Date: 2015-01-05 16:17:05 UTC
  • Revision ID: jacek.nykis@canonical.com-20150105161705-w544l1h5mcg7u4w9
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
/**
 
3
 * Customize Panel Class.
 
4
 *
 
5
 * A UI container for sections, managed by the WP_Customize_Manager.
 
6
 *
 
7
 * @package WordPress
 
8
 * @subpackage Customize
 
9
 * @since 4.0.0
 
10
 */
 
11
class WP_Customize_Panel {
 
12
 
 
13
        /**
 
14
         * WP_Customize_Manager instance.
 
15
         *
 
16
         * @since 4.0.0
 
17
         * @access public
 
18
         * @var WP_Customize_Manager
 
19
         */
 
20
        public $manager;
 
21
 
 
22
        /**
 
23
         * Unique identifier.
 
24
         *
 
25
         * @since 4.0.0
 
26
         * @access public
 
27
         * @var string
 
28
         */
 
29
        public $id;
 
30
 
 
31
        /**
 
32
         * Priority of the panel, defining the display order of panels and sections.
 
33
         *
 
34
         * @since 4.0.0
 
35
         * @access public
 
36
         * @var integer
 
37
         */
 
38
        public $priority = 160;
 
39
 
 
40
        /**
 
41
         * Capability required for the panel.
 
42
         *
 
43
         * @since 4.0.0
 
44
         * @access public
 
45
         * @var string
 
46
         */
 
47
        public $capability = 'edit_theme_options';
 
48
 
 
49
        /**
 
50
         * Theme feature support for the panel.
 
51
         *
 
52
         * @since 4.0.0
 
53
         * @access public
 
54
         * @var string|array
 
55
         */
 
56
        public $theme_supports = '';
 
57
 
 
58
        /**
 
59
         * Title of the panel to show in UI.
 
60
         *
 
61
         * @since 4.0.0
 
62
         * @access public
 
63
         * @var string
 
64
         */
 
65
        public $title = '';
 
66
 
 
67
        /**
 
68
         * Description to show in the UI.
 
69
         *
 
70
         * @since 4.0.0
 
71
         * @access public
 
72
         * @var string
 
73
         */
 
74
        public $description = '';
 
75
 
 
76
        /**
 
77
         * Customizer sections for this panel.
 
78
         *
 
79
         * @since 4.0.0
 
80
         * @access public
 
81
         * @var array
 
82
         */
 
83
        public $sections;
 
84
 
 
85
        /**
 
86
         * Constructor.
 
87
         *
 
88
         * Any supplied $args override class property defaults.
 
89
         *
 
90
         * @since 4.0.0
 
91
         *
 
92
         * @param WP_Customize_Manager $manager Customizer bootstrap instance.
 
93
         * @param string               $id      An specific ID for the panel.
 
94
         * @param array                $args    Panel arguments.
 
95
         */
 
96
        public function __construct( $manager, $id, $args = array() ) {
 
97
                $keys = array_keys( get_object_vars( $this ) );
 
98
                foreach ( $keys as $key ) {
 
99
                        if ( isset( $args[ $key ] ) ) {
 
100
                                $this->$key = $args[ $key ];
 
101
                        }
 
102
                }
 
103
 
 
104
                $this->manager = $manager;
 
105
                $this->id = $id;
 
106
 
 
107
                $this->sections = array(); // Users cannot customize the $sections array.
 
108
 
 
109
                return $this;
 
110
        }
 
111
 
 
112
        /**
 
113
         * Checks required user capabilities and whether the theme has the
 
114
         * feature support required by the panel.
 
115
         *
 
116
         * @since 4.0.0
 
117
         *
 
118
         * @return bool False if theme doesn't support the panel or the user doesn't have the capability.
 
119
         */
 
120
        public final function check_capabilities() {
 
121
                if ( $this->capability && ! call_user_func_array( 'current_user_can', (array) $this->capability ) ) {
 
122
                        return false;
 
123
                }
 
124
 
 
125
                if ( $this->theme_supports && ! call_user_func_array( 'current_theme_supports', (array) $this->theme_supports ) ) {
 
126
                        return false;
 
127
                }
 
128
 
 
129
                return true;
 
130
        }
 
131
 
 
132
        /**
 
133
         * Check capabilities and render the panel.
 
134
         *
 
135
         * @since 4.0.0
 
136
         */
 
137
        public final function maybe_render() {
 
138
                if ( ! $this->check_capabilities() ) {
 
139
                        return;
 
140
                }
 
141
 
 
142
                /**
 
143
                 * Fires before rendering a Customizer panel.
 
144
                 *
 
145
                 * @since 4.0.0
 
146
                 *
 
147
                 * @param WP_Customize_Panel $this WP_Customize_Panel instance.
 
148
                 */
 
149
                do_action( 'customize_render_panel', $this );
 
150
 
 
151
                /**
 
152
                 * Fires before rendering a specific Customizer panel.
 
153
                 *
 
154
                 * The dynamic portion of the hook name, $this->id, refers to the ID
 
155
                 * of the specific Customizer panel to be rendered.
 
156
                 *
 
157
                 * @since 4.0.0
 
158
                 */
 
159
                do_action( "customize_render_panel_{$this->id}" );
 
160
 
 
161
                $this->render();
 
162
        }
 
163
 
 
164
        /**
 
165
         * Render the panel, and the sections that have been added to it.
 
166
         *
 
167
         * @since 4.0.0
 
168
         * @access protected
 
169
         */
 
170
        protected function render() {
 
171
                ?>
 
172
                <li id="accordion-panel-<?php echo esc_attr( $this->id ); ?>" class="control-section control-panel accordion-section">
 
173
                        <h3 class="accordion-section-title" tabindex="0">
 
174
                                <?php echo esc_html( $this->title ); ?>
 
175
                                <span class="screen-reader-text"><?php _e( 'Press return or enter to open this panel' ); ?></span>
 
176
                        </h3>
 
177
                        <ul class="accordion-sub-container control-panel-content">
 
178
                                <li class="accordion-section control-section<?php if ( empty( $this->description ) ) echo ' cannot-expand'; ?>">
 
179
                                        <div class="accordion-section-title" tabindex="0">
 
180
                                                <span class="preview-notice"><?php
 
181
                                                        /* translators: %s is the site/panel title in the Customizer */
 
182
                                                        echo sprintf( __( 'You are customizing %s' ), '<strong class="panel-title">' . esc_html( $this->title ) . '</strong>' );
 
183
                                                ?></span>
 
184
                                        </div>
 
185
                                        <?php if ( ! empty( $this->description ) ) : ?>
 
186
                                                <div class="accordion-section-content description">
 
187
                                                        <?php echo $this->description; ?>
 
188
                                                </div>
 
189
                                        <?php endif; ?>
 
190
                                </li>
 
191
                                <?php
 
192
                                foreach ( $this->sections as $section ) {
 
193
                                        $section->maybe_render();
 
194
                                }
 
195
                                ?>
 
196
                        </ul>
 
197
                </li>
 
198
                <?php
 
199
        }
 
200
}
 
 
b'\\ No newline at end of file'