/**
* Table Definition for status_network
*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2009, Control Yourself, Inc.
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
class Status_network extends DB_DataObject
{
static $cache = null;
static $base = null;
+ /**
+ * @param string $dbhost
+ * @param string $dbuser
+ * @param string $dbpass
+ * @param string $dbname
+ * @param array $servers memcached servers to use for caching config info
+ */
static function setupDB($dbhost, $dbuser, $dbpass, $dbname, $servers)
{
global $config;
$config['db']['database_'.$dbname] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname";
- $config['db']['ini_'.$dbname] = INSTALLDIR.'/classes/statusnet.ini';
+ $config['db']['ini_'.$dbname] = INSTALLDIR.'/classes/status_network.ini';
$config['db']['table_status_network'] = $dbname;
- self::$cache = new Memcache();
-
- if (is_array($servers)) {
- foreach($servers as $server) {
- self::$cache->addServer($server);
+ if (class_exists('Memcache')) {
+ self::$cache = new Memcache();
+
+ // Can't close persistent connections, making forking painful.
+ //
+ // @fixme only do this in *parent* CLI processes.
+ // single-process and child-processes *should* use persistent.
+ $persist = php_sapi_name() != 'cli';
+ if (is_array($servers)) {
+ foreach($servers as $server) {
+ self::$cache->addServer($server, 11211, $persist);
+ }
+ } else {
+ self::$cache->addServer($servers, 11211, $persist);
}
- } else {
- self::$cache->addServer($servers);
}
self::$base = $dbname;
}
static function cacheKey($k, $v) {
- return 'laconica:' . self::$base . ':status_network:'.$k.':'.$v;
+ return 'statusnet:' . self::$base . ':status_network:'.$k.':'.$v;
}
static function memGet($k, $v)
{
+ if (!self::$cache) {
+ return self::staticGet($k, $v);
+ }
+
$ck = self::cacheKey($k, $v);
$sn = self::$cache->get($ck);
if (empty($sn)) {
$sn = self::staticGet($k, $v);
if (!empty($sn)) {
- self::$cache->set($ck, $sn);
+ self::$cache->set($ck, clone($sn));
}
}
function decache()
{
- $keys = array('nickname', 'hostname', 'pathname');
- foreach ($keys as $k) {
- $ck = self::cacheKey($k, $this->$k);
- self::$cache->delete($ck);
+ if (self::$cache) {
+ $keys = array('nickname', 'hostname', 'pathname');
+ foreach ($keys as $k) {
+ $ck = self::cacheKey($k, $this->$k);
+ self::$cache->delete($ck);
+ }
}
}
return parent::delete();
}
+ /**
+ * @param string $servername hostname
+ * @param string $pathname URL base path
+ * @param string $wildcard hostname suffix to match wildcard config
+ */
static function setupSite($servername, $pathname, $wildcard)
{
global $config;
}
if (!empty($sn)) {
- if (!empty($sn->hostname) && 0 != strcasecmp($sn->hostname, $servername)) {
- $sn->redirectToHostname();
+
+ // Redirect to the right URL
+
+ if (!empty($sn->hostname) &&
+ empty($_SERVER['HTTPS']) &&
+ 0 != strcasecmp($sn->hostname, $servername)) {
+ $sn->redirectTo('http://'.$sn->hostname.$_SERVER['REQUEST_URI']);
+ } else if (!empty($_SERVER['HTTPS']) &&
+ 0 != strcasecmp($sn->hostname, $servername) &&
+ 0 != strcasecmp($sn->nickname.'.'.$wildcard, $servername)) {
+ $sn->redirectTo('https://'.$sn->nickname.'.'.$wildcard.$_SERVER['REQUEST_URI']);
}
+
$dbhost = (empty($sn->dbhost)) ? 'localhost' : $sn->dbhost;
$dbuser = (empty($sn->dbuser)) ? $sn->nickname : $sn->dbuser;
$dbpass = $sn->dbpass;
$config['db']['database'] = "mysqli://$dbuser:$dbpass@$dbhost/$dbname";
- $config['site']['name'] = $sn->sitename;
+ $config['site']['name'] = $sn->sitename;
+
+ if (!empty($sn->hostname)) {
+ $config['site']['server'] = $sn->hostname;
+ }
if (!empty($sn->theme)) {
$config['site']['theme'] = $sn->theme;
// (C) 2006 by Heiko Richler http://www.richler.de/
// LGPL
- function redirectToHostname()
+ function redirectTo($destination)
{
- $destination = 'http://'.$this->hostname;
- $destination .= $_SERVER['REQUEST_URI'];
-
$old = 'http'.
(($_SERVER['HTTPS'] == 'on') ? 'S' : '').
'://'.