Skip to content

Commit 2592729

Browse files
committed
Fix translations
slug changed listener
1 parent d8bdef9 commit 2592729

File tree

5 files changed

+109
-37
lines changed

5 files changed

+109
-37
lines changed

resources/lang/en/filament-flexible-content-block-pages.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
'settings_plural_lbl' => 'Settings',
2929
'navigation_group' => 'Settings',
3030
'settings_tab_site_general' => 'General',
31-
'site_title' => 'Website title',
31+
'settings_site_title' => 'Website title',
3232
'settings_contact_info' => 'Contact information',
3333
'settings_tab_seo' => 'SEO',
3434
'settings_default_seo_image' => 'Default SEO image',
3535
'settings_default_seo_image_hint' => 'If no SEO image is set for a page, this image will be used.',
36+
'translatable_field_hint' => 'This field can be translated. You can view/change the current language in the top right.',
37+
'settings_footer_copyright' => 'Copyright message in footer',
3638
],
3739
];

resources/lang/nl/filament-flexible-content-block-pages.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@
3333
'settings_tab_seo' => 'SEO',
3434
'settings_default_seo_image' => 'Standaard SEO-afbeelding',
3535
'settings_default_seo_image_hint' => 'Indien er geen SEO-afbeelding voor een pagina is ingesteld, wordt deze afbeelding gebruikt.',
36+
'translatable_field_hint' => 'Dit veld kan vertaald worden. De huidige taal kan je rechtsbovenaan bekijken/aanpassen.',
37+
'settings_footer_copyright' => 'Copyrightboodschap in footer',
3638
],
3739
];

src/Http/Controllers/PageController.php

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Statikbe\FilamentFlexibleContentBlockPages\Http\Controllers;
44

55
use Artesaos\SEOTools\Facades\SEOTools;
6-
use Artesaos\SEOTools\SEOMeta;
6+
use Artesaos\SEOTools\Facades\SEOMeta;
77
use Carbon\Carbon;
88
use Illuminate\Foundation\Validation\ValidatesRequests;
99
use Illuminate\Http\Response;
@@ -12,6 +12,7 @@
1212
use Illuminate\Support\Facades\Cache;
1313
use Illuminate\Support\Facades\Storage;
1414
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
15+
use Spatie\MediaLibrary\Conversions\ConversionCollection;
1516
use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages;
1617
use Statikbe\FilamentFlexibleContentBlockPages\Models\Page;
1718
use Statikbe\FilamentFlexibleContentBlockPages\Models\Settings;
@@ -20,6 +21,8 @@ class PageController extends Controller
2021
{
2122
use ValidatesRequests;
2223

24+
const CACHE_SEO_IMAGE_DIMENSIONS = 'seo_image_dimensions:%s';
25+
const CACHE_SEO_IMAGE_TTL = 60 * 60 * 8; // in seconds
2326
const TEMPLATE_PATH = 'filament-flexible-content-block-pages::pages.';
2427

2528
// TODO make an abstract model with the table name to use as class to resolve in the route param
@@ -95,12 +98,24 @@ protected function setBasicSEO(Page $page)
9598

9699
protected function setSEOImage(Page $page)
97100
{
98-
if ($seoImage = $page->getSEOImageUrl()) {
99-
SEOTools::opengraph()->addImage($seoImage, $this->getSEOImageDimensions($seoImage, true));
100-
SEOTools::twitter()->addValue('image', $seoImage);
101-
} else {
101+
//TODO copy getSEOMedia in HasSEOAttributesTrait
102+
$seoMedia = $page->getFallbackImageMedia($page->SEOImage()->first(), $page->getSEOImageCollection());
103+
$seoUrl = null;
104+
$imageDimensions = null;
105+
106+
/*if ($seoMedia) {
107+
$seoUrl = $seoMedia->getUrl($page->getSEOImageConversionName());
108+
$imageDimensions = $this->getSEOImageDimensions($seoMedia, $page->getSEOImageConversionName());
109+
} else if()
110+
$seoUrl = $seoMedia->getUrl($page->getSEOImageConversionName());
111+
$imageDimensions = $this->getSEOImageDimensions($seoMedia, $page->getSEOImageConversionName());
102112
$this->setSEODefaultImage($page);
103113
}
114+
115+
if($seoUrl && $imageDimensions) {
116+
SEOTools::opengraph()->addImage($seoUrl, $imageDimensions);
117+
SEOTools::twitter()->addValue('image', $seoUrl);
118+
}*/
104119
}
105120

106121
protected function setSEODefaultImage(Page $page)
@@ -122,34 +137,20 @@ protected function setSEODefaultImage(Page $page)
122137
*
123138
* @return array|mixed
124139
*/
125-
protected function getSEOImageDimensions($path, bool $isUrl = false)
140+
protected function getSEOImageDimensions(Media $seoMedia, string $conversion)
126141
{
127-
// TODO optimize loading of image: avoiding url download.
128-
$seoParams = [];
129-
if ($path) {
130-
$cacheKey = sprintf(self::CACHE_SEO_IMAGE_DIMENSIONS, $path);
131-
if (Cache::has($cacheKey)) {
132-
$seoParams = Cache::get($cacheKey, []);
133-
} else {
134-
try {
135-
if (! $isUrl) {
136-
$path = Storage::disk('public')->path($path);
137-
}
138-
$dimensions = getimagesize($path);
139-
if (count($dimensions) > 1) {
140-
$seoParams = ['width' => $dimensions[0], 'height' => $dimensions[1]];
141-
}
142-
} catch (\League\Glide\Filesystem\FileNotFoundException $ex) {
143-
// do nothing we will just pass the empty seo params
144-
} catch (ErrorException $ex) {
145-
// do nothing we will just pass the empty seo params
146-
}
147-
148-
Cache::put($cacheKey, $seoParams, Carbon::now()->addMinutes(self::CACHE_SEO_IMAGE_TTL));
149-
150-
}
151-
}
152-
153-
return $seoParams;
142+
$cacheKey = sprintf(self::CACHE_SEO_IMAGE_DIMENSIONS, $seoMedia->uuid);
143+
144+
return Cache::remember($cacheKey,
145+
self::CACHE_SEO_IMAGE_TTL,
146+
function() use ($seoMedia, $conversion) {
147+
$conversionCollection = ConversionCollection::createForMedia($seoMedia);
148+
$conversion = $conversionCollection->getByName($conversion);
149+
150+
return [
151+
'width' => $conversion->getWidth(),
152+
'height' => $conversion->getHeight(),
153+
];
154+
});
154155
}
155156
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace Statikbe\FilamentFlexibleContentBlockPages\Listeners;
4+
5+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Page;
6+
use Statikbe\FilamentFlexibleContentBlockPages\Models\Redirect;
7+
use Illuminate\Http\Response;
8+
use Statikbe\FilamentFlexibleContentBlocks\Events\SlugChanged;
9+
10+
/**
11+
* Create a redirect when a slug of a page has changed after creation.
12+
*/
13+
class SlugChangedListener
14+
{
15+
public function handle(SlugChanged $event): void
16+
{
17+
//add redirect:
18+
if($event->recordWasPublished) {
19+
foreach ($event->changedSlugs as $changedSlug){
20+
$oldUrl = null;
21+
$newUrl = null;
22+
23+
if($changedSlug['newSlug'] && !empty(trim($changedSlug['newSlug']))) {
24+
if ($event->record instanceof Page) {
25+
26+
$oldUrl = $this->getUrl($event->record, $changedSlug['locale'], $changedSlug['oldSlug']);
27+
$newUrl = $this->getUrl($event->record, $changedSlug['locale'], $changedSlug['newSlug']);
28+
}
29+
}
30+
31+
32+
if($newUrl && $oldUrl){
33+
$oldUrlPath = parse_url($oldUrl, PHP_URL_PATH);
34+
$newUrlPath = parse_url($newUrl, PHP_URL_PATH);
35+
36+
$redirectDoesNotExist = Redirect::where('old_url', $oldUrlPath)
37+
->where('new_url', $newUrlPath)
38+
->notExists();
39+
40+
if($redirectDoesNotExist) {
41+
$redirect = new Redirect();
42+
$redirect->old_url = $oldUrlPath;
43+
$redirect->new_url = $newUrlPath;
44+
$redirect->status_code = Response::HTTP_MOVED_PERMANENTLY;
45+
$redirect->save();
46+
}
47+
}
48+
}
49+
}
50+
}
51+
52+
private function getUrl(Page $page, string $locale, string $slug): string
53+
{
54+
$currentSlug = $page->getTranslation('slug', $locale);
55+
$page->setTranslation('slug', $locale, $slug);
56+
$url = $page->getViewUrl($locale);
57+
$page->setTranslation('slug', $locale, $currentSlug);
58+
59+
return $url;
60+
}
61+
}

src/Resources/SettingsResource.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Filament\Resources\Resource;
1313
use Filament\Tables;
1414
use Filament\Tables\Table;
15+
use phpDocumentor\Reflection\Types\ClassString;
1516
use Statikbe\FilamentFlexibleContentBlockPages\Facades\FilamentFlexibleContentBlockPages;
1617
use Statikbe\FilamentFlexibleContentBlockPages\Models\Settings;
1718
use Statikbe\FilamentFlexibleContentBlockPages\Resources\SettingsResource\Pages;
@@ -20,6 +21,9 @@ class SettingsResource extends Resource
2021
{
2122
use Translatable;
2223

24+
/**
25+
* @return class-string
26+
*/
2327
public static function getModel(): string
2428
{
2529
return FilamentFlexibleContentBlockPages::config()->getSettingsModel()::class;
@@ -96,7 +100,9 @@ public static function getPages(): array
96100
public static function getNavigationUrl(): string
97101
{
98102
// do not show the table, since we will only have one record:
99-
if ($settings = static::getModel()::first()) {
103+
/** @var Settings|null $settings */
104+
$settings = static::getModel()::first();
105+
if ($settings) {
100106
return static::getUrl('edit', ['record' => $settings]);
101107
} else {
102108
return static::getUrl('create');
@@ -110,12 +116,12 @@ protected static function getGeneralTabFormSchema(): array
110116
->label(flexiblePagesTrans('settings.settings_site_title'))
111117
->required(),
112118
TextInput::make(Settings::SETTING_FOOTER_COPYRIGHT)
113-
->label(flexiblePagesTrans('settings.settings_footer_copyright'))
119+
->label(flexiblePagesTrans('settings.footer_copyright'))
114120
->hint(flexiblePagesTrans('settings.translatable_field_hint'))
115121
->hintIcon('heroicon-m-language')
116122
->required(),
117123
RichEditor::make(Settings::SETTING_CONTACT_INFO)
118-
->label(flexiblePagesTrans('settings.settings_contact_info'))
124+
->label(flexiblePagesTrans('settings.contact_info'))
119125
->disableToolbarButtons([
120126
'attachFiles',
121127
]),

0 commit comments

Comments
 (0)