source: spip-zone/_plugins_/oembed/oembed_pipelines.php @ 54490

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

oups inclusion manquante (b_b)

File size: 6.3 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10//
11/**
12 * annoncer le service oembed dans le head des pages publiques
13 *
14 * @param string $head
15 * @return string
16 */
17function oembed_insert_head($head) {
18        $service = "services/oembed/";
19        $head .= '<link rel="alternate" type="application/json+oembed" href="<?php include_spip(\'inc/filtres_mini\');echo parametre_url(url_absolue("'.parametre_url($service,'format','json').'"),"url",url_absolue(self()));?>" />'."\n";
20        $head .= '<link rel="alternate" type="text/xml+oembed" href="<?php echo parametre_url(url_absolue("'.parametre_url($service,'format','xml').'"),"url",url_absolue(self()));?>" />'."\n";
21        return $head;
22}
23
24/**
25 * Generer un apercu pour les oembed sur le formulaire d'edition document
26 * @param $flux
27 * @return
28 */
29function oembed_formulaire_charger($flux){
30        if ($flux['args']['form']=='editer_document'){
31                if ($flux['data']['oembed']
32                  AND !isset($flux['data']['apercu']))
33                        $flux['data']['_inclus'] = 'embed';
34        }
35        return $flux;
36}
37
38/**
39 * Inserer une explication dans le form d'upload
40 * @param $flux
41 * @return array
42 */
43function oembed_recuperer_fond($flux){
44        if ($flux['args']['fond']=='formulaires/inc-upload_document'){
45                $rows = sql_allfetsel('scheme','spip_oembed_providers');
46                $hosts = array();
47                foreach($rows as $row){
48                        $h = parse_url($row['scheme'],PHP_URL_HOST);
49                        $hosts[trim(preg_replace(",^(\*|www)\.,i","",$h))]=true;
50                }
51                $hosts = implode(', ',array_keys($hosts));
52                $i = _T('oembed:explication_upload_url',array('hosts'=>$hosts));
53                $i = "<p class='explication small'>$i</p>";
54                $flux['data'] = str_replace($t="<!--editer_url-->",$t.$i,$flux['data']);
55        }
56        return $flux;
57}
58
59/**
60 * insertion des traitements oembed dans l'ajout des documents distants
61 * reconnaitre une URL oembed (car provider declare ou decouverte automatique active)
62 * et la pre-traiter pour recuperer le vrai document a partir de l'url concernee
63 *
64 * @param array $flux
65 * @return array
66 */
67function oembed_renseigner_document_distant($flux) {
68        $medias = array('photo' => 'image','video' => 'video');
69        include_spip('inc/config');
70        include_spip('inc/oembed');
71        // on tente de récupérer les données oembed
72        if ($data = oembed_recuperer_data($flux['source'])){
73                // si on a recupere une URL c'est direct un doc distant
74                if (isset($data['url'])) {
75                        // on recupere les infos du document distant
76                        if ($doc = recuperer_infos_distantes($data['url'])) {
77                                unset($doc['body']);
78                                $doc['distant'] = 'oui';
79                                $doc['mode'] = 'document';
80                                $doc['fichier'] = set_spip_doc($data['url']);
81                                // et on complète par les infos oembed
82                                $doc['oembed'] = $flux['source'];
83                                $doc['titre'] = $data['title'];
84                                $doc['credits'] = $data['author_name'];
85                                if (isset($data['media']))
86                                        $doc['media'] = $data['media'];
87                                elseif (isset($medias[$data['type']]))
88                                        $doc['media'] = $medias[$data['type']];
89                                return $doc;
90                        }
91                }
92                elseif(isset($data['html']) OR $data['type']=='link'){
93                        if ($data['type']=='link')
94                                $data['html'] = '<a href="' . $flux['source'] . '">' . sinon($data['title'],$flux['source']) . '</a>';
95                        // créer une copie locale du contenu html
96                        // cf recuperer_infos_distantes()
97                        $doc['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($flux['source'], 'html');
98                        ecrire_fichier($doc['fichier'], $data['html']);
99                        // set_spip_doc() pour récupérer le chemin du fichier relatif a _DIR_IMG
100                        $doc['fichier'] = set_spip_doc($doc['fichier']);
101                        $doc['extension'] = 'html';
102                        $doc['taille'] = strlen($data['html']); # a peu pres
103                        $doc['distant'] = 'non';
104                        $doc['mode'] = 'document';
105                        $doc['oembed'] = $flux['source'];
106                        $doc['titre'] = $data['title'];
107                        $doc['credits'] = $data['author_name'];
108                        if (isset($data['media']))
109                                $doc['media'] = $data['media'];
110                        elseif (isset($medias[$data['type']]))
111                                $doc['media'] = $medias[$data['type']];
112                        return $doc;
113                }
114        }
115        return $flux;
116}
117
118/**
119 * attacher la vignette si disponible pour les documents oembed
120 * on les reconnait via la presence d'un oembed non vide
121 * on relance un appel a oembed_recuperer_data qui a garde la requete precendente en cache
122 *
123 * @param array $flux
124 * @return array
125 */
126function oembed_post_edition($flux) {
127        if($flux['args']['action']=='ajouter_document' AND $flux['data']['oembed']){
128                $id_document = $flux['args']['id_objet'];
129                if ($data = oembed_recuperer_data($flux['data']['oembed'])){
130                        // vignette disponible ? la recupérer et l'associer au document
131                        if ($data['thumbnail_url']) {
132                                spip_log('ajout de la vignette'.$data['thumbnail_url'].' pour '.$flux['data']['oembed'],'oembed.'._LOG_DEBUG);
133                                // cf formulaires_illustrer_document_traiter_dist()
134                                $ajouter_documents = charger_fonction('ajouter_documents', 'action');
135                                $files = false;
136                                if (preg_match(",^\w+://,",$data['thumbnail_url'])){
137                                        $files = array(
138                                                array(
139                                                        'name' => basename($data['thumbnail_url']),
140                                                        'tmp_name' => $data['thumbnail_url'],
141                                                        'distant' => true,
142                                                )
143                                        );
144                                }
145                                elseif (file_exists($data['thumbnail_url'])) {
146                                        $files = array(array(
147                                                'name' => basename($data['thumbnail_url']),
148                                                'tmp_name' => $data['thumbnail_url']
149                                        ));
150                                }
151                                if ($files
152                                        AND $ajoute = action_ajouter_documents_dist('new',$files,'',0,'vignette')
153                                  AND is_int(reset($ajoute))){
154                                        $id_vignette = reset($ajoute);
155                                        include_spip('action/editer_document');
156                                        document_modifier($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
157                                }
158                        }
159                        else
160                                spip_log('pas de vignette pour '.$flux['data']['oembed'],'oembed.'._LOG_DEBUG);
161                }
162        }
163        return $flux;
164}
165
166/**
167 * Transformation auto des liens vers contenu oembed correspondant : trop la classe
168 *
169 * @param string $texte
170 * @return mixed
171 */
172function oembed_pre_propre($texte) {
173        include_spip('inc/config');
174        if (lire_config('oembed/embed_auto','oui')!='non') {
175                include_spip('inc/oembed');
176                foreach (extraire_balises($texte, 'a') as $lien) {
177                        if ($url = extraire_attribut($lien, 'href')
178                        # seuls les autoliens beneficient de la detection oembed
179                        AND preg_match(',\bauto\b,', extraire_attribut($lien, 'class'))
180                        AND (oembed_verifier_provider($url) OR (lire_config('oembed/detecter_lien','non')=='oui'))) {
181                                $fond = recuperer_fond('modeles/oembed',array('url'=>$url));
182                                if ($fond = trim($fond))
183                                        $texte = str_replace($lien, echappe_html("<html>$fond</html>"), $texte);
184                        }
185                }
186        }
187        return $texte;
188}
189
190?>
Note: See TracBrowser for help on using the repository browser.