PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.84
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.84
5.5.84 5.5.83 5.5.82 5.5.81 5.5.80 5.5.79 5.5.77 5.5.76 5.5.75 5.5.73 5.5.72 5.5.22 5.5.23 5.5.29 5.5.3 5.5.31 5.5.32 5.5.34 5.5.35 5.5.36 5.5.37 5.5.4 5.5.40 5.5.41 5.5.42 All 160 releases
wp-data-access / WPDataAccess / Simple_Form / WPDA_Simple_Form_Item_Media.php

WPDA_Simple_Form_Item_Media.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.84, at WPDataAccess/Simple_Form/WPDA_Simple_Form_Item_Media.php

187 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Suppress "error - 0 - No summary was found for this file" on phpdoc generation
5 *
6 * @package WPDataAccess\Simple_Form
7 */
8
9 namespace WPDataAccess\Simple_Form {
10
11 /**
12 * Class WPDA_Simple_Form_Item_Media
13 *
14 * Handles a database column of type media.
15 *
16 * @author Peter Schulz
17 * @since 2.5.0
18 */
19 class WPDA_Simple_Form_Item_Media extends WPDA_Simple_Form_Item {
20
21 protected static $media_seq_id = 0;
22 protected $media_id;
23
24 protected $media_frame_title;
25 protected $media_frame_button;
26 protected $media_frame_remove;
27
28 protected $media_types = ''; // Use comma separated list (empty = all)
29
30 /**
31 * WPDA_Simple_Form_Item_Media constructor.
32 *
33 * @param array $args
34 */
35 public function __construct( $args = array() ) {
36 parent::__construct( $args );
37
38 $this->media_id = self::$media_seq_id++;
39
40 $this->item_hide_icon = true;
41
42 $this->media_frame_title = __( 'Upload or select media from your WordPress media library', 'wp-data-access' );
43 $this->media_frame_remove = __( 'Remove media', 'wp-data-access' );
44 $this->media_types = '';
45 $this->media_frame_button = __( 'Select', 'wp-data-access' );
46 }
47
48 /**
49 * Overwrite method show_item: create media item to interact with the WordPress media library
50 *
51 * When adding a new media item type, modify the following methods:
52 * show_item_media()
53 *
54 * If you change this method all media items will be affected!
55 */
56 public function show_item() {
57 ?>
58 <div id="media_container_<?php echo esc_attr( $this->media_id ); ?>">
59 <?php $this->show_item_media(); ?>
60 </div>
61 <?php
62 if ( 'view' !== $this->show_context_action ) {
63 $this->add_media_library_interaction();
64 }
65 }
66
67 /**
68 * Uses the media id to the media
69 *
70 * Overwrite this method for every new media item.
71 */
72 protected function show_item_media() {
73 if ( 'number' === $this->data_type ) {
74 // Column supports only one media file
75 $url = wp_get_attachment_url( $this->item_value );
76 if ( false !== $url ) {
77 $icon = wp_mime_type_icon( $this->item_value );
78 $title = get_the_title( $this->item_value );
79 $this->create_item_media( $url, $icon, $title );
80 }
81 } else {
82 // Column supports multiple media files
83 if ( null !== $this->item_value && '' !== $this->item_value ) {
84 $media_ids = explode( ',', $this->item_value ); // phpcs:ignore -- 8.1 proof
85 foreach ( $media_ids as $media_id ) {
86 $url = wp_get_attachment_url( $media_id );
87 if ( false !== $url ) {
88 $icon = wp_mime_type_icon( $media_id );
89 $title = get_the_title( $media_id );
90 $this->create_item_media( $url, $icon, $title );
91 }
92 }
93 }
94 }
95 }
96
97 private function create_item_media( $url, $icon, $title ) {
98 ?>
99 <span class="wpda_media_container wpda_media">
100 <a href="<?php echo esc_url( $url ); ?>" target="_blank">
101 <img src="<?php echo esc_url( $icon ); ?>">
102 <br/>
103 <?php echo esc_attr( $title ); ?>
104 </a>
105 </span>
106 <?php
107 }
108
109 /**
110 * Add media library interaction to media item.
111 *
112 * This method:
113 * (1) Adds a hidden item holding the media id(s).
114 * (2) Adds an upload button to start the interaction with the media library.
115 * (3) Adds a remove button to remove the media.
116 * (4) Adds Media Library event handlers.
117 *
118 * If you change this method all media items will be affected.
119 */
120 protected function add_media_library_interaction() {
121 switch ( substr( static::class, strrpos( static::class, '\\' ) + 1 ) ) {
122 case 'WPDA_Simple_Form_Item_Image':
123 $media_type = 'image';
124 break;
125 case 'WPDA_Simple_Form_Item_Video':
126 $media_type = 'video';
127 break;
128 case 'WPDA_Simple_Form_Item_Audio':
129 $media_type = 'audio';
130 break;
131 default:
132 $media_type = 'media';
133 }
134 ?>
135 <input type="hidden"
136 name="<?php echo esc_attr( $this->item_name ); ?>"
137 value="<?php echo esc_attr( $this->item_value ); ?>"
138 id="media_<?php echo esc_attr( $this->media_id ); ?>"
139 />
140 <div style="clear:both;">
141 <button id="media_<?php echo esc_attr( $this->media_id ); ?>_upload_button"
142 class="button">
143 <?php echo esc_attr( $this->media_frame_title ); ?>
144 </button>
145 <button id="media_<?php echo esc_attr( $this->media_id ); ?>_remove_button"
146 class="button">
147 <?php echo esc_attr( $this->media_frame_remove ); ?>
148 </button>
149 </div>
150 <script type='text/javascript'>
151 jQuery(function () {
152 wpdaInitMediaItem(
153 "<?php echo esc_attr( $this->media_id ); ?>",
154 jQuery("#media_container_<?php echo esc_attr( $this->media_id ); ?>"),
155 jQuery("#media_<?php echo esc_attr( $this->media_id ); ?>"),
156 "<?php echo esc_attr( $media_type ); ?>",
157 "<?php echo esc_attr( $this->data_type ); ?>",
158 "<?php echo esc_attr( $this->media_frame_title ); ?>",
159 "<?php echo esc_attr( $this->media_frame_button ); ?>",
160 ['<?php echo implode( '\',\'', explode( ',', $this->media_types ) ); // phpcs:ignore WordPress.Security.EscapeOutput ?>']
161 );
162 });
163 </script>
164 <?php
165 }
166
167 /**
168 * Overwrite method
169 *
170 * @param $pre_insert
171 *
172 * @return bool
173 */
174 public function is_valid( $pre_insert = false ) {
175 if ( ! parent::is_valid( $pre_insert ) ) {
176 return false;
177 }
178
179 // TODO: check if the media id exists
180
181 return true;
182 }
183
184 }
185
186 }
187