XBackBone/app/Controllers/TagController.php

79 lines
2.4 KiB
PHP
Raw Normal View History

2020-03-19 08:39:32 +00:00
<?php
namespace App\Controllers;
2020-03-30 16:26:47 +00:00
use App\Database\Queries\TagQuery;
2020-04-04 17:29:00 +00:00
use App\Web\ValidationHelper;
2020-03-19 08:39:32 +00:00
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Exception\HttpBadRequestException;
use Slim\Exception\HttpNotFoundException;
class TagController extends Controller
{
/**
* @param Request $request
* @param Response $response
* @return Response
* @throws HttpBadRequestException
*/
public function addTag(Request $request, Response $response): Response
{
2020-04-04 17:29:00 +00:00
$validator = $this->validateTag($request)->failIf(empty(param($request, 'tag')));
2020-03-19 08:39:32 +00:00
if ($validator->fails()) {
throw new HttpBadRequestException($request);
}
2020-03-30 16:26:47 +00:00
[$id, $limit] = make(TagQuery::class)->addTag(param($request, 'tag'), param($request, 'mediaId'));
2020-03-19 08:39:32 +00:00
$this->logger->info("Tag added $id.");
2020-03-19 08:39:32 +00:00
return json($response, [
2020-03-30 16:26:47 +00:00
'limitReached' => $limit,
'tagId' => $id,
'href' => queryParams(['tag' => $id]),
2020-03-19 08:39:32 +00:00
]);
}
/**
* @param Request $request
* @param Response $response
* @return Response
* @throws HttpBadRequestException
* @throws HttpNotFoundException
*/
public function removeTag(Request $request, Response $response): Response
{
2020-04-04 17:29:00 +00:00
$validator = $this->validateTag($request);
2020-03-19 08:39:32 +00:00
if ($validator->fails()) {
throw new HttpBadRequestException($request);
}
2020-03-30 16:26:47 +00:00
$result = make(TagQuery::class)->removeTag(param($request, 'tagId'), param($request, 'mediaId'));
2020-03-19 08:39:32 +00:00
2020-03-30 16:26:47 +00:00
if (!$result) {
2020-03-19 08:39:32 +00:00
throw new HttpNotFoundException($request);
}
$this->logger->info("Tag removed ".param($request, 'tagId').', from media '.param($request, 'mediaId'));
2020-03-19 08:39:32 +00:00
return $response;
}
2020-04-04 17:29:00 +00:00
/**
* @param Request $request
* @return ValidationHelper
*/
2020-03-19 08:39:32 +00:00
protected function validateTag(Request $request)
{
2020-04-04 17:29:00 +00:00
return make(ValidationHelper::class)
->failIf(empty(param($request, 'mediaId')))
->failIf($this->database->query('SELECT COUNT(*) AS `count` FROM `uploads` WHERE `id` = ?', param($request, 'mediaId'))->fetch()->count == 0)
2020-04-05 12:53:22 +00:00
->failIf(!$this->session->get('admin', false) && $this->database->query('SELECT `user_id` FROM `uploads` WHERE `id` = ? LIMIT 1', param($request, 'mediaId'))->fetch()->user_id != $this->session->get('user_id'));
2020-03-19 08:39:32 +00:00
}
}