Files
thetool/application/FiberPlanCable/FiberPlanCableModel.php
Daniel Spitzer 68f29ab995 Poprack
Features:

* Komplettes kabelmanagement auf Rack He Modul Basis
2025-12-02 12:48:51 +01:00

489 lines
22 KiB
PHP

<?php
class FiberPlanCableModel
{
private $description;
private $fibers;
private $diameter;
private $fiberPlanPipe_id;
private $fiberPlanPipe_sub;
private $startpoint_rack_id;
private $endpoint_rack_id;
private $startpoint_rackmodule_id;
private $endpoint_rackmodule_id;
private $startpoint_port;
private $endpoint_port;
private $startpoint_system;
private $endpoint_system;
private $lenght;
private $state;
private $responsible;
private $responsible_text;
private $address_id;
private $network_id;
private $comment;
private $parent_cable_id;
private $is_branch_cable;
private $branch_from_location;
private $branch_to_location;
private $coordinates;
public static $fibersArray = array(1 => 4, 2 => 12, 3 => 24, 4 => 24, 5 => 48, 6 => 96, 7 => 144, 8 => 144, 9 => 192, 10 => 288);
public static function find($data)
{
}
public static function create(array $data)
{
$model = new FiberPlanCable();
foreach ($data as $field => $value) {
if (property_exists(get_called_class(), $field)) {
if (substr($field, 0, 5) == "vlan_" && !$value) {
$model->$field = null;
continue;
}
$model->$field = $value;
}
}
$me = mfValuecache::singleton()->get("me");
if (!$me) {
$me = new User();
$me->loadMe();
mfValuecache::singleton()->set("me", $me);
}
if ($model->create_by === null) {
$model->create_by = $me->id;
}
if ($model->edit_by === null) {
$model->edit_by = $me->id;
}
return $model;
}
public static function getOne($id)
{
if (!is_numeric($id) || !$id) {
throw new Exception("Invalid number", 400);
}
$item = [];
$db = FronkDB::singleton();
$res = $db->select("FiberPlanCable", "*", "id=$id LIMIT 1");
if ($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new FiberPlanCable($data);
}
return $item;
}
public static function getAll()
{
$items = [];
$db = FronkDB::singleton();
$res = $db->select("FiberPlanCable", "*", "1=1");
if ($db->num_rows($res)) {
while ($data = $db->fetch_object($res)) {
$items[] = new FiberPlanCable($data);
}
}
return $items;
}
public static function getFirst()
{
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$res = $db->select("FiberPlanCable", "*", "$where ");
if ($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new FiberPlanCable($data);
if ($item->id) {
return $item;
} else {
return null;
}
}
return null;
}
public static function search($filter)
{
$items = [];
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$res = $db->select("FiberPlanCable", "*", "$where");
if ($db->num_rows($res)) {
while ($data = $db->fetch_object($res)) {
$items[] = new FiberPlanCable($data);
}
}
return $items;
}
private static function getSqlFilter($filter)
{
$where = "1=1 ";
if (array_key_exists("description", $filter) && $filter['description']) {
$description = $filter['description'];
$where .= " AND description='$description'";
}
if (array_key_exists("network_id", $filter)) {
if (is_array($filter['network_id'])) {
$ids = array_map('intval', $filter['network_id']);
$ids = array_filter($ids, function($id) { return $id > 0; });
if (!empty($ids)) {
$idList = implode(',', $ids);
$where .= " AND network_id IN ($idList)";
}
} else {
$network_id = intval($filter['network_id']);
if ($network_id > 0) {
$where .= " AND network_id=$network_id";
} elseif ($network_id === 0) {
$where .= " AND (network_id IS NULL OR network_id=0)";
}
}
}
//var_dump($filter, $where);exit;
return $where;
}
public static function getFiberPlanPipe($network_id)
{
{
$items = [];
$db = FronkDB::singleton();
$sql = "SELECT * FROM `FiberPlanPipeEndpoint`";
$res = $db->query($sql);
if ($db->num_rows($res)) {
while ($data = $db->fetch_object($res)) {
$ok = 0;
$FiberplanPipeEndpoint = new FiberPlanPipeEndpoint($data);
if ($data->fiberPlanDispatcher_id) {
if ($FiberplanPipeEndpoint->fiberPlanDispatcher->network_id == $network_id) {
$ok = 1;
}
}
if ($data->building_id) {
if ($FiberplanPipeEndpoint->building->network_id == $network_id) {
$ok = 1;
}
}
if ($data->pop_id) {
$sql = "SELECT id FROM PopNetwork WHERE pop_id='" . $data->pop_id . "' AND network_id='" . $network_id . "'";
$result = $db->query($sql);
if ($db->num_rows($result)) {
$ok = 1;
}
}
if ($ok == 1) {
$items[$FiberplanPipeEndpoint->fiberPlanPipe_id]['description'] = $FiberplanPipeEndpoint->fiberPlanPipe->description;
$items[$FiberplanPipeEndpoint->fiberPlanPipe_id]['id'] = $FiberplanPipeEndpoint->fiberPlanPipe_id;
}
}
$response['success'] = true;
$response['data'] = $items;
} else {
$response['success'] = false;
}
echo json_encode($response);
exit;
}
}
public static function getFiberPlanPipeSub($fiberplanpipe_id, $internal = 0)
{
$items = [];
$db = FronkDB::singleton();
$sql = "SELECT `FiberPlanPipe`.`id`,`type`, `type_description`, `fiberPlanPipeTemplate_id`,`pipe7x4`, `pipe14x10`,colors FROM `FiberPlanPipe`
LEFT JOIN `FiberPlanPipeTemplate` ON `FiberPlanPipeTemplate`.`id`=`FiberPlanPipe`.`fiberPlanPipeTemplate_id`
LEFT JOIN `FiberPlanPipeManufacturer` ON `FiberPlanPipeTemplate`.`fiberPlanPipeManufacturer_id`=`FiberPlanPipeManufacturer`.`id`
WHERE `FiberPlanPipe`.`id`='" . $fiberplanpipe_id . "'
";
$res = $db->query($sql);
$buildings = FiberPlanPipeModel::getBuildingInfoAll();
if ($db->num_rows($res)) {
while ($data = $db->fetch_array($res)) {
$items[] = $data;
}
$response['success'] = true;
$response['data'] = $items;
$response['variables']['type_description'] = FiberPlanPipeModel::$type_descrition_definition;
} else {
$response['success'] = false;
}
if ($internal == 0) {
echo json_encode($response);
exit;
} else {
return $response;
}
}
public static function getLineworkerAddresses()
{
$items = [];
$db = FronkDB::singleton();
$sql = "SELECT `Addresstype`.`id`,`Address`.`company` FROM `Addresstype`
INNER JOIN `Address` ON (`Address`.`id`=`Addresstype`.`address_id`)
WHERE `type` = 'lineworker' ORDER by `Address`.`company` ";
$res = $db->query($sql);
if ($db->num_rows($res)) {
while ($data = $db->fetch_object($res)) {
$items[] = new FiberPlanCable($data);
}
}
return $items;
}
public static function getCableRoute($cable_id) {
$route = [];
$db = FronkDB::singleton();
// SQL-Abfrage mit object_type für Dispatcher
$sql = "SELECT
fcs.station_order,
fcs.station_type,
fcs.station_id,
CASE
WHEN fcs.station_type = 'pop' THEN p.name
WHEN fcs.station_type = 'dispatcher' THEN d.description
END as station_name,
CASE
WHEN fcs.station_type = 'pop' THEN p.gps_lat
WHEN fcs.station_type = 'dispatcher' THEN d.gps_lat
END as gps_lat,
CASE
WHEN fcs.station_type = 'pop' THEN p.gps_long
WHEN fcs.station_type = 'dispatcher' THEN d.gps_long
END as gps_long,
d.object_type
FROM FiberPlanCableStation fcs
LEFT JOIN Pop p ON fcs.station_type = 'pop' AND fcs.station_id = p.id
LEFT JOIN FiberPlanDispatcher d ON fcs.station_type = 'dispatcher' AND fcs.station_id = d.id
WHERE fcs.cable_id = " . intval($cable_id) . "
ORDER BY fcs.station_order ASC";
$res = $db->query($sql);
if ($db->num_rows($res)) {
while ($data = $db->fetch_array($res)) {
$route[] = [
'order' => $data['station_order'],
'type' => $data['station_type'],
'id' => $data['station_id'],
'name' => $data['station_name'],
'gps_lat' => $data['gps_lat'],
'gps_long' => $data['gps_long'],
'object_type' => $data['object_type'] // Neu: object_type hinzugefügt
];
}
}
return $route;
}
public static function generateEndpoint($endpoint, $destination, $html = 1)
{
$endpoint = json_decode($endpoint, true);
$popid = $endpoint['pop_id'];
$racks = [];
$db = FronkDB::singleton();
$sql = "SELECT `id`, `pop_id`, `name`, `he` FROM `Poprack` WHERE `pop_id`='" . $popid . "' ";
$res = $db->query($sql);
if ($db->num_rows($res)) {
while ($data = $db->fetch_array($res)) {
$racks[$data['id']] = $data['name'];
}
}
$sql = "SELECT `Poprackmodule`.`id`, `Poprackmodule`.`poprack_id`, `Poprackmodule`.`type`, `Poprackmodule`.`device_id`, `Poprackmodule`.`name`, `Poprackmodule`.`start_he`, `Poprackmodule`.`end_he`, `Poprackmodule`.`ports`, `Poprackmodule`.`plug`, `Poprackmodule`.`width`, `Poprackmodule`.`position`,pop_id FROM `Poprackmodule`
INNER JOIN `Poprack` ON (`Poprack`.`id`=`Poprackmodule`.`poprack_id`)
WHERE `Poprack`.`pop_id`= '" . $popid . "'";
$res = $db->query($sql);
if ($db->num_rows($res)) {
while ($data = $db->fetch_array($res)) {
if ($data['plug'] == 1) $plug = 'LC/APC';
elseif ($data['plug'] == 2) $plug = 'SC/APC';
elseif ($data['plug'] == 3) $plug = 'E2000/APC';
$racksmodules[$data['poprack_id']][$data['id']]['name'] = $data['name'];
$racksmodules[$data['poprack_id']][$data['id']]['plug'] = $plug;
$racksmodules[$data['poprack_id']][$data['id']]['ports'] = $data['ports'];
$racksmodules[$data['poprack_id']][$data['id']]['start_he'] = $data['start_he'];
}
}
$counter = 1;
$oldrack = "";
if ($html == "0") {
$return['racks'] = $racks;
$return['racksmodules'] = $racksmodules;
return $return;
}
foreach ($endpoint['data'] as $module) {
unset($option);
if ($counter === 1) {
foreach ($racks as $rackid => $rack) {
if ($rackid == $module['rack_id']) $selected = 'selected="selected"';
else $selected = "";
$option .= '<option ' . $selected . ' value="' . $rackid . '">' . $rack . '</option>';
}
$return = '<div class="form-group row">
<label class="col-lg-2 col-form-label" for="lenght">Schrank <i data-popid="5" class="fa-regular fa-circle-plus add-rack"></i></label>
<div class="col-lg-5">
<select name="destination' . $destination . '_poprack_id" required="required" class="select2 form-control poprack_id">' . $option . '</select>
</div>
</div>';
$return .= '<div class="destinationmodules">';
unset($option);
foreach ($racksmodules[$module['rack_id']] as $racksmoduleid => $racksmodule) {
if ($racksmoduleid == $module['module_id']) $selected = 'selected="selected"';
else $selected = "";
$option .= '<option ' . $selected . ' data-ports="' . $racksmodule['ports'] . '" value="' . $racksmoduleid . '">(HE:' . $racksmodule['start_he'] . ') ' . $racksmodule['name'] . ' (' . $racksmodule['plug'] . ' ' . $racksmodule['ports'] . 'p)</option>';
}
$return .= '<div class="form-group module-row row">
<label class="col-lg-2 col-form-label" for="lenght"><span class="fibersum">(1-24)</span><i class="fa-regular fa-circle-plus add-module" data-poprackid="3"></i></label>
<div class="col-lg-5">
<select name="destination' . $destination . '_poprackmodule_id[]" required="required" class="select2 form-control poprackmodule_id">' . $option . '</select>
</div>
<div class="col-lg-4">
<div class="form-row">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">von</div>
</div>
<input name="destination' . $destination . '_poprackmodule_start[]" value="' . $module["startport"] . '" type="number" class="form-control ports-start">
</div>
</div>
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">bis</div>
</div>
<input name="destination' . $destination . '_poprackmodule_end[]" value="' . $module["endport"] . '" type="number" class="form-control ports-end">
<input style="display:none" name="destination' . $destination . '_poprackmodule_rackid[]" value="' . $module["rack_id"] . '" type="number" class="form-control ports-rackid">
</div>
</div></div>
</div>
</div>';
} else if ($oldrack != $module['rack_id']) {
unset($option);
foreach ($racks as $rackid => $rack) {
if ($rackid == $module['rack_id']) $selected = 'selected="selected"';
else $selected = "";
$option .= '<option ' . $selected . ' value="' . $rackid . '">' . $rack . '</option>';
}
$return .= '</div>';
$return .= '<div class="form-group row" style="border-top: 1px dotted #9b9b9b;padding-top: 15px;">
<label class="col-lg-2 col-form-label" for="lenght">Schrank <i data-popid="5" class="fa-regular fa-circle-minus remove-rack"></i></label>
<div class="col-lg-5">
<select name="destination' . $destination . '_poprack_id" required="required" class="select2 form-control poprack_id">' . $option . '</select>
</div>
</div>';
$return .= '<div class="destinationmodules">';
unset($option);
foreach ($racksmodules[$module['rack_id']] as $racksmoduleid => $racksmodule) {
if ($racksmoduleid == $module['module_id']) $selected = 'selected="selected"';
else $selected = "";
$option .= '<option ' . $selected . ' data-ports="' . $racksmodule['ports'] . '" value="' . $racksmoduleid . '">(HE:' . $racksmodule['start_he'] . ') ' . $racksmodule['name'] . ' (' . $racksmodule['plug'] . ' ' . $racksmodule['ports'] . 'p)</option>';
}
$return .= '<div class="form-group module-row row">
<label class="col-lg-2 col-form-label" for="lenght"><span class="fibersum">(1-24)</span><i class="fa-regular fa-circle-plus add-module" data-poprackid="' . $module['rack_id'] . '"></i></label>
<div class="col-lg-5">
<select name="destination' . $destination . '_poprackmodule_id[]" required="required" class="select2 form-control poprackmodule_id">' . $option . '</select>
</div>
<div class="col-lg-4">
<div class="form-row">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">von</div>
</div>
<input name="destination' . $destination . '_poprackmodule_start[]" value="' . $module["startport"] . '" type="number" class="form-control ports-start">
</div>
</div>
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">bis</div>
</div>
<input name="destination' . $destination . '_poprackmodule_end[]" value="' . $module["endport"] . '" type="number" class="form-control ports-end">
<input style="display:none" name="destination' . $destination . '_poprackmodule_rackid[]" value="' . $module["rack_id"] . '" type="number" class="form-control ports-rackid">
</div>
</div></div>
</div>
</div>';
} else {
unset($option);
foreach ($racksmodules[$module['rack_id']] as $racksmoduleid => $racksmodule) {
if ($racksmoduleid == $module['module_id']) $selected = 'selected="selected"';
else $selected = "";
$option .= '<option ' . $selected . ' data-ports="' . $racksmodule['ports'] . '" value="' . $racksmoduleid . '">(HE:' . $racksmodule['start_he'] . ') ' . $racksmodule['name'] . ' (' . $racksmodule['plug'] . ' ' . $racksmodule['ports'] . 'p)</option>';
}
$return .= '<div class="form-group module-row row">
<label class="col-lg-2 col-form-label" for="lenght"><span class="fibersum">(1-24)</span><i class="fa-regular fa-circle-minus remove-module" data-poprackid="' . $module['rack_id'] . '"></i></label>
<div class="col-lg-5">
<select name="destination' . $destination . '_poprackmodule_id[]" required="required" class="select2 form-control poprackmodule_id">' . $option . '</select>
</div>
<div class="col-lg-4">
<div class="form-row">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">von</div>
</div>
<input name="destination' . $destination . '_poprackmodule_start[]" value="' . $module["startport"] . '" type="number" class="form-control ports-start">
</div>
</div>
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">bis</div>
</div>
<input name="destination' . $destination . '_poprackmodule_end[]" value="' . $module["endport"] . '" type="number" class="form-control ports-end">
<input style="display:none" name="destination' . $destination . '_poprackmodule_rackid[]" value="' . $module["rack_id"] . '" type="number" class="form-control ports-rackid">
</div>
</div></div>
</div>
</div>';
}
$oldrack = $module['rack_id'];
$counter++;
}
$return .= "</div>";
return $return;
}
}