Diff: STRATO-apps/wordpress_03/app/wp-includes/blocks/avatar.php
Keine Baseline-Datei – Diff nur gegen leer.
1
-
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 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 = 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: 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: Author archive link. 2: 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: 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: Comment author name.
92
+
$label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"';
93
+
}
94
+
$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 );
95
+
}
96
+
return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
97
+
}
98
+
99
+
/**
100
+
* Generates class names and styles to apply the border support styles for
101
+
* the Avatar block.
102
+
*
103
+
* @since 6.3.0
104
+
*
105
+
* @param array $attributes The block attributes.
106
+
* @return array The border-related classnames and styles for the block.
107
+
*/
108
+
function get_block_core_avatar_border_attributes( $attributes ) {
109
+
$border_styles = array();
110
+
$sides = array( 'top', 'right', 'bottom', 'left' );
111
+
112
+
// Border radius.
113
+
if ( isset( $attributes['style']['border']['radius'] ) ) {
114
+
$border_styles['radius'] = $attributes['style']['border']['radius'];
115
+
}
116
+
117
+
// Border style.
118
+
if ( isset( $attributes['style']['border']['style'] ) ) {
119
+
$border_styles['style'] = $attributes['style']['border']['style'];
120
+
}
121
+
122
+
// Border width.
123
+
if ( isset( $attributes['style']['border']['width'] ) ) {
124
+
$border_styles['width'] = $attributes['style']['border']['width'];
125
+
}
126
+
127
+
// Border color.
128
+
$preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null;
129
+
$custom_color = $attributes['style']['border']['color'] ?? null;
130
+
$border_styles['color'] = $preset_color ? $preset_color : $custom_color;
131
+
132
+
// Individual border styles e.g. top, left etc.
133
+
foreach ( $sides as $side ) {
134
+
$border = $attributes['style']['border'][ $side ] ?? null;
135
+
$border_styles[ $side ] = array(
136
+
'color' => isset( $border['color'] ) ? $border['color'] : null,
137
+
'style' => isset( $border['style'] ) ? $border['style'] : null,
138
+
'width' => isset( $border['width'] ) ? $border['width'] : null,
139
+
);
140
+
}
141
+
142
+
$styles = wp_style_engine_get_styles( array( 'border' => $border_styles ) );
143
+
$attributes = array();
144
+
if ( ! empty( $styles['classnames'] ) ) {
145
+
$attributes['class'] = $styles['classnames'];
146
+
}
147
+
if ( ! empty( $styles['css'] ) ) {
148
+
$attributes['style'] = $styles['css'];
149
+
}
150
+
return $attributes;
151
+
}
152
+
153
+
/**
154
+
* Registers the `core/avatar` block on the server.
155
+
*
156
+
* @since 6.0.0
157
+
*/
158
+
function register_block_core_avatar() {
159
+
register_block_type_from_metadata(
160
+
__DIR__ . '/avatar',
161
+
array(
162
+
'render_callback' => 'render_block_core_avatar',
163
+
)
164
+
);
165
+
}
166
+
add_action( 'init', 'register_block_core_avatar' );
167
+