X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fupdate-gosa;h=55214d133d92abce2ba557858b96896ab11558e8;hb=a173df8003e8613a1626c19710ff9627cd060ce9;hp=e94948b24d3d06bc38a2775f586e04eb44ca4681;hpb=a701393b1d277b892b009797aaeaac9a9c53bedd;p=gosa.git diff --git a/gosa-core/update-gosa b/gosa-core/update-gosa index e94948b24..55214d133 100755 --- a/gosa-core/update-gosa +++ b/gosa-core/update-gosa @@ -1,5 +1,25 @@ -#!/usr/bin/php5 +#!/usr/bin/php compiled/${language}/LC_MESSAGES/messages.po)", $val); + system ("(cd ".LOCALE_DIR." && msgcat --use-first ".implode(" ", $po_files)." > compiled/${language}/LC_MESSAGES/messages.po)", $val); if ($val != 0){ echo "Merging of message files failed - aborted"; exit (4); @@ -150,6 +188,60 @@ function rescan_i18n() exit (5); } } + + echo "! Warning: you may need to reload your webservice!\n"; +} + + +function rescan_guide() +{ + $master_guide= "doc/guide.xml"; + echo "Updating Online Help Index...\n"; + $master_guide_content="\n". + "\n\n". + "\n\n". + "\n". + "\n"; + + $guide= 'doc/core/guide.xml'; + if(file_exists($guide) && is_readable($guide)) { + $master_guide_content.= file_get_contents($guide); + } + + if(file_exists('doc/plugins')) { + $plugins= scandir('doc/plugins'); + foreach($plugins as $key => $plugin) { + if($plugin != '.' && $plugin != '..') { + if(is_dir('doc/plugins/'.$plugin)) { + $guide= 'doc/plugins/'.$plugin.'/guide.xml'; + if(file_exists($guide) && is_readable($guide)) { + $master_guide_content.= file_get_contents($guide); + } + } + } + } + } + + $master_guide_content.= ""; + + $master_guide_content= preg_replace("/[ \t][ \t]*/", " ", $master_guide_content); + + if((file_exists($master_guide) && is_writable($master_guide)) || is_writable('doc')) { + file_put_contents($master_guide, $master_guide_content); + } + } @@ -165,9 +257,9 @@ function parse_ini($file) $plugin= &$tmp['gosa-plugin']; if (isset($plugin['name'])&& isset($plugin['description'])){ $res= $plugin['name']; - $provides[$res]= $plugin[$res]; $description[$res]= $plugin['description']; $versions[$res]= $plugin['version']; + $provides[$res]= $res; if (isset($plugin['depends'])){ $depends[$res]= explode(',', preg_replace('/\s+/', '', $plugin['depends'])); } @@ -276,7 +368,14 @@ function install_plugin($file) /* Check if dependencies are fullfilled */ foreach ($depends as $dep){ - if (!in_array($dep, $provides)){ + $found= false; + foreach ($provides as $provide => $dummy){ + if ($dep == $provide){ + $found= true; + break; + } + } + if (!$found){ echo "! Error: plugin depends on '$dep', but this is not installed\n\n"; exit (3); } @@ -299,6 +398,8 @@ function install_plugin($file) exit (1); } + echo "Installing plugin '$name'...\n"; + /* Copy and fill plugin.lst */ $path= dirname($file); $dir= new RecursiveDirectoryIterator($path); @@ -319,7 +420,11 @@ function install_plugin($file) /* Calculate destination */ if (preg_match("%^.*locale/%", $source)){ - $dest= GOSA_HOME."/locale/plugin/$name/".preg_replace("%^.*locale/%", "", $source); + $dest= GOSA_HOME."/locale/plugins/$name/".preg_replace("%^.*locale/%", "", $source); + } elseif (preg_match("%^.*help/%", $source)) { + $dest= GOSA_HOME."/doc/plugins/$name/".preg_replace("%^.*help/%", "", $source); + } elseif (preg_match("%^.*html/%", $source)) { + $dest= GOSA_HOME."/html/plugins/$name/".preg_replace("%^.*html/%", "", $source); } else { $dest= GOSA_HOME."/plugins/".substr($entry->getPathName(), strlen($path) + 1); } @@ -328,21 +433,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); @@ -353,9 +459,69 @@ function install_plugin($file) /* Update caches */ rescan_classes(); rescan_i18n(); + rescan_guide(); +} + + +function remove_plugin($name) +{ + global $description, $depends; + + /* Load plugin list */ + load_plugins(); + + /* Present? */ + if (!isset($description[$name])){ + echo "! Error: cannot find a plugin named '$name'\n\n"; + exit (1); + } + + /* Depends? */ + foreach ($depends as $sname => $pl_depends){ + if (in_array($name, $pl_depends)){ + echo "! Error: plugin '$sname' depends on '$name' - cannot remove it\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(); + rescan_guide(); } + /* Fill global values */ $description= $provides= $depends= $versions= $conflicts= array(); @@ -363,6 +529,7 @@ $description= $provides= $depends= $versions= $conflicts= array(); if ($argc < 2){ rescan_classes(); rescan_i18n(); + rescan_guide(); exit (0); } @@ -371,7 +538,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 +546,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();