manager->plugin) { return; }
$component_list = $this->get_plugin_components($this->manager->plugin);
usort($component_list, array($this,'component_sort'));
foreach ($component_list as $component) {
if (($obj = plugin_load($component['type'],$component['name'],false,true)) === null) continue;
$compname = explode('_',$component['name']);
if($compname[1]){
$compname = '['.$compname[1].']';
}else{
$compname = '';
}
$this->details[] = array_merge(
$obj->getInfo(),
array(
'type' => $component['type'],
'compname' => $compname
));
unset($obj);
}
// review details to simplify things
foreach($this->details as $info) {
foreach($info as $item => $value) {
if (!isset($this->plugin_info[$item])) { $this->plugin_info[$item] = $value; continue; }
if ($this->plugin_info[$item] != $value) $this->plugin_info[$item] = '';
}
}
}
function html() {
// output the standard menu stuff
parent::html();
// sanity check
if (!$this->manager->plugin) { return; }
ptln('
');
ptln("
".$this->manager->getLang('plugin')." {$this->manager->plugin}
");
// collect pertinent information from the log
$installed = $this->plugin_readlog($this->manager->plugin, 'installed');
$source = $this->plugin_readlog($this->manager->plugin, 'url');
$updated = $this->plugin_readlog($this->manager->plugin, 'updated');
if (strrpos($updated, "\n") !== false) $updated = substr($updated, strrpos($updated, "\n")+1);
ptln("
",2);
ptln("- ".$this->manager->getLang('source').'
- '.($source ? $source : $this->manager->getLang('unknown'))."
",4);
ptln("- ".$this->manager->getLang('installed').'
- '.($installed ? $installed : $this->manager->getLang('unknown'))."
",4);
if ($updated) ptln("- ".$this->manager->getLang('lastupdate').'
- '.$updated."
",4);
ptln("
",2);
if (count($this->details) == 0) {
ptln("
".$this->manager->getLang('noinfo')."
",2);
} else {
ptln("
",2);
if ($this->plugin_info['name']) ptln("- ".$this->manager->getLang('name')."
- ".$this->out($this->plugin_info['name'])."
",4);
if ($this->plugin_info['date']) ptln("- ".$this->manager->getLang('date')."
- ".$this->out($this->plugin_info['date'])."
",4);
if ($this->plugin_info['type']) ptln("- ".$this->manager->getLang('type')."
- ".$this->out($this->plugin_info['type'])."
",4);
if ($this->plugin_info['desc']) ptln("- ".$this->manager->getLang('desc')."
- ".$this->out($this->plugin_info['desc'])."
",4);
if ($this->plugin_info['author']) ptln("- ".$this->manager->getLang('author')."
- ".$this->manager->email($this->plugin_info['email'], $this->plugin_info['author'])."
",4);
if ($this->plugin_info['url']) ptln("- ".$this->manager->getLang('www')."
- ".$this->manager->external_link($this->plugin_info['url'], '', 'urlextern')."
",4);
ptln("
",2);
if (count($this->details) > 1) {
ptln("
".$this->manager->getLang('components')."
",2);
ptln("
",2);
foreach ($this->details as $info) {
ptln("
",4);
ptln("- ".$this->manager->getLang('name')."
- ".$this->out($info['name'].' '.$info['compname'])."
",6);
if (!$this->plugin_info['date']) ptln("- ".$this->manager->getLang('date')."
- ".$this->out($info['date'])."
",6);
if (!$this->plugin_info['type']) ptln("- ".$this->manager->getLang('type')."
- ".$this->out($info['type'])."
",6);
if (!$this->plugin_info['desc']) ptln("- ".$this->manager->getLang('desc')."
- ".$this->out($info['desc'])."
",6);
if (!$this->plugin_info['author']) ptln("- ".$this->manager->getLang('author')."
- ".$this->manager->email($info['email'], $info['author'])."
",6);
if (!$this->plugin_info['url']) ptln("- ".$this->manager->getLang('www')."
- ".$this->manager->external_link($info['url'], '', 'urlextern')."
",6);
ptln("
",4);
}
ptln("
",2);
}
}
ptln("
");
}
// simple output filter, make html entities safe and convert new lines to
function out($text) {
return str_replace("\n",'
',htmlspecialchars($text));
}
/**
* return a list (name & type) of all the component plugins that make up this plugin
*
* @todo can this move to pluginutils?
*/
function get_plugin_components($plugin) {
global $plugin_types;
$components = array();
$path = DOKU_PLUGIN.plugin_directory($plugin).'/';
foreach ($plugin_types as $type) {
if (@file_exists($path.$type.'.php')) { $components[] = array('name'=>$plugin, 'type'=>$type); continue; }
if ($dh = @opendir($path.$type.'/')) {
while (false !== ($cp = readdir($dh))) {
if ($cp == '.' || $cp == '..' || strtolower(substr($cp,-4)) != '.php') continue;
$components[] = array('name'=>$plugin.'_'.substr($cp, 0, -4), 'type'=>$type);
}
closedir($dh);
}
}
return $components;
}
/**
* usort callback to sort plugin components
*/
function component_sort($a, $b) {
if ($a['name'] == $b['name']) return 0;
return ($a['name'] < $b['name']) ? -1 : 1;
}
}