false, 'error' => ''); // Security check if (!$user->hasRight('kundenkarte', 'read')) { $response['error'] = 'Permission denied'; echo json_encode($response); exit; } switch ($action) { case 'get': // Get single connection data if ($connectionId > 0 && $connection->fetch($connectionId) > 0) { $response['success'] = true; $response['connection'] = array( 'id' => $connection->id, 'fk_source' => $connection->fk_source, 'source_terminal' => $connection->source_terminal, 'fk_target' => $connection->fk_target, 'target_terminal' => $connection->target_terminal, 'connection_type' => $connection->connection_type, 'color' => $connection->color, 'output_label' => $connection->output_label, 'medium_type' => $connection->medium_type, 'medium_spec' => $connection->medium_spec, 'medium_length' => $connection->medium_length, 'is_rail' => $connection->is_rail, 'rail_start_te' => $connection->rail_start_te, 'rail_end_te' => $connection->rail_end_te, 'rail_phases' => $connection->rail_phases, 'excluded_te' => $connection->excluded_te, 'fk_carrier' => $connection->fk_carrier, 'position_y' => $connection->position_y, 'source_label' => $connection->source_label, 'target_label' => $connection->target_label ); } else { $response['error'] = 'Connection not found'; } break; case 'list': // List all connections for a carrier if ($carrierId > 0) { $connections = $connection->fetchByCarrier($carrierId); $result = array(); foreach ($connections as $c) { $result[] = array( 'id' => $c->id, 'fk_source' => $c->fk_source, 'source_terminal' => $c->source_terminal, 'source_label' => $c->source_label, 'source_pos' => $c->source_pos, 'source_width' => $c->source_width, 'fk_target' => $c->fk_target, 'target_terminal' => $c->target_terminal, 'target_label' => $c->target_label, 'target_pos' => $c->target_pos, 'connection_type' => $c->connection_type, 'color' => $c->getColor(), 'output_label' => $c->output_label, 'medium_type' => $c->medium_type, 'medium_spec' => $c->medium_spec, 'medium_length' => $c->medium_length, 'is_rail' => $c->is_rail, 'rail_start_te' => $c->rail_start_te, 'rail_end_te' => $c->rail_end_te, 'rail_phases' => $c->rail_phases, 'excluded_te' => $c->excluded_te, 'position_y' => $c->position_y, 'display_label' => $c->getDisplayLabel() ); } $response['success'] = true; $response['connections'] = $result; } else { $response['error'] = 'Missing carrier_id'; } break; case 'list_outputs': // List outputs for an equipment if ($equipmentId > 0) { $outputs = $connection->fetchOutputs($equipmentId); $result = array(); foreach ($outputs as $c) { $result[] = array( 'id' => $c->id, 'connection_type' => $c->connection_type, 'color' => $c->getColor(), 'output_label' => $c->output_label, 'medium_type' => $c->medium_type, 'medium_spec' => $c->medium_spec, 'medium_length' => $c->medium_length, 'display_label' => $c->getDisplayLabel() ); } $response['success'] = true; $response['outputs'] = $result; } else { $response['error'] = 'Missing equipment_id'; } break; case 'create': if (!$user->hasRight('kundenkarte', 'write')) { $response['error'] = 'Permission denied'; break; } $connection->fk_source = GETPOSTINT('fk_source'); $connection->source_terminal = GETPOST('source_terminal', 'alphanohtml') ?: 'output'; $connection->source_terminal_id = GETPOST('source_terminal_id', 'alphanohtml'); $connection->fk_target = GETPOSTINT('fk_target'); $connection->target_terminal = GETPOST('target_terminal', 'alphanohtml') ?: 'input'; $connection->target_terminal_id = GETPOST('target_terminal_id', 'alphanohtml'); $connection->connection_type = GETPOST('connection_type', 'alphanohtml'); $connection->color = GETPOST('color', 'alphanohtml'); $connection->output_label = GETPOST('output_label', 'alphanohtml'); $connection->medium_type = GETPOST('medium_type', 'alphanohtml'); $connection->medium_spec = GETPOST('medium_spec', 'alphanohtml'); $connection->medium_length = GETPOST('medium_length', 'alphanohtml'); $connection->is_rail = GETPOSTINT('is_rail'); $connection->rail_start_te = GETPOSTINT('rail_start_te'); $connection->rail_end_te = GETPOSTINT('rail_end_te'); $connection->fk_carrier = $carrierId; $connection->position_y = GETPOSTINT('position_y'); $result = $connection->create($user); if ($result > 0) { $response['success'] = true; $response['connection_id'] = $result; } else { $response['error'] = $connection->error ?: 'Create failed'; } break; case 'update': if (!$user->hasRight('kundenkarte', 'write')) { $response['error'] = 'Permission denied'; break; } if ($connection->fetch($connectionId) > 0) { $connection->fk_source = GETPOSTINT('fk_source'); $connection->source_terminal = GETPOST('source_terminal', 'alphanohtml') ?: 'output'; $connection->fk_target = GETPOSTINT('fk_target'); $connection->target_terminal = GETPOST('target_terminal', 'alphanohtml') ?: 'input'; $connection->connection_type = GETPOST('connection_type', 'alphanohtml'); $connection->color = GETPOST('color', 'alphanohtml'); $connection->output_label = GETPOST('output_label', 'alphanohtml'); $connection->medium_type = GETPOST('medium_type', 'alphanohtml'); $connection->medium_spec = GETPOST('medium_spec', 'alphanohtml'); $connection->medium_length = GETPOST('medium_length', 'alphanohtml'); $connection->is_rail = GETPOSTINT('is_rail'); $connection->rail_start_te = GETPOSTINT('rail_start_te'); $connection->rail_end_te = GETPOSTINT('rail_end_te'); $connection->rail_phases = GETPOST('rail_phases', 'alphanohtml'); $connection->excluded_te = GETPOST('excluded_te', 'alphanohtml'); $connection->position_y = GETPOSTINT('position_y'); $result = $connection->update($user); if ($result > 0) { $response['success'] = true; } else { $response['error'] = $connection->error ?: 'Update failed'; } } else { $response['error'] = 'Connection not found'; } break; case 'delete': if (!$user->hasRight('kundenkarte', 'delete')) { $response['error'] = 'Permission denied'; break; } if ($connection->fetch($connectionId) > 0) { $result = $connection->delete($user); if ($result > 0) { $response['success'] = true; } else { $response['error'] = $connection->error ?: 'Delete failed'; } } else { $response['error'] = 'Connection not found'; } break; case 'create_rail': // Create a rail/bar connection spanning multiple equipment if (!$user->hasRight('kundenkarte', 'write')) { $response['error'] = 'Permission denied'; break; } $connection->is_rail = 1; $connection->connection_type = GETPOST('connection_type', 'alphanohtml'); $connection->color = GETPOST('color', 'alphanohtml'); $connection->rail_start_te = GETPOSTINT('rail_start_te'); $connection->rail_end_te = GETPOSTINT('rail_end_te'); $connection->rail_phases = GETPOST('rail_phases', 'alphanohtml'); $connection->excluded_te = GETPOST('excluded_te', 'alphanohtml'); $connection->fk_carrier = $carrierId; $connection->position_y = GETPOSTINT('position_y'); $result = $connection->create($user); if ($result > 0) { $response['success'] = true; $response['connection_id'] = $result; } else { $response['error'] = $connection->error ?: 'Create failed'; } break; case 'create_output': // Create an output connection if (!$user->hasRight('kundenkarte', 'write')) { $response['error'] = 'Permission denied'; break; } $connection->fk_source = $equipmentId; $connection->source_terminal = 'output'; $connection->fk_target = null; $connection->connection_type = GETPOST('connection_type', 'alphanohtml'); $connection->color = GETPOST('color', 'alphanohtml'); $connection->output_label = GETPOST('output_label', 'alphanohtml'); $connection->medium_type = GETPOST('medium_type', 'alphanohtml'); $connection->medium_spec = GETPOST('medium_spec', 'alphanohtml'); $connection->medium_length = GETPOST('medium_length', 'alphanohtml'); $connection->fk_carrier = $carrierId; $connection->position_y = 0; $result = $connection->create($user); if ($result > 0) { $response['success'] = true; $response['connection_id'] = $result; } else { $response['error'] = $connection->error ?: 'Create failed'; } break; case 'list_all': // List all connections for an anlage (across all carriers) $anlageId = GETPOSTINT('anlage_id'); if ($anlageId > 0) { // Get all carriers for this anlage require_once DOL_DOCUMENT_ROOT.'/custom/kundenkarte/class/equipmentcarrier.class.php'; $carrierObj = new EquipmentCarrier($db); $carriers = $carrierObj->fetchByAnlage($anlageId); $allConnections = array(); foreach ($carriers as $carrier) { $connections = $connection->fetchByCarrier($carrier->id); foreach ($connections as $c) { $allConnections[] = array( 'id' => $c->id, 'fk_source' => $c->fk_source, 'source_terminal' => $c->source_terminal, 'source_terminal_id' => $c->source_terminal_id, 'source_label' => $c->source_label, 'fk_target' => $c->fk_target, 'target_terminal' => $c->target_terminal, 'target_terminal_id' => $c->target_terminal_id, 'target_label' => $c->target_label, 'connection_type' => $c->connection_type, 'color' => $c->getColor(), 'output_label' => $c->output_label, 'medium_type' => $c->medium_type, 'medium_spec' => $c->medium_spec, 'medium_length' => $c->medium_length, 'is_rail' => $c->is_rail, 'fk_carrier' => $c->fk_carrier ); } } $response['success'] = true; $response['connections'] = $allConnections; } else { $response['error'] = 'Missing anlage_id'; } break; case 'clear_all': // Delete all connections for an anlage if (!$user->hasRight('kundenkarte', 'delete')) { $response['error'] = 'Permission denied'; break; } $anlageId = GETPOSTINT('anlage_id'); if ($anlageId > 0) { // Get all carriers for this anlage require_once DOL_DOCUMENT_ROOT.'/custom/kundenkarte/class/equipmentcarrier.class.php'; $carrierObj = new EquipmentCarrier($db); $carriers = $carrierObj->fetchByAnlage($anlageId); $deletedCount = 0; foreach ($carriers as $carrier) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."kundenkarte_equipment_connection WHERE fk_carrier = ".((int)$carrier->id); $resql = $db->query($sql); if ($resql) { $deletedCount += $db->affected_rows($resql); } } $response['success'] = true; $response['deleted_count'] = $deletedCount; } else { $response['error'] = 'Missing anlage_id'; } break; default: $response['error'] = 'Unknown action'; } echo json_encode($response); $db->close();