<?php
//===============================================================================
// Fonctions d'affichage
//===============================================================================
// la variable mode défini si le champ est en sortie seule (0), en entrée (1)
//===============================================================================
// afficher un champ texte simple
//===============================================================================
function DSP_txt($mode, $ctlName, $contentValue){
// ------------------------------------------------------------------------------
	if ($mode==0){ // mode output only
		echo $contentValue;
	}else{
		echo "<input type=text name=$ctlName value='$contentValue' />";
	}
}
//===============================================================================
// afficher un champ texte area
//===============================================================================
function DSP_txtArea($mode, $ctlName, $contentValue){
// ------------------------------------------------------------------------------
	if ($mode==0){ // mode output only
		echo $contentValue;
	}else{
		echo "<textarea name=$ctlName> $contentValue </textarea>";
	}
}
//===============================================================================
// afficher une liste déroulante
// ------------------------------------------------------------------------------
// 08/10/2010 Spécifique pour pUser :
//				avec pUser, il faut afficher le nom puis le prénom in select ou prénom et nom en output.
//				de même, dans le select, le n° de l'enreg ne doit pas apparaître.
//===============================================================================
function DSP_select($mode, $ctlName, $selectedValue, $contentTable, $contentField, $keyField){
// ------------------------------------------------------------------------------
global $connexion;
	if ($mode==0){ // mode output only 
		if($contentTable=="pUser") $contentField="usePrenom, useNom"; // 08/10/10
		$sql_select="select $keyField, $contentField from $contentTable where $keyField='$selectedValue' ;";
		if ($record=DB_chercherEnreg($sql_select, $connexion)){
			echo $record[1]; // $selectedValue." ".
			if($contentTable=="pUser") echo " ".$record[2]; // 08/10/10 
		}else
			echo $selectedValue." (inconnu)";
		
	}else{
		if($contentTable=="pUser") $contentField="useNom, usePrenom"; //08/10/10
		$sql_select="select $keyField, $contentField from $contentTable ;";
		$sql_id=DB_ouvrirRequete($sql_select, $connexion);
		//echo $sql_select;
		echo "<select name=$ctlName>";
			echo "<option value=''>-- Choisir --</option>";
		while ($record=DB_lireLigne($sql_id)){
			(strval($record[0])==strval($selectedValue))?$selected='selected=selected':$selected='';
			echo "<option value=".$record[0]." $selected>";
			if($contentTable!="pUser") // 08/10/10
				echo $record[0]." - ";
			for($i=1;$i<(sizeof($record)/2);$i++)
				echo $record[$i]." ";
			echo "</option>";
		}
		echo "</select>";
	}
}
//===============================================================================
// redirection vers une autre page ///// pas utilisé, remplacer par : 
//			header("Location: http://www.site.com")
//		ou	header("Location: ./")
//===============================================================================
function DSP_redirectionImmed($returnUrl){

	echo '<html><head>';
	echo '<TITLE>RedirectionImmed</TITLE>';
	echo '<meta name="owner" content="Francois Kieffer">';
	echo '<meta name="author" content="Francois Kieffer">';
	echo '<meta name="copyright" content="Francois Kieffer">';
	echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL='.$returnUrl.'">';
	echo "</HEAD><BODY>";
	echo "<center><h3>Redirection automatique</h3> ou <a href=\"http://".$returnUrl."\" >cliquez ici</a></center>";
	echo "</body></html>";
	exit(0);
}
//===============================================================================
/*******************************************************************************/
/****************** Ci-après, le pool de fonctions original ********************/
/*******************************************************************************/
// ==Section 1 : Fonctions d'affichage ====================================
/* 
Les fonctions de ce fichier sont interfacées avec la description de la base et font parfois appel à des fonctions de DB_fct.inc.php
*/
// --------------------------------------------------------------------------------------------------------------------
// fonction d'affichage d'un contrôle de saisie d'un champ.
// selon la table du champ à afficher, le type de contrôle peut être différent, soit un champ non modifiable, un texte, une liste à choix multiple, des boutons radio, une case à cocher.
// Lorsque le champ fait référence à une autre table : 
//	a) on affiche les champs descriptifs dans la liste select, 
//	b) (Futur) on affiche un lien vers la modif de cette table
// Futur : on peut interdire l'affichage du lien vers la modif de la table référencée
// Futur : on peut gérer une valeur par défaut si fieldValue est vide
//
// la fonction retourne une table de 2 ou 3 colonnes : 1 description du champ, 2 contrôle de saisie, 3 lien vers la table référencée ou vide.
// $tableName = nom de la table du champ
// $fieldName = nom du champ à afficher
// $fieldValue = valeur existante du champ
// $fieldType = type de champ à afficher, si prédéfini, sinon blanc
function DSPo_field($tableName, $fieldName, $fieldValue, $fieldDescT, $mode) {
include "library/DB_ref.inc.php";
				$dspLine1=""; // début de ligne -> description du champ
				$dspLine2=""; // obligatoire -> fin de ligne
				
				if (isset($DB_FieldDspType[$fieldName]) && $DB_FieldDspType[$fieldName]=="password")
					$type="password";
				else 
					$type="text";
				// ICI REVOIR LA SEQUENCE DES CONDITIONS POUR QU'UN CHAMP CLé étrangère NE SOIT PAS MASQUé s'il est auto incrémenté
				// si le champ est auto incrémenté, ne pas l'afficher (dans la mesure où il n'est pas clé étrangère - mais clé primaire -)
				if (isset($DB_FieldDspType[$fieldName]) && $DB_FieldDspType[$fieldName]=="auto_increment" 
					&& !isset($DB_FieldRef[$tableName][$fieldName])) {
					// le champ est auto incrémenté, il ne peut être modifié mais il faut faire un champ hidden pour lui
					echo "<input type=hidden name=$fieldName";
					if ($mode=='M')
						echo " value=$fieldValue";
					echo ">";
				}else{
					$dspLine1="<tr><td>".$fieldDescT[1]; // début de ligne : description du champ
					// le champ est obligatoire si demandé et pas primairese lo
					if ($fieldDescT[3])
						$dspLine2.="<font color=red>*</font>";	// caractère obligatoire du champ
					$dspLine2.=": </td><td>";					// fin de la description du champ et début de la zone de saisie
					
					if (isset($DB_FieldRef[$tableName][$fieldName])) { // le champ fait référence à une autre table
						$refTable=$DB_FieldRef[$tableName][$fieldName][0];
						$refFields=$DB_FieldRef[$tableName][$fieldName][1];
						$dspLine2.=DSP_select($fieldName, $refTable, $refFields, "", $fieldValue);//."(".$fieldValue.")";
					} else {
						$dspLine2.="<input type='$type' name='$fieldName'   value='".$fieldValue."'>$type";// zone texte de saisie
					}
					$dspLine2.="</td></tr>\r\n";				// fin de la ligne
				}
				echo $dspLine1.$dspLine2; 					//affichage de la ligne
				// répétition du champ pour confirmation (/ ex: s'il s'agit d'un mot de passe)
				if (isset($DB_FieldDspRepeat[$fieldName])) {
					echo $dspLine1."(confirmer)".$dspLine2; 					//affichage de la ligne
				}
}
// --------------------------------------------------------------------------------------------------------------------
// refTable est la table référencée
// refFields est soit le nom du champ référencé, soit un tableau contenant les noms des champs référencés
// reqValues est soit une valeur imposée, soit un tableau de valeurs imposées pour limiter le nombre d'options.
// les valeurs de reqValues peuvent être vides si la valeur n'est pas définie
// selectedValues est soit une valeur sélectionnée, soit un tableau de valeurs sélectionnées.
// les valeurs de reqValues et selectedValues doivent être vides dans le même ordre que refFields
function DSPo_select($fieldName, $refTable, $refFields, $reqValues, $selectedValues){
	include "library/DB_def.inc.php";
	global $connexion;
	if (!$connexion){
		// 1.1 Connexion au serveur de base de données ( ici, serveur mySQL et base du fichier de config)
		$connexion2=DB_connecter();
		// si la connexion a échouée, aficher l'erreur et terminer le processus
		if (!$connexion2) {
			ERR_ajouter("Echec de la connexion au serveur MySql");
			ERR_AfficherListe();
			exit();
		}
	} else $connexion2=$connexion;
	
	$selectFields="`".$refFields."`";
	if (isset($DB_TablesShortDescField[$refTable])){
		foreach($DB_TablesShortDescField[$refTable] as $key => $refFieldName)
			$selectFields.=", `".$refFieldName."`";
	} else 
		$selectFields="*";
	$selectSql='select '.$selectFields.' from '.$refTable;
	// pour user level
	//$selectSql.=' where '.$refFields."=".$reqValues;
	$selectSql.=" ;";
	$requeteOuverte=DB_ouvrirRequete($selectSql,$connexion2); // ouvrir la requête
	echo "dbg dsp_select(mysql_error)".mysql_error();
	$tLigne=DB_lireLigneT($requeteOuverte); // lire la première ligne
	$selectControl="";
	$selectControl.="<select name=".$fieldName.">\n";
	$selectControl.="<option value=0";
	if ("0"==$selectedValues)	$selected=" selected";
	else								$selected="";
	$selectControl.=$selected.">Choisissez une valeur</option>\n";
	
while ($tLigne != FALSE) {
	if ($tLigne[0]==$selectedValues)
		$selected=" selected";
	else
		$selected="";
	$selectControl.="<option value=".$tLigne[0].$selected.">";
	for($i=1;$i<sizeof($tLigne);$i++)
		$selectControl.=$tLigne[$i]." ";
	$selectControl.="</option>\n";
	$tLigne=DB_lireLigneT($requeteOuverte);
}
	$selectControl.="</select>\n";
	if (!$connexion){
		// fermer la connexion ouverte spécialement ici (sinon, ne pas fermer la connexion, il s'agit de la connexion globale ...)
		DB_deconnecter2($connexion2);
	}	
	return $selectControl;
}



