Skip to content
Snippets Groups Projects
BasicSpecialFunction.php 3.93 KiB
<?

include_once('AbstractSpecialFunction.php');

class SpecialFunction extends AbstractSpecialFunction{
  protected function getFunction($uri){
  	global $conf;
  	$count = 1;
  	$prefixUri = $conf['basedir'].$conf['special']['uri']."/";
  	$aux = str_replace($prefixUri, '', $uri, $count);
  	$functionAndParams = explode('/', $aux);
  	return $functionAndParams[0];
  }
  
  protected function getParams($uri){
  	global $conf;
  	$count = 1;
  	$prefixUri = $conf['basedir'].$conf['special']['uri'];
  	$functionAndParams = explode('/', str_replace($prefixUri, '', $uri, $count));
  	if(sizeof($functionAndParams) > 1){
  	  array_shift($functionAndParams);
  	  return $functionAndParams;
  	}else{
  	  return array(null);
  	}
  }
  
  public function execute($uri, $context){
  	global $conf;
  	global $base;
  	global $results;
  	global $rRoot;
  	$f = $this->getFunction($uri);
  	$params = array();
  	$params = $this->getParams($uri);
  	$params[] = $context;
  	$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
  	$extension = Utils::getExtension($acceptContentType); 
  	$args = array();
  	try{
  	  $viewFile = $conf['special']['uri'].".".$f.$conf['view']['extension'].".".$extension;
  	  $modelFile = $conf['special']['uri'].".".$f.$conf['model']['extension'].".".$extension;
  	  if(!(is_dir($conf['model']['directory'].$modelFile) || is_file($conf['model']['directory'].$modelFile))){
  	  	$msg = '<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['model']['directory'].$modelFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>";
  	  	throw new Exception($msg);
  	  }
  	  if(!is_file($conf['view']['directory'].$viewFile)){
  	  	  $msg='<h1>Method does not exist!</h1><br/>This means that <tt>'.$conf['view']['directory'].$viewFile."</tt> doesn't exist.<br/>Please refer to this tutorial to create one.<br/>";
  	  	  throw new Exception($msg);
  	  }
  	  $endpoints = $context['endpoints'];
  	  array_pop($params);
  	  array_shift($params);
  	  
  	  $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);
  	  	}
  	  }
  	  
  	  for($i=0;$i<sizeof($params);$i++){  	  	
  	  	$auxPrefix = Utils::getPrefix($params[$i]);
  	  	if($auxPrefix['ns'] != NULL){
  	  	  $prefixHeader[] = $auxPrefix;
  	  	}
  	  	$args["arg".$i]=$params[$i];
  	  }
 	  $data['params'] = $params;
 	  $base = $conf['view']['standard'];
 	  $base['type'] = $modelFile;
 	  $base['root'] = $conf['root'];
 	  $base['home'] = $conf['basedir'];
 	  $base['this']['value'] = $uri;
 	  $base['this']['curie'] = Utils::uri2curie($uri);
 	  $base['this']['contentType'] = $acceptContentType;
 	  $base['model']['directory'] = $conf['model']['directory'];
 	  $base['view']['directory'] = $conf['view']['directory'];
 	  $base['ns'] = $conf['ns'];
 	  $base['endpoint'] = $conf['endpoint'];
  	  $base['type'] = $modelFile;
  	  $base['header'] = $prefixHeader;
  	  $base['args'] = $args;
  	  $base['baseUrl'] = $conf['basedir'];
  	  $base['this']['value'] = $uri;
  	  $base['this']['contentType'] = $acceptContentType;
  	  $base['view']['directory'] = $conf['home'].$conf['view']['directory'];
  	  $base['model']['directory'] = $conf['home'].$conf['model']['directory'];
  	  chdir($conf['model']['directory']);
  	  $first = array();
  	  Utils::queryFile($modelFile, $endpoints['local'], $data, $first);
  	  chdir($conf['home']);
  	  $data = Utils::internalize($data);

  	  if(is_array($data)){
  	  	$results = Convert::array_to_object($data);
  	  }else{
  	  	$results = $data;
  	  }
  	  Utils::processDocument($viewFile, $base, $results);  	
  	}catch (Exception $ex){
  	  echo $ex->getMessage();
  	  trigger_error($ex->getMessage(), E_ERROR);
  	  Utils::send500($uri);
  	}
  	
  }
  
}

?>