source: spip-zone/_plugins_/oembed/oembed_fonctions.php @ 104338

Last change on this file since 104338 was 104338, checked in by spip.franck@…, 3 years ago

zone.spip est maintenant en https, donc j'ajoute le "s"

File size: 4.5 KB
Line 
1<?php
2/**
3 * Plugin oEmbed
4 * Licence GPL3
5 *
6 */
7
8if (!defined('_ECRIRE_INC_VERSION')) {
9        return;
10}
11
12// renvoyer un mim_type text/oembed pour les videos oembed
13function mime_type_oembed($id_document) {
14        if (!($id_document = intval($id_document))) {
15                return '';
16        }
17        $mime_type = sql_getfetsel(
18                'mime_type',
19                'spip_types_documents',
20                "extension IN (SELECT extension FROM spip_documents where id_document=$id_document)"
21        );
22        if ($mime_type == 'text/html'
23                and sql_getfetsel('oembed', 'spip_documents', "id_document=$id_document")) {
24                $mime_type = 'text/oembed';
25        }
26        return $mime_type;
27}
28
29// balise #MIME_TYPE pour oembed
30function balise_MIME_TYPE_dist($p) {
31        $b = $p->nom_boucle ? $p->nom_boucle : $p->id_boucle;
32        $key = $p->boucles[$b]->primary;
33        /**
34         * Si la clé est extension, on est dans une boucle sur la table spip_documents
35         */
36        if ($key == 'extension') {
37                $p->code = champ_sql('mime_type', $p);
38        } else {
39                /* explorer la pile memoire pour atteindre le 'vrai' champ */
40                $id_document = champ_sql('id_document', $p);
41                /* le code php qui sera execute */
42                $p->code = "mime_type_oembed(".$id_document.")";
43        }
44        return $p;
45}
46
47/**
48 * un filtre pour json_encode avec les bonnes options, pour l'export json des modeles
49 * @param $texte
50 * @return string
51 */
52function json_encode_html($texte) {
53        #$texte = json_encode($texte,JSON_HEX_TAG);
54        $texte = json_encode($texte);
55        $texte = str_replace(array('<', '>'), array('\u003C','\u003E'), $texte);
56        return $texte;
57}
58
59/**
60 * Filtre utilisable dans un squelette
61 * |oembed{550,300}
62 *
63 * @param string $url
64 * @param int $maxwidth
65 * @param int $maxheight
66 * @return string
67 */
68function oembed($url, $maxwidth = 0, $maxheight = 0) {
69        include_spip('inc/oembed');
70        if (oembed_verifier_provider($url)) {
71                $fond = recuperer_fond(
72                        'modeles/oembed',
73                        array('url'=>$url, 'lien' => '', 'maxwidth' => $maxwidth, 'maxheight' => $maxheight)
74                );
75                if ($fond = trim($fond)) {
76                        return $fond;
77                }
78        }
79
80        return $url;
81}
82
83/**
84 * Modifier l'iframe d'une video pour la passer en autoplay
85 * quand on l'injecte en async dans le html
86 * @param $html
87 * @return mixed
88 */
89function oembed_force_video_autoplay($html) {
90        if ($e = extraire_balise($html, 'iframe')
91                and $src = extraire_attribut($e, 'src')) {
92                $src_amp = parametre_url($src, 'dummy', null);
93                if (strpos($src, 'soundcloud') !== false) {
94                        $src_autoplay = parametre_url($src, 'auto_play', '1', '&');
95                } else {
96                        $src_autoplay = parametre_url($src, 'autoplay', '1', '&');
97                }
98                if (strpos($html, $src_amp)) {
99                        $html = str_replace($src_amp, $src_autoplay, $html);
100                } else {
101                        $html = str_replace($src, $src_autoplay, $html);
102                }
103        }
104        return $html;
105}
106
107include_spip('inc/ressource');
108if (function_exists('inc_ressource_dist')) {
109        // SPIP 3.1
110        function inc_ressource($rac) {
111                $html = oembed_traiter_ressource($rac);
112                if (is_null($html)) {
113                        $html = inc_ressource_dist($rac);
114                }
115                return $html;
116        }
117} else {
118        // SPIP 3.0
119        function inc_ressource_dist($rac) {
120                return oembed_traiter_ressource($rac);
121        }
122}
123
124function oembed_traiter_ressource($rac) {
125        static $null_allowed = null;
126
127        include_spip('inc/lien');
128        $url = explode(' ', trim($rac, '<>'));
129        $url = $url[0];
130
131        $texte = null;
132        # <http://url/absolue>
133        if (preg_match(',^https?://,i', $url)) {
134                include_spip('inc/oembed');
135                $lien = PtoBR(propre('[->'.$url.']'));
136                // null si pas embedable
137                $texte = oembed_embarquer_lien($lien);
138                if ($texte) {
139                        $texte = "<html>$texte</html>";
140                }
141        }
142        // compat SPIP < 3.0.14
143        // sans le patch https://zone.spip.org/trac/spip-zone/changeset/79139/_core_/branches/spip-3.0/plugins/textwheel
144        if (is_null($texte)) {
145                if (is_null($null_allowed)) {
146                        if (version_compare($GLOBALS['spip_version_branche'], '3.0.14', '<')) {
147                                $null_allowed = false;
148                        } else {
149                                $null_allowed = true;
150                        }
151                }
152
153                if (!$null_allowed) {
154                        include_spip('inc/lien');
155                        $url = explode(' ', trim($rac, '<>'));
156                        $url = $url[0];
157                        # <http://url/absolue>
158                        if (preg_match(',^https?://,i', $url)) {
159                                $texte = PtoBR(propre("<span class='ressource spip_out'>&lt;[->".$url.']&gt;</span>'));
160                        # <url/relative>
161                        } elseif (false !== strpos($url, '/')) {
162                                $texte = PtoBR(propre("<span class='ressource spip_in'>&lt;[->".$url.']&gt;</span>'));
163                        # <fichier.rtf>
164                        } else {
165                                preg_match(',\.([^.]+)$,', $url, $regs);
166                                if (file_exists($f = _DIR_IMG.$regs[1].'/'.$url)) {
167                                        $texte = PtoBR(propre("<span class='ressource spip_in'>&lt;[".$url.'->'.$f.']&gt;</span>'));
168                                } else {
169                                        $texte = PtoBR(propre("<span class='ressource'>&lt;".$url.'&gt;</span>'));
170                                }
171                        }
172                }
173        }
174        return $texte;
175}
Note: See TracBrowser for help on using the repository browser.