Skip to content
Snippets Groups Projects
Commit aa5da6d4 authored by Stein Magne Bjorklund's avatar Stein Magne Bjorklund
Browse files

Create module loader

parent 61a285ff
No related branches found
No related tags found
1 merge request!16Resolve "Introduce PSR-4 autoloading"
<?php declare(strict_types=1);
namespace uib\ub\loadspeakr;
use uib\ub\loadspeakr\modules\ModuleInterface;
use uib\ub\loadspeakr\modules\UnknownModule;
final class LoadModules
{
private array $conf;
public function __construct($conf)
{
$this->conf = $conf;
}
public function loadModule(string $uri): ModuleInterface
{
$className = $this->loadClass($uri);
$unknown = new UnknownModule();
switch ($uri) {
case 'admin':
return new $className();
case 'redirect':
return new $className();
case 'service':
return new $className();
case 'session':
return new $className();
case 'sparqlfilter':
return new $className();
case 'type':
return new $className();
case 'uri':
return new $className();
case 'export':
return new $className();
case 'static':
return new $className();
case 'default':
break;
}
return $unknown;
}
private function loadClass($module): string
{
if (!$this->moduleAvailable($module)) {
HTTPStatus::send500('Module: ' . $module . ' not found.');
}
$className = ucfirst($module) . 'Module';
if (file_exists(__DIR__ . '/modules/' . $className . '.php')) {
return __NAMESPACE__ . '\\modules\\' . $className;
}
return '';
}
private function moduleAvailable(string $module): bool
{
if (!in_array($module, $this->conf['modules']['available'], true)) {
return false;
}
return true;
}
}
\ No newline at end of file
<?php declare(strict_types=1);
namespace uib\ub\loadspeakr\modules;
use uib\ub\loadspeakr\HTTPStatus;
/**
* Null result Loadspkr module.
*
* Used when unknown module is requested.
*/
final class UnknownModule implements ModuleInterface
{
public function match($uri): void
{
HTTPStatus::send404($uri);
}
public function execute($params): void
{
}
}
...@@ -4,6 +4,7 @@ use uib\ub\loadspeakr\Endpoint; ...@@ -4,6 +4,7 @@ use uib\ub\loadspeakr\Endpoint;
use uib\ub\loadspeakr\Exporter; use uib\ub\loadspeakr\Exporter;
use uib\ub\loadspeakr\HTTPStatus; use uib\ub\loadspeakr\HTTPStatus;
use uib\ub\loadspeakr\Importer; use uib\ub\loadspeakr\Importer;
use uib\ub\loadspeakr\LoadModules;
use uib\ub\loadspeakr\Logging; use uib\ub\loadspeakr\Logging;
use uib\ub\loadspeakr\Utils; use uib\ub\loadspeakr\Utils;
...@@ -65,22 +66,24 @@ if ($uri === $conf['basedir']) { ...@@ -65,22 +66,24 @@ if ($uri === $conf['basedir']) {
$localUri = $conf['basedir'] . $_GET['q']; $localUri = $conf['basedir'] . $_GET['q'];
$uri = Utils::getMirroredUri($localUri); $uri = Utils::getMirroredUri($localUri);
// Load Loadspeakr modules. /**
foreach ($conf['modules']['available'] as $i) { * Load Loadspeakr modules.
$className = ucfirst($i) . 'Module'; */
$currentModule = $conf['modules']['directory'] . $className . '.php'; foreach ($conf['modules']['available'] as $loadspkrModule) {
$namespacedClassName = 'uib\ub\loadspeakr\modules\\' . $className; $loader = new LoadModules($conf);
$module = new $namespacedClassName(); $module = $loader->loadModule($loadspkrModule);
$matching = $module->match($uri); $matching = $module->match($uri);
if ($matching !== false) { if ($matching) {
$module->execute($matching); $module->execute($matching);
if ($conf['logfile'] !== null) { if ($conf['logfile'] !== null) {
fwrite($conf['logfile'], "]}"); fwrite($conf['logfile'], "]}");
fclose($conf['logfile']); fclose($conf['logfile']);
} }
/**
* Only run first Loadspeakr modules that matches.
*/
exit(0); exit(0);
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment