Newer
Older
<?
require_once('abstractModule.php');
class ServiceModule extends abstractModule{
//Service module
public function match($uri){
global $lodspk;
//Use .extension at the end of the service to force a particular content type
if(strpos($qArr[0], '.')>0){
$aux = explode(".", $qArr[0]);
if(isset($aux[1])){
$contentTypes = $conf['http_accept'][$aux[1]];
if($contentTypes == null){
HTTPStatus::send406("Content type not acceptable\n");
}
$acceptContentType = $contentTypes[0];
}
$qArr[0] = $aux[0];
}
$extension = Utils::getExtension($acceptContentType);
$viewFile = null;
$lodspk['model'] = $conf['model']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/';
$lodspk['view'] = $conf['view']['directory'].'/'.$conf['service']['prefix'].'/'.$qArr[0].'/'.$extension.'.template';
$lodspk['serviceName'] = $qArr[0];
$modelFile = $lodspk['model'].$extension.'.queries';
if(file_exists($lodspk['model'].$extension.'.queries')){
if(!file_exists($lodspk['view'])){
$viewFile = null;
}else{
$viewFile = $lodspk['view'];
return array($modelFile, $viewFile);
}elseif(file_exists($lodspk['model'].'queries')){
$modelFile = $lodspk['model'].'queries';
if(!file_exists($lodspk['view'])){
$lodspk['resultRdf'] = true;
}else{
return array($modelFile, $viewFile);
}elseif(file_exists($lodspk['model'])){
public function execute($service){
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
$context = array();
$context['contentType'] = $acceptContentType;
$context['endpoints'] = $endpoints;
$f = $this->getFunction($localUri);
$params = array();
$params = $this->getParams($localUri);
//$params[] = $context;
//$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
$extension = Utils::getExtension($acceptContentType);
$args = array();
list($modelFile, $viewFile) = $service;
try{
$prefixHeader = array();
for($i=0;$i<sizeof($params);$i++){
$altUri = Utils::curie2uri($params[$i]);
$altUri = preg_replace("|^".$conf['basedir']."|", $conf['ns']['local'], $altUri);
$params[$i] = Utils::uri2curie($altUri);
}
for($i=0;$i<sizeof($params);$i++){
Utils::curie2uri($params[$i]);
//echo $params[$i]." ".Utils::curie2uri($params[$i]);exit(0);
$auxPrefix = Utils::getPrefix($params[$i]);
if($auxPrefix['ns'] != NULL){
$prefixHeader[] = $auxPrefix;
}
$args["arg".$i]=$params[$i];
$args["all"] .= $segmentConnector.$params[$i];
if($segmentConnector == ""){
$segmentConnector = "/";
}
$results['params'] = $params;
$lodspk['home'] = $conf['ns']['local'];
$lodspk['baseUrl'] = $conf['basedir'];
$lodspk['module'] = 'service';
$lodspk['root'] = $conf['root'];
$lodspk['contentType'] = $acceptContentType;
$lodspk['ns'] = $conf['ns'];
$lodspk['this']['value'] = $uri;
$lodspk['this']['curie'] = Utils::uri2curie($uri);
$lodspk['this']['local'] = $localUri;
$lodspk['contentType'] = $acceptContentType;
$lodspk['endpoint'] = $conf['endpoint'];
$lodspk['type'] = $modelFile;
$lodspk['header'] = $prefixHeader;
$lodspk['args'] = $args;
$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']){
$results = Utils::internalize($results);
if(is_array($results)){
$resultsObj = Convert::array_to_object($results);
Alvaro Graves
committed
$results = $resultsObj;
}else{
$resultsObj = $results;
}
$lodspk['firstResults'] = Convert::array_to_object($firstAux);
}else{
$resultsObj = $results;
}
//Need to redefine viewFile as 'local' i.e., inside service.foo/ so I can load files with the relative path correctly
//$viewFile = $extension.".template";
Utils::processDocument($viewFile, $lodspk, $results);
}catch (Exception $ex){
echo $ex->getMessage();
trigger_error($ex->getMessage(), E_ERROR);
exit(0);
protected function getFunction($uri){
global $conf;
$count = 1;
$prefixUri = $conf['basedir'];
$aux = str_replace($prefixUri, '', $uri, $count);
$functionAndParams = explode('/', $aux);
return $functionAndParams[0];
protected function getParams($uri){
global $conf;
$count = 1;
$prefixUri = $conf['basedir'];
$functionAndParams = explode('/', str_replace($prefixUri, '', $uri, $count));
if(sizeof($functionAndParams) > 1){
array_shift($functionAndParams);
return $functionAndParams;
}else{
return array(null);
}
}