Skip to content
Extraits de code Groupes Projets
inc-calcul-outils.php3 9,4 ko
Newer Older
esj's avatar
esj a validé
<?php
Fil's avatar
Fil a validé

//
// Des fonctions diverses utilisees lors du calcul d'une page ; ces fonctions
// bien pratiques n'ont gure de logique organisationnelle ; elles sont
// appelees par certaines balises au moment du calcul des pages. (Peut-on
// trouver un modele de donnees qui les associe physiquement au fichier
// definissant leur balise ???
//

// ON TROUVERA EN QUEUE DE FICHIER LES FONCTIONS FAISANT DES APPELS SQL


// Ce fichier ne sera execute qu'une fois
if (defined("_INC_CALCUL_OUTILS")) return;
define("_INC_CALCUL_OUTILS", "1");


#
# AFFREUX !!  Passer tout ca en CSS au plus vite !
#
tester_variable('espace_logos',3);
// HSPACE=xxx VSPACE=xxx pour les logos (#LOGO_ARTICLE)
tester_variable('espace_images',3);
// HSPACE=xxx VSPACE=xxx pour les images integrees

//
// Retrouver le logo d'un objet (et son survol)
//


function cherche_image($id_objet, $type_objet) {
	// cherche l'image liee a l'objet
	$on = cherche_image_nommee($type_objet.'on'.$id_objet);

	// cherche un survol
	$off =(!$on ? '' :
	cherche_image_nommee($type_objet.'off'.$id_objet));

	if (!$on)
		return false;

	return array($on, $off);
}

function cherche_logo_objet ($type, $id_objet, $on = false, $off = false, $flag_fichier=false) {

	# spip_log("cherche logo $type $id_objet $on $off $flag_fichier");
	switch($type) {
		case 'ARTICLE':
			$logo = cherche_image($id_objet, 'art');
			break;
		case 'AUTEUR':
			$logo = cherche_image($id_objet, 'aut');
			break;
		case 'BREVE':
			$logo = cherche_image($id_objet, 'breve');
			break;
		case 'SITE':
			$logo = cherche_image($id_objet, 'site');
			break;
		case 'MOT':
			$logo = cherche_image($id_objet, 'mot');
			break;
		// recursivite
		case 'RUBRIQUE':
			if (!($logo = cherche_image ($id_objet, 'rub'))
			AND $id_objet > 0)
				$logo = cherche_logo_objet('RUBRIQUE',
				sql_parent($id_objet), true, true);
			break;
		default:
			spip_log("cherche_logo_objet: type '$type' inconnu");
	}

	// Quelles images sont demandees ?
	if (!$on) unset($logo[0]);
	if (!$off) unset($logo[1]);

	if ($logo[0] OR $logo[1])
		return $logo;
}

