SantsPlugin.php 9.77 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2009, StatusNet, Inc.
 *
 * A sample module to show best practices for StatusNet plugins
 *
 * PHP version 5
 *
 * 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/>.
 *
 * @category  Sample
 * @package   StatusNet
 * @author    Brion Vibber <brionv@status.net>
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Sample plugin main class
 *
 * Each plugin requires a main class to interact with the StatusNet system.
 *
 * The main class usually extends the Plugin class that comes with StatusNet.
 *
 * The class has standard-named methods that will be called when certain events
 * happen in the code base. These methods have names like 'onX' where X is an
 * event name (see EVENTS.txt for the list of available events). Event handlers
 * have pre-defined arguments, based on which event they're handling. A typical
 * event handler:
 *
 *    function onSomeEvent($paramA, &$paramB)
 *    {
 *        if ($paramA == 'jed') {
 *            throw new Exception(sprintf(_m("Invalid parameter %s"), $paramA));
 *        }
 *        $paramB = 'spock';
 *        return true;
 *    }
 *
 * Event handlers must return a boolean value. If they return false, all other
 * event handlers for this event (in other plugins) will be skipped, and in some
 * cases the default processing for that event would be skipped. This is great for
 * replacing the default action of an event.
 *
 * If the handler returns true, processing of other event handlers and the default
 * processing will continue. This is great for extending existing functionality.
 *
 * If the handler throws an exception, processing will stop, and the exception's
 * error will be shown to the user.
 *
 * To install a plugin (like this one), site admins add the following code to
 * their config.php file:
 *
 *     addPlugin('Sample');
 *
 * Plugins must be installed in one of the following directories:
 *
 *     local/plugins/{$pluginclass}.php
 *     local/plugins/{$name}/{$pluginclass}.php
 *     local/{$pluginclass}.php
 *     local/{$name}/{$pluginclass}.php
 *     plugins/{$pluginclass}.php
 *     plugins/{$name}/{$pluginclass}.php
 *
 * Here, {$name} is the name of the plugin, like 'Sample', and {$pluginclass} is
 * the name of the main class, like 'SamplePlugin'. Plugins that are part of the
 * main StatusNet distribution go in 'plugins' and third-party or local ones go
 * in 'local'.
 *
 * Simple plugins can be implemented as a single module. Others are more complex
 * and require additional modules; these should use their own directory, like
 * 'local/plugins/{$name}/'. All files related to the plugin, including images,
 * JavaScript, CSS, external libraries or PHP modules should go in the plugin
 * directory.
 *
 * @category  Sample
 * @package   StatusNet
 * @author    Brion Vibber <brionv@status.net>
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class SantsPlugin extends Plugin
{
    /**
     * Plugins are configured using public instance attributes. To set
     * their values, site administrators use this syntax:
     *
     * addPlugin('Sample', array('attr1' => 'foo', 'attr2' => 'bar'));
     *
     * The same plugin class can be initialized multiple times with different
     * arguments:
     *
     * addPlugin('EmailNotify', array('sendTo' => 'evan@status.net'));
     * addPlugin('EmailNotify', array('sendTo' => 'brionv@status.net'));
     *
     */

    public $attr1 = null;
    public $attr2 = null;

    /**
     * Initializer for this plugin
     *
     * Plugins overload this method to do any initialization they need,
     * like connecting to remote servers or creating paths or so on.
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    function initialize()
    {
        return true;
    }

    /**
     * Cleanup for this plugin
     *
     * Plugins overload this method to do any cleanup they need,
     * like disconnecting from remote servers or deleting temp files or so on.
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    function cleanup()
    {
        return true;
    }

buttle's avatar
buttle committed
149 150 151 152 153 154 155 156
    function onEndShowStyles($action)
    {
		$action->cssLink($this->path('css/base.css'));
		$action->cssLink($this->path('glyphs/css/fontello.css'));
	}

    function onEndShowJQueryScripts($action)
    {
buttle's avatar
buttle committed
157
        $action->script($this->path('scripts/jquery.viewport.mini.js'));
buttle's avatar
buttle committed
158 159 160
        $action->script($this->path('scripts/header.js'));
    }

161 162 163 164 165 166 167 168 169 170 171 172 173 174
    /**
     * Map URLs to actions
     *
     * This event handler lets the plugin map URLs on the site to actions (and
     * thus an action handler class). Note that the action handler class for an
     * action will be named 'FoobarAction', where action = 'foobar'. The class
     * must be loaded in the onAutoload() method.
     *
     * @param URLMapper $m path-to-action mapper
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    public function onRouterInitialized(URLMapper $m)
    {
buttle's avatar
buttle committed
175 176
        //$m->connect('main/hello1',
        //            array('action' => 'hello'));
177

178 179 180
        $m->connect('',
                    array('action' => 'public'));

buttle's avatar
buttle committed
181 182
        $m->connect(':nickname/tags',
                    array('action' => 'santsusertags'),
buttle's avatar
buttle committed
183 184
                    array('nickname' => Nickname::DISPLAY_FMT));

185 186 187 188 189
        return true;
    }

    function onStartPrimaryNav($action)
    {
buttle's avatar
buttle committed
190 191 192
        $nav = new SantsPrimaryNav($action);
        $nav->show();
        return false;
193 194
	}

buttle's avatar
buttle committed
195
    function onStartAccountSettingsNav($action)
196
    {
buttle's avatar
buttle committed
197 198 199 200 201 202 203 204 205
        $menu = new SantsMenu($action);
        
        $bn = new SantsDefaultLocalNav($menu->action);
        $menu->submenu(_m('MENU','Default'), $bn);
        
        $bn = new SantsSettingsNav($menu->action);
        $menu->submenu(_m('MENU','Settings'), $bn);
        return false;
    }
206

buttle's avatar
buttle committed
207
    function onStartSubMenu()
208
    {
buttle's avatar
buttle committed
209
        return false;
210 211 212
    }


buttle's avatar
buttle committed
213 214 215 216 217 218 219 220 221 222 223 224 225
    function onStartAdminPanelNav($nav)
    {
        $menu = new SantsMenu($nav->action);
        
        $bn = new SantsDefaultLocalNav($menu->action);
        $menu->submenu(_m('MENU','Default'), $bn);
        
        $bn = new SantsAdminPanelNav($menu->action);
        $menu->submenu(_m('MENU','Settings'), $bn);        
        
        return false;
    }

226 227 228 229 230 231 232 233 234
    function onStartLoginGroupNav($action)
    {
        $menu = new SantsMenu($action);

        $bn = new SantsPublicGroupNav($menu->action);
        $menu->submenu(_m('MENU','Public'), $bn);

        $bn = new SantsLoginGroupNav($menu->action);
        $menu->submenu(_m('MENU','Login'), $bn);
buttle's avatar
buttle committed
235
        
236 237 238
        return false;
    }

buttle's avatar
buttle committed
239 240
    function onStartPublicGroupNav($menu)
    {
buttle's avatar
buttle committed
241
        return false;
buttle's avatar
buttle committed
242 243
        
    }
buttle's avatar
buttle committed
244 245 246

    function onStartHomeStubNavItems($action){ return false; }

247 248 249 250 251 252 253 254 255 256 257 258
    function onStartShowLocalNavBlock($action)
    {
        return true;
    }

    function onStartDefaultLocalNav($menu)
    {
        $nav = new SantsDefaultLocalNav($menu->action);
        $nav->show();
        return false;
    }

buttle's avatar
buttle committed
259 260 261 262 263
    function onStartShowNoticeForm($action)
    {
        return true;
    }

buttle's avatar
buttle committed
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293
    function onStartProfilePageProfileSection($action)
    {
        return true;
    }

    function onStartDocNav($nav)
    {        
        $menu = new SantsMenu($nav->action);
        
        $bn = new SantsDefaultLocalNav($menu->action);
        $menu->submenu(_m('MENU','Default'), $bn);

        //$docs = new DocListNav($nav->action);
        //$nav->submenu(_m('MENU','Docs'), $docs);
        
        if ($nav->action->getActionName() == 'doc'){
            $bn = new SantsDocumentsNav($menu->action);
            $menu->submenu(_m('MENU','Default'), $bn);
        }
        return false;
    }


    function onStartSecondaryNav($action)
    {
        return true;
        $menu = new SantsMenu($action);
        $bn = new SantsSecondaryNav($menu->action);
        $menu->submenu(_m('MENU','Default'), $bn);
    }
buttle's avatar
buttle committed
294

295 296 297 298 299 300 301 302 303 304 305
    function onPluginVersion(&$versions)
    {
        $versions[] = array('name' => 'Sants',
                            'version' => GNUSOCIAL_VERSION,
                            'author' => '@tuttle@somsants.net',
                            'homepage' => 'http://status.net/wiki/Plugin:Sample',
                            'rawdescription' =>
                          // TRANS: Plugin description.
                            _m('Enrich the sants css theme with javascript.'));
        return true;
    }
buttle's avatar
buttle committed
306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324

/*
    function onStartPersonalGroupNav($menu, $target, $scoped)
    {
        $nav = new SantsPersonalGroupNav($menu->action);
        $nav->show();
        return false;
    }
*/

/*
    function onEndShowScripts($action)
    {
        $action->inlineScript('$(document).on("click", "a[rel~=external]:not([class~=attachment])", function () { window.open(this.href); return false; });');

        return true;
    }
*/

325
}