59 lines
1.8 KiB
PHP
59 lines
1.8 KiB
PHP
<?php
|
|
require __DIR__ . '/_bootstrap.php';
|
|
|
|
/**
|
|
* @OA\Get(
|
|
* path="/owner-documents.php",
|
|
* tags={"Documents"},
|
|
* summary="Owner personal documents with uploaded files",
|
|
* security={{"bearerAuth":{}}},
|
|
* @OA\Parameter(name="owner_id", in="query", required=true, @OA\Schema(type="integer")),
|
|
* @OA\Parameter(name="slug", in="query", @OA\Schema(type="string")),
|
|
* @OA\Response(response=200, description="OK", @OA\JsonContent(
|
|
* @OA\Property(property="data", type="array",
|
|
* @OA\Items(ref="#/components/schemas/DocumentRequirement"))
|
|
* )),
|
|
* @OA\Response(response=403, ref="#/components/responses/Forbidden")
|
|
* )
|
|
*/
|
|
require_method('GET');
|
|
$user = require_auth($pdo);
|
|
$ownerId = (int) query('owner_id', 0);
|
|
$slug = query('slug');
|
|
|
|
if ($ownerId <= 0) {
|
|
json_error(422, 'owner_id is required');
|
|
}
|
|
if (!user_owns_owner($pdo, $user, $ownerId)) {
|
|
json_error(403, 'No access to this owner');
|
|
}
|
|
|
|
$sql = 'SELECT d.*, s.section_name
|
|
FROM documents d
|
|
LEFT JOIN sections s ON s.idsections = d.idsections';
|
|
$params = [];
|
|
if ($slug !== null && $slug !== '') {
|
|
$sql .= ' JOIN pages p ON p.idpages = d.page_id WHERE p.slug = ?';
|
|
$params[] = $slug;
|
|
}
|
|
$sql .= ' ORDER BY s.section_name, d.document_name';
|
|
|
|
$docStmt = $pdo->prepare($sql);
|
|
$docStmt->execute($params);
|
|
$documents = $docStmt->fetchAll();
|
|
|
|
$filesStmt = $pdo->prepare('SELECT * FROM doc_storage WHERE owner_id = ?');
|
|
$filesStmt->execute([$ownerId]);
|
|
$filesByDoc = [];
|
|
foreach ($filesStmt->fetchAll() as $f) {
|
|
$filesByDoc[(int) $f['document_id']][] = present_file($f);
|
|
}
|
|
|
|
$result = array_map(function ($d) use ($filesByDoc) {
|
|
$tpl = present_document_template($d);
|
|
$tpl['files'] = $filesByDoc[(int) $d['document_id']] ?? [];
|
|
return $tpl;
|
|
}, $documents);
|
|
|
|
json_data($result);
|