wp/wp-includes/blocks/calendar.php
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
equal deleted inserted replaced
20:7b1b88e27a20 21:48c4eec2b7e6
     5  * @package WordPress
     5  * @package WordPress
     6  */
     6  */
     7 
     7 
     8 /**
     8 /**
     9  * Renders the `core/calendar` block on server.
     9  * Renders the `core/calendar` block on server.
       
    10  *
       
    11  * @since 5.2.0
       
    12  *
       
    13  * @global int $monthnum.
       
    14  * @global int $year.
    10  *
    15  *
    11  * @param array $attributes The block attributes.
    16  * @param array $attributes The block attributes.
    12  *
    17  *
    13  * @return string Returns the block content.
    18  * @return string Returns the block content.
    14  */
    19  */
    28 	$previous_year     = $year;
    33 	$previous_year     = $year;
    29 
    34 
    30 	if ( isset( $attributes['month'] ) && isset( $attributes['year'] ) ) {
    35 	if ( isset( $attributes['month'] ) && isset( $attributes['year'] ) ) {
    31 		$permalink_structure = get_option( 'permalink_structure' );
    36 		$permalink_structure = get_option( 'permalink_structure' );
    32 		if (
    37 		if (
    33 			strpos( $permalink_structure, '%monthnum%' ) !== false &&
    38 			str_contains( $permalink_structure, '%monthnum%' ) &&
    34 			strpos( $permalink_structure, '%year%' ) !== false
    39 			str_contains( $permalink_structure, '%year%' )
    35 		) {
    40 		) {
    36 			// phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
       
    37 			$monthnum = $attributes['month'];
    41 			$monthnum = $attributes['month'];
    38 			// phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
    42 			$year     = $attributes['year'];
    39 			$year = $attributes['year'];
       
    40 		}
    43 		}
    41 	}
    44 	}
       
    45 
       
    46 	$color_block_styles = array();
       
    47 
       
    48 	// Text color.
       
    49 	$preset_text_color          = array_key_exists( 'textColor', $attributes ) ? "var:preset|color|{$attributes['textColor']}" : null;
       
    50 	$custom_text_color          = $attributes['style']['color']['text'] ?? null;
       
    51 	$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
       
    52 
       
    53 	// Background Color.
       
    54 	$preset_background_color          = array_key_exists( 'backgroundColor', $attributes ) ? "var:preset|color|{$attributes['backgroundColor']}" : null;
       
    55 	$custom_background_color          = $attributes['style']['color']['background'] ?? null;
       
    56 	$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
       
    57 
       
    58 	// Generate color styles and classes.
       
    59 	$styles        = wp_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );
       
    60 	$inline_styles = empty( $styles['css'] ) ? '' : sprintf( ' style="%s"', esc_attr( $styles['css'] ) );
       
    61 	$classnames    = empty( $styles['classnames'] ) ? '' : ' ' . esc_attr( $styles['classnames'] );
       
    62 	if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
       
    63 		$classnames .= ' has-link-color';
       
    64 	}
       
    65 	// Apply color classes and styles to the calendar.
       
    66 	$calendar = str_replace( '<table', '<table' . $inline_styles, get_calendar( true, false ) );
       
    67 	$calendar = str_replace( 'class="wp-calendar-table', 'class="wp-calendar-table' . $classnames, $calendar );
    42 
    68 
    43 	$wrapper_attributes = get_block_wrapper_attributes();
    69 	$wrapper_attributes = get_block_wrapper_attributes();
    44 	$output             = sprintf(
    70 	$output             = sprintf(
    45 		'<div %1$s>%2$s</div>',
    71 		'<div %1$s>%2$s</div>',
    46 		$wrapper_attributes,
    72 		$wrapper_attributes,
    47 		get_calendar( true, false )
    73 		$calendar
    48 	);
    74 	);
    49 
    75 
    50 	// phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
       
    51 	$monthnum = $previous_monthnum;
    76 	$monthnum = $previous_monthnum;
    52 	// phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited
    77 	$year     = $previous_year;
    53 	$year = $previous_year;
       
    54 
    78 
    55 	return $output;
    79 	return $output;
    56 }
    80 }
    57 
    81 
    58 /**
    82 /**
    59  * Registers the `core/calendar` block on server.
    83  * Registers the `core/calendar` block on server.
       
    84  *
       
    85  * @since 5.2.0
    60  */
    86  */
    61 function register_block_core_calendar() {
    87 function register_block_core_calendar() {
    62 	register_block_type_from_metadata(
    88 	register_block_type_from_metadata(
    63 		__DIR__ . '/calendar',
    89 		__DIR__ . '/calendar',
    64 		array(
    90 		array(
    72 /**
    98 /**
    73  * Returns whether or not there are any published posts.
    99  * Returns whether or not there are any published posts.
    74  *
   100  *
    75  * Used to hide the calendar block when there are no published posts.
   101  * Used to hide the calendar block when there are no published posts.
    76  * This compensates for a known Core bug: https://core.trac.wordpress.org/ticket/12016
   102  * This compensates for a known Core bug: https://core.trac.wordpress.org/ticket/12016
       
   103  *
       
   104  * @since 5.9.0
    77  *
   105  *
    78  * @return bool Has any published posts or not.
   106  * @return bool Has any published posts or not.
    79  */
   107  */
    80 function block_core_calendar_has_published_posts() {
   108 function block_core_calendar_has_published_posts() {
    81 	// Multisite already has an option that stores the count of the published posts.
   109 	// Multisite already has an option that stores the count of the published posts.
    96 
   124 
    97 /**
   125 /**
    98  * Queries the database for any published post and saves
   126  * Queries the database for any published post and saves
    99  * a flag whether any published post exists or not.
   127  * a flag whether any published post exists or not.
   100  *
   128  *
       
   129  * @since 5.9.0
       
   130  *
       
   131  * @global wpdb $wpdb WordPress database abstraction object.
       
   132  *
   101  * @return bool Has any published posts or not.
   133  * @return bool Has any published posts or not.
   102  */
   134  */
   103 function block_core_calendar_update_has_published_posts() {
   135 function block_core_calendar_update_has_published_posts() {
   104 	global $wpdb;
   136 	global $wpdb;
   105 	$has_published_posts = (bool) $wpdb->get_var( "SELECT 1 as test FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
   137 	$has_published_posts = (bool) $wpdb->get_var( "SELECT 1 as test FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
   111 // we are on single sites. On multi sites we use `post_count` option.
   143 // we are on single sites. On multi sites we use `post_count` option.
   112 if ( ! is_multisite() ) {
   144 if ( ! is_multisite() ) {
   113 	/**
   145 	/**
   114 	 * Handler for updating the has published posts flag when a post is deleted.
   146 	 * Handler for updating the has published posts flag when a post is deleted.
   115 	 *
   147 	 *
       
   148 	 * @since 5.9.0
       
   149 	 *
   116 	 * @param int $post_id Deleted post ID.
   150 	 * @param int $post_id Deleted post ID.
   117 	 */
   151 	 */
   118 	function block_core_calendar_update_has_published_post_on_delete( $post_id ) {
   152 	function block_core_calendar_update_has_published_post_on_delete( $post_id ) {
   119 		$post = get_post( $post_id );
   153 		$post = get_post( $post_id );
   120 
   154 
   125 		block_core_calendar_update_has_published_posts();
   159 		block_core_calendar_update_has_published_posts();
   126 	}
   160 	}
   127 
   161 
   128 	/**
   162 	/**
   129 	 * Handler for updating the has published posts flag when a post status changes.
   163 	 * Handler for updating the has published posts flag when a post status changes.
       
   164 	 *
       
   165 	 * @since 5.9.0
   130 	 *
   166 	 *
   131 	 * @param string  $new_status The status the post is changing to.
   167 	 * @param string  $new_status The status the post is changing to.
   132 	 * @param string  $old_status The status the post is changing from.
   168 	 * @param string  $old_status The status the post is changing from.
   133 	 * @param WP_Post $post       Post object.
   169 	 * @param WP_Post $post       Post object.
   134 	 */
   170 	 */