|
|
|
@ -8,9 +8,100 @@ SPDX-License-Identifier: GPL-3.0-or-later |
|
|
|
|
*****************************************************************************/ |
|
|
|
|
|
|
|
|
|
include("includes.php"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isset($_REQUEST['id'])) { |
|
|
|
|
$id = (int) $_REQUEST['id'] or $id = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// look for parents |
|
|
|
|
// function to look for parents and create a new array for every child |
|
|
|
|
function location($parents, $parent = 0) { |
|
|
|
|
// loop array to check |
|
|
|
|
foreach($parents[$parent] as $child) { |
|
|
|
|
if(isset($parents[$child])) { |
|
|
|
|
// element has children |
|
|
|
|
$children[$child] = location($parents, $child); |
|
|
|
|
} else { |
|
|
|
|
// no children, set NULL |
|
|
|
|
$children[$child] = NULL; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// and again... |
|
|
|
|
return $children; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// recursive children check to template |
|
|
|
|
function checkchildren($locations, $level) { |
|
|
|
|
global $location_options; |
|
|
|
|
global $location_names; |
|
|
|
|
global $location_parent; |
|
|
|
|
|
|
|
|
|
foreach ($locations as $parent=>$child) { |
|
|
|
|
$row = str_repeat("- ", $level) . $location_names[$parent]; |
|
|
|
|
$location_options[$parent] = $row; |
|
|
|
|
if (isset($child)) { |
|
|
|
|
checkchildren($child, $level+1); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// ========== ACTIONS START =================================================== |
|
|
|
|
switch ($submit = form_get_action()) { |
|
|
|
|
|
|
|
|
|
case NULL: break; |
|
|
|
|
|
|
|
|
|
case 'add': $action = ACT_ADD; break; |
|
|
|
|
case 'view': $action = ACT_VIEW; break; |
|
|
|
|
case 'edit': $action = ACT_EDIT; break; |
|
|
|
|
case 'del': $action = ACT_DELETE; break; |
|
|
|
|
|
|
|
|
|
case 'insert': |
|
|
|
|
$name = sanitize($_POST['location_name']); |
|
|
|
|
$parent = sanitize($_POST['location_parent']); |
|
|
|
|
$info = sanitize($_POST['location_info']); |
|
|
|
|
|
|
|
|
|
$sql = "INSERT INTO location ( |
|
|
|
|
location_name, location_parent, location_info |
|
|
|
|
) |
|
|
|
|
VALUE (?, ?, ?)"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$name, $parent, $info]); |
|
|
|
|
|
|
|
|
|
$id = $dbh->lastInsertId(); |
|
|
|
|
$action = ACT_VIEW; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case 'update': |
|
|
|
|
$location_name = sanitize($_POST['location_name']); |
|
|
|
|
$location_info = sanitize($_POST['location_info']); |
|
|
|
|
$parentlocation_id = sanitize($_POST['parentlocation_id']); |
|
|
|
|
$sql = "UPDATE location SET |
|
|
|
|
location_name=?, location_parent=?, location_info=? |
|
|
|
|
WHERE location_id=?"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$location_name, $parentlocation_id, $location_info, $id]); |
|
|
|
|
$action = ACT_VIEW; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
case 'delete': |
|
|
|
|
$sth = $dbh->prepare("DELETE FROM location WHERE location_id=?"); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$action = ACT_DEFAULT; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
$g_error->Add(submit_error($submit)); |
|
|
|
|
$valid = FALSE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// ========== ACTIONS END ===================================================== |
|
|
|
|
|
|
|
|
|
include("header.php"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($action == ACT_DEFAULT): |
|
|
|
|
// ========== VARIANT: default behavior ======================================= |
|
|
|
|
|
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS value, location_parent AS parent_id |
|
|
|
|
FROM location |
|
|
|
|
ORDER BY location_parent, location_sort, location_name"; |
|
|
|
@ -39,5 +130,152 @@ $smarty->assign("locations", $tree); |
|
|
|
|
|
|
|
|
|
$smarty->display("location.tpl"); |
|
|
|
|
|
|
|
|
|
include("footer.php"); |
|
|
|
|
elseif ($action == ACT_ADD): |
|
|
|
|
// ========== VARIANT: add record ============================================= |
|
|
|
|
|
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS name, |
|
|
|
|
location_parent AS parent, location_sort AS sort |
|
|
|
|
FROM location |
|
|
|
|
ORDER BY location_parent, location_sort, location_name"; |
|
|
|
|
$sth = $dbh->query($sql); |
|
|
|
|
$locations = $sth->fetchAll(); |
|
|
|
|
|
|
|
|
|
if (count($locations) > 0) { |
|
|
|
|
foreach ($locations AS $location) { |
|
|
|
|
$location_names[$location['id']] = $location['name']; |
|
|
|
|
$parents[$location['parent']][] = $location['id']; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$tree = location($parents); |
|
|
|
|
|
|
|
|
|
// create tree option list |
|
|
|
|
$location_options = array(0 => '-'); |
|
|
|
|
checkchildren($tree, 0); |
|
|
|
|
|
|
|
|
|
$smarty->assign("location_options", $location_options); |
|
|
|
|
|
|
|
|
|
$location_parent = sanitize($_GET['parent']); |
|
|
|
|
$smarty->assign("location_parent", $location_parent); |
|
|
|
|
|
|
|
|
|
$smarty->display("locationadd.tpl"); |
|
|
|
|
|
|
|
|
|
elseif ($action == ACT_VIEW): |
|
|
|
|
// ========== VARIANT: view single record ===================================== |
|
|
|
|
|
|
|
|
|
// base location |
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS name, |
|
|
|
|
location_parent AS parent_id, location_info AS info, |
|
|
|
|
CONCAT('locationview.php?location_id=', location_id) AS url |
|
|
|
|
FROM location |
|
|
|
|
WHERE location_id=?"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$location = $sth->fetch(PDO::FETCH_OBJ); |
|
|
|
|
$smarty->assign("location", $location); |
|
|
|
|
|
|
|
|
|
// crumbs |
|
|
|
|
$crumbs[] = $location; |
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS name, |
|
|
|
|
location_parent AS parent_id, |
|
|
|
|
CONCAT('locationview.php?location_id=', location_id) AS url |
|
|
|
|
FROM location |
|
|
|
|
WHERE location_id=?"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
while ($crumbs[0]->parent_id != 0) { |
|
|
|
|
$sth->execute([$crumbs[0]->parent_id]); |
|
|
|
|
$result = $sth->fetch(PDO::FETCH_OBJ); |
|
|
|
|
array_unshift($crumbs, $result); |
|
|
|
|
} |
|
|
|
|
$smarty->assign("crumbs", $crumbs); |
|
|
|
|
|
|
|
|
|
// sublocations |
|
|
|
|
$sql = "SELECT location_id AS sublocation_id, location_name AS sublocation_name, |
|
|
|
|
LEFT(location_info, 40) AS info_short, |
|
|
|
|
CHAR_LENGTH(location_info) AS info_length |
|
|
|
|
FROM location |
|
|
|
|
WHERE location_parent=? |
|
|
|
|
ORDER BY location_name"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$smarty->assign("sublocations", $sth->fetchAll()); |
|
|
|
|
|
|
|
|
|
// subnets |
|
|
|
|
$sql = "SELECT s.subnet_id, s.subnet_address, s.subnet_mask |
|
|
|
|
FROM subnet AS s LEFT JOIN subnetlocation AS l USING (subnet_id) |
|
|
|
|
WHERE l.location_id=? |
|
|
|
|
ORDER BY INET_ATON(s.subnet_address)"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$smarty->assign("subnets", $sth->fetchAll()); |
|
|
|
|
|
|
|
|
|
$smarty->display("locationview.tpl"); |
|
|
|
|
|
|
|
|
|
elseif ($action == ACT_EDIT): |
|
|
|
|
// ========== VARIANT: edit single record ===================================== |
|
|
|
|
|
|
|
|
|
// TODO implement sorting with location_sort |
|
|
|
|
|
|
|
|
|
// location |
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS name, location_parent AS parent, |
|
|
|
|
location_info AS info, location_sort AS sort |
|
|
|
|
FROM location |
|
|
|
|
WHERE location_id=?"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$location = $sth->fetch(PDO::FETCH_OBJ); |
|
|
|
|
|
|
|
|
|
$location_parent = $location->parent; |
|
|
|
|
|
|
|
|
|
$smarty->assign("location", $location); |
|
|
|
|
|
|
|
|
|
// parent location |
|
|
|
|
$sql = "SELECT location_id, location_name, location_parent |
|
|
|
|
FROM location |
|
|
|
|
WHERE location_id != ? |
|
|
|
|
ORDER BY location_name"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
|
|
|
|
|
$locations = $sth->fetchAll(); |
|
|
|
|
|
|
|
|
|
$location_counter = count($locations); |
|
|
|
|
|
|
|
|
|
$smarty->assign("location_counter", $location_counter); |
|
|
|
|
|
|
|
|
|
// any loactions? |
|
|
|
|
if ($location_counter>0) { |
|
|
|
|
foreach($locations AS $location) { |
|
|
|
|
$location_names[$location['location_id']] = $location['location_name']; |
|
|
|
|
$parents[$location['location_parent']][] = $location['location_id']; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$tree = location($parents); |
|
|
|
|
$location_options = array(0 => '-'); |
|
|
|
|
checkchildren($tree, 0); |
|
|
|
|
$smarty->assign("location_options", $location_options); |
|
|
|
|
$smarty->assign("location_parent", $location_parent); |
|
|
|
|
|
|
|
|
|
$smarty->display("locationedit.tpl"); |
|
|
|
|
|
|
|
|
|
elseif ($action == ACT_DELETE): |
|
|
|
|
// ========== VARIANT: delete record ========================================== |
|
|
|
|
|
|
|
|
|
$sql = "SELECT location_id AS id, location_name AS name FROM location WHERE location_id=?"; |
|
|
|
|
$sth = $dbh->prepare($sql); |
|
|
|
|
$sth->execute([$id]); |
|
|
|
|
$smarty->assign("location", $sth->fetch(PDO::FETCH_OBJ)); |
|
|
|
|
|
|
|
|
|
$smarty->display("locationdel.tpl"); |
|
|
|
|
|
|
|
|
|
else: |
|
|
|
|
// ========== ERROR UNKNOWN VARIANT =========================================== |
|
|
|
|
|
|
|
|
|
echo "<p>Unknown function call: Please report to system development!</p>\n"; |
|
|
|
|
|
|
|
|
|
endif; // $action == ... |
|
|
|
|
// ========== END OF VARIANTS ================================================= |
|
|
|
|
|
|
|
|
|
$smarty->display('footer.tpl'); |
|
|
|
|
?> |
|
|
|
|