mirror of
https://github.com/Mibew/boilerplate-plugin.git
synced 2025-02-05 08:44:42 +03:00
144 lines
4.9 KiB
PHP
144 lines
4.9 KiB
PHP
<?php
|
|
/*
|
|
* Copyright 2014 the original author or authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/**
|
|
* @file The main file of Mibew:Boilerplate plugin.
|
|
*
|
|
* Plugin's class name, its namespace and file path must follow special naming
|
|
* conventions. The name of the main plugin class should match pattern:
|
|
* "\<Vendor Name>\Mibew\Plugin\<Plugin name>\Plugin". It should be placed in
|
|
* "<mibew root>/plugins/<Vendor Name>/Mibew/Plugin/<Plugin name>/Plugin.php"
|
|
* file. Names of plugin and directories/files are case sensitive!
|
|
*
|
|
* To turn the plugin on add its definition to the following to "plugins"
|
|
* structure in <mibew root>/configs/config.yml if the "plugins" structure looks
|
|
* like:
|
|
* <code>
|
|
* plugins: []
|
|
* </code>
|
|
* it will become:
|
|
* <code>
|
|
* plugins:
|
|
* -
|
|
* name: "Mibew:Boilerplate"
|
|
* config:
|
|
* very_important_value: "$3.50"
|
|
* </code>
|
|
*/
|
|
|
|
namespace Mibew\Mibew\Plugin\Boilerplate;
|
|
|
|
/**
|
|
* Defenition of the main plugin class.
|
|
*
|
|
* Plugin class must implements \Mibew\Plugin\PluginInterface and can extends
|
|
* \Mibew\Plugin\AbstractPlugin class. The latter contains basic functions that
|
|
* can be helpfull.
|
|
*/
|
|
class Plugin extends \Mibew\Plugin\AbstractPlugin implements \Mibew\Plugin\PluginInterface
|
|
{
|
|
/**
|
|
* Determine if the plugin was initialized correctly or not.
|
|
*
|
|
* By setting this propery to true by default we can make the plugin
|
|
* initialized by default, so there is no need to add custom contructor
|
|
* or initializer.
|
|
*
|
|
* This propery is overridden here only for example. We do not need to do
|
|
* so in each plugin. In general case it should be set to true in the plugin
|
|
* constructor when all necessary checks will be passed.
|
|
*
|
|
* Another way to control initialization state of the plugin is by means of
|
|
* {@link \Mibew\Plugin\PluginInterface::initialized()} method.
|
|
*/
|
|
protected $initialized = true;
|
|
|
|
/**
|
|
* Plugin's constructor.
|
|
*
|
|
* The code is situated here can initialize the plugin but cannot depend
|
|
* on other plugins. All dependent code should be placed in "run" method.
|
|
*
|
|
* The current implementation just checks plugin's configurations.
|
|
*
|
|
* @param array $config Associative array of configuration params from the
|
|
* main config file.
|
|
*/
|
|
public function __construct($config)
|
|
{
|
|
// Check if a fake config param is set or it does not. In the sake of
|
|
// simplicity we do not check the value.
|
|
if (!isset($config['very_important_value'])) {
|
|
// "very_important_value" param was not set. In this case we cannot
|
|
// initialize the plugin correctly, so we need to tell the system
|
|
// about it.
|
|
$this->initialized = false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The main entry point of a plugin
|
|
*
|
|
* If a plugin extends \Mibew\Plugin\AbstructPlugin class the only method
|
|
* that should be implemented is "run".
|
|
*
|
|
* Here we can attach event listeners and do other job.
|
|
*/
|
|
public function run()
|
|
{
|
|
// We need an instatance of EventDispatcher class to attach handlers to
|
|
// events. So get it.
|
|
$dispatcher = \Mibew\EventDispatcher::getInstance();
|
|
// There are a lot of events. Use a few of them to show how they work.
|
|
$dispatcher->attachListener('pageAddCSS', $this, 'addCustomCss');
|
|
}
|
|
|
|
/**
|
|
* Just attaches custom CSS file to every page that support it (chat windows
|
|
* and users waiting screen).
|
|
*
|
|
* @param array $args Associative array of arguments passed in to event
|
|
* handler. The list of arguments can vary for different events. See an
|
|
* event description to know which arguments are available and how they
|
|
* should be used.
|
|
*/
|
|
public function addCustomCss(&$args)
|
|
{
|
|
$args['css'][] = $args['request']->getBasePath()
|
|
. '/' . $this->getFilesPath() . '/css/styles.css';
|
|
}
|
|
|
|
/**
|
|
* Also we can add dependencies. But make sure that they were loaded BEFORE
|
|
* current plugin in config.php
|
|
*
|
|
* If the plugin depends, for example, on "Abc:BestFeature" and "Xyz:Logger"
|
|
* we need to return the following array:
|
|
* <code>
|
|
* return array(
|
|
* 'Abc:BestFeature',
|
|
* 'Xyz:Logger',
|
|
* );
|
|
* </code>
|
|
*/
|
|
public static function getDependencies()
|
|
{
|
|
// This plugin does not depend on others so return an empty array.
|
|
return array();
|
|
}
|
|
}
|