* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
-if (!defined("_ECRIRE_INC_VERSION")) return;
+/**
+ * Fonctions pour compléter les informations connues d'un document
+ *
+ * @package SPIP\Medias\Renseigner
+ **/
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
/**
- * recuperer les infos distantes d'une url,
+ * Récuperer les infos distantes d'une URL,
* et renseigner pour une insertion en base
- * utilise une variable static car appellee plusieurs fois au cours du meme hit
- * (verification puis traitement)
+ *
+ * Utilise une variable static car appellée plusieurs fois au cours du même hit
+ * (vérification puis traitement)
+ *
+ * Un plugin peut avec le pipeline renseigner_document_distant renseigner
+ * les informations fichier et mode avant l'analyse et traitement par ce plugin,
+ * qui dans ce cas ne les fera pas. Exemple : OEmbed
+ *
+ * @pipeline_appel renseigner_document_distant
*
* @param string $source
- * @return string
+ * URL du document
+ * @return array|string
+ * Informations sur le fichier distant, sinon message d'erreur.
+ * Sans erreur, retourne un tableau :
+ *
+ * - source : URL du fichier
+ * - distant : Est-ce un fichier distant ?
+ * - mode : Mode d'inclusion
+ * - fichier : Chemin local du fichier s'il a été recopié
*/
-function renseigner_source_distante($source){
+function renseigner_source_distante($source) {
static $infos = array();
- if (isset($infos[$source]))
+ if (isset($infos[$source])) {
return $infos[$source];
-
+ }
+
include_spip('inc/distant');
// on passe la source dans le pipeline, le premier plugin
// qui est capable de renseigner complete
// fichier et mode + tous les autres champs a son gout
// ex : oembed
- $a = pipeline('renseigner_document_distant',array('source'=>$source));
+ $a = pipeline('renseigner_document_distant', array('source' => $source));
// si la source est encore la, en revenir a la
// methode traditionnelle : chargement de l'url puis analyse
- if (!isset($a['fichier']) OR !isset($a['mode'])){
+ if (!isset($a['fichier']) or !isset($a['mode'])) {
if (!$a = recuperer_infos_distantes($a['source'])) {
- return _T('medias:erreur_chemin_distant',array('nom'=>$source));
+ return _T('medias:erreur_chemin_distant', array('nom' => $source));
}
# NB: dans les bonnes conditions (fichier autorise et pas trop gros)
# $a['fichier'] est une copie locale du fichier
/**
* Renseigner les informations de taille et dimension d'un document
- *
+ *
* Récupère les informations de taille (largeur / hauteur / type_image / taille) d'un document
* Utilise pour cela les fonctions du répertoire metadatas/*
- *
+ *
* Ces fonctions de récupérations peuvent retourner d'autres champs si ces champs sont définis
* comme editable dans la déclaration de la table spip_documents
- *
- * TODO Renommer cette fonction sans "_image"
*
- * @param string $fichier
- * Le fichier à examiner
+ * @todo
+ * Renommer cette fonction sans "_image"
+ *
+ * @param string $fichier
+ * Le fichier à examiner
* @param string $ext
- * L'extension du fichier à examiner
+ * L'extension du fichier à examiner
+ * @param bool $distant
+ * Indique que le fichier peut etre distant, on essaiera alors d'en recuperer un bout pour en lire les meta infos
* @return array|string $infos
- * Si c'est une chaine, c'est une erreur
- * Si c'est un tableau, l'ensemble des informations récupérées du fichier
+ *
+ * - Si c'est une chaîne, c'est une erreur
+ * - Si c'est un tableau, l'ensemble des informations récupérées du fichier
*/
-function renseigner_taille_dimension_image($fichier,$ext){
+function renseigner_taille_dimension_image($fichier, $ext, $distant = false) {
$infos = array(
- 'largeur'=>0,
- 'hauteur'=>0,
- 'type_image'=>'',
- 'taille'=>0
+ 'largeur' => 0,
+ 'hauteur' => 0,
+ 'type_image' => '',
+ 'taille' => 0
);
-
+
// Quelques infos sur le fichier
if (
!$fichier
- OR !@file_exists($fichier)
- OR !$infos['taille'] = @intval(filesize($fichier))) {
- spip_log ("Echec copie du fichier $fichier");
- return _T('medias:erreur_copie_fichier',array('nom'=> $fichier));
+ or !@file_exists($fichier)
+ or !$infos['taille'] = @intval(filesize($fichier))
+ ) {
+ if ($distant) {
+ // on ne saura pas la taille
+ unset($infos['taille']);
+
+ // recuperer un debut de fichier 512ko semblent suffire
+ $tmp = _DIR_TMP . md5($fichier);
+ $res = recuperer_url($fichier, array('file' => $tmp, 'taille_max' => 512 * 1024));
+ if (!$res) {
+ spip_log("Echec copie du fichier $fichier", 'medias');
+
+ return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
+ }
+ $fichier = $tmp;
+ } else {
+ spip_log("Echec copie du fichier $fichier", 'medias');
+
+ return _T('medias:erreur_copie_fichier', array('nom' => $fichier));
+ }
}
// chercher une fonction de description
$meta = array();
- if ($metadata = charger_fonction($ext,"metadata",true)){
+ if ($metadata = charger_fonction($ext, 'metadata', true)) {
$meta = $metadata($fichier);
- }
- else {
- $media = sql_getfetsel('media_defaut','spip_types_documents','extension='.sql_quote($ext));
- if ($metadata = charger_fonction($media,"metadata",true)){
+ } else {
+ $media = sql_getfetsel('media_defaut', 'spip_types_documents', 'extension=' . sql_quote($ext));
+ if ($metadata = charger_fonction($media, 'metadata', true)) {
$meta = $metadata($fichier);
}
}
- $meta = pipeline('renseigner_document',array('args'=>array('extension'=>$ext,'fichier'=>$fichier),'data' => $meta));
+ $meta = pipeline(
+ 'renseigner_document',
+ array('args' => array('extension' => $ext, 'fichier' => $fichier), 'data' => $meta)
+ );
include_spip('inc/filtres'); # pour objet_info()
- $editables = objet_info('document','champs_editables');
- foreach($meta as $m=>$v)
- if (isset($infos[$m]) OR in_array($m,$editables))
+ $editables = objet_info('document', 'champs_editables');
+ foreach ($meta as $m => $v) {
+ if (isset($infos[$m]) or in_array($m, $editables)) {
$infos[$m] = $v;
+ }
+ }
return $infos;
}
-
-?>
\ No newline at end of file