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