public SystemController::themesPage()
Returns a theme listing.
@todo Move into ThemeController.
Return value
string An HTML string of the theme listing page.
File
- core/modules/system/src/Controller/SystemController.php, line 195
Class
- SystemController
- Returns responses for System routes.
Namespace
Drupal\system\Controller
Code
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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | public function themesPage() { $config = $this ->config( 'system.theme' ); // Get all available themes. $themes = $this ->themeHandler->rebuildThemeData(); uasort( $themes , 'system_sort_modules_by_info_name' ); $theme_default = $config ->get( 'default' ); $theme_groups = array ( 'installed' => array (), 'uninstalled' => array ()); $admin_theme = $config ->get( 'admin' ); $admin_theme_options = array (); foreach ( $themes as & $theme ) { if (! empty ( $theme ->info[ 'hidden' ])) { continue ; } $theme ->is_default = ( $theme ->getName() == $theme_default ); $theme ->is_admin = ( $theme ->getName() == $admin_theme || ( $theme ->is_default && $admin_theme == '0' )); // Identify theme screenshot. $theme ->screenshot = NULL; // Create a list which includes the current theme and all its base themes. if (isset( $themes [ $theme ->getName()]->base_themes)) { $theme_keys = array_keys ( $themes [ $theme ->getName()]->base_themes); $theme_keys [] = $theme ->getName(); } else { $theme_keys = array ( $theme ->getName()); } // Look for a screenshot in the current theme or in its closest ancestor. foreach ( array_reverse ( $theme_keys ) as $theme_key ) { if (isset( $themes [ $theme_key ]) && file_exists ( $themes [ $theme_key ]->info[ 'screenshot' ])) { $theme ->screenshot = array ( 'uri' => $themes [ $theme_key ]->info[ 'screenshot' ], 'alt' => $this ->t( 'Screenshot for @theme theme' , array ( '@theme' => $theme ->info[ 'name' ])), 'title' => $this ->t( 'Screenshot for @theme theme' , array ( '@theme' => $theme ->info[ 'name' ])), 'attributes' => array ( 'class' => array ( 'screenshot' )), ); break ; } } if ( empty ( $theme ->status)) { // Ensure this theme is compatible with this version of core. $theme ->incompatible_core = !isset( $theme ->info[ 'core' ]) || ( $theme ->info[ 'core' ] != \DRUPAL::CORE_COMPATIBILITY); // Require the 'content' region to make sure the main page // content has a common place in all themes. $theme ->incompatible_region = !isset( $theme ->info[ 'regions' ][ 'content' ]); $theme ->incompatible_php = version_compare(phpversion(), $theme ->info[ 'php' ]) < 0; // Confirm that all base themes are available. $theme ->incompatible_base = (isset( $theme ->info[ 'base theme' ]) && !( $theme ->base_themes === array_filter ( $theme ->base_themes))); // Confirm that the theme engine is available. $theme ->incompatible_engine = isset( $theme ->info[ 'engine' ]) && !isset( $theme ->owner); } $theme ->operations = array (); if (! empty ( $theme ->status) || ! $theme ->incompatible_core && ! $theme ->incompatible_php && ! $theme ->incompatible_base && ! $theme ->incompatible_engine) { // Create the operations links. $query [ 'theme' ] = $theme ->getName(); if ( $this ->themeAccess->checkAccess( $theme ->getName())) { $theme ->operations[] = array ( 'title' => $this ->t( 'Settings' ), 'url' => Url::fromRoute( 'system.theme_settings_theme' , [ 'theme' => $theme ->getName()]), 'attributes' => array ( 'title' => $this ->t( 'Settings for @theme theme' , array ( '@theme' => $theme ->info[ 'name' ]))), ); } if (! empty ( $theme ->status)) { if (! $theme ->is_default) { $theme_uninstallable = TRUE; if ( $theme ->getName() == $admin_theme ) { $theme_uninstallable = FALSE; } // Check it isn't the base of theme of an installed theme. foreach ( $theme ->required_by as $themename => $dependency ) { if (! empty ( $themes [ $themename ]->status)) { $theme_uninstallable = FALSE; } } if ( $theme_uninstallable ) { $theme ->operations[] = array ( 'title' => $this ->t( 'Uninstall' ), 'url' => Url::fromRoute( 'system.theme_uninstall' ), 'query' => $query , 'attributes' => array ( 'title' => $this ->t( 'Uninstall @theme theme' , array ( '@theme' => $theme ->info[ 'name' ]))), ); } $theme ->operations[] = array ( 'title' => $this ->t( 'Set as default' ), 'url' => Url::fromRoute( 'system.theme_set_default' ), 'query' => $query , 'attributes' => array ( 'title' => $this ->t( 'Set @theme as default theme' , array ( '@theme' => $theme ->info[ 'name' ]))), ); } $admin_theme_options [ $theme ->getName()] = $theme ->info[ 'name' ]; } else { $theme ->operations[] = array ( 'title' => $this ->t( 'Install' ), 'url' => Url::fromRoute( 'system.theme_install' ), 'query' => $query , 'attributes' => array ( 'title' => $this ->t( 'Install @theme theme' , array ( '@theme' => $theme ->info[ 'name' ]))), ); $theme ->operations[] = array ( 'title' => $this ->t( 'Install and set as default' ), 'url' => Url::fromRoute( 'system.theme_set_default' ), 'query' => $query , 'attributes' => array ( 'title' => $this ->t( 'Install @theme as default theme' , array ( '@theme' => $theme ->info[ 'name' ]))), ); } } // Add notes to default and administration theme. $theme ->notes = array (); if ( $theme ->is_default) { $theme ->notes[] = $this ->t( 'default theme' ); } if ( $theme ->is_admin) { $theme ->notes[] = $this ->t( 'administration theme' ); } // Sort installed and uninstalled themes into their own groups. $theme_groups [ $theme ->status ? 'installed' : 'uninstalled' ][] = $theme ; } // There are two possible theme groups. $theme_group_titles = array ( 'installed' => $this ->formatPlural( count ( $theme_groups [ 'installed' ]), 'Installed theme' , 'Installed themes' ), ); if (! empty ( $theme_groups [ 'uninstalled' ])) { $theme_group_titles [ 'uninstalled' ] = $this ->formatPlural( count ( $theme_groups [ 'uninstalled' ]), 'Uninstalled theme' , 'Uninstalled themes' ); } uasort( $theme_groups [ 'installed' ], 'system_sort_themes' ); $this ->moduleHandler()->alter( 'system_themes_page' , $theme_groups ); $build = array (); $build [] = array ( '#theme' => 'system_themes_page' , '#theme_groups' => $theme_groups , '#theme_group_titles' => $theme_group_titles , ); $build [] = $this ->formBuilder->getForm( 'Drupal\system\Form\ThemeAdminForm' , $admin_theme_options ); return $build ; } |
Please login to continue.