Open Data Catalog v2.0.0
RouteProvider.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use Drupal\Core\Entity\Query\QueryFactory;
6 use Symfony\Component\Routing\Route;
7 use Symfony\Component\Routing\RouteCollection;
8 
13 
14  private $appRoot;
15  private $entityQuery;
16 
20  public function __construct(string $appRoot, QueryFactory $entityQuery) {
21  $this->appRoot = $appRoot;
22  $this->entityQuery = $entityQuery;
23  }
24 
28  public function routes() {
29  $routes = new RouteCollection();
30 
31  $this->addStaticPages($routes);
32 
33  $routes->addRequirements(['_access' => 'TRUE']);
34 
35  return $routes;
36  }
37 
41  public function getNameFromPath($path) {
42  $base = $this->appRoot . "/data-catalog-frontend/public/";
43  $sub = str_replace($base, "", $path);
44  return str_replace("/", "__", $sub);
45  }
46 
50  private function expandDirectories($base_dir) {
51  $directories = [];
52 
53  if (!file_exists($base_dir)) {
54  return $directories;
55  }
56 
57  foreach (scandir($base_dir) as $file) {
58  if ($file == '.' || $file == '..') {
59  continue;
60  }
61  $dir = $base_dir . DIRECTORY_SEPARATOR . $file;
62  if (is_dir($dir)) {
63  $directories[] = $dir;
64  $directories = array_merge($directories, $this->expandDirectories($dir));
65  }
66  }
67  return $directories;
68  }
69 
81  private function routeHelper(string $path, string $name) : Route {
82  $route = new Route(
83  "/$path",
84  [
85  '_controller' => '\Drupal\dkan_frontend\Controller\Page::page',
86  'name' => $name,
87  ]
88  );
89  $route->setMethods(['GET']);
90  return $route;
91  }
92 
96  private function addStaticPages(RouteCollection $routes) {
97  $base = $this->appRoot . "/data-catalog-frontend/public";
98  $possible_pages = $this->expandDirectories($base);
99 
100  foreach ($possible_pages as $possible_page) {
101  if (file_exists($possible_page . "/index.html")) {
102  $name = self::getNameFromPath($possible_page);
103  $path = str_replace($base, "", $possible_page);
104  $routes->add($name, $this->routeHelper($path, $name));
105  }
106  }
107 
108  $route = new Route(
109  "/home",
110  [
111  '_controller' => '\Drupal\dkan_frontend\Controller\Page::page',
112  'name' => 'home',
113  ]
114  );
115  $route->setMethods(['GET']);
116  $routes->add('home', $route);
117  }
118 
119 }
Drupal\dkan_frontend\Routing\RouteProvider
Definition: RouteProvider.php:12
Drupal\dkan_frontend\Routing\RouteProvider\__construct
__construct(string $appRoot, QueryFactory $entityQuery)
Definition: RouteProvider.php:20
Drupal\dkan_frontend\Routing\RouteProvider\getNameFromPath
getNameFromPath($path)
Definition: RouteProvider.php:41
Drupal\dkan_frontend\Routing
Definition: RouteProvider.php:3
Drupal\dkan_frontend\Routing\RouteProvider\routes
routes()
Definition: RouteProvider.php:28