File: D:/HostingSpaces/farmfun/reserveren.farmfun.be/app/Komma/Pages/PageService.php
<?php
namespace App\Komma\Pages;
use App\Komma\Base\Service;
use App\Komma\Pages\Models\Page;
final class PageService extends Service
{
/**
* @param int $id
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Relations\HasMany|object|null
*/
public function getPage(int $id)
{
// Find all pages
if (! $page = $this->site
->pages()
->where('active', 1)
->where('id', $id)
->first()
) {
abort(404);
}
return $page;
}
/**
* Fetch translated page routes
*
* @return object | bool
*/
public function getAllTranslatedPageRoutes()
{
// Find all pages
if (! $pages = $this->site
->pages()
->where('active', 1)
->where('lft', '!=', 1)
->orderBy('lft', 'asc')
->with('translation')
->with('translation.route')
->get()
) {
return false;
}
$routes = [];
// Loop through pages
foreach ($pages as $key => $page) {
if (isset($page->translation) && isset($page->translation->route)) {
$routes[$page->code_name] = (object) [
'page_id' => $page->id,
'name' => $page->translation->name,
'route' => $page->translation->route->alias,
'node' => $page,
];
}
}
return (object) $routes;
}
/**
* Generate a sub navigation (children) through the page
*
* @param Page $page
* @param $links
* @return array
*/
public function getSubNav(Page $page, $links)
{
$subNav = [];
$children = $page->findChildren();
foreach ($children as $child) {
$subNav[] = $links->{$child->code_name};
}
return $subNav;
}
public function makeLanguageSwitchForPage($page, $home = null)
{
$languageMenu = [];
$pageTranslations = $page->node->translations->keyBy('language_id');
if (! empty($home)) {
$homeTranslations = $home->node->translations->keyBy('language_id');
}
foreach ($this->site->languages as $language) {
if ($pageTranslation = $pageTranslations->get($language->id)) {
if (isset($pageTranslation->route)) {
if ($pageTranslation->route->alias != '/') {
$languageMenu[$language->iso_2] = $pageTranslation->route->alias;
} else {
$languageMenu[$language->iso_2] = $pageTranslation->route->alias;
}
}
continue;
}
// If page hasn't a translation grab the home route (should always exists
if (! empty($home) && $homeTranslation = $homeTranslations->get($language->id)) {
if ($homeTranslation->route->alias != '/') {
$languageMenu[$language->iso_2] = $homeTranslation->route->alias;
} else {
$languageMenu[$language->iso_2] = $homeTranslation->route->alias;
}
continue;
}
}
return $languageMenu;
}
}