/*******************************************************************************
Affichage d'un champ de saisie pour un champs de la table, en fonction du type.
//------------------------------------------------------------------------------

Selon que le type est ..., on affiche le champ sous la forme ...
-			normal 					texte
-			enum						liste de valeurs
-			clé étrangère		liste de valeurs
-			auto incrément	pas de saisie possible

paramètres
$tableName 						: nom de la table du champ à afficher
$field tableau contenant la définition du champ à afficher :
-			 ['name']*					: nom du champ
-			 ['type']*					: type du champ
-			 ['enum'][]					: énumération des valeurs
-			 ['autoInc']*				: champ auto incrémenté

*******************************************************************************/
function DSPo_displayField($tableName, $field, $connectId, $pageName) {
	include "library/DB_def.inc.php";
//  include ('library/dbDicTable.inc');   // description des tables
//  include ('library/dbDicFields.inc');   // description des champs, valeurs par défaut
//	include	('library/dbReferences.inc'); // description des champs référencés
	
	// si le champ est énuméré, afficher une liste déroulante
	if ($field['type']=='enum'){
			echo "<td><select name=".$field['name'].">";
/*
			for ($i=1;$i<count($field['enum']); $i=$i++) {
		 		$selected="";
		 		if ($field['value']==$field['enum'][$i]) $selected=" selected ";
		 		echo "<option value=".$field['enum'][$i].$selected."> ".$field['enum'][$i]." </option>"; 
			}
*/
			foreach ($field['enum'] as $key => $value){
		 		$selected="";
		 		if ($field['value']==$value) $selected=" selected=selected ";
		 		echo "<option value=".$value.$selected."> ".$value." </option>";
			} 
			echo "</select>";
			
		 
	// is field auto incremented ?
	} else if (isset($field['autoInc'])){//=="auto_increment") {
			echo "<td>";
			if (isset($field['value']))
				echo ($field['value']);
//				echo stripslashes($field['value']);
			echo " (auto_increment)";
			echo " <input type=hidden name=".$field['name']." value='".$field['value']."'";
	
	// is field a foreing key directly to an other table?
	// mention clé étrangère (table référencée)
	// note: une clé étrangère est un champ défini comme tel (refField) et non auto incrémenté
	} else if (isset($field['refField'])) {
			echo "<td>";
			// si le champ référencé appartient à une table (et non un champ extérieur)
			//if (isset($dicTable[$field['refField'][0]]))
			if ($field['refField'][0]!='IMG' && $field['refField'][0]!='URL' )
				// DSP_select($fieldName, $refTable, $refFields, $reqValues, $selectedValues)
				echo DSP_displaySelect($field, $connectId, $pageName);
			else
				echo "<input type=hidden name= value=0><i>non encore développé</i>";
	
	// standard field
	}	else {
		// récup valeur ou valeur par défaut.
		if (isset($field['dftValue']))
			$value=$field['dftValue'];
		if (isset($field['value']))
			$value=$field['value'];
//			$value=stripslashes($value);
		// standard field but long size
		if ($field['long']> 50) {
			$length=$field['long']/5;
			echo "<td><textarea cols=".$length." rows=3 name=".$field['name']." >";
			echo $value;
			echo "</textarea>";
			//"<input type=textarea name=".$field['name'];
		} else {
			echo "<td><input type=text name=".$field['name']." length=".$field['long'];
			echo ' value="'.$value.'"'; 
			echo "> ";
		}
		 // ou que le champ n'est pas dans $table['requestFieds']
		//if (isRequestField($field['name'], $tableName))
		if ($DB_FieldDesc[$field['name']][3])
			echo "<font color=red>* champ obligatoire";
		echo $field['long'];
		echo"</td>";
	}
	
}
/*******************************************************************************
Affichage d'un champ à choix multiple pour un champ référencé dans l'affichage d'un écran de saisie
//------------------------------------------------------------------------------
!!! Ne fonctionne pas (encore) si la clé primaire est composée de plusieurs champs

paramètres
$field tableau contenant :
*******************************************************************************/
function displaySelect_o($field, $connect_Id, $pageName) {
//  include ('library/dbDicTable.inc');   // description des tables
	include	('library/dbReferences.inc'); // description des champs référencés
	// initialiser la chaîne retournée
	$dsp_select="";
	// la requête doit retourner les champs clé et les champs descriptifs, triés dans l'ordre défini.
	// pour cela, il faut utiliser :
	// $field['refField'][0], (nom de la table référencée)
	// $field['refField'][1], (nom du champ référencé dans la table référencée)
	// $refTable[field['refField'][1]]['descField'] et 
	// $refTable[field['refField'][1]]['standardOrderBy']
	//
	// attention, $refTable[field['refField'][1]]['descField'] peut être un tableau de plusieurs champs.
	
	// champCléJoint
	$sqlFields=$field['refField'][1].', ';
	
	// si la description de l'enregistrement référencé par le champ référencé par le champ courant est un tableau,
	if (is_array($refTable[ $field['refField'][0] ]['descField'])){
		// construire et associre la liste des champs descriptifs
		$sqlFields.=implode(", ", $refTable[$field['refField'][0]]['descField']);
	} else
		// associer le champ descriptif
		$sqlFields.=$refTable[$field['refField'][0]]['descField'];
//	echo $sqlFields;
	
	// construction de l'ordre de tri
	$sqlSort="";
	if (isset($refTable[$field['refField'][1]]['standardOrderBy'])){
		$sqlSort=' order by '.$refTable[$field['refField'][1]]['standardOrderBy'];
	}
	
	// construire la requête de recherche des valeurs dans la table référencée
	$sql="select ";
	$sql.=$sqlFields ;
	$sql.=' from ';
	$sql.=$field['refField'][0] ;
	$sql.=$sqlSort;
	$sql.=";";
//	echo "<br>DBG-select".$sql."<br>";
	$sqlId=ouvrirRequete($sql, $connect_Id);
//	dbg sqldbg($varList['connectId']);
	$rec=lireTable($sqlId);
	
	// mention champ optionnel ou obligatoire
	//  optionnel si il peut être nul et qu'il n'est pas clé primaire
	if ($field['request']=="no")
		$comment="<font color=green>* choix ".$refTable[$field['refField'][0]]['comment']." optionnel</font>";
	// sinon obligatoire
	else
		$comment="<font color=red>* choix ".$refTable[$field['refField'][0]]['comment']." obligatoire</font>";
	
	// si enreg trouvé ou champ optionnel
	if($rec || $field['request']=="no") {
		$dsp_select.= "<select name=".$field['name'].">\n";
		// si valeur nulle autorisée et pas type primaire, ajouter l'otion 0 (=facultatif) (sinon, elle n'y est pas)
		if ($field['request']=="no" && $field['key']!='PRI')
			 // si la valeur n'est pas définie, selectionner ce champ
			 if (isset($field['value'])&& $field['value']=="") // && $field['dftValue']=="")
			 		$dsp_select.= "\t<option value=0 selected>aucune association avec ".$refTable[$field['refField'][0]]['comment']."</option>\n";
			 else
			 		$dsp_select.= "\t<option value=0 >aucune association avec ".$refTable[$field['refField'][0]]['comment']."</option>\n";
		
		// pour chaque valeur trouvée dans la table référencée, créer une option
		while($rec) {
			// <option value=xx [slect=selected] >
			// option : valeur=clé primaire de la table
			$dsp_select.= "\t<option value=".$rec[0];
			//FK050514 selectionner si la valeur est indiquée
			if ($field['value']==$rec[0])
			 		$dsp_select.= " selected";
			$dsp_select.= "> ";
			
			// libellé affiché
			// afficher les valeurs desciptives de l'enreg de l'option
			for ($i=1;$i<count($rec);$i++) 
				$dsp_values[$i-1]=$rec[$i];
			$dsp_select.=implode(" ",$dsp_values);
			
			// </option>
			$dsp_select.= " </option>\n";
			
			// lire l'enreg suivant
			$rec=lireTable($sqlId);
		}
		
		// fin du select
		$dsp_select.= "</select>\n";
		
		// insertion de la mention 
		$dsp_select.= " &nbsp;".$comment."\n";
		
		// ajout de la possibilié d'ajouter un enreg dans la table référencée.
		// remarque. ce lien joue comme une sélection de la table en question et nécessite un rafraichissement de l'écran ...
		// et une repise de la saisie !!!!!! voir comment récupérer ça et revenir au point où on était
		// transmttre l'url d'origine? , transmettre les champs déjà saisis !!
		// pas encore correct.
		$dsp_select.= " <br><a href='$pageName?mode=add&tableName=".$field['refField'][0]."'>ajouter un enreg dans ".$field['refField'][0]."</a>\n";
	}
	// si valeur non trouvée et champ obligatoire, erreur de référencement
 	else {
		$dsp_select.= " &nbsp;".$txt."</font>";
		$dsp_select.= '<a href="$pageName?mode=add&tableName='.$field['refField'][0].'">';
		$dsp_select.= " aucune donnée trouvée pour cette liste. cliquez ici -&gt; pour remplir la table\n";
		$dsp_select.= "</a>";
	}
	
	return $dsp_select;
}

// --------------------------------------------------------------------------------------------------------------------
// fonction d'affichage d'un champ en sortie.
// Lorsque le champ fait référence à une autre table, on affiche les champs descriptifs de la table référencée
// Futur : Les mots de pass ne sont pas affichés
//
// La fonction retourne une table de 2 colonnes : 1 description du champ, 2 valeur du champ.
// $tableName = nom de la table du champ
// $fieldName = nom du champ à afficher
// $fieldValue = valeur existante du champ
// $fieldType = type de champ à afficher, si prédéfini, sinon blanc
// , $connexion
function DSPo_fieldOut($tableName, $fieldName, $fieldValue, $fieldDescT) {
	include "library/DB_ref.inc.php";
	$dspLine1=""; // début de ligne -> description du champ
	$dspLine2=""; // obligatoire -> fin de ligne
	$dspLine1="<tr class='ligneTabNonQuad'><td>".$fieldDescT[1]; // description du champ
	$dspLine2.=" : </td><td>";		// fin de la description du champ et début de la zone de saisie
	
	if (isset($DB_FieldRef[$tableName][$fieldName])) { // le champ fait référence à une autre table
		$refTable=$DB_FieldRef[$tableName][$fieldName][0];
		$refFields=$DB_FieldRef[$tableName][$fieldName][1];
		$dspLine2.=DSP_refDesc($refTable, $refFields, $fieldValue)."(".$fieldValue.")";
	} else {
		if (isset($DB_FieldDspType[$fieldName]) && $DB_FieldDspType[$fieldName]=="password")
			$dspLine2.="*****************************************";// zone texte de saisie
		else 
			$dspLine2.=$fieldValue;// zone texte de saisie
	}
	$dspLine2.="</td></tr>\r\n";	// fin de la ligne
	echo $dspLine1.$dspLine2; 		//affichage de la ligne
}

