Skip to content
Extraits de code Groupes Projets
Valider 5b524cf7 rédigé par esj's avatar esj
Parcourir les fichiers

Harmonisation de la structure de données de 'recuperer_infos_distantes' et...

Harmonisation de la structure de données de 'recuperer_infos_distantes' et 'inc_ajouter_document' pour éviter de faire et défaire 2 fois la même chose et gagner une requete SQL.
parent 4311c86c
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -56,23 +56,22 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -56,23 +56,22 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
# NB: dans les bonnes conditions (fichier autorise et pas trop gros) # NB: dans les bonnes conditions (fichier autorise et pas trop gros)
# $a['fichier'] est une copie locale du fichier # $a['fichier'] est une copie locale du fichier
$fichier = $source;
$taille = $a['taille'];
$titre = $a['titre'];
$largeur = $a['largeur'];
$hauteur = $a['hauteur'];
$ext = $a['extension'];
$type_image = $a['type_image']; $type_image = $a['type_image'];
$distant = 'oui'; unset($a['type_image']);
$mode = 'document'; unset($a['body']);
$a['date'] = 'NOW()';
$a['distant'] = 'oui';
$a['mode'] = 'document';
$a['fichier'] = set_spip_doc($source);
} }
else { else {
spip_log("Echec du lien vers le document $source, abandon"); spip_log("Echec du lien vers le document $source, abandon");
return; return;
} }
} else { } else { // pas distant
$distant = 'non';
$type_image = ''; // au pire $type_image = ''; // au pire
// tester le type de document : // tester le type de document :
// - interdit a l'upload ? // - interdit a l'upload ?
...@@ -86,25 +85,18 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -86,25 +85,18 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
} else $titre = ''; } else $titre = '';
$ext = corriger_extension(strtolower($ext)); $ext = corriger_extension(strtolower($ext));
// Si le fichier est de type inconnu, on va le stocker en .zip $row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
$row = sql_fetsel("*", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'");
if (!$row) {
/* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .BIN */ if ($row) {
/* $ext = 'bin'; $type_inclus_image = ($row['inclus'] == 'image');
$nom_envoye .= '.bin'; $fichier = copier_document($ext, $nom_envoye, $source);
spip_log("Extension $ext"); } else {
$row = sql_fetsel("*", "spip_types_documents", "extension='bin' AND upload='oui'");
if (!$row) {
spip_log("Extension $ext interdite a l'upload");
return;
}
*/
/* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */ /* STOCKER LES DOCUMENTS INCONNUS AU FORMAT .ZIP */
$ext = 'zip'; $ext = 'zip';
$row = sql_fetsel("*", "spip_types_documents", "extension='zip' AND upload='oui'"); $type_inclus_image = false;
if (!$row) {
if (!sql_countsel("spip_types_documents", "extension='zip' AND upload='oui'")) {
spip_log("Extension $ext interdite a l'upload"); spip_log("Extension $ext interdite a l'upload");
return; return;
} }
...@@ -126,20 +118,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -126,20 +118,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
} }
$fichier = copier_document($ext, $nom_envoye, $source); $fichier = copier_document($ext, $nom_envoye, $source);
spip_unlink($source); spip_unlink($source);
} else {
$fichier = copier_document($ext, $nom_envoye, $source);
} }
// Verifier que le fichier est a son emplacement definitif
if (!$fichier) {
spip_log("Impossible de copier_document($ext, $nom_envoye, $source)");
return;
}
$extension = $row['extension'];
$type_inclus_image = ($row['inclus'] == 'image');
// Prevoir traitement specifique pour videos // Prevoir traitement specifique pour videos
// (http://www.getid3.org/ peut-etre // (http://www.getid3.org/ peut-etre
if ($ext == "mov") { if ($ext == "mov") {
...@@ -148,7 +128,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -148,7 +128,7 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
} else if ($ext == "svg") { } else if ($ext == "svg") {
// recuperer les dimensions et supprimer les scripts // recuperer les dimensions et supprimer les scripts
list($largeur,$hauteur)= traite_svg($fichier); list($largeur,$hauteur)= traite_svg($fichier);
} else { } else { // image ?
// Si c'est une image, recuperer sa taille et son type (detecte aussi swf) // Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
$size_image = @getimagesize($fichier); $size_image = @getimagesize($fichier);
$largeur = intval($size_image[0]); $largeur = intval($size_image[0]);
...@@ -157,8 +137,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -157,8 +137,8 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
} }
// Quelques infos sur le fichier // Quelques infos sur le fichier
if (!@file_exists($fichier) if (!$fichier OR !@file_exists($fichier)
OR !$taille = @filesize($fichier)) { OR !$taille = @intval(filesize($fichier))) {
spip_log ("Echec copie du fichier $fichier"); spip_log ("Echec copie du fichier $fichier");
return; return;
} }
...@@ -215,82 +195,73 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -215,82 +195,73 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
return; return;
} }
if (!($largeur * $hauteur)) { if (!($largeur OR $hauteur)) {
spip_log('erreur upload vignette '.$fichier); spip_log('erreur upload vignette '.$fichier);
spip_unlink($fichier); spip_unlink($fichier);
return; return;
} }
} elseif (!in_array($mode, array('distant', 'image', 'document'))) {
if ($type_image AND $type_inclus_image)
$mode = 'image';
else
$mode = 'document';
} }
$a = array(
'date' => 'NOW()',
'distant' => 'non',
'mode' => $mode,
'titre'=> $titre,
'largeur' => $largeur,
'hauteur' => $hauteur,
'taille' => $taille,
'extension'=> $ext,
'fichier' => set_spip_doc($fichier));
} }
// Preparation vignette du document $id_document if (($id_document=intval($id_document)) AND $mode!='vignette') {
$id_document_lie = $id_document=intval($id_document);
if ($mode == 'vignette' AND $id_document) { // Mise a jour des descripteurs d'un vieux doc
# on force le statut "document" de ce fichier (inutile ?) unset($a['titre']);
sql_updateq("spip_documents", array("mode" => 'document'), "id_document=$id_document"); unset($a['date']);
$id_document = 0; unset($a['distant']);
} unset($a['mode']);
$chemin = set_spip_doc($fichier); sql_updateq('spip_documents', $a, "id_document=$id_document");
$id = $id_document;
} else {
// Installer le document dans la base // Installer le document dans la base
// attention piege semantique : les images s'installent en mode 'vignette' // attention piege semantique : les images s'installent en mode 'vignette'
// note : la fonction peut "mettre a jour un document" si on lui // note : la fonction peut "mettre a jour un document" si on lui
// passe "mode=document" et "id_document=.." (pas utilise) // passe "mode=document" et "id_document=.." (pas utilise)
if (!$id_document) {
// par defaut (upload ZIP ou ftp) integrer
// les images en mode 'vignette' et le reste en mode document
if (!in_array($mode, array('vignette', 'distant', 'image', 'document')))
if ($type_image AND $type_inclus_image)
$mode = 'image';
else
$mode = 'document';
// Inserer le nouveau doc et recuperer son id_ $id = sql_insertq("spip_documents", $a);
$id_document = sql_insertq("spip_documents",
array(
'extension'=> $ext,
'titre'=> $titre,
'date' => 'NOW()',
'distant' => $distant,
'mode' => $mode,
'taille' => intval($taille),
'largeur' => intval($largeur),
'hauteur' => intval($hauteur),
'fichier' => $chemin));
if ($id_lien AND $id_document spip_log ("ajout du document $source $nom_envoye (M '$mode' T '$type_lien' L '$id_lien' D '$id')");
if ($id_lien AND $id
AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite AND preg_match('/^[a-z0-9_]+$/i', $type_lien) # securite
) { ) {
sql_insertq("spip_documents_".$type_lien."s", sql_insertq("spip_documents_".$type_lien."s",
array('id_document' => $id_document, array('id_document' => $id,
'id_'.$type_lien => $id_lien)); 'id_'.$type_lien => $id_lien));
} else spip_log("Pb d'insertion $id_lien $type_lien"); } else spip_log("Pb d'insertion $id_lien $type_lien");
} else // Mise a jour des descripteurs d'un vieux doc
sql_updateq('spip_documents', array(
'taille' => intval($taille),
'largeur' => intval($largeur),
'hauteur' => intval($hauteur),
'fichier' => $chemin),
"id_document=$id_document");
if ($id_document_lie) {
sql_updateq("spip_documents", array("id_vignette" => $id_document ), "id_document=$id_document_lie");
// hack pour que le retour vers ecrire/ active le bon doc.
$documents_actifs[$fichier] = $id_document_lie;
}
else
$documents_actifs[$fichier] = $id_document;
spip_log ("ajout du document $source $nom_envoye (M '$mode' T '$type_lien' L '$id_lien' D '$id_document')"); if ($id_document) {
sql_updateq("spip_documents", array("id_vignette" => $id, "mode" => 'document'), "id_document=$id_document");
} else $id_document = $id;
}
// pour que le retour vers ecrire/ active le bon doc.
$documents_actifs[$fichier] = $id_document;
// Notifications, gestion des revisions, reindexation... // Notifications, gestion des revisions, reindexation...
pipeline('post_edition', pipeline('post_edition',
array( array(
'args' => array( 'args' => array(
'operation' => 'ajouter_document', 'operation' => 'ajouter_document',
'table' => 'spip_documents', 'table' => 'spip_documents',
'id_objet' => $id_document 'id_objet' => $id
), ),
'data' => null 'data' => null
) )
...@@ -299,8 +270,6 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode, ...@@ -299,8 +270,6 @@ function ajouter_un_document($source, $nom_envoye, $type_lien, $id_lien, $mode,
return $type_image; return $type_image;
} }
// http://doc.spip.org/@verifier_compactes // http://doc.spip.org/@verifier_compactes
function verifier_compactes($zip) { function verifier_compactes($zip) {
if (!$list = $zip->listContent()) return array(); if (!$list = $zip->listContent()) return array();
......
...@@ -325,6 +325,15 @@ function fichier_copie_locale($source) { ...@@ -325,6 +325,15 @@ function fichier_copie_locale($source) {
// Recuperer les infos d'un document distant, sans trop le telecharger // Recuperer les infos d'un document distant, sans trop le telecharger
#$a['body'] = chaine
#$a['type_image'] = booleen
#$a['titre'] = chaine
#$a['largeur'] = intval
#$a['hauteur'] = intval
#$a['taille'] = intval
#$a['extension'] = chaine
#$a['fichier'] = chaine
// http://doc.spip.org/@recuperer_infos_distantes // http://doc.spip.org/@recuperer_infos_distantes
function recuperer_infos_distantes($source, $max=0, $charger_si_petite_image = true) { function recuperer_infos_distantes($source, $max=0, $charger_si_petite_image = true) {
......
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