forked from xzilla/phppgadmin
-
Notifications
You must be signed in to change notification settings - Fork 280
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add skeleton of the plugin architecture
By Leonardo Sapiras, reviewed, integrated, commited by ioguix.
- Loading branch information
1 parent
a524be7
commit 3e282e6
Showing
6 changed files
with
175 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,36 @@ | |||
<?php | |||
abstract class Plugin { | |||
|
|||
/** | |||
* Constructor | |||
* Register the plugin's functions in hooks of PPA. | |||
* @param $language Current phpPgAdmin language. | |||
*/ | |||
function __construct($language) { | |||
// Set the plugin's language | |||
$plugin_directory = "plugins/". $this->get_name(); | |||
require_once("{$plugin_directory}/lang/recoded/english.php"); | |||
if (file_exists("{$plugin_directory}/lang/recoded/{$language}.php")) { | |||
include_once("{$plugin_directory}/lang/recoded/{$language}.php"); | |||
} | |||
$this->lang = $plugin_lang; | |||
|
|||
if (file_exists("{$plugin_directory}/conf/config.inc.php")) { | |||
include_once("{$plugin_directory}/conf/config.inc.php"); | |||
$this->conf = $plugin_conf; | |||
} | |||
} | |||
|
|||
abstract function get_hooks(); | |||
|
|||
abstract function get_actions(); | |||
|
|||
/** | |||
* Get the plugin name, that will be used as identification | |||
* @return $name | |||
*/ | |||
function get_name() { | |||
return $this->name; | |||
} | |||
} | |||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,114 @@ | |||
<?php | |||
|
|||
/** | |||
* A class that implements the plugin's system | |||
*/ | |||
|
|||
class PluginManager { | |||
|
|||
/** | |||
* Attributes | |||
*/ | |||
private $plugins_list = array(); | |||
private $available_hooks = array(/* wip, will be added in next commits */); | |||
private $actions = array(); | |||
private $hooks = array(); | |||
|
|||
/** | |||
* Register the plugins | |||
* @param $language - Language that have been used. | |||
*/ | |||
function __construct($language) { | |||
global $conf, $lang; | |||
|
|||
// Get the activated plugins | |||
$plugins = $conf['plugins']; | |||
|
|||
foreach ($plugins as $activated_plugin) { | |||
$plugin_file = './plugins/'.$activated_plugin.'/plugin.php'; | |||
|
|||
// Verify is the activated plugin exists | |||
if (file_exists($plugin_file)) { | |||
include_once($plugin_file); | |||
$plugin = new $activated_plugin($language); | |||
$this->add_plugin($plugin); | |||
} else { | |||
printf($lang['strpluginnotfound']."\t\n", $activated_plugin); | |||
exit; | |||
} | |||
} | |||
} | |||
|
|||
/** | |||
* Add a plugin in the list of plugins to manage | |||
* @param $plugin - Instance from plugin | |||
*/ | |||
function add_plugin($plugin) { | |||
global $lang; | |||
|
|||
//The $plugin_name is the identification of the plugin. | |||
//Example: PluginExample is the identification for PluginExample | |||
//It will be used to get a specific plugin from the plugins_list. | |||
$plugin_name = $plugin->get_name(); | |||
$this->plugins_list[$plugin_name] = $plugin; | |||
|
|||
//Register the plugin's functions | |||
$hooks = $plugin->get_hooks(); | |||
foreach ($hooks as $hook => $functions) { | |||
if (!in_array($hook, $this->available_hooks)) { | |||
printf($lang['strhooknotfound']."\t\n", $hook); | |||
exit; | |||
} | |||
$this->hooks[$hook][$plugin_name] = $functions; | |||
} | |||
|
|||
//Register the plugin's actions | |||
$actions = $plugin->get_actions(); | |||
$this->actions[$plugin_name] = $actions; | |||
} | |||
|
|||
/** | |||
* Execute the plugins hook functions when needed. | |||
* @param $hook - The place where the function will be called | |||
* @param $function_args - An array reference with arguments to give to called function | |||
*/ | |||
function do_hook($hook, &$function_args) { | |||
if (isset($this->hooks[$hook])) { | |||
foreach ($this->hooks[$hook] as $plugin_name => $functions) { | |||
$plugin = $this->plugins_list[$plugin_name]; | |||
foreach ($functions as $function) { | |||
if (method_exists($plugin, $function)) { | |||
call_user_func(array($plugin, $function), $function_args); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
|
|||
/** | |||
* Execute a plugin's action | |||
* @param $plugin_name - The plugin name. | |||
* @param $action - action that will be executed. | |||
*/ | |||
function do_action($plugin_name, $action) { | |||
global $lang; | |||
|
|||
if (!isset($this->plugins_list[$plugin_name])) { | |||
// Show an error and stop the application | |||
printf($lang['strpluginnotfound']."\t\n", $name); | |||
exit; | |||
} | |||
$plugin = $this->plugins_list[$plugin_name]; | |||
|
|||
// Check if the plugin's method exists and if this method is an declared action. | |||
if (method_exists($plugin, $action) and in_array($action, $this->actions[$plugin_name])) { | |||
call_user_func(array($plugin, $action)); | |||
} | |||
else { | |||
// Show an error and stop the application | |||
printf($lang['stractionnotfound']."\t\n", $action, $plugin_name); | |||
exit; | |||
} | |||
} | |||
} | |||
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,5 @@ | |||
<?php | |||
require_once('./libraries/lib.inc.php'); | |||
|
|||
$plugin_manager->do_action($_REQUEST['plugin'], $_REQUEST['action']); | |||
?> |