cms/app/Services/PageService.php

86 lines
2.2 KiB
PHP
Raw Normal View History

<?php
namespace App\Services;
use App\Models\Page;
use App\Support\PageRenderer;
use Illuminate\Support\Facades\DB;
/**
* Service to handle Page-related operations.
*/
class PageService
{
/**
* @var NavigationService
*/
protected NavigationService $navigationService;
/**
* PageService constructor.
*
* @param NavigationService $navigationService
*/
public function __construct(NavigationService $navigationService)
{
$this->navigationService = $navigationService;
}
/**
* Store a new page.
*
* @param array $data Data to create the page.
* @return Page The created page.
*/
public function store(array $data): Page
{
return DB::transaction(function () use ($data) {
$renderer = new PageRenderer();
$data['cached_html'] = $renderer->render($data['content']);
$data['user_id'] = auth()->id();
$page = Page::create(collect($data)->except('include_in_navigation')->toArray());
if (isset($data['include_in_navigation']) && $data['include_in_navigation']) {
$this->navigationService->syncPageNavigation($page, true);
}
return $page;
});
}
/**
* Update an existing page.
*
* @param Page $page The page to update.
* @param array $data Data to update the page.
* @return bool True if successful.
*/
public function update(Page $page, array $data): bool
{
return DB::transaction(function () use ($page, $data) {
$renderer = new PageRenderer();
$data['cached_html'] = $renderer->render($data['content']);
$success = $page->update(collect($data)->except('include_in_navigation')->toArray());
if (isset($data['include_in_navigation'])) {
$this->navigationService->syncPageNavigation($page, (bool)$data['include_in_navigation']);
}
return $success;
});
}
/**
* Delete a page.
*
* @param Page $page The page to delete.
* @return bool True if successful.
*/
public function delete(Page $page): bool
{
return $page->delete();
}
}