__('High quality', '1player'), 'sd' => __('Low quality', '1player'), 'h264' => __('MP4 h264', '1player'), 'webm' => __('WebM', '1player'), 'flv' => __('FLV', '1player'), 'flash' => __('Flash', '1player'), 'html5' => __('HTML5', '1player'), 'mp3' => __('MP3', '1player'), 'ogg' => __('OGG Vorbis', '1player'), ); $mime_types = array( 'h264' => 'video/mp4', 'webm' => 'video/webm', 'flv' => 'video/x-flv', 'mp3' => 'audio/mpeg', 'ogg' => 'audio/ogg', ); $options = get_option('player_video'); if($options['script'] != '') { $file = plugin_dir_path(__FILE__).'players/'.$options['script'].'/'.$options['script'].'.php'; if(is_file($file)) require_once($file); } $options = get_option('player_audio'); if($options['script'] != '') { $file = plugin_dir_path(__FILE__).'players/'.$options['script'].'/'.$options['script'].'.php'; if(is_file($file)) require_once($file); } } add_filter('upload_mimes', 'player_add_mime'); function player_add_mime($mimes){ $mimes['webm'] = 'video/webm'; return $mimes; } $options = get_option('player_video'); if(isset($options['width']) && isset($options['height'])){ if($options['controls'] == 'over') add_image_size('video-large', $options['width'], $options['height'], true); // grand poster de la vidéo else add_image_size('video-large', $options['width'], $options['height']-53, true); } // Ajouter l'extension webm à la liste des types vidéo add_filter('ext2type', 'player_add_video_type'); function player_add_video_type($types){ $types['video'][] = 'webm'; return $types; } add_shortcode('video', 'player_video_shortcode'); function player_video_shortcode($atts) { static $instance = 0; $instance++; $options = get_option('player_video'); extract(shortcode_atts(array( 'id' => '', 'src' => '', 'poster' => '', 'width' => $options['width'], 'height' => $options['height'], 'skin' => $options['skin'], 'autoplay' => false, 'loop' => false, 'controls' => $options['controls'], 'order' => 'ASC', 'orderby' => 'menu_order ID', 'include' => '', 'title' => '', 'legend' => '', 'description' => '', ), $atts)); $videos = array(); if($src != '') { // point to a source that is not linked to any attachment $videos[0] = array('poster' => $poster, 'title' => $title, 'legend' => $legend, 'description' => $description); if(preg_match('/flash/', $options['mode'])) $videos[0]['flash']['src'] = $src; if(preg_match('/html5/', $options['mode'])) $videos[0]['html5']['src'] = $src; } else { // a single attachment if($id != '' && player_is_video_attachment($id)) $attachments = array($id => get_post($id)); // a full playlist else if($include != ''){ $include = preg_replace( '/[^0-9,]+/', '', $include ); $_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'video', 'order' => $order, 'orderby' => $orderby) ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } uasort($attachments , 'player_sort_attachments' ); } if(!is_array($attachments)) return; foreach ( $attachments as $attachment ) { $metas = get_post_meta($attachment->ID, "1player", true); if($options['poster'] == 'attachment') { $image = wp_get_attachment_image_src($metas['poster'], 'video-large'); $poster = $image[0]; } else if($options['poster'] == 'post_thumbnail') { $image = wp_get_attachment_image_src(get_post_thumbnail_id($attachment->post_parent), 'video-large'); $poster = $image[0]; } $videos[] = array('poster' => $poster, 'title' => addslashes($attachment->post_title), 'legend' => addslashes($attachment->post_excerpt), 'description' => addslashes($attachment->post_content)); foreach(array('html5', 'flash') as $mode){ // gestion flash vs. html5 if(preg_match('/'.$mode.'/', $options['mode'])) { unset($hd); unset($src); $src = player_find_source($attachment->ID, 'sd', $mode); $hd = player_find_source($attachment->ID, 'hd', $mode); if($src == $hd) { unset($hd); } $videos[sizeof($videos)-1][$mode]['src'] = $src; if(isset($hd)) $videos[sizeof($videos)-1][$mode]['hd'] = $hd; } } } } $args = array( 'videos' => $videos, 'width' => $width, 'height' => $height, 'skin' => $skin, 'autoplay' => $autoplay, 'loop' => $loop, 'controls' => $controls, 'instance' => "video$instance", ); $action_done = false; if($options['script'] != '') { do_action($options['script'].'_video_render', $args); if(has_action($options['script'].'_video_render')) $action_done = true; } if(!$action_done) player_video_render($args); } // default player video rendering action function player_video_render($args){ global $mime_types; if(!isset($args['videos'][0]['html5'])) return; $attributes = ''; if($args['controls'] != 'none') $attributes .= " controls"; if($args['loop']) $attributes .= " loop"; if($args['autoplay']) $attributes .= " autoplay"; $poster = $args['videos'][0]['poster']; ?> '', 'src' => '', 'width' => $options['width'], 'height' => $options['height'], 'skin' => $options['skin'], 'autoplay' => false, 'loop' => false, 'order' => 'ASC', 'orderby' => 'menu_order ID', 'include' => '', 'title' => '', 'legend' => '', 'description' => '', ), $atts)); $audios = array(); if($src != '') { // point to a source that is not linked to any attachment $audio[0] = array('title' => $title, 'legend' => $legend, 'description' => $description); if(preg_match('/flash/', $options['mode'])) $audios[0]['flash']['src'] = $src; if(preg_match('/html5/', $options['mode'])) $audios[0]['html5']['src'] = $src; } else { // a single attachment if($id != '' && player_is_audio_attachment($id)) $attachments = array($id => get_post($id)); foreach ( $attachments as $attachment ) { $metas = get_post_meta($attachment->ID, "1player", true); $audios[] = array('title' => addslashes($attachment->post_title), 'legend' => addslashes($attachment->post_excerpt), 'description' => addslashes($attachment->post_content)); foreach(array('html5', 'flash') as $mode){ // gestion flash vs. html5 if(preg_match('/'.$mode.'/', $options['mode'])) { unset($src); $src = player_find_source($attachment->ID, 'sd', $mode); if(!isset($src)) $src = player_find_source($attachment->ID, 'hd', $mode); $audios[sizeof($audios)-1][$mode]['src'] = $src; } } } } $args = array( 'audios' => $audios, 'width' => $width, 'height' => $height, 'skin' => $skin, 'autoplay' => $autoplay, 'loop' => $loop, 'controls' => $controls, 'instance' => "audio$instance", ); $action_done = false; if($options['script'] != '') { do_action($options['script'].'_audio_render', $args); if(has_action($options['script'].'_audio_render')) $action_done = true; } if(!$action_done) player_audio_render($args); } // default player audio rendering action function player_audio_render($args){ $attributes = ''; $attributes .= " controls"; if($args['loop']) $attributes .= " loop"; if($args['autoplay']) $attributes .= " autoplay"; ?>post_mime_type, 0, 5) == 'video'; } function player_is_audio_attachment($post_id){ $post = get_post($post_id); return substr($post->post_mime_type, 0, 5) == 'audio'; } function player_sort_attachments($a, $b){ $parenta = get_post($a->post_parent); $parentb = get_post($b->post_parent); if($parenta->menu_order == $parentb->menu_order){ if($parenta->menu_order < $parentb->menu_order) return -1; else return 1; } else if($parenta->menu_order < $parentb->menu_order) { return -1; } else { return 1; } } function player_find_source($attachment_id, $quality='sd', $compatibility='html5'){ if($quality != 'hd') $quality = 'sd'; if($compatibility != 'flash') $compatibility = 'html5'; $metas = get_post_meta($attachment_id, "1player", true); $src = array(); if(isset($metas['src']) && isset($metas['src'][$quality])){ if(is_string($metas['src'][$quality]) && $metas['src'][$quality] != "") $src[] = array('src' => $metas['src'][$quality]); else { foreach($metas['src'][$quality] as $name => $format){ if(is_string($format) && $format != "") $src[] = array('src' => $format, 'compat' => $name); else if(isset($format[$compatibility]) && $format[$compatibility] != "") { $src[] = array('src' => $format[$compatibility], 'compat' => $name); } } } } // si aucune source SD n'est trouvée, chercher les sources HD if(sizeof($src) == 0 && $quality=='sd'){ $quality='hd'; if(isset($metas['src']) && isset($metas['src'][$quality])){ if(is_string($metas['src'][$quality]) && $metas['src'][$quality] != "") $src[] = array('src' => $metas['src'][$quality]); else { foreach($metas['src'][$quality] as $name => $format){ if(is_string($format) && $format != "") $src[] = array('src' => $format, 'compat' => $name); else if(isset($format[$compatibility]) && $format[$compatibility] != "") { $src[] = array('src' => $format[$compatibility], 'compat' => $name); } } } } } // if no source is found in metas if(sizeof($src) == 0){ $src[] = array('src' => wp_get_attachment_url($attachment_id), 'compat' => 'none'); } return $src; } /* ******************* BACKEND ******************* */ register_activation_hook(__FILE__, 'player_install'); function player_install() { // ajoute les options par défaut si elles n'existent pas encore add_option('player_video', array( 'skin' => '', 'height' => 300, 'width' => 400, 'versions' => array( array('hd', 'webm', 'html5'), array('sd', 'webm', 'html5'), array('hd', 'h264'), array('sd', 'h264') ), 'controls' => 'over', 'poster' => 'attachment', 'mode' => 'html5', 'script' => '' )); add_option('player_audio', array( 'skin' => '', 'versions' => array( array('sd', 'ogg', 'html5'), array('sd', 'mp3') ), 'mode' => 'html5', 'script' => '' )); } if ( is_admin() ){ add_action('admin_print_styles-options-media.php', 'player_print_options_assets'); function player_print_options_assets(){ global $labels; wp_enqueue_script('1player', plugins_url('js/1player.js', __FILE__), array('jquery')); wp_localize_script('1player', 'labels', $labels); wp_enqueue_style('1player', plugins_url('css/1player.css', __FILE__)); } add_action('admin_print_styles', 'player_print_dd_assets'); function player_print_dd_assets(){ wp_register_script("dropdown", plugins_url('msDropDown/jquery.dd.js', __FILE__ ), array('jquery'), '2.37.5'); wp_register_style('dropdown', plugins_url('msDropDown/dd.css', __FILE__)); } // page d'options add_action('admin_init', 'player_register_settings'); function player_register_settings() { add_settings_section('player_video_main', __('Video player','1player'), 'player_video_settings_section', 'media'); add_settings_section('player_audio_main', __('Audio player','1player'), 'player_audio_settings_section', 'media'); function player_video_settings_section(){} function player_audio_settings_section(){} add_settings_field('player_video_script', '', 'player_settings_video_script', 'media', 'player_video_main'); function player_settings_video_script(){ $options = get_option('player_video'); ?> '.__('Skin','1player').'', 'player_settings_video_skin', 'media', 'player_video_main'); function player_settings_video_skin(){ $options = get_option('player_video'); $skins = array("none" => __('Default skin', '1player')); if($options['script'] != '') $skins = apply_filters($options['script'].'_video_skins_list', $skins); ?> '.__('Controls','1player').'', 'player_settings_video_controls', 'media', 'player_video_main'); function player_settings_video_controls(){ $options = get_option('player_video'); $positions = array("over" => __('Over', '1player'), "none" => __('None', '1player')); if($options['script'] != '') $positions = apply_filters($options['script'].'_controls_positions_list', $positions); foreach($positions as $name => $position) : ?> '.__('Poster image','1player').'', 'player_settings_video_poster', 'media', 'player_video_main'); function player_settings_video_poster(){ $options = get_option('player_video'); ?> '.__('Video versions','1player').'', 'player_settings_video_versions', 'media', 'player_video_main'); function player_settings_video_versions(){ global $labels; $options = get_option('player_video'); if(!isset($options['versions']) || !is_array($options['versions'])) $options['versions'] = array(); ?>
__('HTML5 only', '1player')); if($options['script'] != '') $modes = apply_filters($options['script'].'_video_modes_list', $modes); foreach($modes as $name => $mode) : ?> '.__('Skin','1player').'', 'player_settings_audio_skin', 'media', 'player_audio_main'); function player_settings_audio_skin(){ $options = get_option('player_audio'); $skins = array("none" => __('Default skin', '1player')); $skins = apply_filters('1player_skins_list', $skins); ?> __('HTML5 only', '1player')); $modes = apply_filters('1player_modes_list', $modes); foreach($modes as $name => $mode) : ?> post_mime_type, 0, 5) == 'video' || substr($post->post_mime_type, 0, 5) == 'audio' ) { $metas = get_post_meta($post->ID, "1player", true); $player = get_option("player_".substr($post->post_mime_type, 0, 5), true); if(isset($player["poster"]) && $player["poster"] == "attachment") { // sélectionner la miniature depuis la bibliothèque $form_fields["poster"] = array( "label" => __("Thumbnail"), "input" => "html", "html" => generateImageSelectorHTML($post->ID, get_posts(array( "post_type" => "attachment", "numberposts" => -1, "post_status" => null, "post_mime_type" => "image", "post_parent" => null ))), ); } if(sizeof($player["versions"]) > 0) { foreach($player["versions"] as $version){ $src = (isset($metas['src']) && isset($metas['src'][$version[0]][$version[1]])) ? $metas['src'][$version[0]][$version[1]] : ''; if(isset($version[2]) && isset($src[$version[2]])) $src = $src[$version[2]]; $name = '[src]['.$version[0].']['.$version[1].']'.(sizeof($version)>2 ? '['.$version[2].']' : ''); $form_fields[$version[0].$version[1].(sizeof($version)>2 ? $version[2] : '')] = array( 'label' => $labels[$version[0]].' - '.$labels[$version[1]].(sizeof($version)>2 ? ' - '.$labels[$version[2]] : ''), 'input' => 'html', 'html' => '', ); } } unset($form_fields["url"]); } return $form_fields; } // gestion des champs supplémentaires pour les vidéos de la bibliothèque : sauvegarde add_filter('attachment_fields_to_save', 'player_save_fields', 10, 2); function player_save_fields($post, $attachment){ // seulement pour les vidéos if ( substr($post["post_mime_type"], 0, 5) == 'video' ) { $metas = array( 'poster' => isset($attachment['poster']) ? intval($attachment['poster']) : '', 'src' => isset($attachment['src']) ? $attachment['src'] : '', ); } else if ( substr($post["post_mime_type"], 0, 5) == 'audio') { $metas = array( 'src' => isset($attachment['src']) ? $attachment['src'] : '', ); } // sauvegarde des metas if(isset($metas)) update_post_meta($post['ID'], "1player", $metas); return $post; } // gestion des champs supplémentaires pour les vidéos depuis le web add_filter( 'type_url_form_media', 'player_insert_video_from_url'); function player_insert_video_from_url(){ // code copié depuis wp_media_insert_url_form dans /wp-admin/includes/media.php et modifié if ( !apply_filters( 'disable_captions', '' ) ) { $caption = '
| * | |
|---|---|
| * | |
|
' . __('Alt text for the image, e.g. “The Mona Lisa”') . ' |
|
' . __('Enter a link URL or click above for presets.') . ' |
|
| ' . get_submit_button( __( 'Insert into Post' ), 'button', 'insertonlybutton', false ) . ' '/* BEGIN modif Sauvegarder sans insérer */ .' ' . get_submit_button( __( 'Save' ), 'button', "savebutton", false ) . ' '/* END modif Sauvegarder sans insérer */ .' |