summaryrefslogtreecommitdiffstatshomepage
path: root/core/modules/system/src
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/system/src')
-rw-r--r--core/modules/system/src/CronController.php2
-rw-r--r--core/modules/system/src/Form/ModulesListForm.php2
-rw-r--r--core/modules/system/src/Form/ModulesUninstallForm.php2
-rw-r--r--core/modules/system/src/Form/ThemeSettingsForm.php7
-rw-r--r--core/modules/system/src/Hook/SystemThemeHooks.php138
-rw-r--r--core/modules/system/src/SystemManager.php2
6 files changed, 146 insertions, 7 deletions
diff --git a/core/modules/system/src/CronController.php b/core/modules/system/src/CronController.php
index 6ba1e031a4d..59bc6e9289a 100644
--- a/core/modules/system/src/CronController.php
+++ b/core/modules/system/src/CronController.php
@@ -37,7 +37,7 @@ class CronController extends ControllerBase {
public function run() {
$this->cron->run();
- // HTTP 204 is "No content", meaning "I did what you asked and we're done."
+ // HTTP 204 is "No content", meaning "I did what you asked and we're done.".
return new Response('', 204);
}
diff --git a/core/modules/system/src/Form/ModulesListForm.php b/core/modules/system/src/Form/ModulesListForm.php
index 13297f3578c..551e813c611 100644
--- a/core/modules/system/src/Form/ModulesListForm.php
+++ b/core/modules/system/src/Form/ModulesListForm.php
@@ -329,7 +329,7 @@ class ModulesListForm extends FormBase {
// Disable the checkbox for required modules.
if (!empty($module->info['required'])) {
// Used when displaying modules that are required by the installation
- // profile
+ // profile.
$row['enable']['#disabled'] = TRUE;
$row['#required_by'][] = $distribution . (!empty($module->info['explanation']) ? ' (' . $module->info['explanation'] . ')' : '');
}
diff --git a/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php
index 97f76abe40e..9d51b67f2d3 100644
--- a/core/modules/system/src/Form/ModulesUninstallForm.php
+++ b/core/modules/system/src/Form/ModulesUninstallForm.php
@@ -138,7 +138,7 @@ class ModulesUninstallForm extends FormBase {
$form['modules'] = [];
// Only build the rest of the form if there are any modules available to
- // uninstall;
+ // uninstall.
if (empty($uninstallable)) {
return $form;
}
diff --git a/core/modules/system/src/Form/ThemeSettingsForm.php b/core/modules/system/src/Form/ThemeSettingsForm.php
index 9133eb8aa10..44f44179f5a 100644
--- a/core/modules/system/src/Form/ThemeSettingsForm.php
+++ b/core/modules/system/src/Form/ThemeSettingsForm.php
@@ -140,7 +140,8 @@ class ThemeSettingsForm extends ConfigFormBase {
$themes = $this->themeHandler->listInfo();
- // Default settings are defined in theme_get_setting() in includes/theme.inc
+ // Default settings are defined in theme_get_setting() in
+ // includes/theme.inc.
if ($theme) {
if (!$this->themeHandler->hasUi($theme)) {
throw new NotFoundHttpException();
@@ -168,7 +169,7 @@ class ThemeSettingsForm extends ConfigFormBase {
'#value' => $config_key,
];
- // Toggle settings
+ // Toggle settings.
$toggles = [
'node_user_picture' => $this->t('User pictures in posts'),
'comment_user_picture' => $this->t('User pictures in comments'),
@@ -176,7 +177,7 @@ class ThemeSettingsForm extends ConfigFormBase {
'favicon' => $this->t('Shortcut icon'),
];
- // Some features are not always available
+ // Some features are not always available.
$disabled = [];
if (!user_picture_enabled()) {
$disabled['toggle_node_user_picture'] = TRUE;
diff --git a/core/modules/system/src/Hook/SystemThemeHooks.php b/core/modules/system/src/Hook/SystemThemeHooks.php
new file mode 100644
index 00000000000..728a02f7498
--- /dev/null
+++ b/core/modules/system/src/Hook/SystemThemeHooks.php
@@ -0,0 +1,138 @@
+<?php
+
+namespace Drupal\system\Hook;
+
+use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+
+/**
+ * Hook implementations for system.
+ */
+class SystemThemeHooks {
+
+ /**
+ * Implements hook_theme_suggestions_HOOK().
+ */
+ #[Hook('theme_suggestions_html')]
+ public function themeSuggestionsHtml(array $variables): array {
+ $path_args = explode('/', trim(\Drupal::service('path.current')->getPath(), '/'));
+ return theme_get_suggestions($path_args, 'html');
+ }
+
+ /**
+ * Implements hook_theme_suggestions_HOOK().
+ */
+ #[Hook('theme_suggestions_page')]
+ public function themeSuggestionsPage(array $variables): array {
+ $path_args = explode('/', trim(\Drupal::service('path.current')->getPath(), '/'));
+ $suggestions = theme_get_suggestions($path_args, 'page');
+ $supported_http_error_codes = [
+ 401,
+ 403,
+ 404,
+ ];
+ $exception = \Drupal::requestStack()->getCurrentRequest()->attributes->get('exception');
+ if ($exception instanceof HttpExceptionInterface && in_array($exception->getStatusCode(), $supported_http_error_codes, TRUE)) {
+ $suggestions[] = 'page__4xx';
+ $suggestions[] = 'page__' . $exception->getStatusCode();
+ }
+ return $suggestions;
+ }
+
+ /**
+ * Implements hook_theme_suggestions_HOOK().
+ */
+ #[Hook('theme_suggestions_maintenance_page')]
+ public function themeSuggestionsMaintenancePage(array $variables): array {
+ $suggestions = [];
+ // Dead databases will show error messages so supplying this template will
+ // allow themers to override the page and the content completely.
+ $offline = defined('MAINTENANCE_MODE');
+ try {
+ \Drupal::service('path.matcher')->isFrontPage();
+ }
+ catch (\Exception) {
+ // The database is not yet available.
+ $offline = TRUE;
+ }
+ if ($offline) {
+ $suggestions[] = 'maintenance_page__offline';
+ }
+ return $suggestions;
+ }
+
+ /**
+ * Implements hook_theme_suggestions_HOOK().
+ */
+ #[Hook('theme_suggestions_region')]
+ public function themeSuggestionsRegion(array $variables): array {
+ $suggestions = [];
+ if (!empty($variables['elements']['#region'])) {
+ $suggestions[] = 'region__' . $variables['elements']['#region'];
+ }
+ return $suggestions;
+ }
+
+ /**
+ * Implements hook_theme_suggestions_HOOK().
+ */
+ #[Hook('theme_suggestions_field')]
+ public function themeSuggestionsField(array $variables): array {
+ $suggestions = [];
+ $element = $variables['element'];
+ $suggestions[] = 'field__' . $element['#field_type'];
+ $suggestions[] = 'field__' . $element['#field_name'];
+ $suggestions[] = 'field__' . $element['#entity_type'] . '__' . $element['#bundle'];
+ $suggestions[] = 'field__' . $element['#entity_type'] . '__' . $element['#field_name'];
+ $suggestions[] = 'field__' . $element['#entity_type'] . '__' . $element['#field_name'] . '__' . $element['#bundle'];
+ return $suggestions;
+ }
+
+ /**
+ * @} End of "defgroup authorize".
+ */
+
+ /**
+ * Implements hook_preprocess_HOOK() for block templates.
+ */
+ #[Hook('preprocess_block')]
+ public function preprocessBlock(&$variables): void {
+ switch ($variables['base_plugin_id']) {
+ case 'system_branding_block':
+ $variables['site_logo'] = '';
+ if ($variables['content']['site_logo']['#access'] && $variables['content']['site_logo']['#uri']) {
+ $variables['site_logo'] = $variables['content']['site_logo']['#uri'];
+ }
+ $variables['site_name'] = '';
+ if ($variables['content']['site_name']['#access'] && $variables['content']['site_name']['#markup']) {
+ $variables['site_name'] = $variables['content']['site_name']['#markup'];
+ }
+ $variables['site_slogan'] = '';
+ if ($variables['content']['site_slogan']['#access'] && $variables['content']['site_slogan']['#markup']) {
+ $variables['site_slogan'] = [
+ '#markup' => $variables['content']['site_slogan']['#markup'],
+ ];
+ }
+ break;
+ }
+ }
+
+ /**
+ * Implements hook_preprocess_toolbar().
+ */
+ #[Hook('preprocess_toolbar')]
+ public function preprocessToolbar(array &$variables, $hook, $info): void {
+ // When Claro is the admin theme, Claro overrides the active theme's if that
+ // active theme is not Claro. Because of these potential overrides, the
+ // toolbar cache should be invalidated any time the default or admin theme
+ // changes.
+ $variables['#cache']['tags'][] = 'config:system.theme';
+ // If Claro is the admin theme but not the active theme, still include
+ // Claro's toolbar preprocessing.
+ if (_system_is_claro_admin_and_not_active()) {
+ require_once DRUPAL_ROOT . '/core/themes/claro/claro.theme';
+ claro_preprocess_toolbar($variables, $hook, $info);
+ }
+ }
+
+}
diff --git a/core/modules/system/src/SystemManager.php b/core/modules/system/src/SystemManager.php
index 43a53fe0542..563188e017f 100644
--- a/core/modules/system/src/SystemManager.php
+++ b/core/modules/system/src/SystemManager.php
@@ -120,7 +120,7 @@ class SystemManager {
* An array of system requirements.
*/
public function listRequirements() {
- // Load .install files
+ // Load .install files.
include_once DRUPAL_ROOT . '/core/includes/install.inc';
drupal_load_updates();