PluginProbe
Gutenberg / 18.9.0
Gutenberg v18.9.0
24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 All 403 releases
gutenberg / build / block-library / blocks / avatar.php

avatar.php in Gutenberg 18.9.0, at build/block-library/blocks/avatar.php

168 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Server-side rendering of the `core/avatar` block.
4 *
5 * @package WordPress
6 */
7
8 /**
9 * Renders the `core/avatar` block on the server.
10 *
11 * @since 6.0.0
12 *
13 * @param array $attributes Block attributes.
14 * @param string $content Block default content.
15 * @param WP_Block $block Block instance.
16 * @return string Return the avatar.
17 */
18 function gutenberg_render_block_core_avatar( $attributes, $content, $block ) {
19 $size = isset( $attributes['size'] ) ? $attributes['size'] : 96;
20 $wrapper_attributes = get_block_wrapper_attributes();
21 $border_attributes = gutenberg_get_block_core_avatar_border_attributes( $attributes );
22
23 // Class gets passed through `esc_attr` via `get_avatar`.
24 $image_classes = ! empty( $border_attributes['class'] )
25 ? "wp-block-avatar__image {$border_attributes['class']}"
26 : 'wp-block-avatar__image';
27
28 // Unlike class, `get_avatar` doesn't filter the styles via `esc_attr`.
29 // The style engine does pass the border styles through
30 // `safecss_filter_attr` however.
31 $image_styles = ! empty( $border_attributes['style'] )
32 ? sprintf( ' style="%s"', esc_attr( $border_attributes['style'] ) )
33 : '';
34
35 if ( ! isset( $block->context['commentId'] ) ) {
36 if ( isset( $attributes['userId'] ) ) {
37 $author_id = $attributes['userId'];
38 } elseif ( isset( $block->context['postId'] ) ) {
39 $author_id = get_post_field( 'post_author', $block->context['postId'] );
40 } else {
41 $author_id = get_query_var( 'author' );
42 }
43
44 if ( empty( $author_id ) ) {
45 return '';
46 }
47
48 $author_name = get_the_author_meta( 'display_name', $author_id );
49 // translators: %s is the Author name.
50 $alt = sprintf( __( '%s Avatar' ), $author_name );
51 $avatar_block = get_avatar(
52 $author_id,
53 $size,
54 '',
55 $alt,
56 array(
57 'extra_attr' => $image_styles,
58 'class' => $image_classes,
59 )
60 );
61 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) {
62 $label = '';
63 if ( '_blank' === $attributes['linkTarget'] ) {
64 // translators: %s is the Author name.
65 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s author archive, opens in a new tab)' ), $author_name ) ) . '"';
66 }
67 // translators: %1$s: Author archive link. %2$s: Link target. %3$s Aria label. %4$s Avatar image.
68 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( get_author_posts_url( $author_id ) ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
69 }
70 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
71 }
72 $comment = get_comment( $block->context['commentId'] );
73 if ( ! $comment ) {
74 return '';
75 }
76 /* translators: %s is the Comment Author name */
77 $alt = sprintf( __( '%s Avatar' ), $comment->comment_author );
78 $avatar_block = get_avatar(
79 $comment,
80 $size,
81 '',
82 $alt,
83 array(
84 'extra_attr' => $image_styles,
85 'class' => $image_classes,
86 )
87 );
88 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $comment->comment_author_url ) && '' !== $comment->comment_author_url ) {
89 $label = '';
90 if ( '_blank' === $attributes['linkTarget'] ) {
91 // translators: %s is the Comment Author name.
92 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"';
93 }
94 // translators: %1$s: Comment Author website link. %2$s: Link target. %3$s Aria label. %4$s Avatar image.
95 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
96 }
97 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
98 }
99
100 /**
101 * Generates class names and styles to apply the border support styles for
102 * the Avatar block.
103 *
104 * @since 6.3.0
105 *
106 * @param array $attributes The block attributes.
107 * @return array The border-related classnames and styles for the block.
108 */
109 function gutenberg_get_block_core_avatar_border_attributes( $attributes ) {
110 $border_styles = array();
111 $sides = array( 'top', 'right', 'bottom', 'left' );
112
113 // Border radius.
114 if ( isset( $attributes['style']['border']['radius'] ) ) {
115 $border_styles['radius'] = $attributes['style']['border']['radius'];
116 }
117
118 // Border style.
119 if ( isset( $attributes['style']['border']['style'] ) ) {
120 $border_styles['style'] = $attributes['style']['border']['style'];
121 }
122
123 // Border width.
124 if ( isset( $attributes['style']['border']['width'] ) ) {
125 $border_styles['width'] = $attributes['style']['border']['width'];
126 }
127
128 // Border color.
129 $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null;
130 $custom_color = $attributes['style']['border']['color'] ?? null;
131 $border_styles['color'] = $preset_color ? $preset_color : $custom_color;
132
133 // Individual border styles e.g. top, left etc.
134 foreach ( $sides as $side ) {
135 $border = $attributes['style']['border'][ $side ] ?? null;
136 $border_styles[ $side ] = array(
137 'color' => isset( $border['color'] ) ? $border['color'] : null,
138 'style' => isset( $border['style'] ) ? $border['style'] : null,
139 'width' => isset( $border['width'] ) ? $border['width'] : null,
140 );
141 }
142
143 $styles = gutenberg_style_engine_get_styles( array( 'border' => $border_styles ) );
144 $attributes = array();
145 if ( ! empty( $styles['classnames'] ) ) {
146 $attributes['class'] = $styles['classnames'];
147 }
148 if ( ! empty( $styles['css'] ) ) {
149 $attributes['style'] = $styles['css'];
150 }
151 return $attributes;
152 }
153
154 /**
155 * Registers the `core/avatar` block on the server.
156 *
157 * @since 6.0.0
158 */
159 function gutenberg_register_block_core_avatar() {
160 register_block_type_from_metadata(
161 __DIR__ . '/avatar',
162 array(
163 'render_callback' => 'gutenberg_render_block_core_avatar',
164 )
165 );
166 }
167 add_action( 'init', 'gutenberg_register_block_core_avatar', 20 );
168