Diff: STRATO-apps/wordpress_03/app/wp-includes/blocks/avatar.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
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 +