Newer
Older
<?php
require_once 'library/Class/Url.php';
class Bokeh_EngineEco {
protected
$_actions = [];
public static function dispatchWithExit() {
if ((new static())->dispatch())
exit;
}
public function __construct() {
$this->addAction('/admin/index/heartbeat',
function($params) {
session_start();
session_write_close();
});
$this->addAction('/recherche/suggestajax',
function($params) {
echo (new Bokeh_EngineEco_AutocompleteRequest())->dispatch($params);
});
$this->addAction('/sitemap.xml',
function($params) {echo (new Bokeh_EngineEco_SitemapRequest())->dispatch();});
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
}
public function addAction($url, $callable) {
$this->_actions[Class_Url::baseUrl() . $url] = $callable;
return $this;
}
public function dispatch() {
if (!isset($_SERVER['REQUEST_URI']))
return false;
$request = parse_url($_SERVER['REQUEST_URI']);
if (!isset($this->_actions[$request['path']]))
return false;
$query_params = [];
if (isset($request['query']))
parse_str($request['query'], $query_params);
call_user_func($this->_actions[$request['path']],
$query_params);
return true;
}
}
class Bokeh_EngineEco_AutocompleteRequest {
protected function _loadEnvironment() {
require_once 'library/Trait/StaticFileSystem.php';
require_once 'library/Trait/Translator.php';
require_once 'library/Class/Autocomplete/Index.php';
require_once 'library/Class/Autocomplete/IndexNull.php';
require_once 'library/Class/Autocomplete/IndexTitle.php';
require_once 'library/Class/Autocomplete/IndexAuthor.php';
require_once 'library/Class/Autocomplete/IndexSearcher.php';
require_once 'library/startup.php';
defineConstant('BASE_URL', Class_Url::baseUrl());
(new Bokeh_Engine())->setupConstants();
}
public function dispatch($params) {
if (!(isset($params['startsWith']) &&
$startsWith = trim($params['startsWith']))) {
return '[]';
}
$this->_loadEnvironment();
$results = Class_Autocomplete_Index::searchAll($startsWith);
$terms = Class_Autocomplete_IndexSearcher::extractTerms($startsWith);
$term_regex = '/('.implode('|', $terms).')/iu';
$json = [];
foreach($results as $index => $result) {
$json[] = ['label' => preg_replace($term_regex, '<span>$1</span>', $result),
'value' => $result];
}
return json_encode($json);
}
}
class Bokeh_EngineEco_SitemapRequest {
protected function _loadEnvironment() {
require_once 'library/storm/src/Storm/FileSystem/Abstract.php';
require_once 'library/storm/src/Storm/FileSystem/Disk.php';
require_once 'library/Class/UserAgent.php';
require_once 'library/Class/Sitemap.php';
require_once 'library/startup.php';
defineConstant('BASE_URL', Class_Url::baseUrl());
Bokeh_Engine::getInstance()->setupConstants();
}
public function dispatch() {
$this->_loadEnvironment();
if (!Class_Sitemap::getInstance()->sitemap_exists())
return;
header('Content-Type: text/xml; charset=utf-8');
echo Class_Sitemap::getInstance()->getSitemap();
}
}
Bokeh_EngineEco::dispatchWithExit();
?>