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

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

modification de la signature de oembed_verifier_provider et oembed_detecter_lien qui renvoient un tableau associatif decrivant le provider et plus seulement le endpoint
ajout d'un appel a post-traitement sur le retour du provider :
si une fonction oembed_posttraite_{$provider_name}_$type[_dist] existe elle est appelee pour post-traiter les donnees
ajout d'une telle fonction pour youtube_video qui extrait l'url du html pour peupler la valeur url des donnees
modification de l'insertion du document : si url est connu, on insere en document distant, avec recuperation de donnees distantes (taille, format etc)
sinon insertion en html statique comme auparavant, ce qui est un pis aller
Cette modification permet d'inserer par exemple les video youtube au format swf dans la base, et elles sont bien identifiees comme sequences
l'insertion de fait par <emb>

File size: 4.0 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) return;
9
10// ajouter le lien oembed dans le head des pages publiques
11function oembed_affichage_final($page) {
12        if (!$GLOBALS['html']) return $page;
13        if ($url_oembed = url_absolue(parametre_url($GLOBALS['meta']['adresse_site'] . '/services/oembed/','url',url_absolue(self())))) {
14                $page = preg_replace(',</head>,i',
15                        "\n".'<link rel="alternate" type="application/json+oembed" href="'.$url_oembed.'&amp;format=json" />'.
16                        "\n".'<link rel="alternate" type="text/xml+oembed" href="'.$url_oembed.'&amp;format=xml" />'."\n".'\0',
17                        $page, 1);
18        }
19        return $page;
20}
21
22// insertion des traitements oembed dans l'ajout des documents distants
23function oembed_renseigner_document_distant($flux) {
24        include_spip('inc/config');
25        include_spip('inc/oembed');
26        // on tente de récupérer les données oembed
27        if ($data = oembed_recuperer_data($flux['source'])){
28                // si on a recupere une URL c'est direct un doc distant
29                if (isset($data['url'])) {
30                        // on recupere les infos du document distant
31                        if ($doc = recuperer_infos_distantes($data['url'])) {
32                                unset($doc['body']);
33                                $doc['distant'] = 'oui';
34                                $doc['mode'] = 'document';
35                                $doc['fichier'] = set_spip_doc($data['url']);
36                                // et on complète par les infos oembed
37                                $doc['oembed'] = $flux['source'];
38                                $doc['titre'] = $data['title'];
39                                $doc['credits'] = $data['author_name'];
40                                return $doc;
41                        }
42                }
43                elseif(isset($data['html']) OR $data['type']=='link'){
44                        if ($data['type']=='link')
45                                $data['html'] = '<a href="' . $flux['source'] . '">' . sinon($data['title'],$flux['source']) . '</a>';
46                        // créer une copie locale du contenu html
47                        // cf recuperer_infos_distantes()
48                        $doc['fichier'] = _DIR_RACINE . nom_fichier_copie_locale($flux['source'], 'html');
49                        ecrire_fichier($doc['fichier'], $data['html']);
50                        // set_spip_doc() pour récupérer le chemin du fichier relatif a _DIR_IMG
51                        $doc['fichier'] = set_spip_doc($doc['fichier']);
52                        $doc['extension'] = 'html';
53                        $doc['taille'] = strlen($data['html']); # a peu pres
54                        $doc['distant'] = 'non';
55                        $doc['mode'] = 'document';
56                        $doc['oembed'] = $flux['source'];
57                        $doc['titre'] = $data['title'];
58                        $doc['credits'] = $data['author_name'];
59                        return $doc;
60                }
61        }
62        return $flux;
63}
64
65// attacher la vignette si disponible pour les documents oembed
66function oembed_post_edition($flux) {
67        if($flux['args']['action']=='ajouter_document' AND $flux['data']['oembed']){
68                $id_document = $flux['args']['id_objet'];
69                if ($data = oembed_recuperer_data($flux['data']['oembed'])){
70                        // vignette disponible ? la recupérer et l'associer au document
71                        if ($data['thumbnail_url']) {
72                                // cf formulaires_illustrer_document_traiter_dist()
73                                $ajouter_documents = charger_fonction('ajouter_documents', 'action');
74                                include_spip('inc/joindre_document');
75                                set_request('url',$data['thumbnail_url']);
76                                set_request('joindre_distant','oui');
77                                $files = joindre_trouver_fichier_envoye();
78                                $ajoute = action_ajouter_documents_dist('new',$files,'',0,'vignette');
79                                if (is_int(reset($ajoute))){
80                                        $id_vignette = reset($ajoute);
81                                        include_spip('action/editer_document');
82                                        document_set($id_document,array("id_vignette" => $id_vignette,'mode'=>'document'));
83                                        // pour ne pas se retrouver avec l'url de la vignette dans l'input du formulaire au retour
84                                        set_request('url','');
85                                }
86                        }
87                }
88        }
89        return $flux;
90}
91
92function oembed_pre_propre($texte) {
93        include_spip('inc/config');
94        if (lire_config('oembed/embed_auto','oui')!='non') {
95                include_spip('inc/oembed');
96                foreach (extraire_balises($texte, 'a') as $lien) {
97                        if ($url = extraire_attribut($lien, 'href')
98                        # seuls les autoliens beneficient de la detection oembed
99                        AND preg_match(',\bauto\b,', extraire_attribut($lien, 'class'))
100                        AND (oembed_verifier_provider($url) OR (lire_config('oembed/detecter_lien','non')=='oui'))) {
101                                $fond = recuperer_fond('modeles/oembed',array('url'=>$url));
102                                if ($fond = trim($fond))
103                                        $texte = str_replace($lien, $fond, $texte);
104                        }
105                }
106        }
107        return $texte;
108}
109
110?>
Note: See TracBrowser for help on using the repository browser.