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
2020-04-03 13:59:49 +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 );
}
2020-04-03 13:59:49 +00:00
$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
}
2020-03-19 08:39:53 +00:00
}