// Renvoie le code html pour afficher le logo, avec ou sans survol, avec ou sans lien, etc.
function affiche_logos($logo, $lien, $align, $flag_fichier) {
	global $num_survol;
	global $espace_logos;

	list($arton,$artoff) = $logo;

	// Pour les documents comme pour les logos, le filtre |fichier donne
	// le chemin du fichier apres 'IMG/' ;  peut-etre pas d'une purete
	// remarquable, mais a conserver pour compatibilite ascendante.
	// -> http://www.spip.net/fr_article901.html
	if ($flag_fichier) {
		$on = ereg_replace("^IMG/","",$arton);
		$off = ereg_replace("^IMG/","",$artoff);
		return $on ? $on : $off;
	}

	$num_survol++;
	if ($arton) {
		//$imgsize = @getimagesize("$arton");
		//$taille_image = ereg_replace("\"","'",$imgsize[3]);
		if ($align) $align="align='$align' ";

		$milieu = "<img src='$arton' $align".
			" name='image$num_survol' ".$taille_image." border='0' alt=''".
			" hspace='$espace_logos' vspace='$espace_logos' class='spip_logos' />";

		if ($artoff) {
			if ($lien) {
				$afflien = "<a href='$lien'";
				$afflien2 = "a>";
			}
			else {
				$afflien = "<div";
				$afflien2 = "div>";
			}
			$milieu = "$afflien onMouseOver=\"image$num_survol.src=".
				"'$artoff'\" onMouseOut=\"image$num_survol.src=".
				"'$arton'\">$milieu</$afflien2";
		}
		else if ($lien) {
			$milieu = "<a href='$lien'>$milieu</a>";
		}
	} else {
		$milieu="";
Fil's avatar
Fil a validé
	return $milieu;
}
Fil's avatar
Fil a validé


//
// fonction standard de calcul de la balise #INTRODUCTION
// on peut la surcharger en definissant dans mes_fonctions.php3 :
// function introduction($type,$texte,$descriptif) {...}
//
function calcul_introduction ($type, $texte, $chapo='', $descriptif='') {
	if (function_exists("introduction"))
		return introduction ($type, $texte, $chapo, $descriptif);

	switch ($type) {
		case 'articles':
			if ($descriptif)
				return propre($descriptif);
			else if (substr($chapo, 0, 1) == '=')	// article virtuel
				return '';
			else
				return PtoBR(propre(supprimer_tags(couper_intro($chapo."\n\n\n".$texte, 500))));
			break;
		case 'breves':
			return PtoBR(propre(supprimer_tags(couper_intro($texte, 300))));
			break;
		case 'forums':
			return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
			break;
		case 'rubriques':
			if ($descriptif)
				return propre($descriptif);
			else
				return PtoBR(propre(supprimer_tags(couper_intro($texte, 600))));
			break;
	}
Fil's avatar
Fil a validé
//
// FONCTIONS FAISANT DES APPELS SQL
//
Fil's avatar
Fil a validé
# NB : a l'exception des fonctions de forum regroupees dans inc-forum.
function calcul_exposer ($id, $type, $reference) {
	static $exposer;
Fil's avatar
Fil a validé
	static $ref_precedente;
	// Que faut-il exposer ? Tous les elements de $reference
	// ainsi que leur hierarchie ; on ne fait donc ce calcul
	// qu'une fois (par squelette) et on conserve le resultat
	// en static.
Fil's avatar
Fil a validé
	if ($reference<>$ref_precedente) {
		$ref_precedente = $reference;
		$exposer = array();
		foreach ($reference as $element=>$id_element) {
			if ($element == 'id_secteur') $element = 'id_rubrique';
			if (ereg("id_(article|breve|rubrique|syndic)", $element, $regs)) {
				$exposer[$element][$id_element] = true;
				$table = "spip_".table_objet($regs[1]);
				list ($id_rubrique) = spip_fetch_array(spip_query(
				"SELECT id_rubrique FROM $table WHERE $element=$id_element"));
				$hierarchie = substr(calculer_hierarchie($id_rubrique), 2);
				foreach (split(',',$hierarchie) as $id_rubrique)
					$exposer['id_rubrique'][$id_rubrique] = true;
	// And the winner is...
	return $exposer[$type][$id];
esj's avatar
esj a validé
function calcul_generation ($generation) {
	$lesfils = array();
	$result = spip_abstract_select(array('id_rubrique'),
				       array('rubriques AS rubriques'),
				       array(calcul_mysql_in('id_parent', 
							     $generation,
							     '')),
				       '','','','','','','');
esj's avatar
esj a validé
	while ($row = spip_fetch_array($result))
	  $lesfils[] = $row['id_rubrique'];
esj's avatar
esj a validé
	return join(",",$lesfils);
}

function calcul_branche ($generation) {
	if (!$generation) 
	  return '0';
	else {
esj's avatar
esj a validé
		$branche[] = $generation;
		while ($generation = calcul_generation ($generation))
			$branche[] = $generation;
		return join(",",$branche);

# fonction appele par la balise #EMBED

function calcule_embed_document($id_document, $filtres, &$doublons, $doubdoc){
  if ($doubdoc && $id_document) $doublons["documents"] .= ', ' . $id_document;
  return embed_document($id_document, $filtres, false);
}

# fonction appele par la balise #NOTES

function calculer_notes()
{
  $r = $GLOBALS["les_notes"];
  $GLOBALS["les_notes"] = "";
  $GLOBALS["compt_note"] = 0;
  $GLOBALS["marqueur_notes"] ++;
  return $r;
}

# retourne la profondeur d'une rubrique

function sql_profondeur($id)
{
	$n = 0;
	while ($id) {
		$n++;
		$id = sql_parent($id);
	}
	return $n;
}


function sql_parent($id_rubrique)
esj's avatar
esj a validé
{
  $row = spip_fetch_array(spip_query("
SELECT id_parent FROM spip_rubriques WHERE id_rubrique='$id_rubrique'
"));
  return $row['id_parent'];
}

function sql_rubrique($id_article)
{
  $row = spip_fetch_array(spip_query("
SELECT id_rubrique FROM spip_articles WHERE id_article='$id_article'
"));
  return $row['id_rubrique'];
}

function sql_auteurs($id_article)
esj's avatar
esj a validé
{
  $auteurs = "";
  if ($id_article)
esj's avatar
esj a validé
    {
      $result_auteurs = spip_query("
SELECT	auteurs.nom, auteurs.email 
FROM	spip_auteurs AS auteurs,
	spip_auteurs_articles AS lien
WHERE	lien.id_article=$id_article
esj's avatar
esj a validé
 AND	auteurs.id_auteur=lien.id_auteur
");

      while($row_auteur = spip_fetch_array($result_auteurs)) {
	$nom_auteur = typo($row_auteur["nom"]);
	$email_auteur = $row_auteur["email"];
	if ($email_auteur) {
Fil's avatar
Fil a validé
	  $auteurs[] = "<a href=\"mailto:$email_auteur\">$nom_auteur</a>";
esj's avatar
esj a validé
	}
	else {
	  $auteurs[] = "$nom_auteur";
	}
      }
    }
  return (!$auteurs) ? "" : join($auteurs, ", ");
}

Fil's avatar
Fil a validé
function sql_petitions($id_article) {
	$q = spip_query("SELECT
	id_article, email_unique, site_obli, site_unique, message, texte
	FROM spip_petitions
	WHERE id_article=".intval($id_article));
	return spip_fetch_array($q);
}
esj's avatar
esj a validé

# retourne le chapeau d'un article, et seulement s'il est publie

function sql_chapo($id_article)
esj's avatar
esj a validé
{
 return spip_fetch_array(spip_query("
SELECT	chapo
FROM	spip_articles
WHERE	id_article='$id_article' AND statut='publie'
"));
}

// Calcul de la rubrique associee a la requete
// (selection de squelette specifique par id_rubrique & lang)
function sql_rubrique_fond($contexte, $lang) {

	if ($id = intval($contexte['id_rubrique'])) {
		$row = spip_fetch_array(spip_query(
		"SELECT lang FROM spip_rubriques WHERE id_rubrique='$id'"));
		if ($row['lang'])
			$lang = $row['lang'];
		return array ($id, $lang);
	}

	if ($id  = intval($contexte['id_breve'])) {
		$row = spip_fetch_array(spip_query(
		"SELECT id_rubrique, lang FROM spip_breves WHERE id_breve='$id'"));
		$id_rubrique_fond = $row['id_rubrique'];
		if ($row['lang'])
			$lang = $row['lang'];
		return array($id_rubrique_fond, $lang);
	}

	if ($id = intval($contexte['id_syndic'])) {
		$row = spip_fetch_array(spip_query("SELECT id_rubrique
		FROM spip_syndic WHERE id_syndic='$id'"));
		$id_rubrique_fond = $row['id_rubrique'];
		$row = spip_fetch_array(spip_query("SELECT lang
		FROM spip_rubriques WHERE id_rubrique='$id_rubrique_fond'"));
		if ($row['lang'])
			$lang = $row['lang'];
		return array($id_rubrique_fond, $lang);
	}

	if ($id = intval($contexte['id_article'])) {
		$row = spip_fetch_array(spip_query("SELECT id_rubrique,lang
		FROM spip_articles WHERE id_article='$id'"));
		$id_rubrique_fond = $row['id_rubrique'];
		if ($row['lang'])
			$lang = $row['lang'];
		return array($id_rubrique_fond, $lang);
	}