source: spip-zone/_plugins_/player/trunk/player_fonctions.php @ 61570

Last change on this file since 61570 was 61570, checked in by cedric@…, 9 years ago

Evacuer un vieux truc de compat jQuery 1.2, timestamp, et version qui ne provoque plus de bug js dans le prive avec le plugin agenda

  • Property svn:keywords set to LastChangedBy LastChangedDate
File size: 4.4 KB
Line 
1<?php
2/**
3 * Plugin Lecteur (mp3)
4 * Licence GPL
5 * 2007-2011
6 */
7
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10/**
11 * Code JS a inserer dans la page pour faire fonctionner le player
12 * @param $player
13 * @return string
14 */
15function player_call_js() {
16        $flux = "\n"
17                . '<script type="text/javascript" src="'.timestamp(find_in_path('javascript/soundmanager/soundmanager2.js')).'"></script>'
18                . '<script type="text/javascript" src="'.timestamp(find_in_path('javascript/player_enclosure.js')).'"></script>'."\n"
19                ;
20        return $flux;
21}
22
23
24/**
25 * inserer systematiquement le CSS dans la page
26 * @param string $flux
27 * @return string
28 */
29function player_insert_head_css($flux){
30        $flux =
31                '<script type="text/javascript">/*<![CDATA[*/' . "\n"
32                . 'player_data={'
33                // sert uniquement en fallback player sur les enclosure, si flash<8
34          . 'player_url:"' . find_in_path('players/eraplayer/player.swf') . '",'
35          . 'key_espace_stop:true,'
36          . 'image_play:"'.find_in_path('players/controls/play-16.png').'",'
37                . 'image_pause:"'.find_in_path('players/controls/pause-16.png').'",'
38                . 'soundManager_url:"'.find_in_path('javascript/soundmanager/soundmanager2.swf').'",'
39                . 'soundManager_nullURL:"'.find_in_path('javascript/soundmanager/null.mp3').'",'
40                . 'dir:"' . _DIR_PLUGIN_PLAYER . '"'
41          . '};'
42                . "/*]]>*/</script>\n"
43                . $flux;
44
45        lire_fichier(direction_css(find_in_path('css/player.css')),$css);
46        $flux .= "\n".'<style type="text/css">'.$css.'</style>';
47
48        return $flux;
49}
50
51/**
52 * Inserer systematiquement le JS dans la page
53 * @param string $flux
54 * @return string
55 */
56function player_insert_head($flux){
57        if (test_espace_prive()
58                OR (defined('_PLAYER_AFFICHAGE_FINAL') AND !_PLAYER_AFFICHAGE_FINAL)){
59                $flux .= player_call_js();
60        }
61        return $flux;
62}
63
64
65/**
66 * Inserer JS+CSS dans la page si elle contient un player
67 * (a la demande)
68 * @param string $flux
69 * @return string
70 */
71function player_affichage_final($flux){
72        if ((!defined('_PLAYER_AFFICHAGE_FINAL') OR _PLAYER_AFFICHAGE_FINAL)
73          AND $GLOBALS['html']){
74                // inserer le head seulement si presente d'un rel='enclosure'
75                // il faut etre pas trop stricte car on peut avoir rel='nofollow encolsure' etc...
76                if ((strpos($flux,'enclosure')!==false)){
77                        // on pourrait affiner la detection avec un preg ?
78                        $ins = player_call_js();
79                        $p = stripos($flux,"</body>");
80                        if ($p)
81                                $flux = substr_replace($flux,$ins,$p,0);
82                        else
83                                $flux .= $ins;
84                }
85        }
86        return $flux;
87}
88
89
90/**
91 * enclosures
92 * ajout d'un rel="enclosure" sur les liens mp3 absolus
93 * appele en pipeline apres propre pour traiter les [mon son->http://monsite/mon_son.mp3]
94 * peut etre appele dans un squelette apres |liens_absolus
95 *
96 * @param $texte
97 * @return mixed
98 */
99function player_post_propre($texte) {
100
101        $reg_formats="mp3";
102        // plus vite
103        if (stripos($texte,".$reg_formats")!==false
104          AND stripos($texte,"<a")!==false){
105
106                $cfg = unserialize($GLOBALS['meta']['player']);
107                // insertion du mini-player inline
108                if (isset($cfg['insertion_auto'])
109                        AND in_array('inline_mini',$cfg['insertion_auto'])){
110                        $texte = preg_replace_callback(
111                                ",<a(\s[^>]*href=['\"]?(http://[a-zA-Z0-9\s()\/\:\._%\?+'=~-]*\.($reg_formats))['\"]?[^>]*)>,Uims",
112                                'player_enclose_link',
113                                $texte
114                                );
115                }
116                if (isset($cfg['insertion_auto'])
117                        AND in_array('player_end',$cfg['insertion_auto'])){
118
119                        preg_match_all(",<a(\s[^>]*href=['\"]?(http://[a-zA-Z0-9\s()\/\:\._%\?+'=~-]*\.($reg_formats))['\"]?[^>]*)>,Uims",$texte,$matches,PREG_SET_ORDER);
120                        if (count($matches)){
121                                foreach ($matches as $m){
122                                        $url = $m[2];
123                                        $texte .= recuperer_fond("modeles/player",array('url_document'=>$url,'titre'=>player_joli_titre($url)));
124                                }
125                        }
126                }
127
128        }
129
130        return $texte;
131}
132
133/**
134 * Ajouter enclosure sur un lien mp3
135 *
136 * @param $regs
137 * @return mixed|string
138 */
139function player_enclose_link($regs){
140        $rel = extraire_attribut($regs[0],'rel');
141        $rel = ($rel?"$rel ":"")."enclosure";
142        return inserer_attribut($regs[0],'rel',$rel);
143}
144
145/**
146 * Un filtre pour afficher de joli titre a partir du nom du fichier
147 * @param $titre
148 * @return mixed|string
149 */
150function player_joli_titre($titre){
151        $titre=basename($titre);
152        $titre=preg_replace('/.mp3/','',$titre);
153        $titre=preg_replace('/^ /','',$titre);
154        $titre = preg_replace("/_/i"," ", $titre );
155        $titre = preg_replace("/'/i"," ",$titre );
156
157        return $titre ;
158}
Note: See TracBrowser for help on using the repository browser.