Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 9
100.00% covered (success)
100.00%
5 / 5
CRAP
n/a
0 / 0
jetpack_content_options_customize_register
n/a
0 / 0
n/a
0 / 0
69
jetpack_post_thumbnail_supports
n/a
0 / 0
n/a
0 / 0
1
jetpack_content_options_sanitize_checkbox
n/a
0 / 0
n/a
0 / 0
2
jetpack_content_options_sanitize_blog_display
n/a
0 / 0
n/a
0 / 0
2
jetpack_content_options_customize_preview_js
n/a
0 / 0
n/a
0 / 0
10
Jetpack_Customize_Control_Title
n/a
0 / 0
n/a
0 / 0
1
n/a
0 / 0
 render_content
n/a
0 / 0
n/a
0 / 0
1
1<?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2/**
3 * Theme Tools: functions for Customizer enhancements.
4 *
5 * @package automattic/jetpack
6 */
7
8if ( ! defined( 'ABSPATH' ) ) {
9    exit( 0 );
10}
11
12if ( ! function_exists( 'jetpack_content_options_customize_register' ) ) {
13
14    /**
15     * Add Content section to the Theme Customizer.
16     *
17     * @deprecated 13.9 Moved to Classic Theme Helper package.
18     *
19     * @param WP_Customize_Manager $wp_customize Theme Customizer object.
20     */
21    function jetpack_content_options_customize_register( $wp_customize ) {
22        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
23        $options      = get_theme_support( 'jetpack-content-options' );
24        $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
25        $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
26        sort( $blog_display );
27        $blog_display         = implode( ', ', $blog_display );
28        $blog_display         = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
29        $author_bio           = ( ! empty( $options[0]['author-bio'] ) ) ? $options[0]['author-bio'] : null;
30        $author_bio_default   = ( isset( $options[0]['author-bio-default'] ) && false === $options[0]['author-bio-default'] ) ? '' : 1;
31        $post_details         = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
32        $date                 = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
33        $categories           = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
34        $tags                 = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
35        $author               = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
36        $comment              = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
37        $featured_images      = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null;
38        $fi_archive           = ( ! empty( $featured_images['archive'] ) ) ? $featured_images['archive'] : null;
39        $fi_post              = ( ! empty( $featured_images['post'] ) ) ? $featured_images['post'] : null;
40        $fi_page              = ( ! empty( $featured_images['page'] ) ) ? $featured_images['page'] : null;
41        $fi_portfolio         = ( ! empty( $featured_images['portfolio'] ) ) ? $featured_images['portfolio'] : null;
42        $fi_fallback          = ( ! empty( $featured_images['fallback'] ) ) ? $featured_images['fallback'] : null;
43        $fi_archive_default   = ( isset( $featured_images['archive-default'] ) && false === $featured_images['archive-default'] ) ? '' : 1;
44        $fi_post_default      = ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1;
45        $fi_page_default      = ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1;
46        $fi_portfolio_default = ( isset( $featured_images['portfolio-default'] ) && false === $featured_images['portfolio-default'] ) ? '' : 1;
47        $fi_fallback_default  = ( isset( $featured_images['fallback-default'] ) && false === $featured_images['fallback-default'] ) ? '' : 1;
48
49        // If the theme doesn't support 'jetpack-content-options[ 'blog-display' ]', 'jetpack-content-options[ 'author-bio' ]', 'jetpack-content-options[ 'post-details' ]' and 'jetpack-content-options[ 'featured-images' ]', don't continue.
50        if ( ( ! in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) )
51            && ( true !== $author_bio )
52            && ( ( empty( $post_details['stylesheet'] ) )
53                && ( empty( $date )
54                    || empty( $categories )
55                    || empty( $tags )
56                    || empty( $author )
57                    || empty( $comment ) ) )
58            && ( true !== $fi_archive && true !== $fi_post && true !== $fi_page && true !== $fi_portfolio && true !== $fi_fallback ) ) {
59            return;
60        }
61
62        if ( ! class_exists( 'Jetpack_Customize_Control_Title' ) ) {
63
64            /**
65             * New Customizer control type: Title.
66             */
67            class Jetpack_Customize_Control_Title extends WP_Customize_Control {
68                /**
69                 * Customizer control type.
70                 *
71                 * @var string
72                 */
73                public $type = 'title';
74
75                /**
76                 * Render the control's content.
77                 */
78                public function render_content() {
79                    ?>
80                    <span class="customize-control-title"><?php echo wp_kses_post( $this->label ); ?></span>
81                    <?php
82                }
83            }
84
85        }
86
87        // Add Content section.
88        $wp_customize->add_section(
89            'jetpack_content_options',
90            array(
91                'title'          => esc_html__( 'Content Options', 'jetpack' ),
92                'theme_supports' => 'jetpack-content-options',
93                'priority'       => 100,
94            )
95        );
96
97        // Add Blog Display option.
98        if ( in_array( $blog_display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
99            if ( 'mixed' === $blog_display ) {
100                $blog_display_choices = array(
101                    'content' => esc_html__( 'Full post', 'jetpack' ),
102                    'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
103                    'mixed'   => esc_html__( 'Default', 'jetpack' ),
104                );
105
106                $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages, or opt for the theme\'s default combination of excerpt and full post.', 'jetpack' );
107            } else {
108                $blog_display_choices = array(
109                    'content' => esc_html__( 'Full post', 'jetpack' ),
110                    'excerpt' => esc_html__( 'Post excerpt', 'jetpack' ),
111                );
112
113                $blog_display_description = esc_html__( 'Choose between a full post or an excerpt for the blog and archive pages.', 'jetpack' );
114
115                if ( 'mixed' === get_option( 'jetpack_content_blog_display' ) ) {
116                    update_option( 'jetpack_content_blog_display', $blog_display );
117                }
118            }
119
120            $wp_customize->add_setting(
121                'jetpack_content_blog_display',
122                array(
123                    'default'           => $blog_display,
124                    'type'              => 'option',
125                    'transport'         => 'postMessage',
126                    'sanitize_callback' => 'jetpack_content_options_sanitize_blog_display',
127                )
128            );
129
130            $wp_customize->add_control(
131                'jetpack_content_blog_display',
132                array(
133                    'section'     => 'jetpack_content_options',
134                    'label'       => esc_html__( 'Blog Display', 'jetpack' ),
135                    'description' => $blog_display_description,
136                    'type'        => 'radio',
137                    'choices'     => $blog_display_choices,
138                )
139            );
140        }
141
142        // Add Author Bio option.
143        if ( true === $author_bio ) {
144            $wp_customize->add_setting( 'jetpack_content_author_bio_title' );
145
146            $wp_customize->add_control(
147                new Jetpack_Customize_Control_Title(
148                    $wp_customize,
149                    'jetpack_content_author_bio_title',
150                    array(
151                        'section' => 'jetpack_content_options',
152                        'label'   => esc_html__( 'Author Bio', 'jetpack' ),
153                        'type'    => 'title',
154                    )
155                )
156            );
157
158            $wp_customize->add_setting(
159                'jetpack_content_author_bio',
160                array(
161                    'default'           => $author_bio_default,
162                    'type'              => 'option',
163                    'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
164                )
165            );
166
167            $wp_customize->add_control(
168                'jetpack_content_author_bio',
169                array(
170                    'section' => 'jetpack_content_options',
171                    'label'   => esc_html__( 'Display on single posts', 'jetpack' ),
172                    'type'    => 'checkbox',
173                )
174            );
175        }
176
177        // Add Post Details options.
178        if ( ( ! empty( $post_details ) )
179            && ( ! empty( $post_details['stylesheet'] ) )
180            && ( ! empty( $date )
181                || ! empty( $categories )
182                || ! empty( $tags )
183                || ! empty( $author )
184                || ! empty( $comment ) ) ) {
185            $wp_customize->add_setting( 'jetpack_content_post_details_title' );
186
187            $wp_customize->add_control(
188                new Jetpack_Customize_Control_Title(
189                    $wp_customize,
190                    'jetpack_content_post_details_title',
191                    array(
192                        'section' => 'jetpack_content_options',
193                        'label'   => esc_html__( 'Post Details', 'jetpack' ),
194                        'type'    => 'title',
195                    )
196                )
197            );
198
199            // Post Details: Date.
200            if ( ! empty( $date ) ) {
201                $wp_customize->add_setting(
202                    'jetpack_content_post_details_date',
203                    array(
204                        'default'           => 1,
205                        'type'              => 'option',
206                        'transport'         => 'postMessage',
207                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
208                    )
209                );
210
211                $wp_customize->add_control(
212                    'jetpack_content_post_details_date',
213                    array(
214                        'section' => 'jetpack_content_options',
215                        'label'   => esc_html__( 'Display date', 'jetpack' ),
216                        'type'    => 'checkbox',
217                    )
218                );
219            }
220
221            // Post Details: Categories.
222            if ( ! empty( $categories ) ) {
223                $wp_customize->add_setting(
224                    'jetpack_content_post_details_categories',
225                    array(
226                        'default'           => 1,
227                        'type'              => 'option',
228                        'transport'         => 'postMessage',
229                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
230                    )
231                );
232
233                $wp_customize->add_control(
234                    'jetpack_content_post_details_categories',
235                    array(
236                        'section' => 'jetpack_content_options',
237                        'label'   => esc_html__( 'Display categories', 'jetpack' ),
238                        'type'    => 'checkbox',
239                    )
240                );
241            }
242
243            // Post Details: Tags.
244            if ( ! empty( $tags ) ) {
245                $wp_customize->add_setting(
246                    'jetpack_content_post_details_tags',
247                    array(
248                        'default'           => 1,
249                        'type'              => 'option',
250                        'transport'         => 'postMessage',
251                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
252                    )
253                );
254
255                $wp_customize->add_control(
256                    'jetpack_content_post_details_tags',
257                    array(
258                        'section' => 'jetpack_content_options',
259                        'label'   => esc_html__( 'Display tags', 'jetpack' ),
260                        'type'    => 'checkbox',
261                    )
262                );
263            }
264
265            // Post Details: Author.
266            if ( ! empty( $author ) ) {
267                $wp_customize->add_setting(
268                    'jetpack_content_post_details_author',
269                    array(
270                        'default'           => 1,
271                        'type'              => 'option',
272                        'transport'         => 'postMessage',
273                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
274                    )
275                );
276
277                $wp_customize->add_control(
278                    'jetpack_content_post_details_author',
279                    array(
280                        'section' => 'jetpack_content_options',
281                        'label'   => esc_html__( 'Display author', 'jetpack' ),
282                        'type'    => 'checkbox',
283                    )
284                );
285            }
286
287            // Post Details: Comment link.
288            if ( ! empty( $comment ) ) {
289                $wp_customize->add_setting(
290                    'jetpack_content_post_details_comment',
291                    array(
292                        'default'           => 1,
293                        'type'              => 'option',
294                        'transport'         => 'postMessage',
295                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
296                    )
297                );
298
299                $wp_customize->add_control(
300                    'jetpack_content_post_details_comment',
301                    array(
302                        'section' => 'jetpack_content_options',
303                        'label'   => esc_html__( 'Display comment link', 'jetpack' ),
304                        'type'    => 'checkbox',
305                    )
306                );
307            }
308        }
309
310        // Add Featured Images options.
311        if ( true === $fi_archive || true === $fi_post || true === $fi_page || true === $fi_portfolio || true === $fi_fallback ) {
312            $wp_customize->add_setting( 'jetpack_content_featured_images_title' );
313
314            $wp_customize->add_control(
315                new Jetpack_Customize_Control_Title(
316                    $wp_customize,
317                    'jetpack_content_featured_images_title',
318                    array(
319                        'section'         => 'jetpack_content_options',
320                        'label'           => esc_html__( 'Featured Images', 'jetpack' ) . sprintf( '<a href="https://en.support.wordpress.com/featured-images/" class="customize-help-toggle dashicons dashicons-editor-help" title="%1$s" rel="noopener noreferrer" target="_blank"><span class="screen-reader-text">%1$s</span></a>', esc_html__( 'Learn more about Featured Images', 'jetpack' ) ),
321                        'type'            => 'title',
322                        'active_callback' => 'jetpack_post_thumbnail_supports',
323                    )
324                )
325            );
326
327            // Featured Images: Archive.
328            if ( true === $fi_archive ) {
329                $wp_customize->add_setting(
330                    'jetpack_content_featured_images_archive',
331                    array(
332                        'default'           => $fi_archive_default,
333                        'type'              => 'option',
334                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
335                    )
336                );
337
338                $wp_customize->add_control(
339                    'jetpack_content_featured_images_archive',
340                    array(
341                        'section'         => 'jetpack_content_options',
342                        'label'           => esc_html__( 'Display on blog and archives', 'jetpack' ),
343                        'type'            => 'checkbox',
344                        'active_callback' => 'jetpack_post_thumbnail_supports',
345                    )
346                );
347            }
348
349            // Featured Images: Post.
350            if ( true === $fi_post ) {
351                $wp_customize->add_setting(
352                    'jetpack_content_featured_images_post',
353                    array(
354                        'default'           => $fi_post_default,
355                        'type'              => 'option',
356                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
357                    )
358                );
359
360                $wp_customize->add_control(
361                    'jetpack_content_featured_images_post',
362                    array(
363                        'section'         => 'jetpack_content_options',
364                        'label'           => esc_html__( 'Display on single posts', 'jetpack' ),
365                        'type'            => 'checkbox',
366                        'active_callback' => 'jetpack_post_thumbnail_supports',
367                    )
368                );
369            }
370
371            // Featured Images: Page.
372            if ( true === $fi_page ) {
373                $wp_customize->add_setting(
374                    'jetpack_content_featured_images_page',
375                    array(
376                        'default'           => $fi_page_default,
377                        'type'              => 'option',
378                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
379                    )
380                );
381
382                $wp_customize->add_control(
383                    'jetpack_content_featured_images_page',
384                    array(
385                        'section'         => 'jetpack_content_options',
386                        'label'           => esc_html__( 'Display on pages', 'jetpack' ),
387                        'type'            => 'checkbox',
388                        'active_callback' => 'jetpack_post_thumbnail_supports',
389                    )
390                );
391            }
392
393            // Featured Images: Portfolio.
394            if ( true === $fi_portfolio && post_type_exists( 'jetpack-portfolio' ) ) {
395                $wp_customize->add_setting(
396                    'jetpack_content_featured_images_portfolio',
397                    array(
398                        'default'           => $fi_portfolio_default,
399                        'type'              => 'option',
400                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
401                    )
402                );
403
404                $wp_customize->add_control(
405                    'jetpack_content_featured_images_portfolio',
406                    array(
407                        'section'         => 'jetpack_content_options',
408                        'label'           => esc_html__( 'Display on single projects', 'jetpack' ),
409                        'type'            => 'checkbox',
410                        'active_callback' => 'jetpack_post_thumbnail_supports',
411                    )
412                );
413            }
414
415            // Featured Images: Fallback.
416            if ( true === $fi_fallback ) {
417                $wp_customize->add_setting(
418                    'jetpack_content_featured_images_fallback',
419                    array(
420                        'default'           => $fi_fallback_default,
421                        'type'              => 'option',
422                        'sanitize_callback' => 'jetpack_content_options_sanitize_checkbox',
423                    )
424                );
425
426                $wp_customize->add_control(
427                    'jetpack_content_featured_images_fallback',
428                    array(
429                        'section'         => 'jetpack_content_options',
430                        'label'           => esc_html__( 'Automatically use first image in post', 'jetpack' ),
431                        'type'            => 'checkbox',
432                        'active_callback' => 'jetpack_post_thumbnail_supports',
433                    )
434                );
435            }
436        }
437    }
438    add_action( 'customize_register', 'jetpack_content_options_customize_register' );
439
440}
441
442if ( ! function_exists( 'jetpack_post_thumbnail_supports' ) ) {
443
444    /**
445     * Return whether the theme supports Post Thumbnails.
446     *
447     * @deprecated 13.9 Moved to Classic Theme Helper package.
448     */
449    function jetpack_post_thumbnail_supports() {
450        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
451        return ( current_theme_supports( 'post-thumbnails' ) );
452    }
453
454}
455
456if ( ! function_exists( 'jetpack_content_options_sanitize_checkbox' ) ) {
457
458    /**
459     * Sanitize the checkbox.
460     *
461     * @deprecated 13.9 Moved to Classic Theme Helper package.
462     * @param int $input The unsanitized value from the setting.
463     * @return boolean|string
464     */
465    function jetpack_content_options_sanitize_checkbox( $input ) {
466        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
467        return ( 1 === (int) $input ) ? 1 : '';
468    }
469
470}
471
472if ( ! function_exists( 'jetpack_content_options_sanitize_blog_display' ) ) {
473
474    /**
475     * Sanitize the Display value.
476     *
477     * @deprecated 13.9 Moved to Classic Theme Helper package.
478     * @param string $display The unsanitized value from the setting.
479     * @return string
480     */
481    function jetpack_content_options_sanitize_blog_display( $display ) {
482        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
483        if ( ! in_array( $display, array( 'content', 'excerpt', 'mixed' ), true ) ) {
484            $display = 'content';
485        }
486        return $display;
487    }
488
489}
490
491if ( ! function_exists( 'jetpack_content_options_customize_preview_js' ) ) {
492
493    /**
494     * Binds JS handlers to make Theme Customizer preview reload changes asynchronously.
495     *
496     * @deprecated 13.9 Moved to Classic Theme Helper package.
497     */
498    function jetpack_content_options_customize_preview_js() {
499        _deprecated_function( __FUNCTION__, 'jetpack-13.9' );
500        $options      = get_theme_support( 'jetpack-content-options' );
501        $blog_display = ( ! empty( $options[0]['blog-display'] ) ) ? $options[0]['blog-display'] : null;
502        $blog_display = preg_grep( '/^(content|excerpt)$/', (array) $blog_display );
503        sort( $blog_display );
504        $blog_display = implode( ', ', $blog_display );
505        $blog_display = ( 'content, excerpt' === $blog_display ) ? 'mixed' : $blog_display;
506        $masonry      = ( ! empty( $options[0]['masonry'] ) ) ? $options[0]['masonry'] : null;
507        $post_details = ( ! empty( $options[0]['post-details'] ) ) ? $options[0]['post-details'] : null;
508        $date         = ( ! empty( $post_details['date'] ) ) ? $post_details['date'] : null;
509        $categories   = ( ! empty( $post_details['categories'] ) ) ? $post_details['categories'] : null;
510        $tags         = ( ! empty( $post_details['tags'] ) ) ? $post_details['tags'] : null;
511        $author       = ( ! empty( $post_details['author'] ) ) ? $post_details['author'] : null;
512        $comment      = ( ! empty( $post_details['comment'] ) ) ? $post_details['comment'] : null;
513
514        wp_enqueue_script( 'jetpack-content-options-customizer', plugins_url( 'customizer.js', __FILE__ ), array( 'jquery', 'customize-preview' ), '1.0', true );
515
516        wp_localize_script(
517            'jetpack-content-options-customizer',
518            'blogDisplay',
519            array(
520                'display' => get_option( 'jetpack_content_blog_display', $blog_display ),
521                'masonry' => $masonry,
522            )
523        );
524
525        wp_localize_script(
526            'jetpack-content-options-customizer',
527            'postDetails',
528            array(
529                'date'       => $date,
530                'categories' => $categories,
531                'tags'       => $tags,
532                'author'     => $author,
533                'comment'    => $comment,
534            )
535        );
536    }
537    add_action( 'customize_preview_init', 'jetpack_content_options_customize_preview_js' );
538
539}