common_debug('Tried to cancel a non-existing pending subscription');
}
- if (StatusNet::isAjax()) {
+ if (GNUsocial::isAjax()) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
// TRANS: Title after unsubscribing from a group.
$cmd = $inter->handle_command($user, $content);
if ($cmd) {
- if (StatusNet::isAjax()) {
+ if (GNUsocial::isAjax()) {
$cmd->execute(new AjaxWebChannel($this));
} else {
$cmd->execute(new WebChannel($this));
Event::handle('EndSaveNewNoticeWeb', array($this, $user, &$content_shortened, &$options));
- if (!StatusNet::isAjax()) {
+ if (!GNUsocial::isAjax()) {
$url = common_local_url('shownotice', array('notice' => $this->stored->id));
common_redirect($url, 303);
}
{
parent::prepare($args);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->notice = $this->getNotice();
}
- if (StatusNet::useHTTPS()) {
+ if (GNUsocial::useHTTPS()) {
$sslserver = common_config('attachments', 'sslserver');
$site_ssl = common_config('site', 'ssl');
// If the request is HTTP and it should be HTTPS...
- if ($site_ssl != 'never' && !StatusNet::isHTTPS() && common_is_sensitive($args['action'])) {
+ if ($site_ssl != 'never' && !GNUsocial::isHTTPS() && common_is_sensitive($args['action'])) {
common_redirect(common_local_url($args['action'], $args));
}
$this->action = strtolower($this->trimmed('action'));
if ($this->ajax || $this->boolean('ajax')) {
- // check with StatusNet::isAjax()
- StatusNet::setAjax(true);
+ // check with GNUsocial::isAjax()
+ GNUsocial::setAjax(true);
}
if ($this->needLogin) {
*/
function showPage()
{
- if (StatusNet::isAjax()) {
+ if (GNUsocial::isAjax()) {
self::showAjax();
return;
}
} else {
// favicon.ico should be HTTPS if the rest of the page is
$this->element('link', array('rel' => 'shortcut icon',
- 'href' => common_path('favicon.ico', StatusNet::isHTTPS())));
+ 'href' => common_path('favicon.ico', GNUsocial::isHTTPS())));
}
if (common_config('site', 'mobile')) {
$this->script('extlib/jquery.form.js');
$this->script('extlib/jquery-ui/jquery-ui.js');
$this->script('extlib/jquery.cookie.js');
- $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/extlib/json2.js', StatusNet::isHTTPS()).'"); }');
+ $this->inlineScript('if (typeof window.JSON !== "object") { $.getScript("'.common_path('js/extlib/json2.js', GNUsocial::isHTTPS()).'"); }');
$this->script('extlib/jquery.infieldlabel.js');
Event::handle('EndShowJQueryScripts', array($this));
$this->elementStart('a', array('class' => 'home bookmark',
'href' => $url));
- if (StatusNet::isHTTPS()) {
+ if (GNUsocial::isHTTPS()) {
$logoUrl = common_config('site', 'ssllogo');
if (empty($logoUrl)) {
// if logo is an uploaded file, try to fall back to HTTPS file URL
$image = common_config('license', 'image');
$sslimage = common_config('license', 'sslimage');
- if (StatusNet::isHTTPS()) {
+ if (GNUsocial::isHTTPS()) {
if (!empty($sslimage)) {
$url = $sslimage;
} else if (preg_match('#^http://i.creativecommons.org/#', $image)) {
*/
protected function prepare(array $args=array())
{
- StatusNet::setApi(true); // reduce exception reports to aid in debugging
+ GNUsocial::setApi(true); // reduce exception reports to aid in debugging
parent::prepare($args);
$this->format = $this->arg('format');
case 'text/html':
if (!empty($this->attachment->filename)
- && (StatusNet::isAjax() || common_config('attachments', 'show_html'))) {
+ && (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
// Locally-uploaded HTML. Scrub and display inline.
$this->showHtmlFile($this->attachment);
break;
$names = array();
- foreach (StatusNet::getActivePlugins() as $plugin=>$attrs) {
+ foreach (GNUsocial::getActivePlugins() as $plugin=>$attrs) {
$names[] = $plugin;
}
require_once INSTALLDIR . '/lib/framework.php';
try {
- StatusNet::init(@$server, @$path, @$conffile);
+ GNUsocial::init(@$server, @$path, @$conffile);
} catch (NoConfigException $e) {
// XXX: Throw a conniption if database not installed
// XXX: Find a way to use htmlwriter for this instead of handcoded markup
$paths = array(INSTALLDIR.'/local/doc-src/',
INSTALLDIR.'/doc-src/');
- $site = StatusNet::currentSite();
+ $site = GNUsocial::currentSite();
if (!empty($site)) {
array_unshift($paths, INSTALLDIR.'/local/doc-src/'.$site.'/');
$paths = array(INSTALLDIR.'/local/mail-src/',
INSTALLDIR.'/mail-src/');
- $site = StatusNet::currentSite();
+ $site = GNUsocial::currentSite();
if (!empty($site)) {
array_unshift($paths, INSTALLDIR.'/local/mail-src/'.$site.'/');
$this->code = $code;
$this->message = $message;
- $this->minimal = StatusNet::isApi();
+ $this->minimal = GNUsocial::isApi();
// XXX: hack alert: usually we aren't going to
// call this page directly, but because it's
function showPage()
{
- if (StatusNet::isAjax()) {
+ if (GNUsocial::isAjax()) {
$this->extraHeaders();
$this->ajaxErrorMsg();
exit();
function addPlugin($name, array $attrs=array())
{
- return StatusNet::addPlugin($name, $attrs);
+ return GNUsocial::addPlugin($name, $attrs);
}
function _have_config()
{
- return StatusNet::haveConfig();
+ return GNUsocial::haveConfig();
}
function GNUsocial_class_autoload($cls)
--- /dev/null
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+global $config, $_server, $_path;
+
+/**
+ * Global configuration setup and management.
+ */
+class GNUsocial
+{
+ protected static $have_config;
+ protected static $is_api;
+ protected static $is_ajax;
+ protected static $plugins = array();
+
+ /**
+ * Configure and instantiate a plugin into the current configuration.
+ * Class definitions will be loaded from standard paths if necessary.
+ * Note that initialization events won't be fired until later.
+ *
+ * @param string $name class name & plugin file/subdir name
+ * @param array $attrs key/value pairs of public attributes to set on plugin instance
+ *
+ * @throws ServerException if plugin can't be found
+ */
+ public static function addPlugin($name, array $attrs=array())
+ {
+ $name = ucfirst($name);
+
+ if (isset(self::$plugins[$name])) {
+ // We have already loaded this plugin. Don't try to
+ // do it again with (possibly) different values.
+ // Försten till kvarn får mala.
+ return true;
+ }
+
+ $pluginclass = "{$name}Plugin";
+
+ if (!class_exists($pluginclass)) {
+
+ $files = array("local/plugins/{$pluginclass}.php",
+ "local/plugins/{$name}/{$pluginclass}.php",
+ "local/{$pluginclass}.php",
+ "local/{$name}/{$pluginclass}.php",
+ "plugins/{$pluginclass}.php",
+ "plugins/{$name}/{$pluginclass}.php");
+
+ foreach ($files as $file) {
+ $fullpath = INSTALLDIR.'/'.$file;
+ if (@file_exists($fullpath)) {
+ include_once($fullpath);
+ break;
+ }
+ }
+ if (!class_exists($pluginclass)) {
+ throw new ServerException("Plugin $name not found.", 500);
+ }
+ }
+
+ // Doesn't this $inst risk being garbage collected or something?
+ // TODO: put into a static array that makes sure $inst isn't lost.
+ $inst = new $pluginclass();
+ foreach ($attrs as $aname => $avalue) {
+ $inst->$aname = $avalue;
+ }
+
+ // Record activated plugins for later display/config dump
+ self::$plugins[$name] = $attrs;
+
+ return true;
+ }
+
+ public static function delPlugin($name)
+ {
+ // Remove our plugin if it was previously loaded
+ $name = ucfirst($name);
+ if (isset(self::$plugins[$name])) {
+ unset(self::$plugins[$name]);
+ }
+
+ // make sure initPlugins will avoid this
+ common_config_set('plugins', 'disable-'.$name, true);
+
+ return true;
+ }
+
+ /**
+ * Get a list of activated plugins in this process.
+ * @return array of (string $name, array $args) pairs
+ */
+ public static function getActivePlugins()
+ {
+ return self::$plugins;
+ }
+
+ /**
+ * Initialize, or re-initialize, GNU social global configuration
+ * and plugins.
+ *
+ * If switching site configurations during script execution, be
+ * careful when working with leftover objects -- global settings
+ * affect many things and they may not behave as you expected.
+ *
+ * @param $server optional web server hostname for picking config
+ * @param $path optional URL path for picking config
+ * @param $conffile optional configuration file path
+ *
+ * @throws NoConfigException if config file can't be found
+ */
+ public static function init($server=null, $path=null, $conffile=null)
+ {
+ Router::clear();
+
+ self::initDefaults($server, $path);
+ self::loadConfigFile($conffile);
+
+ $sprofile = common_config('site', 'profile');
+ if (!empty($sprofile)) {
+ self::loadSiteProfile($sprofile);
+ }
+ // Load settings from database; note we need autoload for this
+ Config::loadSettings();
+
+ 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 == self::currentSite()) {
+ return true;
+ }
+
+ $sn = Status_network::getKV('nickname', $nickname);
+ if (empty($sn)) {
+ return false;
+ throw new Exception("No such site nickname '$nickname'");
+ }
+
+ $server = $sn->getServerName();
+ self::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.
+ */
+ protected static function initPlugins()
+ {
+ // User config may have already added some of these plugins, with
+ // maybe configured parameters. The self::addPlugin function will
+ // ignore the new call if it has already been instantiated.
+
+ // Load core plugins
+ foreach (common_config('plugins', 'core') as $name => $params) {
+ call_user_func('self::addPlugin', $name, $params);
+ }
+
+ // Load default plugins
+ foreach (common_config('plugins', 'default') as $name => $params) {
+ $key = 'disable-' . $name;
+ if (common_config('plugins', $key)) {
+ continue;
+ }
+
+ // TODO: We should be able to avoid this is_null and assume $params
+ // is an array, since that's how it is typed in addPlugin
+ if (is_null($params)) {
+ self::addPlugin($name);
+ } else if (is_array($params)) {
+ if (count($params) == 0) {
+ self::addPlugin($name);
+ } else {
+ $keys = array_keys($params);
+ if (is_string($keys[0])) {
+ self::addPlugin($name, $params);
+ } else {
+ foreach ($params as $paramset) {
+ self::addPlugin($name, $paramset);
+ }
+ }
+ }
+ }
+ }
+
+ // XXX: if plugins should check the schema at runtime, do that here.
+ if (common_config('db', 'schemacheck') == 'runtime') {
+ Event::handle('CheckSchema');
+ }
+
+ // Give plugins a chance to initialize in a fully-prepared environment
+ Event::handle('InitializePlugin');
+ }
+
+ /**
+ * Quick-check if configuration has been established.
+ * Useful for functions which may get used partway through
+ * initialization to back off from fancier things.
+ *
+ * @return bool
+ */
+ public static function haveConfig()
+ {
+ return self::$have_config;
+ }
+
+ public static function isApi()
+ {
+ return self::$is_api;
+ }
+
+ public static function setApi($mode)
+ {
+ self::$is_api = $mode;
+ }
+
+ public static function isAjax()
+ {
+ return self::$is_ajax;
+ }
+
+ public static function setAjax($mode)
+ {
+ self::$is_ajax = $mode;
+ }
+
+ /**
+ * Build default configuration array
+ * @return array
+ */
+ protected static function defaultConfig()
+ {
+ global $_server, $_path;
+ require(INSTALLDIR.'/lib/default.php');
+ return $default;
+ }
+
+ /**
+ * Establish default configuration based on given or default server and path
+ * Sets global $_server, $_path, and $config
+ */
+ public static function initDefaults($server, $path)
+ {
+ global $_server, $_path, $config, $_PEAR;
+
+ Event::clearHandlers();
+ self::$plugins = array();
+
+ // try to figure out where we are. $server and $path
+ // can be set by including module, else we guess based
+ // on HTTP info.
+
+ if (isset($server)) {
+ $_server = $server;
+ } else {
+ $_server = array_key_exists('SERVER_NAME', $_SERVER) ?
+ strtolower($_SERVER['SERVER_NAME']) :
+ null;
+ }
+
+ if (isset($path)) {
+ $_path = $path;
+ } else {
+ $_path = (array_key_exists('SERVER_NAME', $_SERVER) && array_key_exists('SCRIPT_NAME', $_SERVER)) ?
+ self::_sn_to_path($_SERVER['SCRIPT_NAME']) :
+ null;
+ }
+
+ // Set config values initially to default values
+ $default = self::defaultConfig();
+ $config = $default;
+
+ // default configuration, overwritten in config.php
+ // Keep DB_DataObject's db config synced to ours...
+
+ $config['db'] = &$_PEAR->getStaticProperty('DB_DataObject','options');
+
+ $config['db'] = $default['db'];
+
+ if (function_exists('date_default_timezone_set')) {
+ /* Work internally in UTC */
+ date_default_timezone_set('UTC');
+ }
+ }
+
+ public static function loadSiteProfile($name)
+ {
+ global $config;
+ $settings = SiteProfile::getSettings($name);
+ $config = array_replace_recursive($config, $settings);
+ }
+
+ protected static function _sn_to_path($sn)
+ {
+ $past_root = substr($sn, 1);
+ $last_slash = strrpos($past_root, '/');
+ if ($last_slash > 0) {
+ $p = substr($past_root, 0, $last_slash);
+ } else {
+ $p = '';
+ }
+ return $p;
+ }
+
+ /**
+ * Load the default or specified configuration file.
+ * Modifies global $config and may establish plugins.
+ *
+ * @throws NoConfigException
+ */
+ protected static 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');
+
+ if (strlen($_path) > 0) {
+ $config_files[] = '/etc/statusnet/'.$_server.'_'.$_path.'.php';
+ $config_files[] = '/etc/laconica/'.$_server.'_'.$_path.'.php';
+ }
+
+ $config_files[] = INSTALLDIR.'/config.php';
+ }
+
+ self::$have_config = false;
+
+ foreach ($config_files as $_config_file) {
+ if (@file_exists($_config_file)) {
+ // Ignore 0-byte config files
+ if (filesize($_config_file) > 0) {
+ common_log(LOG_INFO, "Including config file: " . $_config_file);
+ include($_config_file);
+ self::$have_config = true;
+ }
+ }
+ }
+
+ if (!self::$have_config) {
+ throw new NoConfigException("No configuration file found.",
+ $config_files);
+ }
+
+ // Check for database server; must exist!
+
+ if (empty($config['db']['database'])) {
+ throw new ServerException("No database server for this site.");
+ }
+ }
+
+ /**
+ * Are we running from the web with HTTPS?
+ *
+ * @return boolean true if we're running with HTTPS; else false
+ */
+
+ static function isHTTPS()
+ {
+ // There are some exceptions to this; add them here!
+ if (empty($_SERVER['HTTPS'])) {
+ return false;
+ }
+
+ // If it is _not_ "off", it is on, so "true".
+ return strtolower($_SERVER['HTTPS']) !== 'off';
+ }
+
+ /**
+ * Can we use HTTPS? Then do! Only return false if it's not configured ("never").
+ */
+ static function useHTTPS()
+ {
+ return self::isHTTPS() || common_config('site', 'ssl') != 'never';
+ }
+}
+
+class NoConfigException extends Exception
+{
+ public $configFiles;
+
+ function __construct($msg, $configFiles) {
+ parent::__construct($msg);
+ $this->configFiles = $configFiles;
+ }
+}
if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
- $src = common_path($src, StatusNet::isHTTPS()) . '?version=' . GNUSOCIAL_VERSION;
+ $src = common_path($src, GNUsocial::isHTTPS()) . '?version=' . GNUSOCIAL_VERSION;
} else {
- if (StatusNet::isHTTPS()) {
+ if (GNUsocial::isHTTPS()) {
$sslserver = common_config('javascript', 'sslserver');
if(file_exists(Theme::file($src,$theme))){
$src = Theme::path($src, $theme);
}else{
- $src = common_path($src, StatusNet::isHTTPS());
+ $src = common_path($src, GNUsocial::isHTTPS());
}
$src.= '?version=' . GNUSOCIAL_VERSION;
}
}
require_once INSTALLDIR . '/lib/framework.php';
- StatusNet::initDefaults($this->server, $this->path);
+ GNUsocial::initDefaults($this->server, $this->path);
if ($this->siteProfile == "singleuser") {
// Until we use ['site']['profile']==='singleuser' everywhere
static function staticPath($plugin, $relative)
{
- $isHTTPS = StatusNet::isHTTPS();
+ $isHTTPS = GNUsocial::isHTTPS();
if ($isHTTPS) {
$server = common_config('plugins', 'sslserver');
<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * 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
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-global $config, $_server, $_path;
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
- * Global configuration setup and management.
+ * Backwards compatible class for plugins for GNU social <1.2
+ * and thus only have the class StatusNet defined.
*/
class StatusNet
{
- protected static $have_config;
- protected static $is_api;
- protected static $is_ajax;
- protected static $plugins = array();
-
- /**
- * Configure and instantiate a plugin into the current configuration.
- * Class definitions will be loaded from standard paths if necessary.
- * Note that initialization events won't be fired until later.
- *
- * @param string $name class name & plugin file/subdir name
- * @param array $attrs key/value pairs of public attributes to set on plugin instance
- *
- * @throws ServerException if plugin can't be found
- */
- public static function addPlugin($name, array $attrs=array())
- {
- $name = ucfirst($name);
-
- if (isset(self::$plugins[$name])) {
- // We have already loaded this plugin. Don't try to
- // do it again with (possibly) different values.
- // Försten till kvarn får mala.
- return true;
- }
-
- $pluginclass = "{$name}Plugin";
-
- if (!class_exists($pluginclass)) {
-
- $files = array("local/plugins/{$pluginclass}.php",
- "local/plugins/{$name}/{$pluginclass}.php",
- "local/{$pluginclass}.php",
- "local/{$name}/{$pluginclass}.php",
- "plugins/{$pluginclass}.php",
- "plugins/{$name}/{$pluginclass}.php");
-
- foreach ($files as $file) {
- $fullpath = INSTALLDIR.'/'.$file;
- if (@file_exists($fullpath)) {
- include_once($fullpath);
- break;
- }
- }
- if (!class_exists($pluginclass)) {
- throw new ServerException("Plugin $name not found.", 500);
- }
- }
-
- // Doesn't this $inst risk being garbage collected or something?
- // TODO: put into a static array that makes sure $inst isn't lost.
- $inst = new $pluginclass();
- foreach ($attrs as $aname => $avalue) {
- $inst->$aname = $avalue;
- }
-
- // Record activated plugins for later display/config dump
- self::$plugins[$name] = $attrs;
-
- return true;
- }
-
- public static function delPlugin($name)
- {
- // Remove our plugin if it was previously loaded
- $name = ucfirst($name);
- if (isset(self::$plugins[$name])) {
- unset(self::$plugins[$name]);
- }
-
- // make sure initPlugins will avoid this
- common_config_set('plugins', 'disable-'.$name, true);
-
- return true;
- }
-
- /**
- * Get a list of activated plugins in this process.
- * @return array of (string $name, array $args) pairs
- */
public static function getActivePlugins()
{
- return self::$plugins;
- }
-
- /**
- * Initialize, or re-initialize, StatusNet global configuration
- * and plugins.
- *
- * If switching site configurations during script execution, be
- * careful when working with leftover objects -- global settings
- * affect many things and they may not behave as you expected.
- *
- * @param $server optional web server hostname for picking config
- * @param $path optional URL path for picking config
- * @param $conffile optional configuration file path
- *
- * @throws NoConfigException if config file can't be found
- */
- public static function init($server=null, $path=null, $conffile=null)
- {
- Router::clear();
-
- self::initDefaults($server, $path);
- self::loadConfigFile($conffile);
-
- $sprofile = common_config('site', 'profile');
- if (!empty($sprofile)) {
- self::loadSiteProfile($sprofile);
- }
- // Load settings from database; note we need autoload for this
- Config::loadSettings();
-
- 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::getKV('nickname', $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.
- */
- protected static function initPlugins()
- {
- // User config may have already added some of these plugins, with
- // maybe configured parameters. The self::addPlugin function will
- // ignore the new call if it has already been instantiated.
-
- // Load core plugins
- foreach (common_config('plugins', 'core') as $name => $params) {
- call_user_func('self::addPlugin', $name, $params);
- }
-
- // Load default plugins
- foreach (common_config('plugins', 'default') as $name => $params) {
- $key = 'disable-' . $name;
- if (common_config('plugins', $key)) {
- continue;
- }
-
- // TODO: We should be able to avoid this is_null and assume $params
- // is an array, since that's how it is typed in addPlugin
- if (is_null($params)) {
- self::addPlugin($name);
- } else if (is_array($params)) {
- if (count($params) == 0) {
- self::addPlugin($name);
- } else {
- $keys = array_keys($params);
- if (is_string($keys[0])) {
- self::addPlugin($name, $params);
- } else {
- foreach ($params as $paramset) {
- self::addPlugin($name, $paramset);
- }
- }
- }
- }
- }
-
- // XXX: if plugins should check the schema at runtime, do that here.
- if (common_config('db', 'schemacheck') == 'runtime') {
- Event::handle('CheckSchema');
- }
-
- // Give plugins a chance to initialize in a fully-prepared environment
- Event::handle('InitializePlugin');
- }
-
- /**
- * Quick-check if configuration has been established.
- * Useful for functions which may get used partway through
- * initialization to back off from fancier things.
- *
- * @return bool
- */
- public static function haveConfig()
- {
- return self::$have_config;
- }
-
- public static function isApi()
- {
- return self::$is_api;
+ return GNUsocial::getActivePlugins();
}
- public static function setApi($mode)
+ public static function isHTTPS()
{
- self::$is_api = $mode;
- }
-
- public static function isAjax()
- {
- return self::$is_ajax;
- }
-
- public static function setAjax($mode)
- {
- self::$is_ajax = $mode;
- }
-
- /**
- * Build default configuration array
- * @return array
- */
- protected static function defaultConfig()
- {
- global $_server, $_path;
- require(INSTALLDIR.'/lib/default.php');
- return $default;
- }
-
- /**
- * Establish default configuration based on given or default server and path
- * Sets global $_server, $_path, and $config
- */
- public static function initDefaults($server, $path)
- {
- global $_server, $_path, $config, $_PEAR;
-
- Event::clearHandlers();
- self::$plugins = array();
-
- // try to figure out where we are. $server and $path
- // can be set by including module, else we guess based
- // on HTTP info.
-
- if (isset($server)) {
- $_server = $server;
- } else {
- $_server = array_key_exists('SERVER_NAME', $_SERVER) ?
- strtolower($_SERVER['SERVER_NAME']) :
- null;
- }
-
- if (isset($path)) {
- $_path = $path;
- } else {
- $_path = (array_key_exists('SERVER_NAME', $_SERVER) && array_key_exists('SCRIPT_NAME', $_SERVER)) ?
- self::_sn_to_path($_SERVER['SCRIPT_NAME']) :
- null;
- }
-
- // Set config values initially to default values
- $default = self::defaultConfig();
- $config = $default;
-
- // default configuration, overwritten in config.php
- // Keep DB_DataObject's db config synced to ours...
-
- $config['db'] = &$_PEAR->getStaticProperty('DB_DataObject','options');
-
- $config['db'] = $default['db'];
-
- if (function_exists('date_default_timezone_set')) {
- /* Work internally in UTC */
- date_default_timezone_set('UTC');
- }
- }
-
- public static function loadSiteProfile($name)
- {
- global $config;
- $settings = SiteProfile::getSettings($name);
- $config = array_replace_recursive($config, $settings);
- }
-
- protected static function _sn_to_path($sn)
- {
- $past_root = substr($sn, 1);
- $last_slash = strrpos($past_root, '/');
- if ($last_slash > 0) {
- $p = substr($past_root, 0, $last_slash);
- } else {
- $p = '';
- }
- return $p;
- }
-
- /**
- * Load the default or specified configuration file.
- * Modifies global $config and may establish plugins.
- *
- * @throws NoConfigException
- */
- protected static 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');
-
- if (strlen($_path) > 0) {
- $config_files[] = '/etc/statusnet/'.$_server.'_'.$_path.'.php';
- $config_files[] = '/etc/laconica/'.$_server.'_'.$_path.'.php';
- }
-
- $config_files[] = INSTALLDIR.'/config.php';
- }
-
- self::$have_config = false;
-
- foreach ($config_files as $_config_file) {
- if (@file_exists($_config_file)) {
- // Ignore 0-byte config files
- if (filesize($_config_file) > 0) {
- common_log(LOG_INFO, "Including config file: " . $_config_file);
- include($_config_file);
- self::$have_config = true;
- }
- }
- }
-
- if (!self::$have_config) {
- throw new NoConfigException("No configuration file found.",
- $config_files);
- }
-
- // Check for database server; must exist!
-
- if (empty($config['db']['database'])) {
- throw new ServerException("No database server for this site.");
- }
- }
-
- /**
- * Are we running from the web with HTTPS?
- *
- * @return boolean true if we're running with HTTPS; else false
- */
-
- static function isHTTPS()
- {
- // There are some exceptions to this; add them here!
- if (empty($_SERVER['HTTPS'])) {
- return false;
- }
-
- // If it is _not_ "off", it is on, so "true".
- return strtolower($_SERVER['HTTPS']) !== 'off';
- }
-
- /**
- * Can we use HTTPS? Then do! Only return false if it's not configured ("never").
- */
- static function useHTTPS()
- {
- return self::isHTTPS() || common_config('site', 'ssl') != 'never';
- }
-}
-
-class NoConfigException extends Exception
-{
- public $configFiles;
-
- function __construct($msg, $configFiles) {
- parent::__construct($msg);
- $this->configFiles = $configFiles;
+ return GNUsocial::isHTTPS();
}
}
*/
function switchSite($site)
{
- if ($site != StatusNet::currentSite()) {
+ if ($site != GNUsocial::currentSite()) {
$this->stats('switch');
- StatusNet::switchSite($site);
+ GNUsocial::switchSite($site);
$this->initialize();
}
}
protected function queueName($queue)
{
$group = $this->queueGroup($queue);
- $site = StatusNet::currentSite();
+ $site = GNUsocial::currentSite();
$specs = array("$group/$queue/$site",
"$group/$queue");
*/
protected function relativeThemePath($group, $fallbackSubdir, $name)
{
- if (StatusNet::isHTTPS()) {
+ if (GNUsocial::isHTTPS()) {
$sslserver = common_config($group, 'sslserver');
if (empty($sslserver)) {
$path = $r->build($action, $args, $params, $fragment);
$ssl = common_config('site', 'ssl') === 'always'
- || StatusNet::isHTTPS()
+ || GNUsocial::isHTTPS()
|| common_is_sensitive($action);
if (common_config('site','fancy')) {
$pathpart = (common_config('site', 'path')) ? common_config('site', 'path')."/" : '';
if (($ssl && (common_config('site', 'ssl') === 'sometimes'))
- || StatusNet::isHTTPS()
+ || GNUsocial::isHTTPS()
|| common_config('site', 'ssl') === 'always') {
$proto = 'https';
if (is_string(common_config('site', 'sslserver')) &&
protected function prepare(array $args=array())
{
// If we die, show short error messages.
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
parent::prepare($args);
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->user = common_current_user();
}
}
- $nickname = StatusNet::currentSite();
+ $nickname = GNUsocial::currentSite();
if (empty($nickname)) {
$this->log(LOG_WARNING, "No current site");
return false;
}
- StatusNet::switchSite($sn->nickname);
+ GNUsocial::switchSite($sn->nickname);
$user = User::getKV('email', $email);
Status_network::$wildcard = $config['WILDCARD'];
}
- StatusNet::switchSite($sn->nickname);
+ GNUsocial::switchSite($sn->nickname);
$confirm = EmailRegistrationPlugin::registerEmail($email);
throw new ClientException(_("No such site."));
}
- StatusNet::switchSite($sn->nickname);
+ GNUsocial::switchSite($sn->nickname);
$user = common_check_user($email, $password);
throw new NoSuchUserException(array('email' => $email));
}
- StatusNet::switchSite($sn->nickname);
+ GNUsocial::switchSite($sn->nickname);
$user = User::getKV('email', $email);
function prepare($args)
{
- StatusNet::setApi(true); // reduce exception reports to aid in debugging
+ GNUsocial::setApi(true); // reduce exception reports to aid in debugging
parent::prepare($args);
Status_network::$wildcard = $config['WILDCARD'];
- StatusNet::switchSite($this->nickname);
+ GNUsocial::switchSite($this->nickname);
// We need to initialize the schema_version stuff to make later setup easier
while ($sn->fetch()) {
try {
$server = $sn->getServerName();
- StatusNet::init($server);
+ GNUsocial::init($server);
// Different queue manager, maybe!
$qm = QueueManager::get();
foreach ($reminders as $reminder) {
if ($sn->find()) {
while ($sn->fetch()) {
$server = $sn->getServerName();
- StatusNet::init($server);
+ GNUsocial::init($server);
// Different queue manager, maybe!
$qm = QueueManager::get();
$qm->enqueue(1, 'sitesum');
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true); // short error results!
+ GNUsocial::setApi(true); // short error results!
}
$rsvpId = $this->trimmed('rsvp');
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true); // short error results!
+ GNUsocial::setApi(true); // short error results!
}
$eventId = $this->trimmed('event');
$this->serverError(_('Could not delete favorite.'));
}
Fave::blowCacheForProfileId($this->scoped->id);
- if (StatusNet::isAjax()) {
+ if (GNUsocial::isAjax()) {
$this->startHTML('text/xml;charset=utf-8');
$this->elementStart('head');
// TRANS: Title for page on which favorites can be added.
function handle($args)
{
// Trigger short error responses; not a human-readable web page.
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
// We're not a general oEmbed proxy service; limit to valid sessions.
$token = $this->trimmed('token');
urlencode($this->apikey)));
break;
case 'microsoft':
- $action->script((StatusNet::isHTTPS()?'https':'http') + '://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6');
+ $action->script((GNUsocial::isHTTPS()?'https':'http') + '://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6');
break;
case 'openlayers':
// Use our included stripped & minified OpenLayers.
{
protected function handle()
{
- StatusNet::setApi(true); // Minimize error messages to aid in debugging
+ GNUsocial::setApi(true); // Minimize error messages to aid in debugging
parent::handle();
if ($this->isPost()) {
return $this->handlePost();
protected function prepare(array $args=array())
{
- StatusNet::setApi(true); // reduce exception reports to aid in debugging
+ GNUsocial::setApi(true); // reduce exception reports to aid in debugging
return parent::prepare($args);
}
protected function prepare(array $args=array())
{
- StatusNet::setApi(true); // Send smaller error pages
+ GNUsocial::setApi(true); // Send smaller error pages
parent::prepare($args);
case 'video':
case 'link':
if (!empty($oembed->html)
- && (StatusNet::isAjax() || common_config('attachments', 'show_html'))) {
+ && (GNUsocial::isAjax() || common_config('attachments', 'show_html'))) {
require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
$config = array(
'safe'=>1,
function newPoll()
{
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
try {
if (empty($this->question)) {
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->user = common_current_user();
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->user = common_current_user();
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
common_debug("in qnanewanswer");
$this->user = common_current_user();
function newQuestion()
{
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
try {
if (empty($this->title)) {
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->user = common_current_user();
{
parent::prepare($argarray);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
$this->user = common_current_user();
if ($sn->find()) {
while ($sn->fetch()) {
$server = $sn->getServerName();
- StatusNet::init($server);
+ GNUsocial::init($server);
cleanupChannels();
}
}
{
if (isset($action->recaptchaPluginNeedsOutput) && $action->recaptchaPluginNeedsOutput) {
// Load the AJAX API
- if (StatusNet::isHTTPS()) {
+ if (GNUsocial::isHTTPS()) {
$url = "https://www.google.com/recaptcha/api/js/recaptcha_ajax.js";
} else {
$url = "http://www.google.com/recaptcha/api/js/recaptcha_ajax.js";
{
parent::prepare($args);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
// Only allow POST requests
{
parent::prepare($args);
if ($this->boolean('ajax')) {
- StatusNet::setApi(true);
+ GNUsocial::setApi(true);
}
// Only allow POST requests