Skip to content
Snippets Groups Projects

Resolve "Remove all use of GLOBALS"

Merged Stein Magne Bjorklund requested to merge 13-remove-all-use-of-globals into master
1 file
+ 1
1
Compare changes
  • Side-by-side
  • Inline
@@ -4,37 +4,120 @@ namespace uib\ub\loadspeakr\modules;
use ARC2;
use Exception;
use uib\ub\loadspeakr\Configuration;
use uib\ub\loadspeakr\Convert;
use uib\ub\loadspeakr\Endpoint;
use uib\ub\loadspeakr\HTTPStatus;
use uib\ub\loadspeakr\Logging;
use uib\ub\loadspeakr\Utils;
class ServiceModule implements ModuleInterface
final class ServiceModule implements ModuleInterface
{
private Configuration $configuration;
private Utils $utils;
private string $basedir;
private Endpoint $endpoints;
private array $lodspk;
public function __construct(Configuration $configuration, Utils $utils)
{
$this->configuration = $configuration;
$this->utils = $utils;
$this->basedir = $configuration->getConfigValue('conf', 'basedir');
$this->endpoints = $configuration->getConfigValue('bootstrap', 'endpoints')['local'];
}
/**
* Checking default components.
*
* @param $serviceName
* @param $arguments
* @param $extension
* @param $conf
* @param $lodspk
*/
private function checkComponents($serviceName, $arguments, $extension, $conf, $lodspk)
{
if (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl'
)) {
$subDir = $this->readScaffold(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl',
join("/", $arguments)
);
$subDir .= '/';
$lodspk['model'] = $conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir;
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir . $extension . '.template';
} elseif (file_exists(
$conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName
)) {
$lodspk['model'] = $conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/';
$lodspk['view'] = $conf['home'] . $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $extension . '.template';
} else {
if (is_null($lodspk['model']) && is_null($lodspk['view'])) {
//checking other components
if (!empty($conf['components']['services']) && count($conf['components']['services']) > 0) {
foreach ($conf['components']['services'] as $service) {
$serviceArray = explode("/", $service);
if ($serviceName == end($serviceArray)) {
array_pop($serviceArray);
$conf['service']['prefix'] = array_pop($serviceArray);
$conf['model']['directory'] = join("/", $serviceArray);
$conf['view']['directory'] = $conf['model']['directory'];
if (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl'
)) {
$subDir = $this->readScaffold(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl',
join("/", $arguments)
);
$subDir .= '/';
$lodspk['model'] = $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir;
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir . $extension . '.template';
} elseif (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName
)) {
$lodspk['model'] = $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/';
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $extension . '.template';
}
}
}
}
}
}
return ['conf' => $conf, 'lodspk' => $lodspk];
}
public function match($uri)
{
global $conf;
global $acceptContentType;
global $localUri;
global $lodspk;
$conf = $this->configuration->getConfigValues('conf');
$acceptContentType = $this->configuration->getConfigValue('bootstrap', 'acceptContentType');
$localUri = $this->configuration->getConfigValue('bootstrap', 'localUri');
$lodspk = $this->configuration->getConfigValue('bootstrap', 'lodspk');
$lodspk['model'] = null;
$lodspk['view'] = null;
$q = preg_replace('|^' . $conf['basedir'] . '|', '', $localUri);
$qArr = explode('/', $q);
if (sizeof($qArr) == 0) {
if ($q === 0 || $q === "") {
return false;
}
$tokens = explode('/', $q);
if (count($tokens) === 0) {
return false;
}
$extension = Utils::getExtension($acceptContentType, $conf['http_accept']);
$viewFile = null;
$tokens = $qArr;
$arguments = array();
while (sizeof($tokens) > 0) {
$serviceName = join("%2F", $tokens);
//Use .extension at the end of the service to force a particular content type
$lastSegment = end($tokens);
if (strpos($lastSegment, '.') > 0) {
$aux = explode(".", $lastSegment);
if (sizeof($aux) > 1) {
@@ -48,128 +131,110 @@ class ServiceModule implements ModuleInterface
$serviceName = join(".", $aux);
}
//checking default components
if (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl'
)) {
$subDir = $this->readScaffold(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl',
join("/", $arguments)
);
$subDir .= '/';
$lodspk['model'] = $conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir;
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir . $extension . '.template';
} elseif (file_exists(
$conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName
)) {
$lodspk['model'] = $conf['home'] . $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/';
$lodspk['view'] = $conf['home'] . $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $extension . '.template';
} else {
if (is_null($lodspk['model']) && is_null($lodspk['view'])) {
//checking other components
if (!empty($conf['components']['services']) && count($conf['components']['services']) > 0) {
foreach ($conf['components']['services'] as $service) {
$serviceArray = explode("/", $service);
if ($serviceName == end($serviceArray)) {
array_pop($serviceArray);
$conf['service']['prefix'] = array_pop($serviceArray);
$conf['model']['directory'] = join("/", $serviceArray);
$conf['view']['directory'] = $conf['model']['directory'];
if (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl'
)) {
$subDir = $this->readScaffold(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/scaffold.ttl',
join("/", $arguments)
);
$subDir .= '/';
$lodspk['model'] = $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir;
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $subDir . $extension . '.template';
} elseif (file_exists(
$conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName
)) {
$lodspk['model'] = $conf['model']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/';
$lodspk['view'] = $conf['view']['directory'] . '/' . $conf['service']['prefix'] . '/' . $serviceName . '/' . $extension . '.template';
}
}
}
}
}
}
$lodspk['serviceName'] = join("/", $tokens);
$foundComponents = $this->checkComponents(
$serviceName,
$arguments,
$extension,
$conf,
$this->configuration->getConfigValue('bootstrap', 'lodspk')
);
$lodspk = $foundComponents["lodspk"];
$lodspk['serviceName'] = implode("/", $tokens);
$lodspk['componentName'] = $lodspk['serviceName'];
$modelFile = $lodspk['model'] . $extension . '.queries';
$modelFile = $foundComponents['lodspk']['model'] . $extension . '.queries';
if (file_exists($lodspk['model'] . $extension . '.queries')) {
if (!file_exists($lodspk['view'])) {
$viewFile = null;
} else {
$viewFile = $lodspk['view'];
}
$this->lodspk = $lodspk;
return array($modelFile, $viewFile);
} elseif (file_exists($lodspk['model'] . 'queries')) {
}
if (file_exists($lodspk['model'] . 'queries')) {
$modelFile = $lodspk['model'] . 'queries';
if (!file_exists($lodspk['view'])) {
$lodspk['resultRdf'] = true;
$viewFile = null;
} else {
$viewFile = $lodspk['view'];
}
$this->lodspk = $lodspk;
return array($modelFile, $viewFile);
} elseif (file_exists($lodspk['model'])) {
}
if (file_exists($lodspk['model'])) {
HTTPStatus::send406($uri);
return null;
}
array_unshift($arguments, array_pop($tokens));
}
$this->lodspk = $lodspk;
return false;
}
private function altUri(array $parameter, int $index)
{
$nsLocal = $this->configuration->getConfigValue('conf', 'ns')['local'];
$altUri = Utils::curie2uri($parameter[$index]);
return preg_replace("|^" . $this->basedir . "|", $nsLocal, $altUri);
}
public function execute($service)
{
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
global $firstResults;
global $results;
$conf = $this->configuration->getConfigValues('conf');
$localUri = $this->configuration->getConfigValue('bootstrap', 'localUri');
$uri = $this->configuration->getConfigValue('bootstrap', 'uri');
$acceptContentType = $this->configuration->getConfigValue('bootstrap', 'acceptContentType');
$lodspk = $this->lodspk;
$firstResults = $this->configuration->getConfigValue('bootstrap', 'firstResults');
$results = $this->configuration->getConfigValue('bootstrap', 'results');
$context = array();
$context['contentType'] = $acceptContentType;
$context['endpoints'] = $endpoints;
$params = $this->getParams($localUri);
$extension = Utils::getExtension($acceptContentType, $conf['http_accept']);
$args = array();
list($modelFile, $viewFile) = $service;
[$modelFile, $viewFile] = $service;
try {
$prefixHeader = array();
for ($i = 0; $i < sizeof($params); $i++) {
if (Utils::mirror_external_uris($conf)) {
$altUri = Utils::curie2uri($params[$i]);
$altUri = preg_replace("|^" . $conf['basedir'] . "|", $conf['ns']['local'], $altUri);
$params[$i] = Utils::uri2curie($altUri);
if ($params[$i] && Utils::mirror_external_uris($conf)) {
$params[$i] = Utils::uri2curie($this->altUri($params, $i));
}
}
$segmentConnector = "";
for ($i = 0; $i < sizeof($params); $i++) {
Utils::curie2uri($params[$i]);
$auxPrefix = Utils::getPrefix($params[$i]);
if ($auxPrefix['ns'] != null) {
$prefixHeader[] = $auxPrefix;
}
$args["arg" . $i] = $params[$i];
$args["all"] .= $segmentConnector . $params[$i];
if ($segmentConnector == "") {
$segmentConnector = "/";
if ($params[$i]) {
Utils::curie2uri($params[$i]);
$auxPrefix = Utils::getPrefix($params[$i], $conf['ns']);
if ($auxPrefix['ns'] != null) {
$prefixHeader[] = $auxPrefix;
}
$args["arg" . $i] = $params[$i];
$args["all"] .= $segmentConnector . $params[$i];
if ($segmentConnector == "") {
$segmentConnector = "/";
}
}
}
$results['params'] = $params;
$results['params'] = $params;
$lodspk['home'] = $conf['basedir'];
$lodspk['baseUrl'] = $conf['basedir'];
$lodspk['module'] = 'service';
@@ -188,12 +253,14 @@ class ServiceModule implements ModuleInterface
$lodspk['add_mirrored_uris'] = false;
$lodspk['baseUrl'] = $conf['basedir'];
$lodspk['this']['value'] = $uri;
if ($viewFile == null) {
$lodspk['transform_select_query'] = true;
}
Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
if (!$lodspk['resultRdf']) {
Utils::queryFile($modelFile, $this->endpoints, $results, $firstResults, $lodspk);
if (!isset($lodspk['resultRdf']) || !$lodspk['resultRdf']) {
$results = Utils::internalize($results);
$firstAux = Utils::getfirstResults($results);
@@ -220,11 +287,8 @@ class ServiceModule implements ModuleInterface
protected function getParams($uri)
{
global $conf;
global $lodspk;
$count = 1;
$prefixUri = $conf['basedir'];
$functionAndParams = explode('/', str_replace($prefixUri . $lodspk['serviceName'], '', $uri, $count));
$functionAndParams = explode('/', str_replace($this->basedir . $this->lodspk['serviceName'], '', $uri, $count));
if (sizeof($functionAndParams) > 1) {
array_shift($functionAndParams);
Loading