1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
18:
19: defined('XOOPS_ROOT_PATH') || exit('Restricted access');
20:
21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
31: class XoopsTree
32: {
33: public $table;
34: public $id;
35: public $pid;
36: public $order;
37: public $title;
38: public $db;
39:
40:
41:
42: 43: 44: 45: 46:
47: public function __construct($table_name, $id_name, $pid_name)
48: {
49: $GLOBALS['xoopsLogger']->addDeprecated("Class '" . __CLASS__ . "' is deprecated, check 'XoopsObjectTree' in tree.php");
50: $this->db = XoopsDatabaseFactory::getDatabaseConnection();
51: $this->table = $table_name;
52: $this->id = $id_name;
53: $this->pid = $pid_name;
54: }
55:
56:
57: 58: 59: 60: 61: 62:
63: public function getFirstChild($sel_id, $order = '')
64: {
65: $sel_id = (int)$sel_id;
66: $arr = array();
67: $sql = 'SELECT * FROM ' . $this->table . ' WHERE ' . $this->pid . '=' . $sel_id . '';
68: if ($order != '') {
69: $sql .= " ORDER BY $order";
70: }
71: $result = $this->db->query($sql);
72: $count = $this->db->getRowsNum($result);
73: if ($count == 0) {
74: return $arr;
75: }
76: while ($myrow = $this->db->fetchArray($result)) {
77: $arr[] = $myrow;
78: }
79:
80: return $arr;
81: }
82:
83:
84: 85: 86: 87: 88:
89: public function getFirstChildId($sel_id)
90: {
91: $sel_id = (int)$sel_id;
92: $idarray = array();
93: $result = $this->db->query('SELECT ' . $this->id . ' FROM ' . $this->table . ' WHERE ' . $this->pid . '=' . $sel_id . '');
94: $count = $this->db->getRowsNum($result);
95: if ($count == 0) {
96: return $idarray;
97: }
98: while (list($id) = $this->db->fetchRow($result)) {
99: $idarray[] = $id;
100: }
101:
102: return $idarray;
103: }
104:
105:
106: 107: 108: 109: 110: 111: 112:
113: public function getAllChildId($sel_id, $order = '', $idarray = array())
114: {
115: $sel_id = (int)$sel_id;
116: $sql = 'SELECT ' . $this->id . ' FROM ' . $this->table . ' WHERE ' . $this->pid . '=' . $sel_id . '';
117: if ($order != '') {
118: $sql .= " ORDER BY $order";
119: }
120: $result = $this->db->query($sql);
121: $count = $this->db->getRowsNum($result);
122: if ($count == 0) {
123: return $idarray;
124: }
125: while (list($r_id) = $this->db->fetchRow($result)) {
126: $idarray[] = $r_id;
127: $idarray = $this->getAllChildId($r_id, $order, $idarray);
128: }
129:
130: return $idarray;
131: }
132:
133:
134: 135: 136: 137: 138: 139: 140:
141: public function getAllParentId($sel_id, $order = '', $idarray = array())
142: {
143: $sel_id = (int)$sel_id;
144: $sql = 'SELECT ' . $this->pid . ' FROM ' . $this->table . ' WHERE ' . $this->id . '=' . $sel_id . '';
145: if ($order != '') {
146: $sql .= " ORDER BY $order";
147: }
148: $result = $this->db->query($sql);
149: list($r_id) = $this->db->fetchRow($result);
150: if ($r_id == 0) {
151: return $idarray;
152: }
153: $idarray[] = $r_id;
154: $idarray = $this->getAllParentId($r_id, $order, $idarray);
155:
156: return $idarray;
157: }
158:
159:
160:
161: 162: 163: 164: 165: 166: 167:
168: public function getPathFromId($sel_id, $title, $path = '')
169: {
170: $sel_id = (int)$sel_id;
171: $result = $this->db->query('SELECT ' . $this->pid . ', ' . $title . ' FROM ' . $this->table . ' WHERE ' . $this->id . "=$sel_id");
172: if ($this->db->getRowsNum($result) == 0) {
173: return $path;
174: }
175: list($parentid, $name) = $this->db->fetchRow($result);
176: $myts = MyTextSanitizer::getInstance();
177: $name = $myts->htmlspecialchars($name);
178: $path = '/' . $name . $path . '';
179: if ($parentid == 0) {
180: return $path;
181: }
182: $path = $this->getPathFromId($parentid, $title, $path);
183:
184: return $path;
185: }
186:
187:
188:
189:
190: 191: 192: 193: 194: 195: 196: 197:
198: public function makeMySelBox($title, $order = '', $preset_id = 0, $none = 0, $sel_name = '', $onchange = '')
199: {
200: if ($sel_name == '') {
201: $sel_name = $this->id;
202: }
203: $myts = MyTextSanitizer::getInstance();
204: echo "<select name='" . $sel_name . "'";
205: if ($onchange != '') {
206: echo " onchange='" . $onchange . "'";
207: }
208: echo ">\n";
209: $sql = 'SELECT ' . $this->id . ', ' . $title . ' FROM ' . $this->table . ' WHERE ' . $this->pid . '=0';
210: if ($order != '') {
211: $sql .= " ORDER BY $order";
212: }
213: $result = $this->db->query($sql);
214: if ($none) {
215: echo "<option value='0'>----</option>\n";
216: }
217: while (list($catid, $name) = $this->db->fetchRow($result)) {
218: $sel = '';
219: if ($catid == $preset_id) {
220: $sel = " selected";
221: }
222: echo "<option value='$catid'$sel>$name</option>\n";
223: $sel = '';
224: $arr = $this->getChildTreeArray($catid, $order);
225: foreach ($arr as $option) {
226: $option['prefix'] = str_replace('.', '--', $option['prefix']);
227: $catpath = $option['prefix'] . ' ' . $myts->htmlspecialchars($option[$title]);
228: if ($option[$this->id] == $preset_id) {
229: $sel = " selected";
230: }
231: echo "<option value='" . $option[$this->id] . "'$sel>$catpath</option>\n";
232: $sel = '';
233: }
234: }
235: echo "</select>\n";
236: }
237:
238:
239: 240: 241: 242: 243: 244: 245: 246:
247: public function getNicePathFromId($sel_id, $title, $funcURL, $path = '')
248: {
249: $path = !empty($path) ? ' : ' . $path : $path;
250: $sel_id = (int)$sel_id;
251: $sql = 'SELECT ' . $this->pid . ', ' . $title . ' FROM ' . $this->table . ' WHERE ' . $this->id . "=$sel_id";
252: $result = $this->db->query($sql);
253: if ($this->db->getRowsNum($result) == 0) {
254: return $path;
255: }
256: list($parentid, $name) = $this->db->fetchRow($result);
257: $myts = MyTextSanitizer::getInstance();
258: $name = $myts->htmlspecialchars($name);
259: $path = "<a href='" . $funcURL . '&' . $this->id . '=' . $sel_id . "'>" . $name . '</a>' . $path . '';
260: if ($parentid == 0) {
261: return $path;
262: }
263: $path = $this->getNicePathFromId($parentid, $title, $funcURL, $path);
264:
265: return $path;
266: }
267:
268:
269:
270: 271: 272: 273: 274: 275:
276: public function getIdPathFromId($sel_id, $path = '')
277: {
278: $sel_id = (int)$sel_id;
279: $result = $this->db->query('SELECT ' . $this->pid . ' FROM ' . $this->table . ' WHERE ' . $this->id . "=$sel_id");
280: if ($this->db->getRowsNum($result) == 0) {
281: return $path;
282: }
283: list($parentid) = $this->db->fetchRow($result);
284: $path = '/' . $sel_id . $path . '';
285: if ($parentid == 0) {
286: return $path;
287: }
288: $path = $this->getIdPathFromId($parentid, $path);
289:
290: return $path;
291: }
292:
293: 294: 295: 296: 297: 298: 299: 300: 301:
302: public function getAllChild($sel_id = 0, $order = '', $parray = array())
303: {
304: $sel_id = (int)$sel_id;
305: $sql = 'SELECT * FROM ' . $this->table . ' WHERE ' . $this->pid . '=' . $sel_id . '';
306: if ($order != '') {
307: $sql .= " ORDER BY $order";
308: }
309: $result = $this->db->query($sql);
310: $count = $this->db->getRowsNum($result);
311: if ($count == 0) {
312: return $parray;
313: }
314: while ($row = $this->db->fetchArray($result)) {
315: $parray[] = $row;
316: $parray = $this->getAllChild($row[$this->id], $order, $parray);
317: }
318:
319: return $parray;
320: }
321:
322: 323: 324: 325: 326: 327: 328: 329: 330:
331: public function getChildTreeArray($sel_id = 0, $order = '', $parray = array(), $r_prefix = '')
332: {
333: $sel_id = (int)$sel_id;
334: $sql = 'SELECT * FROM ' . $this->table . ' WHERE ' . $this->pid . '=' . $sel_id . '';
335: if ($order != '') {
336: $sql .= " ORDER BY $order";
337: }
338: $result = $this->db->query($sql);
339: $count = $this->db->getRowsNum($result);
340: if ($count == 0) {
341: return $parray;
342: }
343: while ($row = $this->db->fetchArray($result)) {
344: $row['prefix'] = $r_prefix . '.';
345: $parray[] = $row;
346: $parray = $this->getChildTreeArray($row[$this->id], $order, $parray, $row['prefix']);
347: }
348:
349: return $parray;
350: }
351: }
352: