318d2cb6ca
Ideally the character set should be set with the connection, and so this is exactly what's being done now. And now the character set code is attempted to be generalised.
144 lines
4.0 KiB
PHP
Executable File
144 lines
4.0 KiB
PHP
Executable File
#!/usr/bin/env php
|
|
<?php
|
|
// This file is part of GNU social - https://www.gnu.org/software/social
|
|
//
|
|
// GNU social is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// GNU social is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with GNU social. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* @package GNUsocial
|
|
* @copyright 2009 StatusNet, Inc.
|
|
* @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
|
|
*/
|
|
|
|
define('INSTALLDIR', dirname(__DIR__, 3));
|
|
define('PUBLICDIR', INSTALLDIR . DIRECTORY_SEPARATOR . 'public');
|
|
|
|
$longoptions = array('base=', 'network');
|
|
|
|
$helptext = <<<END_OF_TRIM_HELP
|
|
Generates sphinx.conf file based on StatusNet configuration.
|
|
--base Base dir to Sphinx install
|
|
(default /usr/local)
|
|
--network Use status_network global config table
|
|
(non-functional at present)
|
|
|
|
|
|
END_OF_TRIM_HELP;
|
|
|
|
require_once INSTALLDIR . '/scripts/commandline.inc';
|
|
require dirname(__FILE__) . '/sphinx-utils.php';
|
|
|
|
$base = $base ?? '/usr/local';
|
|
$timestamp = date('r');
|
|
echo <<<END
|
|
#
|
|
# Sphinx configuration for GNU social
|
|
# Generated {$timestamp}
|
|
#
|
|
|
|
END;
|
|
|
|
sphinx_iterate_sites('sphinx_site_template');
|
|
|
|
print <<<END
|
|
|
|
indexer
|
|
{
|
|
mem_limit = 300M
|
|
}
|
|
|
|
searchd
|
|
{
|
|
port = 3312
|
|
log = {$base}/log/searchd.log
|
|
query_log = {$base}/log/query.log
|
|
read_timeout = 5
|
|
max_children = 30
|
|
pid_file = {$base}/log/searchd.pid
|
|
max_matches = 1000
|
|
seamless_rotate = 1
|
|
preopen_indexes = 0
|
|
unlink_old = 1
|
|
}
|
|
|
|
END;
|
|
|
|
/**
|
|
* Build config entries for a single site
|
|
* @fixme we only seem to have master DB currently available...
|
|
*/
|
|
function sphinx_site_template($sn)
|
|
{
|
|
if (common_config('db', 'type') !== 'mysql') {
|
|
$created_ts = sprintf(
|
|
'((EXTRACT(DAY %1$s) * 24 + EXTRACT(HOUR %1$s)) * 60 + ' .
|
|
'EXTRACT(MINUTE %1$s)) * 60 + FLOOR(EXTRACT(SECOND %1$s)) AS "created_ts"',
|
|
'FROM ("created" - TIMESTAMP \'1970-01-01 00:00:00\')'
|
|
);
|
|
} else {
|
|
$created_ts = "timestampdiff(SECOND, '1970-01-01', `created`) AS `created_ts`";
|
|
}
|
|
|
|
return
|
|
sphinx_template(
|
|
$sn,
|
|
'profile',
|
|
'SELECT id, ' . $created_ts . ', nickname, fullname, location, bio, homepage FROM profile',
|
|
'SELECT * FROM profile WHERE id = $id'
|
|
) .
|
|
sphinx_template(
|
|
$sn,
|
|
'notice',
|
|
'SELECT id, ' . $created_ts . ', content FROM notice',
|
|
'SELECT * FROM notice WHERE notice.id = $id AND notice.is_local <> -2'
|
|
);
|
|
}
|
|
|
|
function sphinx_template($sn, $table, $query, $query_info)
|
|
{
|
|
$base = sphinx_base();
|
|
$dbtype = common_config('db', 'type');
|
|
$charset = common_database_charset();
|
|
|
|
echo <<<END
|
|
|
|
#
|
|
# {$sn->sitename}
|
|
#
|
|
source {$sn->dbname}_src_{$table}
|
|
{
|
|
type = {$dbtype}
|
|
sql_host = {$sn->dbhost}
|
|
sql_user = {$sn->dbuser}
|
|
sql_pass = {$sn->dbpass}
|
|
sql_db = {$sn->dbname}
|
|
sql_query_pre = SET NAMES '{$charset}';
|
|
sql_query = {$query}
|
|
sql_query_info = {$query_info}
|
|
sql_attr_timestamp = created_ts
|
|
}
|
|
|
|
index {$sn->dbname}_{$table}
|
|
{
|
|
source = {$sn->dbname}_src_{$table}
|
|
path = {$base}/data/{$sn->dbname}_{$table}
|
|
docinfo = extern
|
|
charset_type = utf-8
|
|
min_word_len = 3
|
|
}
|
|
|
|
|
|
END;
|
|
}
|