Skip to content
Snippets Groups Projects
Commit bf4090c3 authored by Alvaro Graves's avatar Alvaro Graves
Browse files

Changing architecture for special pages

Instead of creating a new class, users only need to create a model and
view file called special.<COMMAND>.[view|model].extension  Thus, it is
possible to create new URL such as http://<HOMEURL>/special<COMMAND>
parent 30471cd8
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ class SpecialFunction extends AbstractSpecialFunction{ ...@@ -6,7 +6,7 @@ class SpecialFunction extends AbstractSpecialFunction{
protected function getFunction($uri){ protected function getFunction($uri){
global $conf; global $conf;
$count = 1; $count = 1;
$prefixUri = $conf['basedir'].$conf['special']['uri']; $prefixUri = $conf['basedir'].$conf['special']['uri']."/";
$aux = str_replace($prefixUri, '', $uri, $count); $aux = str_replace($prefixUri, '', $uri, $count);
$functionAndParams = explode('/', $aux); $functionAndParams = explode('/', $aux);
return $functionAndParams[0]; return $functionAndParams[0];
...@@ -26,54 +26,45 @@ class SpecialFunction extends AbstractSpecialFunction{ ...@@ -26,54 +26,45 @@ class SpecialFunction extends AbstractSpecialFunction{
} }
public function execute($uri, $context){ public function execute($uri, $context){
global $conf;
$f = $this->getFunction($uri); $f = $this->getFunction($uri);
$params = array(); $params = array();
$params = $this->getParams($uri); $params = $this->getParams($uri);
$params[] = $context; $params[] = $context;
$acceptContentType = Utils::getBestContentType($_SERVER['HTTP_ACCEPT']);
$extension = Utils::getExtension($acceptContentType);
try{ try{
$methods = get_class_methods($this); $viewFile = $conf['view']['directory'].$conf['special']['uri'].".".$f.$conf['view']['extension'].".".$extension;
if(!in_array($f, $methods)){ $modelFile = $conf['model']['directory'].$conf['special']['uri'].".".$f.$conf['model']['extension'].".".$extension;
if(!is_file($modelFile) || !is_file($viewFile)){
throw new Exception('Method does not exist!'); throw new Exception('Method does not exist!');
Utils::send500($uri); Utils::send404($uri);
}
$e = $context['endpoint'];
$query = file_get_contents($modelFile);
array_pop($params);
array_shift($params);
$queryHeader = "";
$prefixHeader = array();
for($i=0;$i<sizeof($params);$i++){
$auxPrefix = Utils::getPrefix($params[$i]);
if($auxPrefix['ns'] != NULL){
$prefixHeader[$auxPrefix['ns']] = $auxPrefix['prefix'];
}
$query = preg_replace("|%".$i."|", $params[$i], $query);
} }
call_user_func_array(array($this, $f), $params); foreach($prefixHeader as $n => $p){
}catch (Exception $e){ $queryHeader .= "PREFIX $p: <$n> \n";
Utils::send404($uri); }
$data['query'] =$queryHeader . $query;
$data['results'] = $e->query($data['query'], Utils::getResultsType($query));
Utils::processDocument($uri, $acceptContentType, $data, $viewFile);
}catch (Exception $ex){
Utils::send500($uri);
} }
} }
private function index($curie, $context){
global $conf;
//Not sure if I should use files like for
//templating instances
//For now it will be "built-in" in the class
$uri = Utils::curie2uri($curie);
if(!isset($curie) || $curie == ""){
$uri = "Class";
$query = "SELECT DISTINCT ?resource WHERE{
{
[] a ?resource
}UNION{
?resource a rdfs:Class
}UNION{
?resource a owl:Class
}UNION{
?resource rdfs:subClassOf []
}
}";
}else{
$query = file_get_contents($conf['model']['directory'].'special.index.model.html');
$query = preg_replace("|".$conf['resource']['url_delimiter']."|", "<".$uri.">", $query);
}
$viewFile = $conf['view']['directory'].'special.index.view.html';
$contentType = $context['contentType'];
$e = $context['endpoint'];
$data['results'] = $e->query($query, Utils::getResultsType($query));
$data['query'] = $query;
Utils::processDocument($uri, $contentType, $data, $viewFile);
}
} }
?> ?>
...@@ -52,6 +52,17 @@ class Utils{ ...@@ -52,6 +52,17 @@ class Utils{
return $ns[$parts[0]].$parts[1]; return $ns[$parts[0]].$parts[1];
} }
public static function getPrefix($curie){
global $conf;
$ns = $conf['ns'];
$parts = explode(':', $curie);
//Avoid if we have a namespace prefix called 'http'
if(preg_match('|^//|', $parts[1])){
return $curie;
}
return array('ns' => $ns[$parts[0]], 'prefix' => $parts[0]);;
}
public static function getTemplate($uri){ public static function getTemplate($uri){
$filename = str_replace(":", "_", $uri); $filename = str_replace(":", "_", $uri);
if(file_exists ($filename)){ if(file_exists ($filename)){
......
...@@ -26,7 +26,7 @@ $conf['http_accept']['ttl'] = array('text/n3', 'application/x-turtle', 'applica ...@@ -26,7 +26,7 @@ $conf['http_accept']['ttl'] = array('text/n3', 'application/x-turtle', 'applica
$conf['http_accept']['nt'] = array('text/plain'); $conf['http_accept']['nt'] = array('text/plain');
$conf['special']['uri'] = 'special/'; $conf['special']['uri'] = 'special';
$conf['special']['class'] = 'classes/BasicSpecialFunction.php'; $conf['special']['class'] = 'classes/BasicSpecialFunction.php';
//Frontpage when user goes to http://example.org/ //Frontpage when user goes to http://example.org/
......
SELECT DISTINCT ?resource WHERE { SELECT DISTINCT ?resource WHERE {
?resource a %u . [] a ?resource .
} }
SELECT DISTINCT ?resource WHERE {
?resource a %0 .
}
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<ul> <ul>
{% for row in r %} {% for row in r %}
{% if row.value.resource != null %} {% if row.value.resource != null %}
<li><a href='{{ row.value.resource }}'>{{row.curie.resource}}</a></li> <li><a href='{{base.baseUrl}}special/instances/{{ row.curie.resource }}'>{{row.curie.resource}}</a></li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" {% for i, ns in base.ns %}xmlns:{{i}}="{{ns}}"
{%endfor%}version="XHTML+RDFa 1.0" xml:lang="en">
<head>
<title>Instance of {{base.this.curie}}</title>
<link href="{{base.baseUrl}}/lodspeakr/css/basic.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
<h1>Instances of {{base.this.curie}}</h1>
<ul>
{% for row in r %}
{% if row.value.resource != null %}
<li><a href='{{ row.value.resource }}'>{{row.curie.resource}}</a></li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment