. */
/* */
/*************************************************************************************/
// Renvoie le chemin pour aller à une hierarchie d'objets, avec protection contre les
// références circulaires dans la hiérarchie d'objets.
function _cheminprotect($id, $nomobj, $lang = false) {
$ids = array();
$tab = array();
$tobj = new $nomobj();
$tobj->parent = $id;
$objdesc = $nomobj . "desc";
// On doit toujours retourner au moins un element, sinon bouclage dans l'admin...
$tab[] = new $objdesc();
$idx = 0;
while (intval($tobj->parent) != 0) {
$ids[] = $tobj->parent;
$tobjdesc = new $objdesc();
if (intval($tobj->parent) > 0 && $tobj->charger($tobj->parent) && $tobjdesc->charger($tobj->id, $lang)) {
if (in_array($tobj->parent, $ids)) {
die("Référence circulaire détectée dans la hiérarchie des ${nomobj}s à partir de l'ID=$tobj->id. Chemin: " . implode(" -> ", $ids));
}
$tab[$idx++] = $tobjdesc;
}
else {
// Chargement impossible -> arrêt
break;
}
}
return $tab;
}
// renvoie le chemin pour aller à une rubrique donnée
function chemin_rub($id, $lang = false) {
return _cheminprotect($id, 'Rubrique', $lang);
}
// renvoie le chemin vers un dossier
function chemin_dos($id, $lang = false) {
return _cheminprotect($id, 'Dossier', $lang);
}
// hiérarchie des rubriques
function arbreBoucle($depart, $profondeur = 0, $i = 0) {
$rec = "";
$i++;
if ($i == $profondeur && $profondeur != 0)
return;
$trubrique = new Rubrique();
$query = "select * from $trubrique->table where parent=\"$depart\"";
$resul = CacheBase::getCache()->query($query);
if ($resul == "" || count($resul) == 0)
return "";
foreach ($resul as $row) {
$rec .= $row->id . ",";
$rec .= arbreBoucle($row->id, $profondeur, $i);
}
return $rec;
}
// changement de rubrique
function arbreOption($depart, $niveau, $prubrique, $aenfant = 0, $lang = false) {
$rec = "";
$espace = "";
$niveau++;
$trubrique = new Rubrique();
$query = "select * from $trubrique->table where parent=\"$depart\"";
$resul = CacheBase::getCache()->query($query);
for ($i = 0; $i < $niveau; $i++)
$espace .= " ";
if ($resul == "" || count($resul) == 0)
return "";
foreach ($resul as $row) {
$trubriquedesc = new Rubriquedesc();
$trubriquedesc->charger($row->id, $lang);
if (! $trubriquedesc->affichage_back_office_permis()) continue;
$trubrique->charger($trubriquedesc->rubrique);
if ($prubrique == $row->id)
$selected = "selected";
else
$selected = "";
if ($aenfant) {
if (!$trubrique->aenfant()) {
$rec .= "";
}
}
else {
$rec .= "";
}
$rec .= arbreOption($row->id, $niveau, $prubrique, $aenfant, $lang);
}
return $rec;
}
function arbreOptionRub($depart, $niveau, $prubrique, $nbprod = 0, $ok = 1, $lang = false) {
$rec = "";
$espace = "";
$niveau++;
$trubrique = new Rubrique();
$query = "select * from $trubrique->table where parent=\"$depart\"";
$resul = CacheBase::getCache()->query($query);
for ($i = 0; $i < $niveau; $i++)
$espace .= " ";
if ($resul == "" || count($resul) == 0)
return "";
foreach ($resul as $row) {
$trubriquedesc = new Rubriquedesc();
$trubriquedesc->charger($row->id, $lang);
if (! $trubriquedesc->affichage_back_office_permis()) continue;
$trubrique->charger($trubriquedesc->rubrique);
$courante = new Rubrique();
$courante->charger($prubrique);
if ($courante->parent == $row->id)
$selected = "selected";
else
$selected = "";
if ($ok == 0 || ($row->id == $prubrique && $ok != -1))
$disabled = "disabled=\"disabled\"";
else
$disabled = "";
if (($nbprod && $trubrique->nbprod()) || !$nbprod)
$rec .= "";
if (($prubrique == $row->id && $ok != -1) || $ok == 0)
$rec .= arbreOptionRub($row->id, $niveau, $prubrique, $nbprod, 0, $lang);
else
$rec .= arbreOptionRub($row->id, $niveau, $prubrique, $nbprod, $ok, $lang);
}
return $rec;
}
// hiérarchie des dossiers
function arbreBoucle_dos($depart, $profondeur = 0, $i = 0) {
$rec = "";
$i++;
if ($i == $profondeur && $profondeur != 0)
return;
$tdossier = new Dossier();
$query = "select * from $tdossier->table where parent=\"$depart\"";
$resul = CacheBase::getCache()->query($query);
if ($resul == "" || count($resul) == 0)
return "";
foreach ($resul as $row) {
$rec .= $row->id . ",";
$rec .= arbreBoucle_dos($row->id, $profondeur, $i);
}
return $rec;
}
// changement de dossier
function arbreOption_dos($depart, $niveau, $pdossier, $dossier, $ok = 1, $lang = false) {
$niveau++;
$tdossier = new Dossier();
$query = "select * from $tdossier->table where parent=\"$depart\"";
$resul = CacheBase::getCache()->query($query);
for ($i = 0; $i < $niveau; $i++)
$espace .= " ";
if ($resul == "" || count($resul) == 0)
return "";
foreach ($resul as $row) {
$tdossierdesc = new Dossierdesc();
$tdossierdesc->charger($row->id, $lang);
if (! $tdossierdesc->affichage_back_office_permis()) continue;
if ($pdossier == $row->id)
$selected = "selected=\"selected\"";
else
$selected = "";
if ($ok == 0 || ($row->id == $dossier && $ok != -1))
$disabled = "disabled=\"disabled\"";
else
$disabled = "";
$rec .= "";
if (($dossier == $row->id && $ok != -1) || $ok == 0)
$rec .= arbreOption_dos($row->id, $niveau, $pdossier, $dossier, 0, $lang);
else
$rec .= arbreOption_dos($row->id, $niveau, $pdossier, $dossier, $ok, $lang);
}
return $rec;
}
?>