* Copyright (C) 2007-2008 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * \file htdocs/lib/treeview.lib.php * \ingroup core * \brief Libraries for tree views * \version $Id$ */ /** * Return if a child id is in descendance of parentid * * @param $fulltree Full tree. Tree must be an array of records that looks like: * id = id record * id_mere = id record mother * id_children = array of direct child id * label = record label * fullpath = Full path of id * level = Level of record * @param $parentid Parent id * @param $childid Child id * @return int 1=Yes, 0=No */ function is_in_subtree($fulltree,$parentid,$childid) { if ($parentid == $childid) return 1; // Get fullpath of parent $fullpathparent=''; foreach($fulltree as $key => $val) { //print $val['id']."-".$section."
"; if ($val['id'] == $parentid) { $fullpathparent=$val['fullpath']; break; } } //print '> parent='.$parentid.' - child='.$childid.' - '.$fullpathparent.'
'; foreach($fulltree as $record) { if ($record['id'] == $childid) { //print $record['fullpath'].'_'.' - '.$fullpathparent.'_'; if (preg_match('/'.$fullpathparent.'_/i',$record['fullpath'].'_')) { //print 'DEL='.$childid; return 1; } } } return 0; } /** * Show picto of a tree view * * @param fulltree Array of entries in correct order * @param key Key of value to show picto * @return array (0 or 1 if at least one of this level after, 0 or 1 if at least one of higher level after) */ function tree_showpad(&$fulltree,$key,$selected=0) { $pos=1; // Loop on each pos, because we will output an img for each pos while ($pos <= $fulltree[$key]['level'] && $fulltree[$key]['level'] > 0) { // Process picto for column $pos $atleastonofthislevelafter=0; $nbofhigherlevelafter=0; $nbofdirinsub=0; $nbofdocinsub=0; $found=0; //print 'x'.$key; foreach($fulltree as $key2 => $val2) { if ($found == 1) // We are after the entry to show { if ($fulltree[$key2]['level'] > $pos) { $nbofdirinsub++; $nbofdocinsub+=$fulltree[$key2]['cachenbofdoc']; $nbofhigherlevelafter++; } if ($fulltree[$key2]['level'] == $pos) { $atleastonofthislevelafter=1; } if ($fulltree[$key2]['level'] <= $pos) { break; } } if ($key2 == $key) { $found=1; } } //print $atleastonofthislevelafter; if ($atleastonofthislevelafter) { if ($fulltree[$key]['level'] == $pos) print img_picto_common('','treemenu/branch.gif'); else print img_picto_common('','treemenu/line.gif'); } else { if ($fulltree[$key]['level'] == $pos) print img_picto_common('','treemenu/branchbottom.gif'); else print img_picto_common('','treemenu/linebottom.gif'); } $pos++; } return array($atleastonofthislevelafter,$nbofhigherlevelafter,$nbofdirinsub,$nbofdocinsub); } // ------------------------------- Used by enu editor ----------------- /** * \brief Ad javascript tree functions */ function tree_addjs() { print ''; } /* cette fonction g�re le d�callage des �l�ments suivant leur position dans l'arborescence */ function tree_showline($tab,$rang) { global $conf, $rangLast, $idLast, $menu_handler; if ($conf->use_javascript_ajax) { if($rang == $rangLast) { print ''; //print 'aa'; } elseif($rang > $rangLast) { print '
  • '; echo "\n"; } } } else { if($rang > $rangLast) { print '
  • '; echo "\n"; } } } print '
  • '; // Content of line print '  '.$tab[2].''; print ''; print ''; print ''; print ''; print '
  • '; echo "\n"; $rangLast = $rang; $idLast = $tab[0]; } /*fonction r�cursive d'affichage de l'arbre $tab :tableau des �l�ments $pere :index de l'�l�ment courant $rang :d�callage de l'�l�ment */ function tree_recur($tab,$pere,$rang) { if ($pere == 0) print '