Merge branch 'master' of gitorious.org:statusnet/mainline
This commit is contained in:
commit
001512df96
12
README
12
README
@ -1540,6 +1540,18 @@ external: external links in notices. One of three values: 'sometimes',
|
|||||||
nofollowed on profile, notice, and favorites page. Default is
|
nofollowed on profile, notice, and favorites page. Default is
|
||||||
'sometimes'.
|
'sometimes'.
|
||||||
|
|
||||||
|
router
|
||||||
|
------
|
||||||
|
|
||||||
|
We use a router class for mapping URLs to code. This section controls
|
||||||
|
how that router works.
|
||||||
|
|
||||||
|
cache: whether to cache the router in memcache (or another caching
|
||||||
|
mechanism). Defaults to true, but may be set to false for
|
||||||
|
developers (who might be actively adding pages, so won't want the
|
||||||
|
router cached) or others who see strange behavior. You're unlikely
|
||||||
|
to need this unless you're a developer.
|
||||||
|
|
||||||
Plugins
|
Plugins
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
@ -86,6 +86,55 @@ class Cache
|
|||||||
return 'statusnet:' . $base_key . ':' . $extra;
|
return 'statusnet:' . $base_key . ':' . $extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a cache key for data dependent on code
|
||||||
|
*
|
||||||
|
* For cache elements that are dependent on changes in code, this creates
|
||||||
|
* a more-or-less fingerprint of the current running code and adds it to
|
||||||
|
* the cache key. In the case of an upgrade of core, or addition or
|
||||||
|
* removal of plugins, a new unique fingerprint is generated and used.
|
||||||
|
*
|
||||||
|
* There can still be problems with a) differences in versions of the
|
||||||
|
* plugins and b) people running code between official versions. This is
|
||||||
|
* usually a problem only for experienced users like developers, who know
|
||||||
|
* how to clear their cache.
|
||||||
|
*
|
||||||
|
* For sites that run code between versions (like the status.net cloud),
|
||||||
|
* there's an additional build number configuration setting.
|
||||||
|
*
|
||||||
|
* @param string $extra the real part of the key
|
||||||
|
*
|
||||||
|
* @return string full key
|
||||||
|
*/
|
||||||
|
|
||||||
|
static function codeKey($extra)
|
||||||
|
{
|
||||||
|
static $prefix = null;
|
||||||
|
|
||||||
|
if (empty($prefix)) {
|
||||||
|
|
||||||
|
$plugins = StatusNet::getActivePlugins();
|
||||||
|
$names = array();
|
||||||
|
|
||||||
|
foreach ($plugins as $plugin) {
|
||||||
|
$names[] = $plugin[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
$names = array_unique($names);
|
||||||
|
asort($names);
|
||||||
|
|
||||||
|
// Unique enough.
|
||||||
|
|
||||||
|
$uniq = crc32(implode(',', $names));
|
||||||
|
|
||||||
|
$build = common_config('site', 'build');
|
||||||
|
|
||||||
|
$prefix = STATUSNET_VERSION.':'.$build.':'.$uniq;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Cache::key($prefix.':'.$extra);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a string suitable for use as a key
|
* Make a string suitable for use as a key
|
||||||
*
|
*
|
||||||
|
@ -59,7 +59,8 @@ $default =
|
|||||||
'textlimit' => 140,
|
'textlimit' => 140,
|
||||||
'indent' => true,
|
'indent' => true,
|
||||||
'use_x_sendfile' => false,
|
'use_x_sendfile' => false,
|
||||||
'notice' => null // site wide notice text
|
'notice' => null, // site wide notice text
|
||||||
|
'build' => 1, // build number, for code-dependent cache
|
||||||
),
|
),
|
||||||
'db' =>
|
'db' =>
|
||||||
array('database' => 'YOU HAVE TO SET THIS IN config.php',
|
array('database' => 'YOU HAVE TO SET THIS IN config.php',
|
||||||
@ -323,4 +324,6 @@ $default =
|
|||||||
array('ssl_cafile' => false, // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt')
|
array('ssl_cafile' => false, // To enable SSL cert validation, point to a CA bundle (eg '/usr/lib/ssl/certs/ca-certificates.crt')
|
||||||
'curl' => false, // Use CURL backend for HTTP fetches if available. (If not, PHP's socket streams will be used.)
|
'curl' => false, // Use CURL backend for HTTP fetches if available. (If not, PHP's socket streams will be used.)
|
||||||
),
|
),
|
||||||
|
'router' =>
|
||||||
|
array('cache' => true), // whether to cache the router object. Defaults to true, turn off for devel
|
||||||
);
|
);
|
||||||
|
@ -127,15 +127,19 @@ class Router
|
|||||||
function __construct()
|
function __construct()
|
||||||
{
|
{
|
||||||
if (empty($this->m)) {
|
if (empty($this->m)) {
|
||||||
$k = self::cacheKey();
|
if (!common_config('router', 'cache')) {
|
||||||
$c = Cache::instance();
|
|
||||||
$m = $c->get($k);
|
|
||||||
if (!empty($m)) {
|
|
||||||
$this->m = $m;
|
|
||||||
} else {
|
|
||||||
$this->m = $this->initialize();
|
$this->m = $this->initialize();
|
||||||
$c->set($k, $this->m);
|
} else {
|
||||||
}
|
$k = self::cacheKey();
|
||||||
|
$c = Cache::instance();
|
||||||
|
$m = $c->get($k);
|
||||||
|
if (!empty($m)) {
|
||||||
|
$this->m = $m;
|
||||||
|
} else {
|
||||||
|
$this->m = $this->initialize();
|
||||||
|
$c->set($k, $this->m);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,21 +160,7 @@ class Router
|
|||||||
|
|
||||||
static function cacheKey()
|
static function cacheKey()
|
||||||
{
|
{
|
||||||
$plugins = StatusNet::getActivePlugins();
|
return Cache::codeKey('router');
|
||||||
$names = array();
|
|
||||||
|
|
||||||
foreach ($plugins as $plugin) {
|
|
||||||
$names[] = $plugin[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
$names = array_unique($names);
|
|
||||||
asort($names);
|
|
||||||
|
|
||||||
// Unique enough.
|
|
||||||
|
|
||||||
$uniq = crc32(implode(',', $names));
|
|
||||||
|
|
||||||
return Cache::key('router:'.STATUSNET_VERSION.':'.$uniq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function initialize()
|
function initialize()
|
||||||
|
Loading…
Reference in New Issue
Block a user