Skip to content
Snippets Groups Projects
serviceModule.php 5.2 KiB
Newer Older
alangrafu's avatar
alangrafu committed
<?
require_once('abstractModule.php');
class ServiceModule extends abstractModule{
  //Service module
  
  public function match($uri){
alangrafu's avatar
alangrafu committed
  	global $conf; 
alangrafu's avatar
alangrafu committed
  	global $acceptContentType; 
    global $localUri;
alangrafu's avatar
alangrafu committed
  	$q = preg_replace('|^'.$conf['basedir'].'|', '', $localUri);
alangrafu's avatar
alangrafu committed
 	$qArr = explode('/', $q);
alangrafu's avatar
alangrafu committed
  	if(sizeof($qArr)==0){
  	  return FALSE;
  	}
  	$extension = Utils::getExtension($acceptContentType); 
  	$lodspk['model'] = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0].'/';
alvaro's avatar
alvaro committed
  	$lodspk['view'] = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0].'/';
  	$viewFile  = $extension.".template";
  	$modelFile = $extension.".queries";
  	if(file_exists($lodspk['model']) && file_exists($lodspk['view'])){
  	  if(!file_exists($lodspk['view'].$viewFile)){
  	  	$viewFile = null;  	  
  	  }
  	  if(file_exists($lodspk['model'].$modelFile) && $qArr[0] != null){
  	  	trigger_error("Using model ".$modelFile." and view ".$viewFile, E_USER_NOTICE);
  	  	return array($modelFile, $viewFile);
  	  }elseif($extension != 'html' && file_exists($lodspk['model'].'/html.queries')){
  	  	$modelFile = 'html.queries';
  	  	trigger_error("Using ".$modelFile." as model. It will be used as a CONSTRUCT", E_USER_NOTICE);
  	  	return array($modelFile, $viewFile);
  	  }else{
  	  	Utils::send406($uri);
  	  	exit(0);
  	  }
alangrafu's avatar
alangrafu committed
  	}
  public function execute($service){
  	global $conf;
  	global $localUri;
  	global $uri;
  	global $acceptContentType;
  	global $endpoints;
  	global $lodspk;
  	global $firstResults;
  	$context = array();
  	$context['contentType'] = $acceptContentType;
  	$context['endpoints'] = $endpoints;
  	//$sp = new SpecialFunction();
  	//$sp->execute($localUri, $context);
  	$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++){
  	  	if($conf['mirror_external_uris'] != false){
  	  	  $altUri = Utils::curie2uri($params[$i]);
  	  	  $altUri = preg_replace("|^".$conf['basedir']."|", $conf['ns']['local'], $altUri);
  	  	  $params[$i] = Utils::uri2curie($altUri);
  	  	}
alvaro's avatar
alvaro committed
  	  $segmentConnector = "";
  	  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];
alvaro's avatar
alvaro committed
  	  	$args["all"] .= $segmentConnector.$params[$i];
  	  	if($segmentConnector == ""){
  	  	  $segmentConnector = "/";
  	  	}
  	  $results['params'] = $params;
  	  
  	  
  	  $lodspk['home'] = $conf['basedir'];
  	  $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;
  	  }
  	  chdir($lodspk['model']);
  	  
  	  Utils::queryFile($modelFile, $endpoints['local'], $results, $firstResults);
      if(!$lodspk['resultRdf']){
      	$results = Utils::internalize($results); 
      	$lodspk['firstResults'] = Utils::getfirstResultss($results);
      	
      	chdir($conf['home']);
      	if(is_array($results)){
      	  $resultsObj = Convert::array_to_object($results);
      	}else{
      	  $resultsObj = $results;
      	}
      }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";
  	  chdir($conf['home']);  	  
  	  Utils::processDocument($viewFile, $lodspk, $results);    	  
  	}catch (Exception $ex){
  	  echo $ex->getMessage();
  	  trigger_error($ex->getMessage(), E_ERROR);
  	  Utils::send500($uri);
alangrafu's avatar
alangrafu committed
  }
  
  
  protected function getFunction($uri){
  	global $conf;
  	$count = 1;
  	$prefixUri = $conf['basedir'];
  	$aux = str_replace($prefixUri, '', $uri, $count);
  	$functionAndParams = explode('/', $aux);
  	return $functionAndParams[0];
alangrafu's avatar
alangrafu committed
  }
  
  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);
  	}
  }
  
alangrafu's avatar
alangrafu committed
}
?>