Merge branch 'master' of gitorious.org:statusnet/mainline
This commit is contained in:
		
							
								
								
									
										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
 | 
			
		||||
    '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
 | 
			
		||||
=======
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -86,6 +86,55 @@ class Cache
 | 
			
		||||
        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
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -59,7 +59,8 @@ $default =
 | 
			
		||||
              'textlimit' => 140,
 | 
			
		||||
              'indent' => true,
 | 
			
		||||
              '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' =>
 | 
			
		||||
        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')
 | 
			
		||||
              '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()
 | 
			
		||||
    {
 | 
			
		||||
        if (empty($this->m)) {
 | 
			
		||||
            $k = self::cacheKey();
 | 
			
		||||
            $c = Cache::instance();
 | 
			
		||||
            $m = $c->get($k);
 | 
			
		||||
            if (!empty($m)) {
 | 
			
		||||
                $this->m = $m;
 | 
			
		||||
            } else {
 | 
			
		||||
	    if (!common_config('router', 'cache')) {
 | 
			
		||||
                $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()
 | 
			
		||||
    {
 | 
			
		||||
        $plugins     = StatusNet::getActivePlugins();
 | 
			
		||||
        $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);
 | 
			
		||||
        return Cache::codeKey('router');
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    function initialize()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user