public function match($uri) { global $conf; global $localUri; global $uri; global $acceptContentType; global $endpoints; global $lodspk; require_once $conf['home'] . '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) { HTTPStatus::send500("Can't write sqlite database."); } if ($conf['debug']) { Logging::log("URI found, redirecting to " . $page); } HTTPStatus::send303($page, $acceptContentType); exit(0); } else { return false; } } return $pair; }
public function match($uri) { global $conf; global $localUri; global $uri; global $acceptContentType; global $endpoints; global $lodspk; global $results; global $firstResults; require_once $conf['home'] . '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) { HTTPStatus::send500("Can't write sqlite database."); } HTTPStatus::send303($page, $acceptContentType); exit(0); } else { return false; } } list($res, $page, $format) = $pair; $uri = $res; $queries = $this->getQueries(); $e = $endpoints['local']; require_once $conf['home'] . 'lib/Haanga/lib/Haanga.php'; Haanga::configure(array('cache_dir' => $conf['home'] . 'cache/', 'autoescape' => FALSE)); $vars = compact('uri', 'lodspk', 'models', 'first'); foreach ($queries as $l => $v) { $q = Utils::addPrefixes(file_get_contents($v)); $fnc = Haanga::compile($q); $query = $fnc($vars, TRUE); $aux = $e->query($query, Utils::getResultsType($query)); if ($aux["boolean"] === true) { $pair[] = $l; return $pair; } } return false; }
public function match($uri) { global $conf; global $localUri; global $uri; global $acceptContentType; global $endpoints; global $lodspk; if ($conf['disableComponents'] == true) { return FALSE; } 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) { HTTPStatus::send500("Can't write sqlite database."); } HTTPStatus::send303($page, $acceptContentType); exit(0); } else { return false; } } $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($service) { global $conf; global $localUri; global $uri; global $acceptContentType; global $endpoints; global $lodspk; global $firstResults; global $results; $context = array(); $context['contentType'] = $acceptContentType; $context['endpoints'] = $endpoints; //$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); } } $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]; $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['local']['value'] = $localUri; $lodspk['local']['curie'] = Utils::uri2curie($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); $firstAux = Utils::getfirstResults($results); // chdir($conf['home']); if (is_array($results)) { $resultsObj = Convert::array_to_object($results); $results = $resultsObj; } else { $resultsObj = $results; } $lodspk['firstResults'] = Convert::array_to_object($firstAux); } 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(); if ($conf['debug']) { Logging::log($ex->getMessage(), E_ERROR); } HTTPStatus::send500($uri); } }
public static function getUnMirroredUri($uri) { global $conf; $localUri = $uri; if (is_bool($conf['mirror_external_uris'])) { $localUri = preg_replace("|^" . $conf['ns']['local'] . "|", $conf['basedir'], $uri); } elseif (is_string($conf['mirror_external_uris'])) { $localUri = preg_replace("|^" . $conf['mirror_external_uris'] . "|", $conf['basedir'], $uri); } elseif (is_array($conf['mirror_external_uris'])) { //Instead of doing expensive regex, jsut use str_replace foreach ($conf['mirror_external_uris'] as $k => $v) { if (strlen(str_replace($v, "", $uri)) != strlen($uri)) { $fragment = $k == "" ? $k : $k . "/"; $localUri = preg_replace("|^" . $v . "|", $conf['basedir'] . $fragment, $uri); break; } } } else { HTTPStatus::send500("Error in mirroring configuration"); exit(1); } return $localUri; }
protected function addFile($params) { $path = "components/" . implode("/", array_slice($params, 1)); $basicContent = "SELECT * WHERE{\n ?s ?p ?o\n }LIMIT 10"; if (strpos($path, ".template") !== FALSE) { //It is not a query, but a template $basicContent = "<!DOCTYPE html>\n<html>\n <head>\n <meta http-equiv='Content-type' content='text/html; charset=utf-8'>\n </head>\n <body>\n </body>\n</html>"; } if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (sizeof($params) < 3) { HTTPStatus::send404(); exit(0); } $return_var = 0; if (file_exists($path)) { echo json_encode(array('success' => false)); return; } $dirpath = $path; $dirArray = explode("/", $path); array_pop($dirArray); $dirpath = implode("/", $dirArray); if (!is_dir($dirpath)) { $oldumask = umask(0); $return_var = mkdir($dirpath, 0755, true); umask($oldumask); if ($return_var === FALSE) { HTTPStatus::send500("mkdir " . var_export($return_var, true) . " " . $dirpath); } } $return_var = file_put_contents($path, $basicContent); //echo $return_var;exit(0); if ($return_var === FALSE) { HTTPStatus::send500("file_puts_content " . var_export($return_var, true) . " " . $path); } else { echo json_encode(array('success' => true, 'return' => $return_var)); } } else { HTTPStatus::send406(); exit(0); } }
//Redirect to root URL if necessary $uri = $conf['basedir'] . $_GET['q']; $localUri = $uri; if ($uri == $conf['basedir']) { header('Location: ' . $conf['root']); exit(0); } //Configure external URIs if necessary $localUri = $conf['basedir'] . $_GET['q']; $uri = Utils::getMirroredUri($localUri); //Modules foreach ($conf['modules']['available'] as $i) { $className = $i . 'Module'; $currentModule = $conf['modules']['directory'] . $className . '.php'; if (!is_file($currentModule)) { HTTPStatus::send500("<br/>Can't load or error in module <tt>" . $currentModule . "</tt>"); exit(1); } require_once $currentModule; $module = new $className(); $matching = $module->match($uri); if ($matching != FALSE) { $module->execute($matching); if ($conf['logfile'] != null) { fwrite($conf['logfile'], "]}"); fclose($conf['logfile']); } exit(0); } } HTTPStatus::send404($uri);
public function run() { set_time_limit(0); error_reporting(E_ERROR); if (is_file(FILE)) { echo "There is an existing " . FILE . " file on this installation. Please remove it before importing a new one"; exit(0); } if (!isset($_GET['import']) && !isset($_POST['importtext'])) { $this->showInterface(); exit(0); } if (!is_writable('.')) { echo 'The webserver needs write permissions in "lodspeakr/" "lodspeakr/models/" and "lodspeakr/views/" dirs to import settings.'; exit(0); } echo $this->external_basedir; include_once 'lib/arc2/ARC2.php'; $parser = ARC2::getTurtleParser(); if (isset($_GET['import'])) { $parser->parse($_GET['import']); $this->external_basedir = str_replace('export', '', $_GET['import']); } elseif (isset($_POST['importtext'])) { $parser->parse(RDF, $_POST['importtext']); } else { HTTPStatus::send500(); exit(0); } $triples = $parser->getTriples(); $appArr = $this->search($triples, null, RDF . 'type', LS . 'Application'); if (!(sizeof($appArr) > 0)) { echo "I can't find an application from the URL given"; exit(0); } $app = $appArr[0]['s']; $this->external_basedir = $app; $compArr = $this->search($triples, null, SKOS . 'broader', $app); $content = "<?\n\$conf['debug'] = false;\n\$conf['mirror_external_uris'] = true;\n\n"; $this->basedir = preg_replace('/import$/', '', !empty($_SERVER['HTTPS']) ? "https://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] : "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); //$arr = explode("lodspeakr/benegesserit", $this->basedir); //$this->basedir = $arr[0]; $content .= "\$conf['basedir'] = \"{$this->basedir}\";\n"; $content .= "\$conf['parentApp'] = \"{$app}\";\n"; $pwd = getcwd(); $content .= "\$conf['home'] = \"{$pwd}/\";\n"; //App params $q = $this->search($triples, $app, LS . 'usedParameter', null); $appParams = array(); foreach ($q as $p) { $param = $p['o']; $labelArr = $this->search($triples, $param, RDFS . 'label', null); $label = $labelArr[0]['o']; $format = $this->search($triples, $param, DC . 'hasFormat', null); $cntArr = $this->search($triples, $format[0]['o'], CNT . 'chars', null); $cnt = $cntArr[0]['o']; $appParams[$label] = $cnt; } foreach ($appParams as $k => $v) { $content .= "\$conf['{$k}'] = \"{$v}\";\n"; } $content .= "/*ATTENTION: By default this application is available to\n * be exported and copied (its configuration)\n * by others. If you do not want that, \n * turn the next option as false\n */ \n\$conf['export'] = true;\n\n"; //Components foreach ($compArr as $v) { $component = $v['s']; $componentTypeArr = $this->search($triples, $component, RDF . 'type', null); $compType = $componentTypeArr[0]['o']; $params = array(); $q = $this->search($triples, $component, LS . 'usedParameter', null); foreach ($q as $p) { $param = $p['o']; $labelArr = $this->search($triples, $param, RDFS . 'label', null); $label = $labelArr[0]['o']; $format = $this->search($triples, $param, DC . 'hasFormat', null); $cntArr = $this->search($triples, $format[0]['o'], CNT . 'chars', null); $cnt = $cntArr[0]['o']; $params[$label] = $cnt; } $inputs = array(); $q = $this->search($triples, $component, LS . 'usedInput', null); foreach ($q as $p) { $param = $p['o']; $labelArr = $this->search($triples, $param, RDFS . 'label', null); if (sizeof($labelArr) > 0) { $label = $labelArr[0]['o']; $format = $this->search($triples, $param, DC . 'hasFormat', null); $cntArr = $this->search($triples, $format[0]['o'], CNT . 'chars', null); $cnt = $cntArr[0]['o']; $inputs[$label] = $cnt; } } if ($compType == LS . "LodspeakrEndpointManagerComponent") { $content .= $this->createEndpoints($params); } elseif ($compType == LS . "LodspeakrNamespaceManagerComponent") { $content .= $this->createNamespaces($params); } elseif ($compType == LS . "LodspeakrSparqlEndpointRetriever") { $this->createModels($inputs); } elseif ($compType == LS . "LodspeakrStaticElementsComponent") { $this->createStatics($inputs); } elseif ($compType == LS . "LodspeakrVisualComponent") { $this->createViews($inputs); } else { if ($conf['debug']) { Logging::log("Component '{$component}' (of type {$compType}) not supported", E_USER_WARNING); } } } $content .= "?>\n"; try { $fh = fopen(FILE, 'a'); fwrite($fh, $content); fclose($fh); } catch (Exception $e) { echo 'Caught exception while writing settings: ', $e->getMessage(), "\n"; exit(1); } $this->showFinishing(); }