You are here

public function UltimenuSkin::loadMultiple in Ultimenu 8.2

Retrieves stored CSS files for Ultimenu skin options.

Return value

array An array of available CSS files.

Overrides UltimenuSkinInterface::loadMultiple

1 call to UltimenuSkin::loadMultiple()
UltimenuSkin::libraryInfoBuild in src/UltimenuSkin.php
Implements hook_library_info_build().

File

src/UltimenuSkin.php, line 131

Class

UltimenuSkin
Provides Ultimenu skins utility methods.

Namespace

Drupal\ultimenu

Code

public function loadMultiple() {
  if (!isset($this->skins)) {
    if ($cache = $this->cacheBackend
      ->get($this->cacheKey . ':skin')) {
      $this->skins = $cache->data;
    }
    else {
      $theme_default = $this
        ->getConfig('system.theme')
        ->get('default');
      $theme_skin = drupal_get_path('theme', $theme_default) . '/css/ultimenu';
      $custom_skin = $this
        ->getSetting('skins');
      $module_skin = drupal_get_path('module', 'ultimenu') . '/css/theme';
      $mask = '/.css$/';
      $files = [];
      if (is_dir($module_skin)) {
        foreach ($this->fileSystem
          ->scanDirectory($module_skin, $mask) as $filename => $file) {
          $files[$filename] = $file;
        }
      }
      if (!empty($custom_skin) && is_dir($custom_skin)) {
        foreach ($this->fileSystem
          ->scanDirectory($custom_skin, $mask) as $filename => $file) {
          $files[$filename] = $file;
        }
      }
      if (is_dir($theme_skin)) {
        foreach ($this->fileSystem
          ->scanDirectory($theme_skin, $mask) as $filename => $file) {
          $files[$filename] = $file;
        }
      }
      if ($files) {
        $skins = [];
        foreach ($files as $file) {
          $uri = $file->uri;
          $name = $file->name;

          // Simplify lengthy deep directory structure.
          if (strpos($uri, $module_skin) !== FALSE) {
            $uri = "module|" . $name;
          }
          elseif (!empty($custom_skin) && strpos($uri, $custom_skin) !== FALSE) {
            $uri = "custom|" . $name;
          }
          elseif (is_dir($theme_skin) && strpos($uri, $theme_skin) !== FALSE) {
            $uri = "theme|" . $name;
          }

          // Convert file name to CSS friendly for option label and styling.
          $skins[$uri] = Html::cleanCssIdentifier(mb_strtolower($name));
        }
        ksort($skins);
        $this->cacheBackend
          ->set($this->cacheKey . ':skin', $skins, Cache::PERMANENT, [
          'skin',
        ]);
        $this->skins = $skins;
      }
    }
  }
  return $this->skins;
}