| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  | /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  |  * Utilities for the rating block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  |  * @since 8.0.0 | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  |  * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  |  * @package Jetpack | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  |  */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | if ( ! function_exists( 'jetpack_rating_meta_get_symbol_low_fidelity' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | 	 * Returns the low fidelity symbol for the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | 	 * @return string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | 	 */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | 	function jetpack_rating_meta_get_symbol_low_fidelity() { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  | 		return '<span aria-hidden="true">⭐</span>'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  | if ( ! function_exists( 'jetpack_rating_star_get_symbol_high_fidelity' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  | 	 * Return the high fidelity symbol for the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  | 	 * @param string $classname_whole Name of the whole symbol class. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  | 	 * @param string $classname_half Name of the half symbol class. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  | 	 * @param string $color Color of the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  | 	 * @return string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  | 	 */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  | 	function jetpack_rating_star_get_symbol_high_fidelity( $classname_whole, $classname_half, $color ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  | 		return <<<ELO | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  | <span> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  | <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  | 	<path class="{$classname_whole}" fill="{$color}" stroke="{$color}" d="M12,17.3l6.2,3.7l-1.6-7L22,9.2l-7.2-0.6L12,2L9.2,8.6L2,9.2L7.5,14l-1.6,7L12,17.3z" /> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  | </svg> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  | </span> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  | <span> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  | <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  | 	<path class="{$classname_half}" fill="{$color}" stroke="{$color}" d="M12,17.3l6.2,3.7l-1.6-7L22,9.2l-7.2-0.6L12,2L9.2,8.6L2,9.2L7.5,14l-1.6,7L12,17.3z" /> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  | </svg> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  | </span> | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  | ELO; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  | if ( ! function_exists( 'jetpack_rating_meta_get_symbol_high_fidelity' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  | 	 * Returns the high fidelity symbol for the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  | 	 * @param array   $attributes Array containing the block attributes. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  | 	 * @param integer $pos Value to render whole and half symbols. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  | 	 * @return string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  | 	 */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  | 	function jetpack_rating_meta_get_symbol_high_fidelity( $attributes, $pos ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  | 		$classname_whole = ( $attributes['rating'] >= ( $pos - 0.5 ) ) ? '' : 'is-rating-unfilled'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  | 		$classname_half  = ( $attributes['rating'] >= $pos ) ? '' : 'is-rating-unfilled'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  | 		$color           = empty( $attributes['color'] ) ? 'currentColor' : esc_attr( $attributes['color'] ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  | 		return jetpack_rating_star_get_symbol_high_fidelity( $classname_whole, $classname_half, $color ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 63 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 64 |  |  | if ( ! function_exists( 'jetpack_rating_get_schema_for_symbol' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 65 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 66 |  |  | 	 * Returns an itemprop and content for rating symbols | 
            
                                                                                                            
                            
            
                                    
            
            
                | 67 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 68 |  |  | 	 * @param  integer $position   the position of the symbol. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 69 |  |  | 	 * @param  integer $max_rating the maximum symbol score. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 70 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 71 |  |  | 	 * @return string | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 72 |  |  | 	 */ | 
            
                                                                        
                            
            
                                    
            
            
                | 73 |  |  | 	function jetpack_rating_get_schema_for_symbol( $position, $max_rating ) { | 
            
                                                                        
                            
            
                                    
            
            
                | 74 |  |  | 		$schema = ''; | 
            
                                                                        
                            
            
                                    
            
            
                | 75 |  |  | 		if ( 1 === $position ) { | 
            
                                                                        
                            
            
                                    
            
            
                | 76 |  |  | 			$schema = 'itemprop="worstRating" content="0.5"'; | 
            
                                                                        
                            
            
                                    
            
            
                | 77 |  |  | 		} elseif ( $max_rating === $position ) { | 
            
                                                                        
                            
            
                                    
            
            
                | 78 |  |  | 			$schema = 'itemprop="bestRating" content="' . esc_attr( $max_rating ) . '"'; | 
            
                                                                        
                            
            
                                    
            
            
                | 79 |  |  | 		} | 
            
                                                                        
                            
            
                                    
            
            
                | 80 |  |  | 		return $schema; | 
            
                                                                        
                            
            
                                    
            
            
                | 81 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 82 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 83 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 84 |  |  | if ( ! function_exists( 'jetpack_rating_meta_get_symbols' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 85 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 86 |  |  | 	 * Returns the symbol for the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 87 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 88 |  |  | 	 * @param array $attributes Array containing the block attributes. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 89 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 90 |  |  | 	 * @return string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 91 |  |  | 	 */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 92 |  |  | 	function jetpack_rating_meta_get_symbols( $attributes ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 93 |  |  | 		// Output SVGs for high fidelity contexts, then color them according to rating. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 94 |  |  | 		// These are hidden by default, then unhid when CSS loads. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 95 |  |  | 		$symbols_hifi = array(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 96 |  |  | 		for ( $pos = 1; $pos <= $attributes['maxRating']; $pos++ ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 97 |  |  | 			$symbols_hifi[] = '<span style="display: none;" ' . jetpack_rating_get_schema_for_symbol( $pos, $attributes['maxRating'] ) . '>' . jetpack_rating_meta_get_symbol_high_fidelity( $attributes, $pos ) . '</span>'; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 98 |  |  | 		} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 99 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 100 |  |  | 		// Output fallback symbols for low fidelity contexts, like AMP, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 101 |  |  | 		// where CSS is not loaded so the high-fidelity symbols won't be rendered. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 102 |  |  | 		$symbols_lofi = ''; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 103 |  |  | 		for ( $i = 0; $i < $attributes['rating']; $i++ ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 104 |  |  | 			$symbols_lofi .= jetpack_rating_meta_get_symbol_low_fidelity(); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 105 |  |  | 		} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 106 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 107 |  |  | 		return '<p>' . $symbols_lofi . '</p>' . implode( $symbols_hifi ); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 108 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 109 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 110 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 111 |  |  | if ( ! function_exists( 'jetpack_rating_meta_render_block' ) ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 112 |  |  | 	/** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 113 |  |  | 	 * Dynamic rendering of the block. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 114 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 115 |  |  | 	 * @param array $attributes Array containing the block attributes. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 116 |  |  | 	 * | 
            
                                                                                                            
                            
            
                                    
            
            
                | 117 |  |  | 	 * @return string | 
            
                                                                                                            
                            
            
                                    
            
            
                | 118 |  |  | 	 */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 119 |  |  | 	function jetpack_rating_meta_render_block( $attributes ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 120 |  |  | 		$classname = empty( $attributes['className'] ) ? '' : ' ' . $attributes['className']; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 121 |  |  | 		return sprintf( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 122 |  |  | 			'<div class="%1$s" style="text-align:%4$s" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">%2$s%3$s</div>', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 123 |  |  | 			esc_attr( 'wp-block-jetpack-rating-' . $attributes['ratingStyle'] . $classname ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 124 |  |  | 			jetpack_rating_meta_get_symbols( $attributes ), | 
            
                                                                                                            
                            
            
                                    
            
            
                | 125 |  |  | 			// translators: %1$s is awarded rating score, %2$s is the best possible rating. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 126 |  |  | 			'<span itemprop="ratingValue" class="screen-reader-text" content="' . esc_attr( $attributes['rating'] ) . '">' . sprintf( __( 'Rating: %1$s out of %2$s.', 'jetpack' ), esc_attr( $attributes['rating'] ), esc_attr( $attributes['maxRating'] ) ) . '</span>', | 
            
                                                                                                            
                            
            
                                    
            
            
                | 127 |  |  | 			( isset( $attributes['align'] ) ) ? esc_attr( $attributes['align'] ) : '' | 
            
                                                                                                            
                            
            
                                    
            
            
                | 128 |  |  | 		); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 129 |  |  | 	} | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 130 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 131 |  |  |  |