xref: /dokuwiki/inc/pluginutils.php (revision ee20e7d16637625e900f518b6b46a61bfa30fe6e)
1*ee20e7d1Sandi<?php
2*ee20e7d1Sandi/**
3*ee20e7d1Sandi * Utilities for handling plugins
4*ee20e7d1Sandi *
5*ee20e7d1Sandi * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6*ee20e7d1Sandi * @author     Andreas Gohr <andi@splitbrain.org>
7*ee20e7d1Sandi */
8*ee20e7d1Sandi
9*ee20e7d1Sandi/**
10*ee20e7d1Sandi * Returns a list of available plugins of given type
11*ee20e7d1Sandi *
12*ee20e7d1Sandi * @author Andreas Gohr <andi@splitbrain.org>
13*ee20e7d1Sandi */
14*ee20e7d1Sandifunction plugin_list($type){
15*ee20e7d1Sandi  $plugins = array();
16*ee20e7d1Sandi  if ($dh = opendir(DOKU_PLUGIN)) {
17*ee20e7d1Sandi    while (false !== ($file = readdir($dh))) {
18*ee20e7d1Sandi      if ($file == '.' || $file == '..') continue;
19*ee20e7d1Sandi      if (is_file(DOKU_PLUGIN.$file)) continue;
20*ee20e7d1Sandi
21*ee20e7d1Sandi      if (@file_exists(DOKU_PLUGIN.$file.'/'.$type.'.php')){
22*ee20e7d1Sandi        $plugins[] = $file;
23*ee20e7d1Sandi      }
24*ee20e7d1Sandi    }
25*ee20e7d1Sandi    closedir($dh);
26*ee20e7d1Sandi  }
27*ee20e7d1Sandi  return $plugins;
28*ee20e7d1Sandi}
29*ee20e7d1Sandi
30*ee20e7d1Sandi/**
31*ee20e7d1Sandi * Loads the given plugin and creates an object of it
32*ee20e7d1Sandi *
33*ee20e7d1Sandi * @author Andreas Gohr <andi@splitbrain.org>
34*ee20e7d1Sandi *
35*ee20e7d1Sandi * @param  $type string 	type of plugin to load
36*ee20e7d1Sandi * @param  $name string 	name of the plugin to load
37*ee20e7d1Sandi * @param  $ref  ref      will contain the plugin object
38*ee20e7d1Sandi * @return boolean        plugin loading successful?
39*ee20e7d1Sandi */
40*ee20e7d1Sandifunction plugin_load($type,$name,&$ref){
41*ee20e7d1Sandi  //we keep all loaded plugins available in global scope for reuse
42*ee20e7d1Sandi  global $DOKU_PLUGINS;
43*ee20e7d1Sandi
44*ee20e7d1Sandi	//plugin already loaded?
45*ee20e7d1Sandi	if($DOKU_PLUGINS[$type][$name] != null){
46*ee20e7d1Sandi		$ref = $DOKU_PLUGINS[$type][$name];
47*ee20e7d1Sandi		return true;
48*ee20e7d1Sandi	}
49*ee20e7d1Sandi
50*ee20e7d1Sandi  //try to load the wanted plugin file
51*ee20e7d1Sandi  if(!@include_once(DOKU_PLUGIN.$name.'/'.$type.'.php')){
52*ee20e7d1Sandi    return false;
53*ee20e7d1Sandi  }
54*ee20e7d1Sandi
55*ee20e7d1Sandi  //construct class and instanciate
56*ee20e7d1Sandi  $class = $type.'_plugin_'.$name;
57*ee20e7d1Sandi  $DOKU_PLUGINS[$type][$name] = new $class;
58*ee20e7d1Sandi  $ref = $DOKU_PLUGINS[$type][$name];
59*ee20e7d1Sandi  return true;
60*ee20e7d1Sandi}
61*ee20e7d1Sandi
62*ee20e7d1Sandi
63