Skip to content
Snippets Groups Projects
Commit 875f9efe authored by chris's avatar chris
Browse files

plugin manager update, remove js & css file aggregation, improve error handling

darcs-hash:20060113023414-9b6ab-76bd7b12af34e8f32135c32c22403bd0fb14c98a.gz
parent 2415b718
No related branches found
No related tags found
No related merge requests found
......@@ -17,9 +17,8 @@ require_once(DOKU_PLUGIN.'admin.php');
//--------------------------[ GLOBALS ]------------------------------------------------
// note: probably should be dokuwiki wide globals, where they can be accessed by pluginutils.php
global $common_plugin_files, $common_plugin_types;
global $common_plugin_types;
$common_plugin_types = array('syntax', 'admin');
$common_plugin_files = array("style.css", "screen.css", "print.css", "script.js");
/**
* All DokuWiki plugins to extend the admin function
......@@ -190,7 +189,7 @@ class ap_manage {
}
function html_pluginlist() {
global $ID;
global $ID;
foreach ($this->manager->plugin_list as $plugin) {
......@@ -205,8 +204,9 @@ class ap_manage {
ptln(' <input type="hidden" name="plugin" value="'.$plugin.'" />');
$this->html_button('info', false, 6);
if (in_array('settings', $this->manager->functions))
$this->html_button('settings', !@file_exists(DOKU_PLUGIN.$plugin.'/settings.php'), 6);
if (in_array('settings', $this->manager->functions)) {
$this->html_button('settings', !@file_exists(DOKU_PLUGIN.$plugin.'/settings.php'), 6);
}
$this->html_button('update', !$this->plugin_readlog($plugin, 'url'), 6);
$this->html_button('delete', false, 6);
......@@ -221,39 +221,12 @@ class ap_manage {
}
/**
* Rebuild aggregated files & update latest plugin date
* Refresh plugin list
*/
function refresh() {
global $lang;
global $common_plugin_files;
sort($this->manager->plugin_list = plugin_list());
foreach ($common_plugin_files as $file) {
$aggregate = '';
// could replace with an class/object based aggregator,
// that way special files could have their own aggregator
foreach ($this->manager->plugin_list as $plugin) {
if (@file_exists(DOKU_PLUGIN."$plugin/$file")) {
$contents = @file_get_contents(DOKU_PLUGIN."$plugin/$file")."\n";
// url conversion for css files
if (is_css($file)) {
$contents = preg_replace('/(url\([\'\"]?)([^\/](?![a-zA-Z0-9]+:\/\/).*?)([\'\"]?\))/','$1'.$plugin.'/$2$3',$contents);
}
$aggregate .= $contents;
}
}
if (trim($aggregate)) {
if (!io_savefile(DOKU_PLUGIN."plugin_$file", $aggregate)) {
$this->manager->error .= sprintf($this->lang['error_write'],$file);
}
}
}
// update latest plugin date - FIXME
return (!$this->manager->error);
}
......@@ -408,7 +381,7 @@ class ap_manage {
ptln('<h2>'.$this->lang['downloading'].'</h2>');
if ($this->manager->error) {
ptln('<p class="error">'.str_replace("\n","<br />",$this->manager->error).'</p>');
ptln('<div class="error">'.str_replace("\n","<br />",$this->manager->error).'</div>');
} else if (count($this->downloaded) == 1) {
ptln('<p>'.sprintf($this->lang['downloaded'],$this->downloaded[0]).'</p>');
} else if (count($this->downloaded)) { // more than one plugin in the download
......@@ -430,16 +403,24 @@ class ap_manage {
function process() {
ap_delete(DOKU_PLUGIN.$this->manager->plugin);
$this->refresh();
if (!ap_delete(DOKU_PLUGIN.$this->manager->plugin)) {
$this->manager->error = sprintf($this->lang['error_delete'],$this->manager->plugin);
} else {
$this->refresh();
}
}
function html() {
parent::html();
ptln('<div class="pm_info">');
ptln('<h2>'.$this->lang['deleting'].'</h2>');
ptln('<p>'.sprintf($this->lang['deleted'],$this->plugin).'</p>');
ptln('<h2>'.$this->lang['deleting'].'</h2>');
if ($this->manager->error) {
ptln('<div class="error">'.str_replace("\n","<br />",$this->manager->error).'</div>');
} else {
ptln('<p>'.sprintf($this->lang['deleted'],$this->plugin).'</p>');
}
ptln('</div>');
}
}
......@@ -558,7 +539,7 @@ class ap_manage {
ptln('<h2>'.$this->lang['updating'].'</h2>');
if ($this->manager->error) {
ptln('<p class="error">'.str_replace("\n","<br />", $this->manager->error).'</p>');
ptln('<div class="error">'.str_replace("\n","<br />", $this->manager->error).'</div>');
} else if (count($this->downloaded) == 1) {
ptln('<p>'.sprintf($this->lang['updated'],$this->downloaded[0]).'</p>');
} else if (count($this->downloaded)) { // more than one plugin in the download
......@@ -664,23 +645,23 @@ class ap_manage {
// delete, with recursive sub-directory support
function ap_delete($path) {
if (!is_string($path) || $path == "") return;
if (!is_string($path) || $path == "") return false;
if (is_dir($path)) {
if (!$dh = @opendir($path)) return;
if (!$dh = @opendir($path)) return false;
while ($f = readdir($dh)) {
if ($f == '..' || $f == '.') continue;
ap_delete("$path/$f");
}
closedir($dh);
rmdir($path);
return;
return @rmdir($path);
} else {
unlink($path);
return @unlink($path);
}
return false;
}
// return a list (name & type) of all the component plugins that make up this plugin
......
......@@ -49,7 +49,6 @@ $lang['download_none'] = 'Keine Plugins gefunden oder es trat ein Fehler beim
// error messages
$lang['error_download'] = 'Konnte das Plugin %s nicht installieren';
$lang['error_write'] = 'Konnte keine vereinigte Datei für %s erstellen';
$lang['error_badurl'] = 'Wahrscheinlich ungültige URL, konnte keinen Dateinamen ausfindig machen';
$lang['error_dircreate'] = 'Konnte keinen temporären Ordner für die Downloads erstellen';
//$lang['error_'] = '';
......
......@@ -68,15 +68,16 @@ $lang['www'] = 'Web:';
// error messages
$lang['error'] = 'An unknown error occurred.';
$lang['error_download'] = 'Unable to download the plugin file: %s';
$lang['error_write'] = 'Unable to create aggregate file %s';
$lang['error_badurl'] = 'Suspect bad url - unable to determine file name from the url';
$lang['error_dircreate'] = 'Unable to create temporary folder to receive download';
$lang['error_decompress'] = 'The plugin manager was unable to decompress the downloaded file. '.
'This maybe as a result of a bad download, in which case you should try again; '.
'or the compression format may be unknown, in which case you will need to download and install the plugin manually.';
$lang['error_copy'] = 'There was a file copy error while attempting to install files for plugin %s: '.
$lang['error_copy'] = 'There was a file copy error while attempting to install files for plugin <em>%s</em>: '.
'the disk could be full or file access permissions may be incorrect. '.
'This may have resulted in a partially installed plugin and leave your wiki installation unstable.';
$lang['error_delete'] = 'There was an error while attempting to delete plugin <em>%s</em>. '.
'The most probably cause is insufficient file or directory access permissions';
//$lang['error_'] = '';
//Setup VIM: ex: et ts=2 enc=utf-8 :
......@@ -68,7 +68,6 @@ $lang['www'] = 'WWW:';
// error messages
$lang['error'] = 'Wystąpił nieznany błąd.';
$lang['error_download'] = 'Nie powiodło się ściągnięcie pliku wtyczki: %s';
$lang['error_write'] = 'Nie powiodło się stworzenie pliku aggregate %s';
$lang['error_badurl'] = 'Prawdopodobnie zły url - nie da się ustalić nazwy pliku na podstawie urla';
$lang['error_dircreate'] = 'Nie powiodło się stworzenie tymczasowego katalogu na pobrane pliki';
$lang['error_decompress'] = 'Menadżer wtyczek nie był w stanie rozpakować ściągniętego pliku. '.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment