index-tree-simple.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/auth.php");
  3. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/languages/" . HTML_LANG . ".php");
  4. unset($_POST);
  5. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/header.php");
  6. print_device_submenu($page_url);
  7. ?>
  8. <div id="cont">
  9. <br>
  10. <?php
  11. function print_child($device_id, $hash, $processed_ids = array())
  12. {
  13. // Защита от циклических ссылок - проверяем, не обрабатывали ли уже это устройство
  14. if (in_array($device_id, $processed_ids)) {
  15. return '';
  16. }
  17. // Добавляем текущее устройство в список обработанных
  18. $processed_ids[] = $device_id;
  19. foreach ($hash as $device) {
  20. if (!isset($device['parent_id'])) { continue; }
  21. if ($device['parent_id'] !== $device_id) { continue; }
  22. print '<ul><li>';
  23. print_url($device['parent_port'].'->'.$device['uplink'].'&nbsp'.$device['name'].'&nbsp::&nbsp<small><i>['.$device['model_name'].']</i></small>','/admin/devices/editdevice.php?id='.$device['id']);
  24. print_child($device['id'],$hash);
  25. print '</li></ul>';
  26. }
  27. }
  28. $dSQL = 'SELECT D.*,DM.model_name FROM devices as D,device_models as DM WHERE D.device_model_id=DM.id AND (deleted=0 and device_type<=2)';
  29. $switches = get_records_sql($db_link,$dSQL);
  30. $dev_hash = NULL;
  31. // Сначала соберем все устройства
  32. foreach ($switches as $row) {
  33. $dev_id = $row['id'];
  34. $dev_hash[$dev_id]['id'] = $dev_id;
  35. $dev_hash[$dev_id]['name'] = $row['device_name'];
  36. $dev_hash[$dev_id]['type'] = $row['device_type'];
  37. $dev_hash[$dev_id]['model_name'] = $row['model_name'];
  38. $dev_hash[$dev_id]['parent_id'] = null; // инициализируем
  39. $pSQL = 'SELECT * FROM device_ports WHERE uplink = 1 and device_id='.$dev_id;
  40. $uplink = get_record_sql($db_link,$pSQL);
  41. if (empty($uplink)) { continue; }
  42. if (empty($uplink['target_port_id'])) { continue; }
  43. $dev_hash[$dev_id]['uplink'] = $uplink['port_name'];
  44. $parentSQL = 'SELECT * FROM device_ports WHERE device_ports.id='.$uplink['target_port_id'];
  45. $parent = get_record_sql($db_link,$parentSQL);
  46. // Защита от ссылки на самого себя
  47. if ($parent['device_id'] == $dev_id) {
  48. // Устройство ссылается само на себя - пропускаем эту связь
  49. $dev_hash[$dev_id]['parent_id'] = null;
  50. continue;
  51. }
  52. $dev_hash[$dev_id]['parent_id'] = $parent['device_id'];
  53. $dev_hash[$dev_id]['parent_port'] = $parent['port_name'];
  54. }
  55. print '<div id="html">';
  56. foreach ($dev_hash as $device) {
  57. // Пропускаем устройства, которые имеют родителя (они будут отображены как дети)
  58. if (isset($device['parent_id']) && $device['parent_id'] !== null) {
  59. continue;
  60. }
  61. print '<ul><li>';
  62. print_url($device['name'],'/admin/devices/editdevice.php?id='.$device['id']);
  63. print print_child($device['id'], $dev_hash, array());
  64. print '</li>';
  65. print '</ul>';
  66. }
  67. print '</div>';
  68. require_once ($_SERVER['DOCUMENT_ROOT']."/inc/footer.php");
  69. ?>