File "WPDA_Simple_Form_Item_Media.php"
Full Path: /home/vantageo/public_html/cache/cache/cache/.wp-cli/wp-content/plugins/wp-data-access/WPDataAccess/Simple_Form/WPDA_Simple_Form_Item_Media.php
File size: 5.26 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* Suppress "error - 0 - No summary was found for this file" on phpdoc generation
*
* @package WPDataAccess\Simple_Form
*/
namespace WPDataAccess\Simple_Form {
/**
* Class WPDA_Simple_Form_Item_Media
*
* Handles a database column of type media.
*
* @author Peter Schulz
* @since 2.5.0
*/
class WPDA_Simple_Form_Item_Media extends WPDA_Simple_Form_Item {
protected static $media_seq_id = 0;
protected $media_id;
protected $media_frame_title;
protected $media_frame_button;
protected $media_frame_remove;
protected $media_types = ''; // Use comma separated list (empty = all)
/**
* WPDA_Simple_Form_Item_Media constructor.
*
* @param array $args
*/
public function __construct( $args = array() ) {
parent::__construct( $args );
$this->media_id = self::$media_seq_id++;
$this->item_hide_icon = true;
$this->media_frame_title = __( 'Upload or select media from your WordPress media library', 'wp-data-access' );
$this->media_frame_remove = __( 'Remove media', 'wp-data-access' );
$this->media_types = '';
$this->media_frame_button = __( 'Select', 'wp-data-access' );
}
/**
* Overwrite method show_item: create media item to interact with the WordPress media library
*
* When adding a new media item type, modify the following methods:
* show_item_media()
*
* If you change this method all media items will be affected!
*/
public function show_item() {
?>
<div id="media_container_<?php echo esc_attr( $this->media_id ); ?>">
<?php $this->show_item_media(); ?>
</div>
<?php
if ( 'view' !== $this->show_context_action ) {
$this->add_media_library_interaction();
}
}
/**
* Uses the media id to the media
*
* Overwrite this method for every new media item.
*/
protected function show_item_media() {
if ( 'number' === $this->data_type ) {
// Column supports only one media file
$url = wp_get_attachment_url( $this->item_value );
if ( false !== $url ) {
$icon = wp_mime_type_icon( $this->item_value );
$title = get_the_title( $this->item_value );
$this->create_item_media( $url, $icon, $title );
}
} else {
// Column supports multiple media files
if ( null !== $this->item_value && '' !== $this->item_value ) {
$media_ids = explode( ',', $this->item_value );//phpcs:ignore - 8.1 proof
foreach ( $media_ids as $media_id ) {
$url = wp_get_attachment_url( $media_id );
if ( false !== $url ) {
$icon = wp_mime_type_icon( $media_id );
$title = get_the_title( $media_id );
$this->create_item_media( $url, $icon, $title );
}
}
}
}
}
private function create_item_media( $url, $icon, $title ) {
?>
<span class="wpda_media_container wpda_media">
<a href="<?php echo esc_url( $url ); ?>" target="_blank">
<img src="<?php echo esc_url( $icon ); ?>">
<br/>
<?php echo esc_attr( $title ); ?>
</a>
</span>
<?php
}
/**
* Add media library interaction to media item.
*
* This method:
* (1) Adds a hidden item holding the media id(s).
* (2) Adds an upload button to start the interaction with the media library.
* (3) Adds a remove button to remove the media.
* (4) Adds Media Library event handlers.
*
* If you change this method all media items will be affected.
*/
protected function add_media_library_interaction() {
switch ( substr( static::class, strrpos( static::class, '\\' ) + 1 ) ) {
case 'WPDA_Simple_Form_Item_Image':
$media_type = 'image';
break;
case 'WPDA_Simple_Form_Item_Video':
$media_type = 'video';
break;
case 'WPDA_Simple_Form_Item_Audio':
$media_type = 'audio';
break;
default:
$media_type = 'media';
}
?>
<input type="hidden"
name="<?php echo esc_attr( $this->item_name ); ?>"
value="<?php echo esc_attr( $this->item_value ); ?>"
id="media_<?php echo esc_attr( $this->media_id ); ?>"
/>
<div style="clear:both;">
<button id="media_<?php echo esc_attr( $this->media_id ); ?>_upload_button"
class="button">
<?php echo esc_attr( $this->media_frame_title ); ?>
</button>
<button id="media_<?php echo esc_attr( $this->media_id ); ?>_remove_button"
class="button">
<?php echo esc_attr( $this->media_frame_remove ); ?>
</button>
</div>
<script type='text/javascript'>
jQuery(function () {
wpdaInitMediaItem(
"<?php echo esc_attr( $this->media_id ); ?>",
jQuery("#media_container_<?php echo esc_attr( $this->media_id ); ?>"),
jQuery("#media_<?php echo esc_attr( $this->media_id ); ?>"),
"<?php echo esc_attr( $media_type ); ?>",
"<?php echo esc_attr( $this->data_type ); ?>",
"<?php echo esc_attr( $this->media_frame_title ); ?>",
"<?php echo esc_attr( $this->media_frame_button ); ?>",
['<?php echo implode( '\',\'', explode( ',', $this->media_types ) ); // phpcs:ignore WordPress.Security.EscapeOutput 8.1 proof?>']
);
});
</script>
<?php
}
/**
* Overwrite method
*
* @param $pre_insert
*
* @return bool
*/
public function is_valid( $pre_insert = false ) {
if ( ! parent::is_valid( $pre_insert ) ) {
return false;
}
// TODO: check if the media id exists
return true;
}
}
}