function DSPo_refDesc($refTable, $refFields, $fieldValue){
	include "library/DB_def.inc.php";
	global $connexion;
	if (!$connexion){
		// 1.1 Connexion au serveur de base de données ( ici, serveur mySQL et base du fichier de config)
		$connexion2=DB_connecter();
		// si la connexion a échouée, aficher l'erreur et terminer le processus
		if (!$connexion2) {
			ERR_ajouter("Echec de la connexion au serveur MySql");
			ERR_AfficherListe();
			exit();
		}
	} else $connexion2=$connexion;
	$selectFields="`".$refFields."`";
	if (isset($DB_TablesShortDescField[$refTable])){
		foreach($DB_TablesShortDescField[$refTable] as $key => $fieldName)
			$selectFields.=", `".$fieldName."`";
	} else 
		$selectFields="*";
		
	$selectSql='select '.$selectFields.' from '.$refTable;
	$selectSql.=' where '.$refFields."='".$fieldValue."'";
	$selectSql.=" ;";
	$requeteOuverte=DB_ouvrirRequete($selectSql,$connexion2); // ouvrir la requête
	$tLigne=DB_lireLigneT($requeteOuverte); // lire la première ligne
	//echo "dbg dsp_select(mysql_error)".mysql_error()." : ".$selectSql;
	
	$dspField="";
	for($i=1;$i<sizeof($tLigne);$i++)
		$dspField.=$tLigne[$i]." ";
	if (!$connexion){
		// fermer la connexion ouverte spécialement ici (sinon, ne pas fermer la connexion, il s'agit de la connexion globale ...)
		DB_deconnecter2($connexion2);
	}	
	return $dspField;
}
// ===================================================================================================
?>
