2022-04-17 00:39:10 +00:00
< ? php
/**
* Plugin Name : AudioIgniter
* Plugin URI : https :// www . cssigniter . com / plugins / audioigniter /
* Description : AudioIgniter lets you create music playlists and embed them in your WordPress posts , pages or custom post types and serve your audio content in style !
* Author : The CSSIgniter Team
* Author URI : https :// www . cssigniter . com
2022-08-19 16:15:57 +00:00
* Version : 1.9 . 0
2022-04-17 00:39:10 +00:00
* Text Domain : audioigniter
* Domain Path : languages
*
* AudioIgniter is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 2 of the License , or
* any later version .
*
* AudioIgniter Downloads is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with AudioIgniter . If not , see < http :// www . gnu . org / licenses />.
*
*/
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
class AudioIgniter {
/**
* AudioIgniter version .
*
* @ var string
* @ since 1.0 . 0
* @ since 1.7 . 0 Changed from static to non - static .
*/
public $version = null ;
/**
* Instance of this class .
*
* @ var AudioIgniter
* @ since 1.0 . 0
*/
protected static $instance = null ;
/**
* Sanitizer instance .
*
* @ var AudioIgniter_Sanitizer
* @ since 1.0 . 0
*/
public $sanitizer = null ;
/**
* The URL directory path ( with trailing slash ) of the main plugin file .
*
* @ var string
* @ since 1.0 . 0
*/
protected static $plugin_url = '' ;
/**
* The filesystem directory path ( with trailing slash ) of the main plugin file .
*
* @ var string
* @ since 1.0 . 0
*/
protected static $plugin_path = '' ;
/**
* Playlist post type name .
*
* @ var string
* @ since 1.0 . 0
*/
public $post_type = 'ai_playlist' ;
/**
* AudioIgniter Instance .
*
* Instantiates or reuses an instance of AudioIgniter .
*
* @ since 1.0 . 0
* @ static
* @ see AudioIgniter ()
* @ return AudioIgniter - Single instance .
*/
public static function instance () {
if ( is_null ( self :: $instance ) ) {
self :: $instance = new self ();
}
return self :: $instance ;
}
/**
* AudioIgniter constructor . Intentionally left empty so that instances can be created without
* re - loading of resources ( e . g . scripts / styles ), or re - registering hooks .
* http :// wordpress . stackexchange . com / questions / 70055 / best - way - to - initiate - a - class - in - a - wp - plugin
* https :// gist . github . com / toscho / 3804204
*
* @ since 1.0 . 0
*/
public function __construct () {}
/**
* Kickstarts plugin loading .
*
* @ since 1.0 . 0
*/
public function plugin_setup () {
if ( is_null ( $this -> version ) ) {
if ( ! function_exists ( 'get_plugin_data' ) ) {
include_once ABSPATH . 'wp-admin/includes/plugin.php' ;
}
$plugin_data = get_plugin_data ( __FILE__ );
$this -> version = $plugin_data [ 'Version' ];
}
self :: $plugin_url = plugin_dir_url ( __FILE__ );
self :: $plugin_path = plugin_dir_path ( __FILE__ );
load_plugin_textdomain ( 'audioigniter' , false , dirname ( self :: plugin_basename () ) . '/languages' );
2022-08-19 16:15:57 +00:00
require_once 'class-audioigniter-sanitizer.php' ;
2022-04-17 00:39:10 +00:00
$this -> sanitizer = new AudioIgniter_Sanitizer ();
// Initialization needed in every request.
$this -> init ();
// Initialization needed in admin requests.
$this -> admin_init ();
// Initialization needed in frontend requests.
$this -> frontend_init ();
do_action ( 'audioigniter_loaded' );
}
/**
* Registers actions that need to be run on both admin and frontend
*
* @ since 1.0 . 0
*/
protected function init () {
add_action ( 'init' , array ( $this , 'register_post_types' ) );
add_action ( 'init' , array ( $this , 'register_scripts' ) );
add_action ( 'init' , array ( $this , 'register_playlist_endpoint' ) );
add_action ( 'init' , array ( $this , 'register_image_sizes' ) );
add_action ( 'init' , array ( $this , 'register_shortcodes' ) );
add_action ( 'widgets_init' , array ( $this , 'register_widgets' ) );
do_action ( 'audioigniter_init' );
}
/**
* Registers actions that need to be run on admin only .
*
* @ since 1.0 . 0
*/
protected function admin_init () {
if ( ! is_admin () ) {
return ;
}
add_action ( 'admin_enqueue_scripts' , array ( $this , 'enqueue_admin_scripts' ) );
add_action ( 'add_meta_boxes' , array ( $this , 'add_meta_boxes' ) );
add_action ( 'save_post' , array ( $this , 'save_post' ) );
2022-08-19 16:15:57 +00:00
add_filter ( " manage_ { $this -> post_type } _posts_columns " , array ( $this , 'filter_posts_columns' ) );
add_action ( " manage_ { $this -> post_type } _posts_custom_column " , array ( $this , 'add_custom_columns' ), 10 , 2 );
2022-04-17 00:39:10 +00:00
do_action ( 'audioigniter_admin_init' );
}
/**
* Registers actions that need to be run on frontend only .
*
* @ since 1.0 . 0
*/
protected function frontend_init () {
if ( is_admin () ) {
return ;
}
add_action ( 'wp_enqueue_scripts' , array ( $this , 'enqueue_scripts' ) );
add_action ( 'template_redirect' , array ( $this , 'handle_playlist_endpoint' ) );
do_action ( 'audioigniter_frontend_init' );
}
/**
* Register ( but not enqueue ) all scripts and styles to be used throughout the plugin .
*
* @ since 1.0 . 0
*/
public function register_scripts () {
wp_register_style ( 'audioigniter' , $this -> plugin_url () . 'player/build/style.css' , array (), $this -> version );
wp_register_style ( 'audioigniter-admin' , $this -> plugin_url () . 'assets/css/admin-styles.css' , array (), $this -> version );
wp_register_script ( 'audioigniter' , $this -> plugin_url () . 'player/build/app.js' , array (), $this -> version , true );
wp_register_script ( 'audioigniter-admin' , $this -> plugin_url () . 'assets/js/audioigniter.js' , array (), $this -> version , true );
wp_localize_script ( 'audioigniter' , 'aiStrings' , apply_filters ( 'audioigniter_aiStrings' , array (
/* translators: %s is the track's title. */
'play_title' => esc_html__ ( 'Play %s' , 'audioigniter' ),
/* translators: %s is the track's title. */
'pause_title' => esc_html__ ( 'Pause %s' , 'audioigniter' ),
'previous' => esc_html__ ( 'Previous track' , 'audioigniter' ),
'next' => esc_html__ ( 'Next track' , 'audioigniter' ),
'toggle_list_repeat' => esc_html__ ( 'Toggle track listing repeat' , 'audioigniter' ),
'toggle_track_repeat' => esc_html__ ( 'Toggle track repeat' ),
'toggle_list_visible' => esc_html__ ( 'Toggle track listing visibility' , 'audioigniter' ),
'buy_track' => esc_html__ ( 'Buy this track' , 'audioigniter' ),
'download_track' => esc_html__ ( 'Download this track' , 'audioigniter' ),
'volume_up' => esc_html__ ( 'Volume Up' , 'audioigniter' ),
'volume_down' => esc_html__ ( 'Volume Down' , 'audioigniter' ),
'open_track_lyrics' => esc_html__ ( 'Open track lyrics' , 'audioigniter' ),
'set_playback_rate' => esc_html__ ( 'Set playback rate' , 'audioigniter' ),
'skip_forward' => esc_html__ ( 'Skip forward' , 'audioigniter' ),
'skip_backward' => esc_html__ ( 'Skip backward' , 'audioigniter' ),
'shuffle' => esc_html__ ( 'Shuffle' , 'audioigniter' ),
) ) );
wp_localize_script ( 'audioigniter-admin' , 'ai_scripts' , array (
'messages' => array (
'confirm_clear_tracks' => esc_html__ ( 'Do you really want to remove all tracks? (This will not delete your audio files).' , 'audioigniter' ),
'media_title_upload' => esc_html__ ( 'Select or upload audio media' , 'audioigniter' ),
'media_title_upload_cover' => esc_html__ ( 'Select a cover image' , 'audioigniter' ),
),
) );
}
/**
* Enqueues frontend scripts and styles .
*
* @ since 1.0 . 0
*/
public function enqueue_scripts () {
wp_enqueue_style ( 'audioigniter' );
wp_enqueue_script ( 'audioigniter' );
}
/**
* Enqueues admin scripts and styles .
*
* @ since 1.0 . 0
*/
public function enqueue_admin_scripts ( $hook ) {
$screen = get_current_screen ();
if ( 'post' === $screen -> base && $screen -> post_type === $this -> post_type ) {
wp_enqueue_media ();
wp_enqueue_style ( 'audioigniter-admin' );
wp_enqueue_script ( 'audioigniter-admin' );
}
}
/**
* Post types registration .
*
* @ since 1.0 . 0
*/
public function register_post_types () {
$labels = array (
'name' => esc_html_x ( 'Playlists' , 'post type general name' , 'audioigniter' ),
'singular_name' => esc_html_x ( 'Playlist' , 'post type singular name' , 'audioigniter' ),
'menu_name' => esc_html_x ( 'Playlists' , 'admin menu' , 'audioigniter' ),
'name_admin_bar' => esc_html_x ( 'Playlist' , 'add new on admin bar' , 'audioigniter' ),
'add_new' => esc_html__ ( 'Add New Playlist' , 'audioigniter' ),
'add_new_item' => esc_html__ ( 'Add New Playlist' , 'audioigniter' ),
'edit_item' => esc_html__ ( 'Edit Playlist' , 'audioigniter' ),
'new_item' => esc_html__ ( 'New Playlist' , 'audioigniter' ),
'view_item' => esc_html__ ( 'View Playlist' , 'audioigniter' ),
'search_items' => esc_html__ ( 'Search Playlists' , 'audioigniter' ),
'not_found' => esc_html__ ( 'No playlists found' , 'audioigniter' ),
'not_found_in_trash' => esc_html__ ( 'No playlists found in the trash' , 'audioigniter' ),
);
$args = array (
'labels' => $labels ,
'singular_label' => esc_html_x ( 'Playlist' , 'post type singular name' , 'audioigniter' ),
'public' => false ,
'show_ui' => true ,
'capability_type' => 'post' ,
'hierarchical' => false ,
'has_archive' => false ,
'supports' => array ( 'title' ),
'menu_icon' => 'dashicons-controls-volumeon' ,
);
register_post_type ( $this -> post_type , $args );
}
/**
* Registers metaboxes for the ai_playlist post type .
*
* @ since 1.0 . 0
*/
public function add_meta_boxes () {
add_meta_box ( 'ai-meta-box-tracks' , esc_html__ ( 'Tracks' , 'audioigniter' ), array ( $this , 'metabox_tracks' ), $this -> post_type , 'normal' , 'high' );
add_meta_box ( 'ai-meta-box-settings' , esc_html__ ( 'Settings' , 'audioigniter' ), array ( $this , 'metabox_settings' ), $this -> post_type , 'normal' , 'high' );
2022-08-19 16:15:57 +00:00
add_meta_box ( 'ai-meta-box-shortcode' , esc_html__ ( 'Shortcode' , 'audioigniter' ), array ( $this , 'metabox_shortcode' ), $this -> post_type , 'side' , 'default' );
2022-04-17 00:39:10 +00:00
}
/**
* Echoes the Tracks metabox markup .
*
* @ since 1.0 . 0
*
* @ param WP_Post $object
* @ param array $box
*/
public function metabox_tracks ( $object , $box ) {
$tracks = $this -> get_post_meta ( $object -> ID , '_audioigniter_tracks' , array () );
wp_nonce_field ( basename ( __FILE__ ), $object -> post_type . '_nonce' );
?>
< ? php $this -> metabox_tracks_header (); ?>
< div class = " ai-container " >
2022-08-19 16:15:57 +00:00
< ? php $this -> metabox_tracks_field_controls ( 'top' , $object -> ID ); ?>
2022-04-17 00:39:10 +00:00
< ? php $container_classes = apply_filters ( 'audioigniter_metabox_tracks_container_classes' , array ( 'ai-fields-container' ) ); ?>
< div class = " <?php echo esc_attr( implode( ' ', $container_classes ) ); ?> " >
< ? php
if ( ! empty ( $tracks ) ) {
foreach ( $tracks as $track ) {
$this -> metabox_tracks_repeatable_track_field ( $track );
}
} else {
$this -> metabox_tracks_repeatable_track_field ();
}
?>
</ div >
2022-08-19 16:15:57 +00:00
< ? php $this -> metabox_tracks_field_controls ( 'bottom' , $object -> ID ); ?>
2022-04-17 00:39:10 +00:00
</ div >
< ? php $this -> metabox_tracks_footer (); ?>
< ? php
}
/**
* Echoes the Tracks metabox header .
*
* @ since 1.0 . 0
*/
protected function metabox_tracks_header () {
?>
< div class = " ai-header ai-brand-module " >
< div class = " ai-row " >
< div class = " ai-col-left " >
< a href = " https://www.cssigniter.com/plugins/audioigniter?utm_source=dashboard&utm_medium=link&utm_content=audioigniter&utm_campaign=logo " target = " _blank " class = " ai-logo " >
< img
src = " <?php echo esc_url( $this->plugin_url () . 'assets/images/logo.svg' ); ?> "
alt = " <?php esc_attr_e( 'AudioIgniter Logo', 'audioigniter' ); ?> "
>
</ a >
</ div >
< ? php if ( apply_filters ( 'audioigniter_metabox_tracks_show_upgrade_button' , true ) ) : ?>
< div class = " ai-col-right " >
< div class = " ai-brand-module-actions " >
< a href = " https://www.cssigniter.com/plugins/audioigniter?utm_source=dashboard&utm_medium=link&utm_content=audioigniter&utm_campaign=upgrade-pro " class = " ai-btn ai-btn-green " target = " _blank " >
< ? php esc_html_e ( 'Upgrade to Pro' , 'audioigniter' ); ?>
</ a >
</ div >
</ div >
< ? php endif ; ?>
</ div >
</ div >
< ? php
}
/**
* Echoes the Tracks metabox footer .
*
* @ since 1.0 . 0
*/
protected function metabox_tracks_footer () {
?>
< div class = " ai-footer ai-brand-module " >
< div class = " ai-row " >
< div class = " ai-col-left " >
< ul class = " ai-list-inline ai-footer-links " >
< ? php
$links = apply_filters ( 'audioigniter_metabox_tracks_footer_links' , array (
'support' => array (
'title' => __ ( 'Support' , 'audioigniter' ),
'url' => 'https://wordpress.org/support/plugin/audioigniter' ,
),
'documentation' => array (
'title' => __ ( 'Documentation' , 'audioigniter' ),
'url' => 'https://www.cssigniter.com/docs/audioigniter/' ,
),
'rate_plugin' => array (
'title' => __ ( 'Rate this plugin' , 'audioigniter' ),
'url' => 'https://wordpress.org/support/view/plugin-reviews/audioigniter' ,
),
) );
foreach ( $links as $link ) {
if ( empty ( $link [ 'url' ] ) || empty ( $link [ 'title' ] ) ) {
continue ;
}
echo sprintf ( '<li><a href="%s" target="_blank">%s</a></li>' ,
esc_url ( $link [ 'url' ] ),
esc_html ( $link [ 'title' ] )
);
}
?>
</ ul >
</ div >
< div class = " ai-col-right " >
< ? php
$url = 'https://www.cssigniter.com/plugins/audioigniter?utm_source=dashboard&utm_medium=link&utm_content=audioigniter&utm_campaign=footer-link' ;
/* translators: %s is a URL. */
$copy = sprintf ( __ ( 'Thank you for creating with <a href="%s" target="_blank">AudioIgniter</a>' , 'audioigniter' ),
esc_url ( $url )
);
?>
< div class = " ai-brand-module-actions " >
< p class = " ai-note " >< ? php echo wp_kses ( $copy , array ( 'a' => array ( 'href' => true , 'target' => true ) ) ); ?> </p>
</ div >
</ div >
</ div >
</ div >
< ? php
}
protected function metabox_tracks_repeatable_track_field ( $track = array () ) {
$track = wp_parse_args ( $track , self :: get_default_track_values () );
2022-08-19 16:15:57 +00:00
$cover_id = $track [ 'cover_id' ];
$title = $track [ 'title' ];
$artist = $track [ 'artist' ];
$track_url = $track [ 'track_url' ];
$buy_link = $track [ 'buy_link' ];
$download_url = $track [ 'download_url' ];
$download_uses_track_url = ( int ) $track [ 'download_uses_track_url' ];
2022-04-17 00:39:10 +00:00
$cover_url = wp_get_attachment_image_src ( intval ( $cover_id ), 'thumbnail' );
if ( ! empty ( $cover_url [ 0 ] ) ) {
$cover_url = $cover_url [ 0 ];
$cover_data = wp_prepare_attachment_for_js ( intval ( $cover_id ) );
} else {
$cover_url = '' ;
$cover_data = '' ;
}
$uid = uniqid ();
$field_classes = apply_filters ( 'audioigniter_metabox_track_classes' , array ( 'ai-field-repeatable' ), $track_url );
?>
< div class = " <?php echo esc_attr( implode( ' ', $field_classes ) ); ?> " data - uid = " <?php echo esc_attr( $uid ); ?> " >
< div class = " ai-field-head " >
< ? php do_action ( 'audioigniter_metabox_tracks_repeatable_track_field_before_title' ); ?>
< span class = " ai-field-title " >< ? php echo wp_kses ( $title , array () ); ?> </span>
< button type = " button " class = " ai-field-toggle button-link " >
< span class = " screen-reader-text " >
< ? php esc_html_e ( 'Toggle track visibility' , 'audioigniter' ); ?>
</ span >
< span class = " toggle-indicator " ></ span >
</ button >
</ div >
< div class = " ai-field-container " >
< div class = " ai-field-cover " >
< a href = " # " class = " ai-field-upload-cover <?php echo ! empty( $cover_url ) ? 'ai-has-cover' : ''; ?> " >
< span class = " ai-remove-cover " >
< span class = " screen-reader-text " >
< ? php esc_html_e ( 'Remove Cover Image' , 'audioigniter' ); ?>
</ span >
< span class = " dashicons dashicons-no-alt " ></ span >
</ span >
< ? php if ( ! empty ( $cover_url ) ) : ?>
< img src = " <?php echo esc_url( $cover_url ); ?> " alt = " <?php echo esc_attr( $cover_data['alt'] ); ?> " >
< ? php else : ?>
< img src = " # " alt = " " >
< ? php endif ; ?>
< div class = " ai-field-cover-placeholder " >
< span class = " ai-cover-prompt " >
< ? php esc_html_e ( 'Upload Cover' , 'audioigniter' ); ?>
</ span >
</ div >
</ a >
< input
type = " hidden "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-cover_id "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][cover_id] "
value = " <?php echo esc_attr( $cover_id ); ?> "
/>
</ div >
< div class = " ai-field-split " >
< div class = " ai-form-field " >
< label
for = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-title "
class = " screen-reader-text " >
< ? php esc_html_e ( 'Title' , 'audioigniter' ); ?>
</ label >
< input
type = " text "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-title "
class = " ai-track-title "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][title] "
placeholder = " <?php esc_attr_e( 'Title', 'audioigniter' ); ?> "
value = " <?php echo esc_attr( $title ); ?> "
/>
</ div >
< div class = " ai-form-field " >
< label
for = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-artist "
class = " screen-reader-text " >
< ? php esc_html_e ( 'Artist' , 'audioigniter' ); ?>
</ label >
< input
type = " text "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-artist "
class = " ai-track-artist "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][artist] "
placeholder = " <?php esc_attr_e( 'Artist', 'audioigniter' ); ?> "
value = " <?php echo esc_attr( $artist ); ?> "
/>
</ div >
< div class = " ai-form-field " >
< label
for = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-buy_link "
class = " screen-reader-text " >
< ? php esc_html_e ( 'Buy link' , 'audioigniter' ); ?>
</ label >
< input
type = " text "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-buy_link "
class = " ai-track-buy-link "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][buy_link] "
placeholder = " <?php esc_attr_e( 'Buy link', 'audioigniter' ); ?> "
value = " <?php echo esc_url( $buy_link ); ?> "
/>
</ div >
< ? php do_action ( 'audioigniter_metabox_tracks_repeatable_track_fields_column_1' , $track , $uid ); ?>
</ div >
< div class = " ai-field-split " >
< div class = " ai-form-field " >
< label
for = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-track_url "
class = " screen-reader-text " >
< ? php esc_html_e ( 'Audio file or radio stream' , 'audioigniter' ); ?>
</ label >
< div class = " ai-form-field-addon " >
< input
type = " text "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-track_url "
class = " ai-track-url "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][track_url] "
placeholder = " <?php esc_attr_e( 'Audio file or radio stream', 'audioigniter' ); ?> "
value = " <?php echo esc_url( $track_url ); ?> "
/>
< button type = " button " class = " button ai-upload " >
< ? php esc_html_e ( 'Upload' , 'audioigniter' ); ?>
</ button >
< ? php do_action ( 'audioigniter_metabox_tracks_repeatable_track_field_after_track_upload_button' ); ?>
</ div >
</ div >
< div class = " ai-form-field " >
< label
for = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-download_url "
class = " screen-reader-text " >
< ? php esc_html_e ( 'Download URL' , 'audioigniter' ); ?>
</ label >
< input
type = " text "
id = " ai_playlist_tracks-<?php echo esc_attr( $uid ); ?>-download_url "
class = " ai-track-download-url "
name = " ai_playlist_tracks[<?php echo esc_attr( $uid ); ?>][download_url] "
placeholder = " <?php esc_attr_e( 'Download URL', 'audioigniter' ); ?> "
value = " <?php echo esc_url( $download_url ); ?> "
2022-08-19 16:15:57 +00:00
< ? php if ( $download_uses_track_url ) : ?>
disabled
< ? php endif ; ?>
2022-04-17 00:39:10 +00:00
/>
2022-08-19 16:15:57 +00:00
< ? php do_action ( 'audioigniter_metabox_tracks_repeatable_track_field_after_download_url_button' , $track , $uid ); ?>
2022-04-17 00:39:10 +00:00
</ div >
< ? php do_action ( 'audioigniter_metabox_tracks_repeatable_track_fields_column_2' , $track , $uid ); ?>
< button type = " button " class = " button ai-remove-field " >
< span class = " dashicons dashicons-dismiss " ></ span >
< ? php esc_html_e ( 'Remove Track' , 'audioigniter' ); ?>
</ button >
</ div >
</ div >
</ div >
< ? php
}
2022-08-19 16:15:57 +00:00
protected function metabox_tracks_field_controls ( $location , $post_id ) {
2022-04-17 00:39:10 +00:00
?>
< div class = " ai-field-controls-wrap " >
< div class = " ai-field-controls " >
< button type = " button " class = " button ai-add-field ai-add-field-<?php echo esc_attr( $location ); ?> " >
< span class = " dashicons dashicons-plus-alt " ></ span >
< ? php esc_html_e ( 'Add Track' , 'audioigniter' ); ?>
</ button >
2022-08-19 16:15:57 +00:00
< ? php do_action ( 'audioigniter_metabox_tracks_field_controls' , $location , $post_id ); ?>
2022-04-17 00:39:10 +00:00
< button type = " button " class = " button ai-remove-all-fields " >
< span class = " dashicons dashicons-dismiss " ></ span >
< ? php esc_html_e ( 'Clear Playlist' , 'audioigniter' ); ?>
</ button >
</ div >
< div class = " ai-field-controls-visibility " >
< a href = " # " class = " ai-fields-expand-all " >
< ? php esc_html_e ( 'Expand All' , 'audioigniter' ); ?>
</ a >
< a href = " # " class = " ai-fields-collapse-all " >
< ? php esc_html_e ( 'Collapse All' , 'audioigniter' ); ?>
</ a >
</ div >
</ div >
< ? php
}
/**
* Echoes the Settings metabox markup .
*
* @ version 1.4 . 0
* @ since 1.0 . 0
*
* @ param WP_Post $object
* @ param array $box
*/
public function metabox_settings ( $object , $box ) {
$type = $this -> get_post_meta ( $object -> ID , '_audioigniter_player_type' , 'full' );
$numbers = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_numbers' , 1 );
$numbers_reverse = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_numbers_reverse' , 0 );
$thumb = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_covers' , 1 );
$active_thumb = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_active_cover' , 1 );
$artist = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_artist' , 1 );
$buy_links = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_buy_links' , 1 );
$buy_links_new_target = $this -> get_post_meta ( $object -> ID , '_audioigniter_buy_links_new_target' , 1 );
$cycle_tracks = $this -> get_post_meta ( $object -> ID , '_audioigniter_cycle_tracks' , 0 );
$track_listing = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_track_listing' , 1 );
$track_listing_allow_toggle = $this -> get_post_meta ( $object -> ID , '_audioigniter_allow_track_listing_toggle' , 1 );
$track_listing_allow_loop = $this -> get_post_meta ( $object -> ID , '_audioigniter_allow_track_listing_loop' , 1 );
$credit = $this -> get_post_meta ( $object -> ID , '_audioigniter_show_credit' , 0 );
$limit_tracklisting_height = $this -> get_post_meta ( $object -> ID , '_audioigniter_limit_tracklisting_height' , 1 );
$tracklisting_height = $this -> get_post_meta ( $object -> ID , '_audioigniter_tracklisting_height' , 185 );
$volume = $this -> get_post_meta ( $object -> ID , '_audioigniter_volume' , 100 );
$max_width = $this -> get_post_meta ( $object -> ID , '_audioigniter_max_width' );
wp_nonce_field ( basename ( __FILE__ ), $object -> post_type . '_nonce' );
?>
< div class = " ai-module ai-module-settings " >
< div class = " ai-form-field-group " >
< h3 class = " ai-form-field-group-title " >< ? php esc_html_e ( 'Player & Track listing' , 'audioigniter' ); ?> </h3>
< div class = " ai-form-field " >
< div class = " ai-player-type-message ai-info-box " ></ div >
< label for = " _audioigniter_player_type " >
< ? php esc_html_e ( 'Player Type' , 'audioigniter' ); ?>
</ label >
< select
class = " widefat ai-form-select-player-type "
id = " _audioigniter_player_type "
name = " _audioigniter_player_type "
>
< ? php foreach ( $this -> get_player_types () as $player_key => $player_type ) : ?>
< option
value = " <?php echo esc_attr( $player_key ); ?> "
data - no - support = " <?php echo esc_attr( implode( ', ', $player_type['no-support'] ) ); ?> "
data - info = " <?php echo esc_attr( $player_type['info'] ); ?> "
< ? php selected ( $type , $player_key ); ?>
>
< ? php echo wp_kses ( $player_type [ 'label' ], 'strip' ); ?>
</ option >
< ? php endforeach ; ?>
</ select >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_track_listing "
name = " _audioigniter_show_track_listing "
value = " 1 " < ? php checked ( $track_listing , true ); ?>
/>
< label for = " _audioigniter_show_track_listing " >
< ? php esc_html_e ( 'Show track listing by default' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_allow_track_listing_toggle "
name = " _audioigniter_allow_track_listing_toggle "
value = " 1 " < ? php checked ( $track_listing_allow_toggle , true ); ?>
/>
< label for = " _audioigniter_allow_track_listing_toggle " >
< ? php esc_html_e ( 'Show track listing visibility toggle button' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_numbers_revese "
name = " _audioigniter_show_numbers_reverse "
value = " 1 " < ? php checked ( $numbers_reverse , true ); ?>
/>
< label for = " _audioigniter_show_numbers_revese " >
< ? php esc_html_e ( 'Reverse track order' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< label for = " _audioigniter_volume " >
< ? php esc_html_e ( 'Starting volume' , 'audioigniter' ); ?>
</ label >
< input
type = " number "
min = " 0 "
max = " 100 "
step = " 10 "
id = " _audioigniter_volume "
class = " ai-track-title "
name = " _audioigniter_volume "
placeholder = " <?php esc_attr_e( '0-100', 'audioigniter' ); ?> "
value = " <?php echo esc_attr( $volume ); ?> "
/>
< p class = " ai-field-help " >
< ? php esc_html_e ( 'Enter a value between 0 and 100 in increments of 10' , 'audioigniter' ); ?>
</ p >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_limit_tracklisting_height "
name = " _audioigniter_limit_tracklisting_height "
value = " 1 " < ? php checked ( $limit_tracklisting_height , true ); ?>
/>
< label for = " _audioigniter_limit_tracklisting_height " >
< ? php esc_html_e ( 'Limit track listing height' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< label for = " _audioigniter_tracklisting_height " >
< ? php esc_html_e ( 'Track listing height' , 'audioigniter' ); ?>
</ label >
< input
type = " number "
min = " 10 "
step = " 5 "
id = " _audioigniter_tracklisting_height "
class = " ai-track-title "
name = " _audioigniter_tracklisting_height "
placeholder = " <?php esc_attr_e( 'Track listing height', 'audioigniter' ); ?> "
value = " <?php echo esc_attr( $tracklisting_height ); ?> "
/>
< p class = " ai-field-help " >
< ? php esc_html_e ( 'Set a number of pixels' , 'audioigniter' ); ?>
</ p >
</ div >
< div class = " ai-form-field " >
< label for = " _audioigniter_max_width " >
< ? php esc_html_e ( 'Maximum player width' , 'audioigniter' ); ?>
</ label >
< input
type = " number "
id = " _audioigniter_max_width "
class = " ai-track-title "
name = " _audioigniter_max_width "
placeholder = " <?php esc_attr_e( 'Automatic width', 'audioigniter' ); ?> "
value = " <?php echo esc_attr( $max_width ); ?> "
/>
< p class = " ai-field-help " >
< ? php esc_html_e ( 'Set a number of pixels, or leave empty to automatically cover 100% of the available area (recommended).' , 'audioigniter' ); ?>
</ p >
</ div >
< ? php do_action ( 'audioigniter_metabox_settings_group_player_track_listing_fields' , $object , $box ); ?>
</ div >
< div class = " ai-form-field-group " >
< h3 class = " ai-form-field-group-title " >< ? php esc_html_e ( 'Tracks' , 'audioigniter' ); ?> </h3>
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_numbers "
name = " _audioigniter_show_numbers "
value = " 1 " < ? php checked ( $numbers , true ); ?>
/>
< label for = " _audioigniter_show_numbers " >
< ? php esc_html_e ( 'Show track numbers in tracklist' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_covers "
name = " _audioigniter_show_covers "
value = " 1 " < ? php checked ( $thumb , true ); ?>
/>
< label for = " _audioigniter_show_covers " >
< ? php esc_html_e ( 'Show track covers in tracklist' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_active_cover "
name = " _audioigniter_show_active_cover "
value = " 1 " < ? php checked ( $active_thumb , true ); ?>
/>
< label for = " _audioigniter_show_active_cover " >
< ? php esc_html_e ( " Show active track's cover " , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_artist "
name = " _audioigniter_show_artist "
value = " 1 " < ? php checked ( $artist , true ); ?>
/>
< label for = " _audioigniter_show_artist " >
< ? php esc_html_e ( 'Show artist names' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_buy_links "
name = " _audioigniter_show_buy_links "
value = " 1 " < ? php checked ( $buy_links , true ); ?>
/>
< label for = " _audioigniter_show_buy_links " >
< ? php esc_html_e ( 'Show track extra buttons (buy link, download button etc)' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_buy_links_new_target "
name = " _audioigniter_buy_links_new_target "
value = " 1 " < ? php checked ( $buy_links_new_target , true ); ?>
/>
< label for = " _audioigniter_buy_links_new_target " >
< ? php esc_html_e ( 'Open buy links in new window' , 'audioigniter' ); ?>
</ label >
</ div >
< ? php do_action ( 'audioigniter_metabox_settings_group_tracks_fields' , $object , $box ); ?>
</ div >
< div class = " ai-form-field-group " >
< h3 class = " ai-form-field-group-title " >< ? php esc_html_e ( 'Track & Track listing repeat' , 'audioigniter' ); ?> </h3>
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_cycle_tracks "
name = " _audioigniter_cycle_tracks "
value = " 1 " < ? php checked ( $cycle_tracks , true ); ?>
/>
< label for = " _audioigniter_cycle_tracks " >
< ? php esc_html_e ( 'Repeat track listing enabled by default' , 'audioigniter' ); ?>
</ label >
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_allow_track_listing_loop "
name = " _audioigniter_allow_track_listing_loop "
value = " 1 " < ? php checked ( $track_listing_allow_loop , true ); ?>
/>
< label for = " _audioigniter_allow_track_listing_loop " >
< ? php esc_html_e ( 'Show track listing repeat toggle button' , 'audioigniter' ); ?>
</ label >
</ div >
< ? php do_action ( 'audioigniter_metabox_settings_group_player_track_track_listing_repeat_fields' , $object , $box ); ?>
</ div >
< div class = " ai-form-field " >
< input
type = " checkbox "
class = " ai-checkbox "
id = " _audioigniter_show_credit "
name = " _audioigniter_show_credit "
value = " 1 " < ? php checked ( $credit , true ); ?>
/>
< label for = " _audioigniter_show_credit " >
< ? php esc_html_e ( 'Show "Powered by AudioIgniter" link' , 'audioigniter' ); ?>
</ label >
< p class = " ai-field-help " >
< ? php esc_html_e ( " We've put a great deal of effort into building this plugin. If you feel like it, let others know about it by enabling this option. " , 'audioigniter' ); ?>
</ p >
</ div >
</ div >
< ? php
}
/**
* Echoes the Shortcode metabox markup .
*
* @ since 1.0 . 0
*
* @ param WP_Post $object
* @ param array $box
*/
public function metabox_shortcode ( $object , $box ) {
?>
< div class = " ai-module ai-module-shortcode " >
< div class = " ai-form-field " >
< label for = " ai_shortcode " >
< ? php esc_html_e ( 'Grab the shortcode' , 'audioigniter' ); ?>
</ label >
< input
type = " text "
class = " code "
id = " ai_shortcode "
name = " ai_shortcode "
value = " <?php echo esc_attr( sprintf( '[ai_playlist id= " % s " ]', $object->ID ) ); ?> "
/>
</ div >
</ div >
< ? php
}
/**
* Returns the available player types and their data .
*
* @ version 1.4 . 0
* @ since 1.4 . 0
*
* @ return array
*/
public function get_player_types () {
// Each player type has a number of settings that it might not support
// E.g. "Simple Player" does not support track listing visibility, covers
// and others. Provide every setting that's not supported based on the `name`
// attribute of each setting input (input, select, textarea), *without
// the _audioigniter_ prefix* in the `no-support` array.
// To allow support for every setting simply set `no-support` to an empty array.
$player_types = array (
'full' => array (
'label' => __ ( 'Full Player' , 'audioigniter' ),
'no-support' => array (),
'info' => '' ,
),
'simple' => array (
'label' => __ ( 'Simple Player' , 'audioigniter' ),
'no-support' => array (
'show_track_listing' ,
'show_covers' ,
'show_active_cover' ,
'limit_tracklisting_height' ,
'tracklisting_height' ,
'allow_track_listing_loop' ,
'allow_track_listing_toggle' ,
'skip_amount' ,
'initial_track' ,
),
'info' => '' ,
),
);
return apply_filters ( 'audioigniter_player_types' , $player_types );
}
public function save_post ( $post_id ) {
if ( defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return false ; }
if ( isset ( $_POST [ 'post_view' ] ) && 'list' === $_POST [ 'post_view' ] ) { return false ; }
if ( ! isset ( $_POST [ 'post_type' ] ) || $_POST [ 'post_type' ] !== $this -> post_type ) { return false ; }
if ( ! isset ( $_POST [ $this -> post_type . '_nonce' ] ) || ! wp_verify_nonce ( $_POST [ $this -> post_type . '_nonce' ], basename ( __FILE__ ) ) ) { return false ; }
$post_type_obj = get_post_type_object ( $this -> post_type );
if ( ! current_user_can ( $post_type_obj -> cap -> edit_post , $post_id ) ) { return false ; }
update_post_meta ( $post_id , '_audioigniter_tracks' , $this -> sanitizer -> metabox_playlist ( $_POST [ 'ai_playlist_tracks' ], $post_id ) );
update_post_meta ( $post_id , '_audioigniter_show_numbers' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_numbers' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_numbers_reverse' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_numbers_reverse' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_covers' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_covers' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_active_cover' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_active_cover' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_artist' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_artist' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_buy_links' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_buy_links' ] ) );
update_post_meta ( $post_id , '_audioigniter_buy_links_new_target' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_buy_links_new_target' ] ) );
update_post_meta ( $post_id , '_audioigniter_cycle_tracks' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_cycle_tracks' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_track_listing' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_track_listing' ] ) );
update_post_meta ( $post_id , '_audioigniter_allow_track_listing_toggle' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_allow_track_listing_toggle' ] ) );
update_post_meta ( $post_id , '_audioigniter_allow_track_listing_loop' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_allow_track_listing_loop' ] ) );
update_post_meta ( $post_id , '_audioigniter_player_type' , $this -> sanitizer -> player_type ( $_POST [ '_audioigniter_player_type' ] ) );
update_post_meta ( $post_id , '_audioigniter_show_credit' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_show_credit' ] ) );
update_post_meta ( $post_id , '_audioigniter_limit_tracklisting_height' , $this -> sanitizer -> checkbox_ref ( $_POST [ '_audioigniter_limit_tracklisting_height' ] ) );
update_post_meta ( $post_id , '_audioigniter_tracklisting_height' , intval ( $_POST [ '_audioigniter_tracklisting_height' ] ) );
update_post_meta ( $post_id , '_audioigniter_volume' , intval ( $_POST [ '_audioigniter_volume' ] ) );
update_post_meta ( $post_id , '_audioigniter_max_width' , $this -> sanitizer -> intval_or_empty ( $_POST [ '_audioigniter_max_width' ] ) );
/**
* @ since 1.4 . 0
*/
do_action ( 'audioigniter_save_post' , $post_id );
}
public static function get_default_track_values () {
return apply_filters ( 'audioigniter_default_track_values' , array (
2022-08-19 16:15:57 +00:00
'cover_id' => '' ,
'title' => '' ,
'artist' => '' ,
'track_url' => '' ,
'buy_link' => '' ,
'download_url' => '' ,
'download_uses_track_url' => 0 ,
2022-04-17 00:39:10 +00:00
) );
}
public function register_image_sizes () {
add_image_size ( 'audioigniter_cover' , 560 , 560 , true );
}
public function register_widgets () {
$widgets = apply_filters ( 'audioigniter_register_widgets' , array () );
foreach ( $widgets as $class => $file ) {
require_once ( $file );
register_widget ( $class );
}
}
public function register_shortcodes () {
add_shortcode ( 'ai_playlist' , array ( $this , 'shortcode_ai_playlist' ) );
}
/**
* Checks whether passed post object or ID is an AudioIgniter playlist .
*
* @ version 1.4 . 0
* @ since 1.4 . 0
*
* @ param int | WP_Post $post Post ID or post object .
*
* @ return bool
*/
public function is_playlist ( $post ) {
$post = get_post ( $post );
if ( is_wp_error ( $post ) || empty ( $post ) || is_null ( $post ) || $post -> post_type !== $this -> post_type ) {
return false ;
}
return true ;
}
/**
* Returns a data attributes array for the given playlist .
*
* @ version 1.4 . 0
* @ since 1.4 . 0
*
* @ param int $post_id Post ID .
*
* @ return array
*/
public function get_playlist_data_attributes_array ( $post_id ) {
$post_id = intval ( $post_id );
if ( ! $this -> is_playlist ( $post_id ) ) {
return array ();
}
$attrs = array (
'data-player-type' => $this -> get_post_meta ( $post_id , '_audioigniter_player_type' , 'full' ),
'data-tracks-url' => add_query_arg ( array ( 'audioigniter_playlist_id' => $post_id ), home_url ( '/' ) ),
'data-display-track-no' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_numbers' , 1 ) ),
'data-reverse-track-order' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_numbers_reverse' , 0 ) ),
'data-display-tracklist-covers' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_covers' , 1 ) ),
'data-display-active-cover' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_active_cover' , 1 ) ),
'data-display-artist-names' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_artist' , 1 ) ),
'data-display-buy-buttons' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_buy_links' , 1 ) ),
'data-buy-buttons-target' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_buy_links_new_target' , 1 ) ),
'data-cycle-tracks' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_cycle_tracks' , 0 ) ),
'data-display-credits' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_credit' , 1 ) ),
'data-display-tracklist' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_show_track_listing' , 1 ) ),
'data-allow-tracklist-toggle' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_allow_track_listing_toggle' , 1 ) ),
'data-allow-tracklist-loop' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_allow_track_listing_loop' , 1 ) ),
'data-limit-tracklist-height' => $this -> convert_bool_string ( $this -> get_post_meta ( $post_id , '_audioigniter_limit_tracklisting_height' , 1 ) ),
'data-volume' => intval ( $this -> get_post_meta ( $post_id , '_audioigniter_volume' , 100 ) ),
'data-tracklist-height' => intval ( $this -> get_post_meta ( $post_id , '_audioigniter_tracklisting_height' , 185 ) ),
'data-max-width' => $this -> get_post_meta ( $post_id , '_audioigniter_max_width' ),
);
return apply_filters ( 'audioigniter_get_playlist_data_attributes_array' , $attrs , $post_id );
}
/**
* Returns the output of the [ ai_playlist ] shortcode .
*
* @ version 1.4 . 0
* @ since 1.0 . 0
*
* @ param array $atts The shortcode attributes .
* @ param string $content Content , when used with a shortcode closing tag .
* @ param string $tag The shortcode name used to reach this function .
*
* @ return string
*/
public function shortcode_ai_playlist ( $atts , $content , $tag ) {
$atts = shortcode_atts ( array (
'id' => '' ,
'class' => '' ,
), $atts , $tag );
$id = intval ( $atts [ 'id' ] );
$class_name = $atts [ 'class' ];
if ( ! $this -> is_playlist ( $id ) ) {
return '' ;
}
$post = get_post ( $id );
$params = apply_filters ( 'audioigniter_shortcode_data_attributes_array' , $this -> get_playlist_data_attributes_array ( $id ), $id , $post );
$params = array_filter ( $params , array ( $this -> sanitizer , 'array_filter_empty_null' ) );
$params = $this -> sanitizer -> html_data_attributes_array ( $params );
// Returning a truthy value from the filter, will short-circuit execution of the shortcode.
if ( false !== apply_filters ( 'audioigniter_shortcode_shortcircuit' , false , $id , $post , $params ) ) {
return '' ;
}
$data = '' ;
foreach ( $params as $attribute => $value ) {
$data .= sprintf ( '%s="%s" ' , sanitize_key ( $attribute ), esc_attr ( $value ) );
}
$player_classes = array_merge ( array (
'audioigniter-root' ,
), explode ( ' ' , $class_name ) );
$output = sprintf ( '<div id="audioigniter-%s" class="%s" %s></div>' ,
esc_attr ( $id ),
esc_attr ( implode ( ' ' , $player_classes ) ),
$data
);
return $output ;
}
public function convert_bool_string ( $value ) {
if ( $value ) {
return 'true' ;
}
return 'false' ;
}
public function register_playlist_endpoint () {
add_rewrite_tag ( '%audioigniter_playlist_id%' , '([0-9]+)' );
add_rewrite_rule ( '^audioigniter/playlist/([0-9]+)/?' , 'index.php?audioigniter_playlist_id=$matches[1]' , 'bottom' );
}
public function handle_playlist_endpoint () {
global $wp_query ;
$playlist_id = $wp_query -> get ( 'audioigniter_playlist_id' );
if ( empty ( $playlist_id ) ) {
return ;
}
$playlist_id = intval ( $playlist_id );
$post = get_post ( $playlist_id );
if ( empty ( $post ) || $post -> post_type !== $this -> post_type ) {
wp_send_json_error ( __ ( " ID doesn't match a playlist " , 'audioigniter' ) );
}
$response = array ();
$tracks = $this -> get_post_meta ( $playlist_id , '_audioigniter_tracks' , array () );
if ( empty ( $tracks ) ) {
$tracks = array ();
}
foreach ( $tracks as $track ) {
$track = wp_parse_args ( $track , self :: get_default_track_values () );
$track_response = array ();
$track_response [ 'title' ] = $track [ 'title' ];
$track_response [ 'subtitle' ] = $track [ 'artist' ];
$track_response [ 'audio' ] = $track [ 'track_url' ];
$track_response [ 'buyUrl' ] = $track [ 'buy_link' ];
2022-08-19 16:15:57 +00:00
$track_response [ 'downloadUrl' ] = $track [ 'download_uses_track_url' ] ? $track [ 'track_url' ] : $track [ 'download_url' ];
2022-04-17 00:39:10 +00:00
$track_response [ 'downloadFilename' ] = $this -> get_filename_from_url ( $track [ 'download_url' ] );
if ( ! $track_response [ 'downloadFilename' ] ) {
$track_response [ 'downloadFilename' ] = $track_response [ 'downloadUrl' ];
}
$cover_url = wp_get_attachment_image_src ( intval ( $track [ 'cover_id' ] ), 'audioigniter_cover' );
if ( ! empty ( $cover_url [ 0 ] ) ) {
$cover_url = $cover_url [ 0 ];
} else {
$cover_url = '' ;
}
$track_response [ 'cover' ] = $cover_url ;
$track_response = apply_filters ( 'audioigniter_playlist_endpoint_track' , $track_response , $track , $playlist_id , $post );
$response [] = $track_response ;
}
wp_send_json ( $response );
}
2022-08-19 16:15:57 +00:00
public function filter_posts_columns ( $columns ) {
$date = $columns [ 'date' ];
unset ( $columns [ 'date' ] );
$columns [ 'shortcode' ] = __ ( 'Shortcode' , 'audioigniter' );
$columns [ 'date' ] = $date ;
return $columns ;
}
public function add_custom_columns ( $column , $post_id ) {
if ( 'shortcode' === $column ) {
?> <input type="text" class="code" value="<?php echo esc_attr( sprintf( '[ai_playlist id="%s"]', $post_id ) ); ?>"><?php
}
}
2022-04-17 00:39:10 +00:00
function get_filename_from_url ( $url ) {
$struct = wp_parse_url ( $url );
if ( ! empty ( $struct [ 'path' ] ) ) {
return basename ( $struct [ 'path' ] );
}
return '' ;
}
public function get_all_playlists ( $orderby = 'date' , $order = 'DESC' ) {
$q = new WP_Query ( array (
'post_type' => $this -> post_type ,
'posts_per_page' => - 1 ,
'orderby' => $orderby ,
'order' => $order ,
) );
return $q -> posts ;
}
public function get_post_meta ( $post_id , $key , $default = '' ) {
$keys = get_post_custom_keys ( $post_id );
$value = $default ;
if ( is_array ( $keys ) && in_array ( $key , $keys , true ) ) {
$value = get_post_meta ( $post_id , $key , true );
}
return $value ;
}
public function plugin_activated () {
if ( ! current_user_can ( 'activate_plugins' ) ) {
return ;
}
$this -> register_post_types ();
do_action ( 'audioigniter_activated' );
flush_rewrite_rules ();
}
public function plugin_deactivated () {
if ( ! current_user_can ( 'activate_plugins' ) ) {
return ;
}
unregister_post_type ( $this -> post_type );
do_action ( 'audioigniter_deactivated' );
flush_rewrite_rules ();
}
public static function plugin_basename () {
return plugin_basename ( __FILE__ );
}
public function plugin_url () {
return self :: $plugin_url ;
}
public function plugin_path () {
return self :: $plugin_path ;
}
}
/**
* Main instance of AudioIgniter .
*
* Returns the working instance of AudioIgniter . No need for globals .
*
* @ since 1.0 . 0
* @ return AudioIgniter
*/
function AudioIgniter () {
return AudioIgniter :: instance ();
}
add_action ( 'plugins_loaded' , array ( AudioIgniter (), 'plugin_setup' ) );
register_activation_hook ( __FILE__ , array ( AudioIgniter (), 'plugin_activated' ) );
register_deactivation_hook ( __FILE__ , array ( AudioIgniter (), 'plugin_deactivated' ) );