Use an event to signal that IM settings are available

Rather than enumerating available classes, define an event that sets a
flag indicating that there's an IM plugin available. Implemented in
implugin.php, so all IM plugins that use that class should
work. Others can hook the event, too.
This commit is contained in:
Evan Prodromou 2011-09-21 15:15:59 -04:00
parent c48cdc7d50
commit ad726a15de
3 changed files with 13 additions and 1 deletions

View File

@ -1422,3 +1422,6 @@ StartUpgrade: when starting a site upgrade
EndUpgrade: when ending a site upgrade; good place to do your own upgrades EndUpgrade: when ending a site upgrade; good place to do your own upgrades
HaveIMPlugin: is there an IM plugin loaded?
- &$haveIMPlugin: set me to true if you're loaded!

View File

@ -620,6 +620,11 @@ abstract class ImPlugin extends Plugin
return true; return true;
} }
function onHaveImPlugin(&$haveImPlugin) {
$haveImPlugin = true; // set flag true (we're loaded, after all!)
return false; // stop looking
}
function initialize() function initialize()
{ {
if( ! common_config('queue', 'enabled')) if( ! common_config('queue', 'enabled'))

View File

@ -121,7 +121,11 @@ class SettingsNav extends Menu
Event::handle('EndAccountSettingsNav', array(&$this->action)); Event::handle('EndAccountSettingsNav', array(&$this->action));
if (class_exists('XmppPlugin') || class_exists('IrcPlugin') || class_exists('MsnPlugin')) { $haveImPlugin = false;
Event::handle('HaveImPlugin', array(&$haveImPlugin));
if ($haveImPlugin) {
$this->action->menuItem(common_local_url('imsettings'), $this->action->menuItem(common_local_url('imsettings'),
// TRANS: Menu item in settings navigation panel. // TRANS: Menu item in settings navigation panel.
_m('MENU','IM'), _m('MENU','IM'),