Something went wrong on our end
uriModule.php 4.78 KiB
<?
require_once('abstractModule.php');
class UriModule extends abstractModule{
//Uri module
public function match($uri){
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
require_once('classes/MetaDb.php');
$metaDb = new MetaDb($conf['metadata']['db']['location']);
$pair = Queries::getMetadata($localUri, $acceptContentType, $metaDb);
if($pair == NULL){ // Original URI is not in metadata
if(Queries::uriExist($uri, $endpoints['local'])){
$page = Queries::createPage($uri, $localUri, $acceptContentType, $metaDb);
if($page == NULL){
Utils::send500("Can't write sqlite database.");
}
Utils::send303($page, $acceptContentType);
exit(0);
}else{
return false; //Utils::send404($uri);
}
}
$extension = Utils::getExtension($pair[2]);
$curie = Utils::uri2curie($pair[0]);
list($modelFile, $viewFile) = $this->getModelandView($curie, $extension);
if($modelFile == NULL){
return FALSE;
}
$result = array( 'res' => $pair[0],
'page' => $pair[1],
'format' => $pair[2],
'modelFile' => $modelFile,
'viewFile' => $viewFile);
return $result;
}
public function execute($p){
global $conf;
global $localUri;
global $uri;
global $acceptContentType;
global $endpoints;
global $lodspk;
global $results;
global $first;
$res = $p['res'];
$page = $p['page'];
$format = $p['format'];
$modelFile = $p['modelFile'];
$viewFile = $p['viewFile'];
$uri = $res;
$curie = Utils::uri2curie($res);
//If resource is not the page, send a 303 to the document
if($res == $localUri){
Utils::send303($page, $acceptContentType);
}
$uri = $res;
if($conf['mirror_external_uris']){
$localUri = preg_replace("|^".$conf['ns']['local']."|", $conf['basedir'], $res);
}
$extension = Utils::getExtension($format);
/*Redefine Content type based on the
* dcterms:format for this page
*/
$acceptContentType = $format;
$curie = Utils::uri2curie($uri);
if($modelFile == NULL){
return;
}
//$lodspk = $conf['view']['standard'];
$lodspk['type'] = $modelFile;
$lodspk['module'] = 'uri';
$lodspk['add_mirrored_uris'] = true;
$lodspk['this']['value'] = $uri;
$lodspk['this']['curie'] = Utils::uri2curie($uri);
$lodspk['local']['value'] = $localUri;
$lodspk['local']['curie'] = Utils::uri2curie($localUri);
$lodspk['this']['contentType'] = $acceptContentType;
$lodspk['model'] = $conf['model']['directory'];
$lodspk['view'] = $conf['view']['directory'];
$lodspk['ns'] = $conf['ns'];
chdir($conf['home'].$conf['model']['directory']);
Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
if($lodspk['resultRdf']){
echo Utils::serializeRdf($results, $extension);
exit(0);
}else{
$results = Utils::internalize($results);
}
$lodspk['first'] = Utils::getFirsts($results);
chdir($conf['home']);
if(is_array($results)){
$resultsObj = Convert::array_to_object($results);
}else{
$resultsObj = $results;
}
if($conf['debug']){
trigger_error("Using template ".$viewFile, E_USER_NOTICE);
echo("TEMPLATE: ".$viewFile."\n\n");
}
Utils::processDocument($viewFile, $lodspk, $resultsObj);
}
private static function getModelandView($uri, $extension){
global $conf;
global $lodspk;
$auxViewFile = $conf['view']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.template';
$auxModelFile = $conf['model']['directory'].$conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
if(file_exists($auxModelFile)){
//Model exists
$modelFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.queries';
if(file_exists($auxViewFile) ){
//View exists, everything is fine
$viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template';
}elseif($extension != 'html'){
//View doesn't exists (and is not HTML)
$viewFile = null;
}else{
//No HTML representation as fallback, then not recognized by URI module
return array(null, null);
}
return array($modelFile, $viewFile);
}elseif($extension != 'html' && file_exists($conf['model']['directory'].$conf['uri']['prefix'].$uri.'/html.queries')){
$modelFile = $conf['uri']['prefix'].$uri.'/html.queries';
if(file_exists($auxViewFile) ){
//View exists, everything is fine
$viewFile = $conf['uri']['prefix'].$uri.'/'.$extension.'.template';
}elseif($extension != 'html'){
//View doesn't exists (and is not HTML)
$lodspk['transform_select_query'] = true;
$viewFile = null;
}
return array($modelFile, $viewFile);
}
return array(NULL, NULL);
}
}
?>