0byt3m1n1
Path:
/
data
/
applications
/
aps
/
xoops
/
2.3.2b-6
/
standard
/
htdocs
/
class
/
[
Home
]
File: xoopstree.php
<?php // $Id: xoopstree.php 1394 2008-03-26 10:39:14Z phppp $ // ------------------------------------------------------------------------ // // XOOPS - PHP Content Management System // // Copyright (c) 2000 XOOPS.org // // <http://www.xoops.org/> // // ------------------------------------------------------------------------ // // 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. // // // // You may not change or alter any portion of this comment or credits // // of supporting developers from this source code or any supporting // // source code which is considered copyrighted (c) material of the // // original comment or credit authors. // // // // 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 // // ------------------------------------------------------------------------ // // Author: Kazumi Ono (AKA onokazu) // // URL: http://www.myweb.ne.jp/, http://www.xoops.org/, http://jp.xoops.org/ // // Project: The XOOPS Project // // ------------------------------------------------------------------------- // class XoopsTree { var $table; //table with parent-child structure var $id; //name of unique id for records in table $table var $pid; // name of parent id used in table $table var $order; //specifies the order of query results var $title; // name of a field in table $table which will be used when selection box and paths are generated var $db; //constructor of class XoopsTree //sets the names of table, unique id, and parend id function XoopsTree($table_name, $id_name, $pid_name) { trigger_error("Class '" . __CLASS__ . "' is deprecated, check 'XoopsObjectTree' in tree.php", E_USER_WARNING); $this->db =& Database::getInstance(); $this->table = $table_name; $this->id = $id_name; $this->pid = $pid_name; } // returns an array of first child objects for a given id($sel_id) function getFirstChild($sel_id, $order="") { $sel_id = intval($sel_id); $arr =array(); $sql = "SELECT * FROM ".$this->table." WHERE ".$this->pid."=".$sel_id.""; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result = $this->db->query($sql); $count = $this->db->getRowsNum($result); if ( $count==0 ) { return $arr; } while ( $myrow=$this->db->fetchArray($result) ) { array_push($arr, $myrow); } return $arr; } // returns an array of all FIRST child ids of a given id($sel_id) function getFirstChildId($sel_id) { $sel_id = intval($sel_id); $idarray =array(); $result = $this->db->query("SELECT ".$this->id." FROM ".$this->table." WHERE ".$this->pid."=".$sel_id.""); $count = $this->db->getRowsNum($result); if ( $count == 0 ) { return $idarray; } while ( list($id) = $this->db->fetchRow($result) ) { array_push($idarray, $id); } return $idarray; } //returns an array of ALL child ids for a given id($sel_id) function getAllChildId($sel_id, $order="", $idarray = array()) { $sel_id = intval($sel_id); $sql = "SELECT ".$this->id." FROM ".$this->table." WHERE ".$this->pid."=".$sel_id.""; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result=$this->db->query($sql); $count = $this->db->getRowsNum($result); if ( $count==0 ) { return $idarray; } while ( list($r_id) = $this->db->fetchRow($result) ) { array_push($idarray, $r_id); $idarray = $this->getAllChildId($r_id,$order,$idarray); } return $idarray; } //returns an array of ALL parent ids for a given id($sel_id) function getAllParentId($sel_id, $order="", $idarray = array()) { $sel_id = intval($sel_id); $sql = "SELECT ".$this->pid." FROM ".$this->table." WHERE ".$this->id."=".$sel_id.""; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result=$this->db->query($sql); list($r_id) = $this->db->fetchRow($result); if ( $r_id == 0 ) { return $idarray; } array_push($idarray, $r_id); $idarray = $this->getAllParentId($r_id,$order,$idarray); return $idarray; } //generates path from the root id to a given id($sel_id) // the path is delimetered with "/" function getPathFromId($sel_id, $title, $path="") { $sel_id = intval($sel_id); $result = $this->db->query("SELECT ".$this->pid.", ".$title." FROM ".$this->table." WHERE ".$this->id."=$sel_id"); if ( $this->db->getRowsNum($result) == 0 ) { return $path; } list($parentid,$name) = $this->db->fetchRow($result); $myts =& MyTextSanitizer::getInstance(); $name = $myts->htmlspecialchars($name); $path = "/".$name.$path.""; if ( $parentid == 0 ) { return $path; } $path = $this->getPathFromId($parentid, $title, $path); return $path; } //makes a nicely ordered selection box //$preset_id is used to specify a preselected item //set $none to 1 to add a option with value 0 function makeMySelBox($title,$order="",$preset_id=0, $none=0, $sel_name="", $onchange="") { if ( $sel_name == "" ) { $sel_name = $this->id; } $myts =& MyTextSanitizer::getInstance(); echo "<select name='".$sel_name."'"; if ( $onchange != "" ) { echo " onchange='".$onchange."'"; } echo ">\n"; $sql = "SELECT ".$this->id.", ".$title." FROM ".$this->table." WHERE ".$this->pid."=0"; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result = $this->db->query($sql); if ( $none ) { echo "<option value='0'>----</option>\n"; } while ( list($catid, $name) = $this->db->fetchRow($result) ) { $sel = ""; if ( $catid == $preset_id ) { $sel = " selected='selected'"; } echo "<option value='$catid'$sel>$name</option>\n"; $sel = ""; $arr = $this->getChildTreeArray($catid, $order); foreach ( $arr as $option ) { $option['prefix'] = str_replace(".","--",$option['prefix']); $catpath = $option['prefix']." ".$myts->htmlspecialchars($option[$title]); if ( $option[$this->id] == $preset_id ) { $sel = " selected='selected'"; } echo "<option value='".$option[$this->id]."'$sel>$catpath</option>\n"; $sel = ""; } } echo "</select>\n"; } //generates nicely formatted linked path from the root id to a given id function getNicePathFromId($sel_id, $title, $funcURL, $path="") { $path = !empty($path) ? " : " . $path : $path; $sel_id = intval($sel_id); $sql = "SELECT ".$this->pid.", ".$title." FROM ".$this->table." WHERE ".$this->id."=$sel_id"; $result = $this->db->query($sql); if ( $this->db->getRowsNum($result) == 0 ) { return $path; } list($parentid,$name) = $this->db->fetchRow($result); $myts =& MyTextSanitizer::getInstance(); $name = $myts->htmlspecialchars($name); $path = "<a href='".$funcURL."&".$this->id."=".$sel_id."'>".$name."</a>".$path.""; if ( $parentid == 0 ) { return $path; } $path = $this->getNicePathFromId($parentid, $title, $funcURL, $path); return $path; } //generates id path from the root id to a given id // the path is delimetered with "/" function getIdPathFromId($sel_id, $path="") { $sel_id = intval($sel_id); $result = $this->db->query("SELECT ".$this->pid." FROM ".$this->table." WHERE ".$this->id."=$sel_id"); if ( $this->db->getRowsNum($result) == 0 ) { return $path; } list($parentid) = $this->db->fetchRow($result); $path = "/".$sel_id.$path.""; if ( $parentid == 0 ) { return $path; } $path = $this->getIdPathFromId($parentid, $path); return $path; } function getAllChild($sel_id=0,$order="",$parray = array()) { $sel_id = intval($sel_id); $sql = "SELECT * FROM ".$this->table." WHERE ".$this->pid."=".$sel_id.""; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result = $this->db->query($sql); $count = $this->db->getRowsNum($result); if ( $count == 0 ) { return $parray; } while ( $row = $this->db->fetchArray($result) ) { array_push($parray, $row); $parray=$this->getAllChild($row[$this->id],$order,$parray); } return $parray; } function getChildTreeArray($sel_id=0,$order="",$parray = array(),$r_prefix="") { $sel_id = intval($sel_id); $sql = "SELECT * FROM ".$this->table." WHERE ".$this->pid."=".$sel_id.""; if ( $order != "" ) { $sql .= " ORDER BY $order"; } $result = $this->db->query($sql); $count = $this->db->getRowsNum($result); if ( $count == 0 ) { return $parray; } while ( $row = $this->db->fetchArray($result) ) { $row['prefix'] = $r_prefix."."; array_push($parray, $row); $parray = $this->getChildTreeArray($row[$this->id],$order,$parray,$row['prefix']); } return $parray; } } ?>