Skip to content
Snippets Groups Projects
Commit cd66bd57 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Properly handle links, allow configuration of looking function

parent ee29ef9a
No related branches found
No related tags found
No related merge requests found
......@@ -8,25 +8,30 @@ class Config
public $database_connector;
public $username;
public $password;
public $database_options;
public $backend;
public $path_prefix;
public function __construct(string $path_prefix, string $database_connector, string $username, string $password, string $backend)
public function __construct(string $path_prefix, string $database_connector, string $username, string $password, string $backend, array $options)
{
$this->database_connector = $database_connector;
$this->username = $username;
$this->password = $password;
$this->database_options = $options;
$this->path_prefix = $path_prefix;
$this->backend = $backend;
}
public static function createFromGlobals()
{
$options = [];
if (defined(qrs_db_option_tsqueryfunction) && null !== qrs_db_option_tsqueryfunction)
$options['tsqueryfunction'] = qrs_db_option_tsqueryfunction;
if (defined(qrs_db_connector) && null !== qrs_db_connector)
return new Config(qrs_path_prefix, qrs_db_connector, qrs_db_user, qrs_db_pass, qrs_backend);
return new Config(qrs_path_prefix, qrs_db_connector, qrs_db_user, qrs_db_pass, qrs_backend, $options);
else
return new Config(qrs_path_prefix, 'pgsql:host=' . qrs_db_host . ';port=' . qrs_db_port . ';dbname=' . qrs_db_name . '', qrs_db_user, qrs_db_pass, qrs_backend);
return new Config(qrs_path_prefix, 'pgsql:host=' . qrs_db_host . ';port=' . qrs_db_port . ';dbname=' . qrs_db_name . '', qrs_db_user, qrs_db_pass, qrs_backend, $options);
}
}
......@@ -15,19 +15,19 @@ class Database
private $backend;
private function __construct(string $database_connector, string $username, string $password, string $type)
private function __construct(string $database_connector, string $username, string $password, string $type, array $options)
{
$this->backend = BackendFactory::create($type, new \PDO($database_connector, $username, $password));
$this->backend = BackendFactory::create($type, new \PDO($database_connector, $username, $password), $options);
}
public static function createFromConfig(Config $config): Database
{
return Database::createFromOptions($config->database_connector, $config->username, $config->password, $config->backend);
return Database::createFromOptions($config->database_connector, $config->username, $config->password, $config->backend, $config->database_options);
}
public static function createFromOptions(string $database_connector, string $username, string $password, string $type): Database
public static function createFromOptions(string $database_connector, string $username, string $password, string $type, array $options): Database
{
return new Database($database_connector, $username, $password, $type);
return new Database($database_connector, $username, $password, $type, $options);
}
public function authenticateFromHeader(string $header): bool
......
......@@ -8,13 +8,13 @@ require_once 'SQLiteSmartBackend.php';
class BackendFactory
{
public static function create(string $type, \PDO $db): Backend
public static function create(string $type, \PDO $db, array $options): Backend
{
switch ($type) {
case 'pgsql-smart':
return new PostgresSmartBackend($db);
return new PostgresSmartBackend($db, $options);
case 'sqlite-smart':
return new SQLiteSmartBackend($db);
return new SQLiteSmartBackend($db, $options);
default:
return null;
}
......
......@@ -7,11 +7,13 @@ require_once 'Backend.php';
class PostgresSmartBackend implements Backend
{
private $db;
private $options;
function __construct(\PDO $db)
function __construct(\PDO $db, array $options)
{
$this->db = $db;
$this->db->exec("SET statement_timeout = 5000;");
$this->options = $options;
}
public function findUser(): \PDOStatement
......@@ -23,8 +25,14 @@ class PostgresSmartBackend implements Backend
");
}
private function tsQueryFunction(): string
{
return array_key_exists('tsqueryfunction', $this->options) ? $this->options['tsqueryfunction'] : "plainto_tsquery('english', :query)";
}
public function findInBuffers(): \PDOStatement
{
$tsQueryFunction = $this->tsQueryFunction();
return $this->db->prepare("
SELECT
ranked_messages.bufferid,
......@@ -70,7 +78,7 @@ class PostgresSmartBackend implements Backend
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
, phraseto_tsquery_multilang(:query) query
, $tsQueryFunction query
WHERE buffer.userid = :userid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
......@@ -90,6 +98,7 @@ class PostgresSmartBackend implements Backend
public function findInBuffersCount(): \PDOStatement
{
$tsQueryFunction = $this->tsQueryFunction();
return $this->db->prepare("
SELECT
backlog.bufferid,
......@@ -99,7 +108,7 @@ class PostgresSmartBackend implements Backend
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
JOIN network ON buffer.networkid = network.networkid
, phraseto_tsquery_multilang(:query) query
, $tsQueryFunction query
WHERE buffer.userid = :userid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
......@@ -113,6 +122,7 @@ class PostgresSmartBackend implements Backend
public function findInBuffer(): \PDOStatement
{
$tsQueryFunction = $this->tsQueryFunction();
return $this->db->prepare("
SELECT
matching_messages.messageid,
......@@ -142,7 +152,7 @@ class PostgresSmartBackend implements Backend
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
, phraseto_tsquery_multilang(:query) query
, $tsQueryFunction query
WHERE buffer.userid = :userid
AND buffer.bufferid = :bufferid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
......@@ -161,6 +171,7 @@ class PostgresSmartBackend implements Backend
public function findInBufferCount(): \PDOStatement
{
$tsQueryFunction = $this->tsQueryFunction();
return $this->db->prepare("
SELECT
COUNT(*) > (:limit::INT + :offset::INT) AS hasmore
......@@ -168,7 +179,7 @@ class PostgresSmartBackend implements Backend
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
, phraseto_tsquery_multilang(:query) query
, $tsQueryFunction query
WHERE buffer.userid = :userid
AND backlog.bufferid = :bufferid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
......
......@@ -7,10 +7,12 @@ require_once 'Backend.php';
class SQLiteSmartBackend implements Backend
{
private $db;
private $options;
function __construct(\PDO $db)
function __construct(\PDO $db, array $options)
{
$this->db = $db;
$this->options = $options;
}
public function findUser(): \PDOStatement
......
......@@ -9,6 +9,8 @@ define('qrs_db_connector', null);
define('qrs_db_user', 'quassel');
define('qrs_db_pass', 'password');
define('qrs_db_option_tsqueryfunction', "plainto_tsquery('english', :query)");
define('qrs_backend', 'pgsql-smart');
define('qrs_path_prefix', '');
......@@ -57,8 +57,12 @@ class MircColorHandler {
const s = unescape(str.substr(i - normalCount, normalCount));
if (normalCount === 0)
return;
if (lastTag.tagName === 'A')
lastTag.href = s;
if (lastTag.tagName === 'A') {
if (s.indexOf('://') !== -1)
lastTag.href = s;
else
lastTag.href = "http://" + s;
}
lastTag.appendChild(document.createTextNode(s));
nodes.push(lastTag);
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment