Skip to content
Extraits de code Groupes Projets
Valider 646bc6cf rédigé par cerdic's avatar cerdic Validation de marcimat
Parcourir les fichiers

feat: la balise #MIME_TYPE est calculee dynamiquement pour permettre de...

feat: la balise #MIME_TYPE est calculee dynamiquement pour permettre de traiter les cas de mime-type multiples pour une meme extension, notamment mp4. Pour cela on permet de declarer une fonction inc_calculer_mime_type_xxxx_xxxx_dist() surchargeable specifique au mime-type de base qu'on veut affiner, ce qui rend le mécanisme générique (cf aussi le plugin oembed qui en aura besoin pour decliner le mime type des text/html)
parent f66e903b
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -30,7 +30,7 @@ function medias_declarer_tables_interfaces($interfaces) {
$interfaces['exceptions_des_tables']['documents']['type_document'] = ['types_documents', 'titre'];
$interfaces['exceptions_des_tables']['documents']['extension_document'] = ['types_documents', 'extension'];
$interfaces['exceptions_des_tables']['documents']['mime_type'] = ['types_documents', 'mime_type'];
$interfaces['exceptions_des_tables']['documents']['mime_type_extension'] = ['types_documents', 'mime_type'];
$interfaces['exceptions_des_tables']['documents']['media_document'] = ['types_documents', 'media_defaut'];
$interfaces['exceptions_des_jointures']['spip_documents']['id_forum'] = ['spip_documents_liens', 'id_forum'];
......
<?php
/**
* SPIP, Système de publication pour l'internet
*
* Copyright © avec tendresse depuis 2001
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James
*
* Ce programme est un logiciel libre distribué sous licence GNU/GPL.
*/
/**
* Gestion des modes de documents
*
* @package SPIP\Medias\Mime_type
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function inc_calculer_mime_type_application_mp4_dist(int $id_document, string $extension, string $mime_type) {
$media = sql_getfetsel('media', 'spip_documents', 'id_document=' . intval($id_document));
if (in_array($media, ['audio', 'video'])) {
$mime_type = str_replace('application/', $media . '/', $mime_type);
return $mime_type;
}
return null;
}
......@@ -244,6 +244,61 @@ function critere_DOCUMENTS_carre_dist($idb, &$boucles, $crit) {
$boucle->where[] = "'$not($table.largeur>0 AND $table.largeur = $table.hauteur)'";
}
/**
* balise #MIME_TYPE
* Calculer la balise mime_type qui peut avoir un contenu variable pour une meme extension
* cf mp4 notamment
* @param $p
* @return mixed
*/
function balise_MIME_TYPE_dist($p) {
$b = $p->nom_boucle ?: $p->id_boucle;
$key = $p->boucles[$b]->primary;
/**
* Si la clé est extension, on est dans une boucle sur la table spip_documents, on renvoie le champ SQL tel quel
*/
if ($key == 'extension') {
$p->code = champ_sql('mime_type', $p);
} else {
// recuperer les cles id_document + extension
$_id_document = champ_sql('id_document', $p);
$_extension = champ_sql('extension', $p);
/* le code php qui sera execute */
$p->code = 'medias_mime_type_document(' . $_id_document . ', ' . $_extension . ')';
}
return $p;
}
function medias_mime_type_document(int $id_document, string $extension = ''): string {
if (!$id_document) {
return '';
}
if (empty($extension)) {
$extension = sql_getfetsel(
'extension',
'spip_documents',
'id_document = ' . intval($id_document)
);
}
$mime_type = sql_getfetsel(
'mime_type',
'spip_types_documents',
'extension = ' . sql_quote($extension)
);
$mime_type_sanitized = preg_replace('/\W/', '_', $mime_type);
if ($calculer_mime_type = charger_fonction('calculer_mime_type_' . $mime_type_sanitized, 'inc', true)) {
$mime_type_document = $calculer_mime_type($id_document, $extension, $mime_type);
// la fonction peut renvoyer null pour laisser le mime_type initial intact
if ($mime_type_document) {
$mime_type = $mime_type_document;
}
}
return $mime_type;
}
/**
* Calcule la vignette d'une extension (l'image du type de fichier)
*
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter