Commit 91485718 authored by Evan Prodromou's avatar Evan Prodromou

Merge branch 'testing'

parents 495dcb58 399977ae
......@@ -1572,6 +1572,23 @@ proxy_user: Username to use for authenticating to the HTTP proxy. Default null.
proxy_password: Password to use for authenticating to the HTTP proxy. Default null.
proxy_auth_scheme: Scheme to use for authenticating to the HTTP proxy. Default null.
plugins
-------
default: associative array mapping plugin name to array of arguments. To disable
a default plugin, unset its value in this array.
locale_path: path for finding plugin locale files. In the plugin's directory
by default.
server: Server to find static files for a plugin when the page is plain old HTTP.
Defaults to site/server (same as pages). Use this to move plugin CSS and
JS files to a CDN.
sslserver: Server to find static files for a plugin when the page is HTTPS. Defaults
to site/server (same as pages). Use this to move plugin CSS and JS files
to a CDN.
path: Path to the plugin files. defaults to site/path + '/plugins/'. Expects that
each plugin will have a subdirectory at plugins/NameOfPlugin. Change this
if you're using a CDN.
Plugins
=======
......
......@@ -314,6 +314,9 @@ $default =
'RSSCloud' => null,
'OpenID' => null),
'locale_path' => false, // Set to a path to use *instead of* each plugin's own locale subdirectories
'server' => null,
'sslserver' => null,
'path' => null,
),
'admin' =>
array('panels' => array('design', 'site', 'user', 'paths', 'access', 'sessions', 'sitenotice', 'license')),
......
......@@ -110,11 +110,16 @@ class Plugin
{
$this->log(LOG_DEBUG, $msg);
}
function name()
{
$cls = get_class($this);
return mb_substr($cls, 0, -6);
}
function onPluginVersion(&$versions)
{
$cls = get_class($this);
$name = mb_substr($cls, 0, -6);
$name = $this->name();
$versions[] = array('name' => $name,
// TRANS: Displayed as version information for a plugin if no version information was found.
......@@ -122,4 +127,38 @@ class Plugin
return true;
}
function path($relative)
{
return self::staticPath($this->name(), $relative);
}
static function staticPath($plugin, $relative)
{
$isHTTPS = StatusNet::isHTTPS();
if ($isHTTPS) {
$server = common_config('plugins', 'sslserver');
} else {
$server = common_config('plugins', 'server');
}
if (is_null($server)) {
if ($isHTTPS) {
$server = common_config('site', 'sslserver');
} else {
$server = common_config('site', 'server');
}
}
$path = common_config('plugins', 'path');
if (is_null($path)) {
$path = common_config('site', 'path') . '/plugins/';
}
$protocol = ($isHTTPS) ? 'https' : 'http';
return $protocol.'://'.$server.$path.$plugin.'/'.$relative;
}
}
......@@ -51,15 +51,15 @@ class AutocompletePlugin extends Plugin
function onEndShowScripts($action){
if (common_logged_in()) {
$action->script('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.pack.js');
$action->script('plugins/Autocomplete/Autocomplete.js');
$action->script($this->path('jquery-autocomplete/jquery.autocomplete.pack.js'));
$action->script($this->path('Autocomplete.js'));
}
}
function onEndShowStatusNetStyles($action)
{
if (common_logged_in()) {
$action->cssLink('plugins/Autocomplete/jquery-autocomplete/jquery.autocomplete.css');
$action->cssLink($this->path('jquery-autocomplete/jquery.autocomplete.css'));
}
}
......
......@@ -65,7 +65,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img',
array('width' => 300,
'height' => 250,
'src' => common_path('plugins/BlankAd/redpixel.png')),
'src' => $this->path('redpixel.png')),
'');
}
......@@ -81,7 +81,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img',
array('width' => 180,
'height' => 150,
'src' => common_path('plugins/BlankAd/redpixel.png')),
'src' => $this->path('redpixel.png')),
'');
}
......@@ -97,7 +97,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img',
array('width' => 160,
'height' => 600,
'src' => common_path('plugins/BlankAd/redpixel.png')),
'src' => $this->path('redpixel.png')),
'');
}
......@@ -113,7 +113,7 @@ class BlankAdPlugin extends UAPPlugin
$action->element('img',
array('width' => 728,
'height' => 90,
'src' => common_path('plugins/BlankAd/redpixel.png')),
'src' => $this->path('redpixel.png')),
'');
}
......
......@@ -149,7 +149,7 @@ class BookmarkPlugin extends Plugin
function onEndShowStyles($action)
{
$action->cssLink('plugins/Bookmark/bookmark.css');
$action->cssLink($this->path('bookmark.css'));
return true;
}
......
......@@ -107,6 +107,6 @@ class BookmarkpopupAction extends NewbookmarkAction
function showScripts()
{
parent::showScripts();
$this->script(common_path('plugins/Bookmark/bookmarkpopup.js'));
$this->script(Plugin::staticPath('Bookmark', 'bookmarkpopup.js'));
}
}
......@@ -53,7 +53,7 @@ class ClientSideShortenPlugin extends Plugin
function onEndShowScripts($action){
$action->inlineScript('var Notice_maxContent = ' . Notice::maxContent());
if (common_logged_in()) {
$action->script('plugins/ClientSideShorten/shorten.js');
$action->script($this->path('shorten.js'));
}
}
......
......@@ -129,7 +129,7 @@ class DirectionDetectorPlugin extends Plugin {
*/
function onEndShowScripts($action){
if (common_logged_in()) {
$action->script('plugins/DirectionDetector/jquery.DirectionDetector.js');
$action->script($this->path('jquery.DirectionDetector.js'));
}
}
......
......@@ -89,10 +89,7 @@ class FacebookloginAction extends Action
);
$attrs = array(
'src' => common_path(
'plugins/FacebookBridge/images/login-button.png',
true
),
'src' => Plugin::staticPath('FacebookBridge', 'images/login-button.png'),
'alt' => 'Login with Facebook',
'title' => 'Login with Facebook'
);
......
......@@ -40,8 +40,8 @@ class InfiniteScrollPlugin extends Plugin
function onEndShowScripts($action)
{
$action->script('plugins/InfiniteScroll/jquery.infinitescroll.js');
$action->script('plugins/InfiniteScroll/infinitescroll.js');
$action->script($this->path('jquery.infinitescroll.js'));
$action->script($this->path('infinitescroll.js'));
}
function onPluginVersion(&$versions)
......
......@@ -51,7 +51,7 @@ class LinkPreviewPlugin extends Plugin
{
$user = common_current_user();
if ($user && common_config('attachments', 'process_links')) {
$action->script('plugins/LinkPreview/linkpreview.min.js');
$action->script($this->path('linkpreview.min.js'));
$data = json_encode(array(
'api' => common_local_url('oembedproxy'),
'width' => common_config('attachments', 'thumbwidth'),
......
......@@ -129,7 +129,7 @@ class MapstractionPlugin extends Plugin
break;
case 'openlayers':
// Use our included stripped & minified OpenLayers.
$action->script(common_path('plugins/Mapstraction/OpenLayers/OpenLayers.js'));
$action->script($this->path('OpenLayers/OpenLayers.js'));
break;
case 'yahoo':
$action->script(sprintf('http://api.maps.yahoo.com/ajaxymap?v=3.8&appid=%s',
......@@ -145,13 +145,13 @@ class MapstractionPlugin extends Plugin
//
// Note that OpenLayers.js needs to be separate, or it won't
// be able to find its UI images and styles.
$action->script(common_path('plugins/Mapstraction/usermap-mxn-openlayers.min.js'));
$action->script($this->path('usermap-mxn-openlayers.min.js'));
} else {
$action->script(sprintf('%s?(%s)',
common_path('plugins/Mapstraction/js/mxn.js'),
$this->path('js/mxn.js'),
$this->provider));
$action->script(common_path('plugins/Mapstraction/usermap.js'));
$action->script($this->path('usermap.js'));
}
$action->inlineScript(sprintf('var _provider = "%s";', $this->provider));
......
......@@ -89,7 +89,7 @@ class MeteorPlugin extends RealtimePlugin
{
$scripts = parent::_getScripts();
$scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js';
$scripts[] = common_path('plugins/Meteor/meteorupdater.min.js');
$scripts[] = $this->path('meteorupdater.min.js');
return $scripts;
}
......
......@@ -241,13 +241,13 @@ class MobileProfilePlugin extends WAP20Plugin
if (file_exists(Theme::file('css/mp-screen.css'))) {
$action->cssLink('css/mp-screen.css', null, 'screen');
} else {
$action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen');
$action->cssLink($this->path('mp-screen.css'),null,'screen');
}
if (file_exists(Theme::file('css/mp-handheld.css'))) {
$action->cssLink('css/mp-handheld.css', null, 'handheld');
} else {
$action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld');
$action->cssLink($this->path('mp-handheld.css'),null,'handheld');
}
// Allow other plugins to load their styles.
......
......@@ -51,13 +51,13 @@ class ModPlusPlugin extends Plugin
{
$user = common_current_user();
if ($user) {
$action->script('plugins/ModPlus/modplus.js');
$action->script($this->path('modplus.js'));
}
return true;
}
function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/ModPlus/modplus.css');
$action->cssLink($this->path('modplus.css'));
return true;
}
......
......@@ -331,7 +331,7 @@ class NewMenuPlugin extends Plugin
array('default', 'identica', 'h4ck3r'))) &&
($action instanceof AccountSettingsAction ||
$action instanceof ConnectSettingsAction)) {
$action->cssLink(common_path('plugins/NewMenu/newmenu.css'));
$action->cssLink($this->path('newmenu.css'));
}
return true;
}
......
......@@ -419,12 +419,12 @@ class OStatusPlugin extends Plugin
}
function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/OStatus/theme/base/css/ostatus.css');
$action->cssLink($this->path('theme/base/css/ostatus.css'));
return true;
}
function onEndShowStatusNetScripts($action) {
$action->script('plugins/OStatus/js/ostatus.js');
$action->script($this->path('js/ostatus.js'));
return true;
}
......
......@@ -1112,7 +1112,8 @@ class Ostatus_profile extends Memcached_DataObject
return $url;
}
}
return common_path('plugins/OStatus/images/96px-Feed-icon.svg.png');
return Plugin::staticPath('OStatus', 'images/96px-Feed-icon.svg.png');
}
/**
......
......@@ -116,8 +116,9 @@ class RealtimePlugin extends Plugin
function onEndShowStatusNetStyles($action)
{
$action->cssLink('plugins/Realtime/realtimeupdate.css',
null, 'screen, projection, tv');
$action->cssLink(Plugin::staticPath('Realtime', 'realtimeupdate.css'),
null,
'screen, projection, tv');
return true;
}
......@@ -322,7 +323,7 @@ class RealtimePlugin extends Plugin
function _getScripts()
{
return array('plugins/Realtime/realtimeupdate.min.js');
return array(Plugin::staticPath('Realtime', 'realtimeupdate.min.js'));
}
/**
......
......@@ -33,7 +33,7 @@ class ShareNoticePlugin extends Plugin
);
function onEndShowStatusNetStyles($action) {
$action->cssLink('plugins/ShareNotice/css/sharenotice.css');
$action->cssLink($this->path('css/sharenotice.css'));
return true;
}
......
......@@ -41,7 +41,7 @@ class TabFocusPlugin extends Plugin
function onEndShowScripts($action)
{
$action->script('plugins/TabFocus/tabfocus.js');
$action->script($this->path('tabfocus.js'));
}
function onPluginVersion(&$versions)
......
......@@ -38,6 +38,10 @@ if (!defined('STATUSNET')) {
* Use TinyMCE library to allow rich text editing in the browser
*
* Converts the notice form in browser to a rich-text editor.
*
* FIXME: this plugin DOES NOT load its static files from the configured
* plugin server if one exists. There are cross-server permissions errors
* if you try to do that (something about window.tinymce).
*
* @category WYSIWYG
* @package StatusNet
......
......@@ -83,7 +83,7 @@ class TwitterloginAction extends Action
$this->elementStart('a', array('href' => common_local_url('twitterauthorization',
null,
array('signin' => true))));
$this->element('img', array('src' => common_path('plugins/TwitterBridge/Sign-in-with-Twitter-lighter.png'),
$this->element('img', array('src' => Plugin::staticPath('TwitterBridge', 'Sign-in-with-Twitter-lighter.png'),
'alt' => _m('Sign in with Twitter')));
$this->elementEnd('a');
}
......
......@@ -176,12 +176,12 @@ class YammeradminpanelAction extends AdminPanelAction
function showStylesheets()
{
parent::showStylesheets();
$this->cssLink('plugins/YammerImport/css/admin.css', null, 'screen, projection, tv');
$this->cssLink(Plugin::staticPath('YammerImport', 'css/admin.css'), null, 'screen, projection, tv');
}
function showScripts()
{
parent::showScripts();
$this->script('plugins/YammerImport/js/yammer-admin.js');
$this->script(Plugin::staticPath('YammerImport', 'js/yammer-admin.js'));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment