-
Notifications
You must be signed in to change notification settings - Fork 2
/
Plugin.php
101 lines (88 loc) · 3.33 KB
/
Plugin.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
namespace AspenDigital\Translate;
use Event;
use RainLab\Translate\Classes\Translator;
use Response;
use View;
use AspenDigital\Translate\Models\Settings as Settings;
class Plugin extends \System\Classes\PluginBase
{
public $requires = ['RainLab.Translate'];
public function pluginDetails()
{
return [
'name' => 'aspendigital.translate::lang.plugin.name',
'description' => 'aspendigital.translate::lang.plugin.description',
'author' => 'Aspen Digital',
'icon' => 'icon-pencil'
];
}
public function boot()
{
// RainLab.Translate operates on the assumption that all content has a translation in every
// locale, and if not, showing the default locale's content is acceptable. This overrides that
// behavior for static pages so if the page doesn't have a URL or markup assigned for the current
// locale, it's a 404.
Event::listen('cms.page.beforeDisplay', function($controller, $url, $page) {
$staticPageLocaleRouting = Settings::get('static_page_locale_routing');
if (!$staticPageLocaleRouting || !$page || $url === '/') {
return;
}
$staticPage = array_get($page->apiBag, 'staticPage');
$locale = Translator::instance()->getLocale();
if ($staticPage && !$staticPage->hasTranslatablePageUrl($locale) && !$staticPage->hasTranslation('markup', $locale)) {
$page404 = $controller->getRouter()->findByUrl('/404');
return $page404 ?: Response::make(View::make('cms::404'), 404);
}
});
if (!$this->app->runningInBackend()) {
return;
}
// Add "master" locale switcher to static page forms
Event::listen('backend.form.extendFields', function($widget) {
if (!$widget->model instanceof \RainLab\Pages\Classes\Page || $widget->isNested) {
return;
}
$widget->addFields([
'_locale' => [
'type' => FormWidgets\MasterLocaleSwitcher::class
]
]);
});
}
public function registerComponents()
{
return [
Components\HomeLocalePicker::class => 'homeLocalePicker'
];
}
public function registerSettings()
{
return [
'settings' => [
'label' => 'aspendigital.translate::lang.settings.label',
'description' => 'aspendigital.translate::lang.settings.description',
'icon' => 'icon-cog',
'class' => 'AspenDigital\Translate\Models\Settings',
'order' => 600,
'keywords' => '',
'category' => 'rainlab.translate::lang.plugin.name',
'permissions' => ['aspendigital.translate.manage_settings']
]
];
}
/**
* Registers any back-end permissions used by this plugin.
*
* @return array
*/
public function registerPermissions()
{
return [
'aspendigital.translate.manage_settings' => [
'tab' => 'rainlab.translate::lang.plugin.tab',
'label' => 'aspendigital.translate::lang.permission.manage_settings.label'
]
];
}
}