AJenbo/agcms

View on GitHub
application/inc/Http/Controllers/Admin/BrandController.php

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
<?php

namespace App\Http\Controllers\Admin;

use App\Exceptions\InvalidInput;
use App\Http\Controllers\Base;
use App\Http\Request;
use App\Models\Brand;
use App\Models\File;
use App\Services\ConfigService;
use App\Services\OrmService;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;

class BrandController extends AbstractAdminController
{
    /**
     * Index page for brands.
     */
    public function index(Request $request): Response
    {
        $data = $this->basicPageData($request);
        $data['brands'] = app(OrmService::class)->getByQuery(Brand::class, 'SELECT * FROM `maerke` ORDER BY navn');
        $data['blank_image'] = ConfigService::getString('blank_image', Base::DEFAULT_ICON);

        return $this->render('admin/maerker', $data);
    }

    /**
     * Page for editing or creating a brand.
     */
    public function editPage(Request $request, int $id): Response
    {
        $data = $this->basicPageData($request);
        $data['brand'] = $id ? app(OrmService::class)->getOne(Brand::class, $id) : null;
        $data['blank_image'] = ConfigService::getString('blank_image', Base::DEFAULT_ICON);

        return $this->render('admin/updatemaerke', $data);
    }

    /**
     * Create new brand.
     */
    public function create(Request $request): JsonResponse
    {
        $title = $request->getRequestString('title') ?? '';
        $link = $request->getRequestString('link') ?? '';
        $iconId = $request->getRequestInt('iconId');
        if (!$title) {
            throw new InvalidInput(_('You must enter a name.'));
        }

        $brand = new Brand(['title' => $title, 'link' => $link, 'icon_id' => $iconId]);
        $brand->save();

        return new JsonResponse(['id' => $brand->getId()]);
    }

    public function update(Request $request, int $id): JsonResponse
    {
        $title = $request->getRequestString('title');
        $link = $request->getRequestString('link') ?? '';
        $iconId = $request->getRequestInt('iconId');
        if (!$title) {
            throw new InvalidInput(_('You must enter a title.'));
        }

        $orm = app(OrmService::class);

        $brand = $orm->getOne(Brand::class, $id);
        if (!$brand) {
            throw new InvalidInput(_('Brand not found.'), Response::HTTP_NOT_FOUND);
        }

        $icon = null;
        if (null !== $iconId) {
            $icon = $orm->getOne(File::class, $iconId);
        }

        $brand->setIcon($icon)
            ->setLink($link)
            ->setTitle($title)
            ->save();

        return new JsonResponse(['id' => $brand->getId()]);
    }

    /**
     * Delete a brand.
     */
    public function delete(Request $request, int $id): JsonResponse
    {
        $brand = app(OrmService::class)->getOne(Brand::class, $id);
        if ($brand) {
            $brand->delete();
        }

        return new JsonResponse(['id' => 'maerke' . $id]);
    }
}