X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fupdate-gosa;h=de343937cd9aa74e1a39fdcfa2dfc2e90e383213;hb=53c2503a1a90c3c8d9626598e7995b153a54c898;hp=e94948b24d3d06bc38a2775f586e04eb44ca4681;hpb=a701393b1d277b892b009797aaeaac9a9c53bedd;p=gosa.git diff --git a/gosa-core/update-gosa b/gosa-core/update-gosa index e94948b24..de343937c 100755 --- a/gosa-core/update-gosa +++ b/gosa-core/update-gosa @@ -27,6 +27,20 @@ Usage: update-gosa install dsc Install the plugin using the dsc information } +function rmdirRecursive($path, $followLinks=false) { + $dir= opendir($path); + while($entry= readdir($dir)) { + if(is_file($path."/".$entry) || ((!$followLinks) && is_link($path."/".$entry))) { + unlink($path."/".$entry); + } elseif (is_dir($path."/".$entry) && $entry!='.' && $entry!='..') { + rmdirRecursive($path."/".$entry); + } + } + closedir($dir); + return rmdir($path); +} + + /* Function to include all class_ files starting at a given directory base */ function get_classes($folder= ".") { @@ -299,6 +313,8 @@ function install_plugin($file) exit (1); } + echo "Installing plugin '$name'...\n"; + /* Copy and fill plugin.lst */ $path= dirname($file); $dir= new RecursiveDirectoryIterator($path); @@ -328,21 +344,22 @@ function install_plugin($file) if ($entry->isDir()){ if (!is_dir($dest)){ mkdir($dest, 0755, TRUE); - fwrite ($handle, "$dest"); + fwrite ($handle, "$dest\n"); } } else { if (!is_dir(dirname($dest))){ mkdir(dirname($dest), 0755, TRUE); - fwrite ($handle, "$dest"); + fwrite ($handle, dirname($dest)."\n"); } } /* Copy files */ if ($entry->isFile()){ copy ($source, $dest); - fwrite ($handle, "$dest"); } + /* Note what we did... */ + fwrite ($handle, "$dest\n"); } fclose($handle); @@ -356,6 +373,56 @@ function install_plugin($file) } +function remove_plugin($name) +{ + global $description; + + /* Load plugin list */ + load_plugins(); + + /* Present? */ + if (!isset($description[$name])){ + echo "! Error: cannot find a plugin named '$name'\n\n"; + exit (1); + } + + /* Load information */ + if (!file_exists(PLUGSTATE_DIR."/$name/plugin.lst")){ + echo "! Error: cannot remove plugin '$name' - no install history found\n\n"; + exit (1); + } + + echo "Removing plugin '$name'...\n"; + $contents= file(PLUGSTATE_DIR."/$name/plugin.lst"); + $cnv= array(); + foreach($contents as $line){ + $entry= chop($line); + $cnv[strlen($entry).":$entry"]= $entry; + } + krsort($cnv); + + /* Remove files first */ + clearstatcache(); + foreach ($cnv as $entry){ + if (is_dir($entry)){ + rmdir($entry); + continue; + } + if (file_exists($entry)){ + unlink($entry); + } + } + + /* Remove state directory for plugin */ + rmdirRecursive(PLUGSTATE_DIR."/$name"); + + /* Update caches */ + rescan_classes(); + rescan_i18n(); +} + + + /* Fill global values */ $description= $provides= $depends= $versions= $conflicts= array(); @@ -371,7 +438,7 @@ switch ($argv[1]){ if (isset($argv[2])){ install_plugin($argv[2]); } else { - echo "Usage: update-gosa install-plugin dsc-file\n\n"; + echo "Usage: update-gosa install dsc-file\n\n"; exit (1); } break; @@ -379,7 +446,12 @@ switch ($argv[1]){ list_plugins(); break; case 'remove': - echo "remove\n"; + if (isset($argv[2])){ + remove_plugin($argv[2]); + } else { + echo "Usage: update-gosa remove plugin-name\n\n"; + exit (1); + } break; case 'rescan-i18n': rescan_i18n();