Skip to content
Snippets Groups Projects
serviceModule.php 4.5 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); 
alvaro's avatar
alvaro committed
  	$lodspk['model'] = $conf['home'].$conf['model']['directory'].$conf['service']['prefix'].$qArr[0]."/";
  	$lodspk['view'] = $conf['home'].$conf['view']['directory'].$conf['service']['prefix'].$qArr[0].'/';
  	$viewFile  = $extension.".template";
  	$modelFile = $extension.".queries";
alvaro's avatar
alvaro committed
  	if(file_exists($lodspk['model'].$modelFile) && file_exists($lodspk['view'].$viewFile) && $qArr[0] != null){
  	  trigger_error("Using model ".$modelFile." and view ".$viewFile, E_USER_NOTICE);
 	  return array($modelFile, $viewFile);
alvaro's avatar
alvaro committed
  	}elseif($extension != 'html' && file_exists($lodspk['model'].$conf['service']['prefix'].$qArr[0].'/html.queries')){
  	  $modelFile =  $conf['home'].$lodspk['model'].$conf['service']['prefix'].$qArr[0].'/html.queries';
  	  $viewFile = null;
  	  trigger_error("Using ".$modelFile." as model. It will be used as a CONSTRUCT", E_USER_NOTICE);
  	  return array($modelFile, $viewFile);
alangrafu's avatar
alangrafu committed
  	}
  	
  	return FALSE;  
  }

public function execute($service){
  global $conf;
  global $localUri;
  global $uri;
  global $acceptContentType;
  global $endpoints;
  global $lodspk;
  global $first;
  $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']){
  	  	$altUri = Utils::curie2uri($params[$i]);
  	  	$altUri = preg_replace("|^".$conf['basedir']."|", $conf['ns']['local'], $altUri);
  	  	$params[$i] = Utils::uri2curie($altUri);
  	  }
alangrafu's avatar
alangrafu committed
  	}
  	
  	for($i=0;$i<sizeof($params);$i++){  
  	  $auxPrefix = Utils::getPrefix($params[$i]);
  	  if($auxPrefix['ns'] != NULL){
  	  	$prefixHeader[] = $auxPrefix;
  	  }
  	  $args["arg".$i]=$params[$i];
alangrafu's avatar
alangrafu committed
  	}
  	$results['params'] = $params;
  	$lodspk['home'] = $conf['basedir'];
alvaro's avatar
alvaro committed
  	$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);
alvaro's avatar
alvaro committed
  	$lodspk['this']['local'] = $localUri;  	
  	$lodspk['contentType'] = $acceptContentType;
  	$lodspk['endpoint'] = $conf['endpoint'];
alvaro's avatar
alvaro committed
  	
  	$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;
  	}
alvaro's avatar
alvaro committed
  	chdir($lodspk['model']);
  	Utils::queryFile($modelFile, $endpoints['local'], $results, $first);
  	$results = Utils::internalize($results);
  	
  	$lodspk['first'] = Utils::getFirsts($results);
  	chdir($conf['home']);
  	if(is_array($results)){
  	  $results = Convert::array_to_object($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);
  	Utils::send500($uri);
alangrafu's avatar
alangrafu committed
  }
  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);
alangrafu's avatar
alangrafu committed
  }
alangrafu's avatar
alangrafu committed
}
?>