77 lines
3.2 KiB
PHP
77 lines
3.2 KiB
PHP
<?php
|
|
namespace Contabilidad\Common\Controller;
|
|
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
|
use Psr\Http\Message\ResponseInterface as Response;
|
|
use ProVM\Common\Define\Controller\Json;
|
|
use Contabilidad\Common\Service\FileHandler as Handler;
|
|
use ProVM\Common\Factory\Model as Factory;
|
|
use Contabilidad\Cuenta;
|
|
|
|
class Files {
|
|
use Json;
|
|
|
|
public function __invoke(Request $request, Response $response, Handler $handler): Response {
|
|
$files = $handler->listFiles();
|
|
usort($files, function($a, $b) {
|
|
$f = strcmp($a->folder, $b->folder);
|
|
if ($f == 0) {
|
|
return strcmp($a->filename, $b->filename);
|
|
}
|
|
return $f;
|
|
});
|
|
return $this->withJson($response, compact('files'));
|
|
}
|
|
public function upload(Request $request, Response $response, Handler $handler, Factory $factory): Response {
|
|
$post = $request->getParsedBody();
|
|
$cuenta = $factory->find(Cuenta::class)->one($post['cuenta']);
|
|
$file = $request->getUploadedFiles()['archivo'];
|
|
$new_name = implode(' - ', [$cuenta->nombre, $cuenta->categoria()->nombre, $post['fecha']]);
|
|
$output = [
|
|
'input' => [
|
|
'name' => $file->getClientFilename(),
|
|
'type' => $file->getClientMediaType(),
|
|
'size' => $file->getSize(),
|
|
'error' => $file->getError()
|
|
],
|
|
'new_name' => $new_name,
|
|
'uploaded' => $handler->uploadFile($file, $new_name)
|
|
];
|
|
return $this->withJson($response, $output);
|
|
}
|
|
public function get(Request $request, Response $response, Handler $handler, $folder, $filename): Response {
|
|
$file = $handler->getFile($folder, $filename);
|
|
return $response
|
|
->withHeader('Content-Type', $handler->getType($folder))
|
|
->withHeader('Content-Disposition', 'attachment; filename=' . $filename)
|
|
->withAddedHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
|
|
->withHeader('Cache-Control', 'post-check=0, pre-check=0')
|
|
->withHeader('Pragma', 'no-cache')
|
|
->withBody($file);
|
|
}
|
|
public function edit(Request $request, Response $response, Handler $handler, Factory $factory, $folder, $filename): Response {
|
|
$post = json_decode($request->getBody());
|
|
$cuenta = $factory->find(Cuenta::class)->one($post->cuenta);
|
|
$new_name = implode(' - ', [$cuenta->nombre, $cuenta->categoria()->nombre, $post->fecha]);
|
|
$output = [
|
|
'input' => [
|
|
'folder' => $folder,
|
|
'filename' => $filename,
|
|
'post' => $post
|
|
],
|
|
'edited' => $handler->editFilename($folder, $filename, $new_name)
|
|
];
|
|
return $this->withJson($response, $output);
|
|
}
|
|
public function delete(Request $request, Response $response, Handler $handler, $folder, $filename): Response {
|
|
$output = [
|
|
'input' => [
|
|
'folder' => $folder,
|
|
'filename' => $filename
|
|
],
|
|
'deleted' => $handler->deleteFile($folder, $filename)
|
|
];
|
|
return $this->withJson($response, $output);
|
|
}
|
|
}
|