<?php

/**
 * Migration des logos en tâche de fond pour Biodiv.
 *
 * Dans les anciennes versions de SPIP, les logos n'étaient pas gérés comme
 * des documents mais les fichiers image étaient simplement placés à la racine
 * du répertoire IMG. Avec la multiplication des articles (liés aux espèces) ce
 * répertoire était trop encombré, et il était nécessaire de traiter les logos 
 * comme des images, en utilisant les plugins role et role_documents. Ce changement
 * permet d'inclure les logos dans le mécanisme de répartition des images en 
 * sous-dossiers, tel que proposé par le plugin hasherfin.
 *
 * @plugin     Biodiv
 * @copyright  2008-2025
 * @author     Renaud LAURETTE
 * @licence    GNU/GPL
 * @see		   LICENCE-BIODIV.md
 * @package    SPIP\Biodiv\Genie
 * @subpackage logomig
 * @since	   3.0
 */
if (!defined('_ECRIRE_INC_VERSION')) return;

/** nombre de logos traités en une itération dans chaque type d'objet */
define('_LOGOMIG_QUANTITE',10);		



/**
 * Convertion d'un groupe de logos en documents.
 *
 * @pipeline		taches_generale_cron
 * @uses			logomig_creer_un_document()
 * @param int $t	(ignoré)
 * @return int		Toujours 1
 */
function genie_logomig_dist($t) {
	$logotypes = array(
		'arton' => 'article',
		'auton' => 'auteur',
		'breveon' => 'breve',
		'moton' => 'mot',
		'rubon' => 'rubrique',
		'siteon' => 'site',
		'campagneon' => 'campagne'
		); 
	$out = array();
	$entries = array_diff(scandir(_ROOT_RACINE . _NOM_PERMANENTS_ACCESSIBLES),array('..','.'));
	foreach($logotypes as $logo => $type) {
		$images = array_values(preg_grep("/^$logo(\d+)\./",$entries));
		// spip_log("LOGOS - Liste ($logo,$type) " . print_r($images,true),"biodiv."._LOG_INFO_IMPORTANTE);
		$s = count($images);
		$s = ($s < _LOGOMIG_QUANTITE) ? $s : _LOGOMIG_QUANTITE;
		for($i=0; $i < $s; $i++) {
			spip_log("LOGOS - Creation document pour ($logo,$type) " . $images[$i],"biodiv."._LOG_INFO_IMPORTANTE);
			$out[] = logomig_creer_un_document($images[$i],$logo,$type);
		}
	}
	return(1);	
}


include_spip('action/ajouter_documents');
include_spip('action/editer_liens');

/**
 * Conversion d'un logo unique en document
 *
 * @used-by				genie_logomig_dist()
 * @param string $file	Nom actuel du fichier logo (eg. 'arton245.jpg')
 * @param string $logo	Préfixe du nom de logo (eg. 'arton')
 * @param string $type	Type d'objet auquel se rattache le logo (eg. 'article')
 * @return int			Identifiant du document créé ou (-1) en cas d'échec
 */ 
function logomig_creer_un_document($file,$logo,$type) {
	$mimes = array(
		'jpg' => 'image/jpeg',
		'jpeg' => 'image/jpeg',
		'png' => 'image/png',
		'gif' => 'image/gif'
		);
	$docid = -1;
	$ajouter_un_document = charger_fonction('ajouter_un_document', 'action');
	$ext = substr(strrchr($file,'.'),1);
	$pattern = "/$logo([\d]+)\.$ext$/";
	preg_match($pattern,$file,$matches);
	if(in_array($ext,array_keys($mimes)) and isset($matches[1])) {
		$oid = $matches[1];
		$download = array(
			'name' => $file,
			'tmp_name' => _ROOT_RACINE . _NOM_PERMANENTS_ACCESSIBLES.$file,
			'type' => $mimes[$ext],
			'size' => filesize(_ROOT_RACINE . _NOM_PERMANENTS_ACCESSIBLES.$file),
			'error' => UPLOAD_ERR_OK
			);
		// $docid = $ajouter_un_document('new',$download,$type,$matches[1],'image');
		$docid = $ajouter_un_document('new',$download,null,null,'image');
		spip_log("LOGOS - Ajout document $docid pour ($logo,$type,$oid) " . $download['tmp_name'],"biodiv."._LOG_INFO_IMPORTANTE);
		if(intval($docid) >0) {
			objet_associer(
				array('document' => $docid),
				array($type => $oid),
				array('role' => 'logo')
				);
			unlink(_ROOT_RACINE . _NOM_PERMANENTS_ACCESSIBLES.$file);
			spip_log("LOGOS - Creation document $docid reussie ($logo,$type) pour $file","biodiv."._LOG_INFO_IMPORTANTE);
		} else {                                                                                          
			spip_log("LOGOS - Echec creation document ($logo,$type) pour $file","biodiv."._LOG_INFO_IMPORTANTE);
		}
	} else {
		spip_log("LOGOS - Echec migration $file ($logo,$type)","biodiv."._LOG_INFO_IMPORTANTE);
	}
	return $docid;
}


?>
