mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-03-01 12:59:36 +00:00
Fix 304 response body, parse_url safety, and location/stock consistency
- Use empty Response instead of JsonResponse(null) for 304 Not Modified to avoid sending "null" as response body - Guard parse_url() result with is_string() since it can return false for malformed URLs - Move storage location tracking inside the availability check so expired and unknown-quantity lots don't contribute locations
This commit is contained in:
parent
789f17a88d
commit
1cefffe03f
2 changed files with 9 additions and 8 deletions
|
|
@ -97,7 +97,7 @@ class KiCadApiController extends AbstractController
|
||||||
$etag = '"' . md5(json_encode($data)) . '"';
|
$etag = '"' . md5(json_encode($data)) . '"';
|
||||||
|
|
||||||
if ($request->headers->get('If-None-Match') === $etag) {
|
if ($request->headers->get('If-None-Match') === $etag) {
|
||||||
return new JsonResponse(null, Response::HTTP_NOT_MODIFIED);
|
return new Response('', Response::HTTP_NOT_MODIFIED);
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = new JsonResponse($data);
|
$response = new JsonResponse($data);
|
||||||
|
|
|
||||||
|
|
@ -294,15 +294,16 @@ class KiCadHelper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add stock quantity and storage locations
|
//Add stock quantity and storage locations (only count non-expired lots with known quantity)
|
||||||
$totalStock = 0;
|
$totalStock = 0;
|
||||||
$locations = [];
|
$locations = [];
|
||||||
foreach ($part->getPartLots() as $lot) {
|
foreach ($part->getPartLots() as $lot) {
|
||||||
if (!$lot->isInstockUnknown() && $lot->isExpired() !== true) {
|
$isAvailable = !$lot->isInstockUnknown() && $lot->isExpired() !== true;
|
||||||
|
if ($isAvailable) {
|
||||||
$totalStock += $lot->getAmount();
|
$totalStock += $lot->getAmount();
|
||||||
}
|
if ($lot->getAmount() > 0 && $lot->getStorageLocation() !== null) {
|
||||||
if ($lot->getAmount() > 0 && $lot->getStorageLocation() !== null) {
|
$locations[] = $lot->getStorageLocation()->getName();
|
||||||
$locations[] = $lot->getStorageLocation()->getName();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$result['fields']['Stock'] = $this->createField($totalStock);
|
$result['fields']['Stock'] = $this->createField($totalStock);
|
||||||
|
|
@ -443,8 +444,8 @@ class KiCadHelper
|
||||||
if ($firstPdf === null) {
|
if ($firstPdf === null) {
|
||||||
$extension = $attachment->getExtension();
|
$extension = $attachment->getExtension();
|
||||||
if ($extension === null && $attachment->hasExternal()) {
|
if ($extension === null && $attachment->hasExternal()) {
|
||||||
$urlPath = parse_url($attachment->getExternalPath(), PHP_URL_PATH) ?? '';
|
$urlPath = parse_url($attachment->getExternalPath(), PHP_URL_PATH);
|
||||||
$extension = strtolower(pathinfo($urlPath, PATHINFO_EXTENSION));
|
$extension = is_string($urlPath) ? strtolower(pathinfo($urlPath, PATHINFO_EXTENSION)) : null;
|
||||||
}
|
}
|
||||||
if ($extension === 'pdf') {
|
if ($extension === 'pdf') {
|
||||||
$firstPdf = $attachment;
|
$firstPdf = $attachment;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue