* * 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 3 of the License, or (at your * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ if (is_admin() === false) { $status = array('status' => 1, 'message' => 'You need to be admin'); } else { if (isset($_POST['viewtype'])) { if ($_POST['viewtype'] == 'fulllist') { $count_query = "SELECT count(device_id) from devices"; $deps_query = "SELECT a.device_id as id, a.hostname as hostname, a.sysName as sysName, GROUP_CONCAT(b.hostname) as parents, GROUP_CONCAT(b.device_id) as parentid FROM devices as a LEFT JOIN device_relationships a1 ON a.device_id=a1.child_device_id LEFT JOIN devices b ON b.device_id=a1.parent_device_id GROUP BY a.device_id, a.hostname, a.sysName"; if (isset($_POST['format'])) { if (isset($_POST['searchPhrase']) && !empty($_POST['searchPhrase'])) { #This is a bit ugly $deps_query = "SELECT * FROM (".$deps_query; $deps_query .= " ) as t WHERE t.hostname LIKE ? OR t.parents LIKE ? OR t.sysname LIKE ? "; $deps_query .= " ORDER BY t.hostname"; } else { $deps_query .= " ORDER BY a.hostname"; } if (is_numeric($_POST['rowCount']) && is_numeric($_POST['current'])) { $rows = $_POST['rowCount']; $current = $_POST['current']; $deps_query .= " LIMIT ".$rows * ($current - 1).", ".$rows; } } else { $deps_query .= " ORDER BY a.hostname"; } if (isset($_POST['format']) && !empty($_POST['searchPhrase'])) { $searchphrase = '%'.mres($_POST['searchPhrase']).'%'; $device_deps = dbFetchRows($deps_query, array($searchphrase, $searchphrase, $searchphrase)); } else { $device_deps = dbFetchRows($deps_query); } if (isset($_POST['searchPhrase']) && !empty($_POST['searchPhrase'])) { $rec_count = count($device_deps); } else { $rec_count = dbFetchCell($count_query); } if (isset($_POST['format'])) { $res_arr = array(); foreach ($device_deps as $myrow) { if ($myrow['parents'] == null || $myrow['parents'] == '') { $parent = 'None'; } else { $parent = $myrow['parents']; } $hostname = get_device_name($myrow); array_push($res_arr, array( "deviceid" => $myrow['id'], "hostname" => $myrow['hostname'], "sysname" => $hostname, "parent" => $parent, "parentid" => $myrow['parentid'] )); } $status = array('current' => $_POST['current'], 'rowCount' => $_POST['rowCount'], 'rows' => $res_arr, 'total' => $rec_count); } else { $status = array('status' => 0, 'deps' => $device_deps); } } else { // Get childs from parent id(s) if ($_POST['viewtype'] == 'fromparent') { if ($_POST['parent_ids'] == 0) { $device_deps = dbFetchRows('SELECT `device_id`,`hostname` from `devices` as a LEFT JOIN `device_relationships` as b ON b.`child_device_id` = a.`device_id` WHERE b.`child_device_id` is null ORDER BY `hostname`'); } else { $parents = implode(',', $_POST['parent_ids']); $device_deps = dbFetchRows("SELECT a.device_id as device_id, a.hostname as hostname, GROUP_CONCAT(b.hostname) as parents, GROUP_CONCAT(b.device_id) as parentid FROM devices as a LEFT JOIN device_relationships a1 ON a.device_id=a1.child_device_id LEFT JOIN devices b ON b.device_id=a1.parent_device_id GROUP BY a.device_id, a.hostname HAVING parentid = ?", array($parents)); } $status = array('status' => 0, 'deps' => $device_deps); } } } else { // Find devices by child. if (!is_numeric($_POST['device_id'])) { $status = array('status' => 1, 'message' => 'Wrong device id!'); } else { $deps_query = 'SELECT `device_id`, `hostname` FROM `devices` AS a INNER JOIN `device_relationships` AS b ON a.`device_id` = b.`parent_device_id` WHERE '; // device_id == 0 is the case where we have no parents. if ($_POST['device_id'] == 0) { $device_deps = dbFetchRows($deps_query. ' b.`parent_device_id` is null OR b.`parent_device_id` = 0 '); } else { $device_deps = dbFetchRows($deps_query. ' b.`child_device_id` = ?', array($_POST['device_id'])); } $status = array('status' => 0, 'deps' => $device_deps); } } } header('Content-Type: application/json'); echo _json_encode($status);