Repository navigation
Expand file tree
/
Copy pathboot.php
More file actions
77 lines (70 loc) · 3.94 KB
/
Copy pathboot.php
File metadata and controls
77 lines (70 loc) · 3.94 KB
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
<?php
use FriendsOfRedaxo\BlockPeek\TemplateListHider;
use FriendsOfRedaxo\BlockPeek\Picker\PickerBoot;
use FriendsOfRedaxo\BlockPeek\Picker\PreviewGenerator;
use FriendsOfRedaxo\BlockPeek\Picker\PreviewStore;
/** @var rex_addon_interface $addon */
$addon = $this;
if ($addon->getConfig('inactive') !== '|1|') {
// Previews only exist on content/edit — don't load assets on every backend page.
if (rex::isBackend() && rex::getUser() && rex_be_controller::getCurrentPage() === 'content/edit') {
rex_view::addJsFile($this->getAssetsUrl('BlockPeek.js'));
rex_view::addCssFile($this->getAssetsUrl('BlockPeek.css'));
rex_extension::register('PACKAGES_INCLUDED', function () {
rex_extension::register('SLICE_BE_PREVIEW', \FriendsOfRedaxo\BlockPeek\Extension::register(...), rex_extension::LATE);
});
}
}
if (rex::isBackend() && PickerBoot::shouldLoad($addon->getConfig('picker'), (string) rex_be_controller::getCurrentPage(), (bool) rex::getUser())) {
rex_view::addJsFile($addon->getAssetsUrl('BlockPeekPicker.js'));
rex_view::addCssFile($addon->getAssetsUrl('BlockPeekPicker.css'));
rex_view::setJsProperty('block_peek_picker_i18n', [
'search_label' => rex_i18n::msg('block_peek_picker_search_label'),
'search_placeholder' => rex_i18n::msg('block_peek_picker_search_placeholder'),
]);
rex_extension::register('PACKAGES_INCLUDED', static function () {
try {
$modules = PreviewGenerator::modules();
rex_view::setJsProperty('block_peek_picker', (new PreviewStore())->forJs($modules));
$states = PickerBoot::staleStates($modules);
if ($states !== []) {
rex_view::setJsProperty('block_peek_picker_stale', [
'states' => (object) $states,
'labels' => array_combine(['outdated', 'missing', 'failed'], array_map(static fn (string $state): string => rex_i18n::msg('block_peek_picker_' . $state), ['outdated', 'missing', 'failed'])),
'text' => rex_i18n::msg('block_peek_picker_stale_count', (string) count($states)),
'link' => rex_i18n::msg('block_peek_picker_regenerate'),
'url' => rex_url::backendPage('block_peek/picker', [], false),
]);
}
} catch (Throwable $e) {
rex_logger::logException($e);
}
});
}
// Tell admins on the structure page which module previews need a (re)generation, until all are current.
if (rex::isBackend() && rex_be_controller::getCurrentPage() === 'structure' && $addon->getConfig('picker') === '|1|' && rex::getUser()?->isAdmin()) {
rex_extension::register('PAGE_TITLE_SHOWN', static function (rex_extension_point $ep) {
$states = PickerBoot::staleStates();
if ($states === []) {
return null;
}
return $ep->getSubject() . rex_view::info(
rex_escape(rex_i18n::msg('block_peek_picker_stale_count', (string) count($states)))
. ' <a href="' . rex_url::backendPage('block_peek/picker') . '">' . rex_escape(rex_i18n::msg('block_peek_picker_regenerate')) . ' →</a>',
);
});
}
// Remove preview cache files along with their slice/article — regardless of the
// `inactive` setting, so files don't linger while previews are switched off.
if (rex::isBackend()) {
rex_extension::register('SLICE_DELETED', static function (rex_extension_point $ep) use ($addon) {
rex_file::delete($addon->getCachePath("article-{$ep->getParam('article_id')}/slice-{$ep->getParam('slice_id')}.cache"));
});
rex_extension::register('ART_DELETED', static function (rex_extension_point $ep) use ($addon) {
rex_dir::delete($addon->getCachePath("article-{$ep->getParam('id')}"));
});
}
// Hide the internal block_peek template row from the backend templates list page.
if (rex::isBackend()) {
rex_extension::register('OUTPUT_FILTER', [TemplateListHider::class, 'register'], rex_extension::LATE);
}