<?php
-/*
+/**
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2009, StatusNet, Inc.
+ * Copyright (C) 2009-2010 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
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
global $config, $_server, $_path;
class StatusNet
{
protected static $have_config;
+ protected static $is_api;
/**
* Configure and instantiate a plugin into the current configuration.
}
}
if (!class_exists($pluginclass)) {
- throw new ServerException(500, "Plugin $name not found.");
+ throw new ServerException("Plugin $name not found.", 500);
}
}
self::initPlugins();
}
+ /**
+ * Get identifier of the currently active site configuration
+ * @return string
+ */
+ public static function currentSite()
+ {
+ return common_config('site', 'nickname');
+ }
+
+ /**
+ * Change site configuration to site specified by nickname,
+ * if set up via Status_network. If not, sites other than
+ * the current will fail horribly.
+ *
+ * May throw exception or trigger a fatal error if the given
+ * site is missing or configured incorrectly.
+ *
+ * @param string $nickname
+ */
+ public static function switchSite($nickname)
+ {
+ if ($nickname == StatusNet::currentSite()) {
+ return true;
+ }
+
+ $sn = Status_network::staticGet($nickname);
+ if (empty($sn)) {
+ return false;
+ throw new Exception("No such site nickname '$nickname'");
+ }
+
+ $server = $sn->getServerName();
+ StatusNet::init($server);
+ }
+
+ /**
+ * Pull all local sites from status_network table.
+ *
+ * Behavior undefined if site is not configured via Status_network.
+ *
+ * @return array of nicknames
+ */
+ public static function findAllSites()
+ {
+ $sites = array();
+ $sn = new Status_network();
+ $sn->find();
+ while ($sn->fetch()) {
+ $sites[] = $sn->nickname;
+ }
+ return $sites;
+ }
+
+
/**
* Fire initialization events for all instantiated plugins.
*/
return self::$have_config;
}
+ public function isApi()
+ {
+ return self::$is_api;
+ }
+
+ public function setApi($mode)
+ {
+ self::$is_api = $mode;
+ }
+
/**
* Build default configuration array
* @return array
protected function loadConfigFile($conffile=null)
{
global $_server, $_path, $config;
-
+
// From most general to most specific:
// server-wide, then vhost-wide, then for a path,
// finally for a dir (usually only need one of the last two).
-
+
if (isset($conffile)) {
$config_files = array($conffile);
} else {
$config_files = array('/etc/statusnet/statusnet.php',
- '/etc/statusnet/laconica.php',
- '/etc/laconica/laconica.php',
- '/etc/statusnet/'.$_server.'.php',
- '/etc/laconica/'.$_server.'.php');
+ '/etc/statusnet/laconica.php',
+ '/etc/laconica/laconica.php',
+ '/etc/statusnet/'.$_server.'.php',
+ '/etc/laconica/'.$_server.'.php');
if (strlen($_path) > 0) {
$config_files[] = '/etc/statusnet/'.$_server.'_'.$_path.'.php';
if (!self::$have_config) {
throw new NoConfigException("No configuration file found.",
- $config_files);
+ $config_files);
}
// Fixup for statusnet.ini