PluginProbe
JetFormBuilder — Dynamic Blocks Form Builder / 3.6.6
JetFormBuilder — Dynamic Blocks Form Builder v3.6.6
3.6.6.1 3.6.6 3.6.5.4 3.6.5.3 3.6.5.2 3.6.5.1 3.6.5 3.6.4.2 3.6.4.1 3.6.4 3.6.3.1 3.6.3 3.6.2.2 3.6.2.1 3.6.2 3.6.1.1 3.6.1 3.6.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 All 134 releases
← All changes | includes/blocks/render/media-field-render.php +133 -21 1.0.0 → 3.6.6 View file →
@@ -1,21 +1,133 @@
1 -<?php
2 -
3 -namespace Jet_Form_Builder\Blocks\Render;
4 -
5 -use Jet_Form_Builder\File_Upload;
6 -
7 -// If this file is called directly, abort.
8 -if ( ! defined( 'WPINC' ) ) {
9 - die;
10 -}
11 -
12 -/**
13 - * Define text field renderer class
14 - */
15 -class Media_Field_Render extends Base {
16 -
17 - public function get_name() {
18 - return 'media-field';
19 - }
20 -
21 -}
1 +<?php
2 +
3 +namespace Jet_Form_Builder\Blocks\Render;
4 +
5 +use Jet_Form_Builder\Blocks\Types\Media_Field;
6 +use Jet_Form_Builder\Classes\Attributes_Trait;
7 +use Jet_Form_Builder\Classes\Tools;
8 +
9 +// If this file is called directly, abort.
10 +if ( ! defined( 'WPINC' ) ) {
11 + die;
12 +}
13 +
14 +/**
15 + * @property Media_Field $block_type
16 + *
17 + * Class Media_Field_Render
18 + * @package Jet_Form_Builder\Blocks\Render
19 + */
20 +class Media_Field_Render extends Base {
21 +
22 + protected $files;
23 +
24 + public function get_name() {
25 + return 'media-field';
26 + }
27 +
28 + protected function get_block_args(): array {
29 + return array(
30 + 'max_files' => $this->block_type->get_max_files(),
31 + 'max_size' => $this->block_type->get_max_size(),
32 + );
33 + }
34 +
35 + /**
36 + * @return Attributes_Trait
37 + */
38 + public function files() {
39 + if ( is_null( $this->files ) ) {
40 + $this->files = new class() {
41 + use Attributes_Trait;
42 + };
43 + }
44 +
45 + return $this->files;
46 + }
47 +
48 + protected function render_previews(): string {
49 + $files = $this->block_type->block_attrs['default'];
50 +
51 + if ( empty( $files ) ) {
52 + return '';
53 + }
54 +
55 + $preview = $this->get_preview_html();
56 + $html = '';
57 +
58 + foreach ( $files as $file ) {
59 +
60 + if (
61 + empty( $file['url'] ) &&
62 + isset( $file['id'] ) &&
63 + is_array( $file['id'] )
64 + ) {
65 + $file = $file['id'];
66 + }
67 + $file_url = isset( $file['url'] ) ? $file['url'] : wp_get_attachment_url( $file );
68 + $updated = str_replace( '%file_url%', esc_attr( $file_url ), $preview );
69 + $updated = str_replace(
70 + '%file_name%',
71 + esc_attr( $this->get_name_from_file( $file['url'] ) ),
72 + $updated
73 + );
74 +
75 + // preset field
76 + $updated = str_replace( '<!-- field -->', $this->get_field_preset( $file ), $updated );
77 +
78 + $image_ext = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'svg', 'webp', 'avif' );
79 + $img_ext_preg = '!\.(' . join( '|', $image_ext ) . ')$!i';
80 +
81 + if ( preg_match( $img_ext_preg, $file['url'] ) ) {
82 + $replace = sprintf( '<img src="%s" alt="" width="100px" height="100px">', esc_url( $file['url'] ) );
83 +
84 + $updated = str_replace( '<!-- preview -->', $replace, $updated );
85 + }
86 +
87 + $html .= $updated;
88 + }
89 +
90 + return $html;
91 + }
92 +
93 + private function get_name_from_file( string $file_url ): string {
94 + $parts = explode( '/', $file_url );
95 +
96 + return end( $parts );
97 + }
98 +
99 + protected function get_preview_html(): string {
100 + ob_start();
101 +
102 + require Tools::get_global_template( 'fields/image-preview.php' );
103 +
104 + return ob_get_clean();
105 + }
106 +
107 + protected function get_field_preset( array $file ): string {
108 + ob_start();
109 +
110 + require Tools::get_global_template( 'fields/preset-media-field.php' );
111 +
112 + return ob_get_clean();
113 + }
114 +
115 + public function render( $wp_block = null, $template = null ) {
116 + $this->files()->add_attribute(
117 + 'data-args',
118 + htmlspecialchars(
119 + Tools::encode_json( $this->get_block_args() )
120 + )
121 + );
122 +
123 + $field = parent::render( $wp_block, $template );
124 +
125 + $template = sprintf(
126 + '<template class="jet-form-builder__preview-template">%s</template>',
127 + $this->get_preview_html()
128 + );
129 +
130 + return ( $template . $field );
131 + }
132 +
133 +}