diff --git a/INSTALL b/INSTALL index ef0f369..b275a48 100644 --- a/INSTALL +++ b/INSTALL @@ -382,6 +382,8 @@ A default init script is provided in file web/conf/mioga2.init.d. This script wo Additional configuration for the Search engine ---------------------------------------------- +The default init script starts the search engine daemon. + You must edit the crawl_sample.sh to specify default location for configuration files and rename it to crawl.sh. This script must be run by cron in a day basis with apache user (www-data for Debian) diff --git a/Makefile.PL b/Makefile.PL index 3582d20..c24e217 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -20,8 +20,10 @@ # ============================================================================ +use Cwd; use ExtUtils::MakeMaker; use ExtUtils::MakeMaker::Config; +use File::Find; # **************************************************************************** # @@ -67,6 +69,7 @@ sub CheckPreDepends { my $disable_check = grep {lc($_) eq 'disable_check'} @ARGV; +if (! $disable_check) { CheckPreDepends({ # 'Data::Dumper' => '2.101', # 'DBI' => '1.13', # 'DBD::Pg' => '1.01', @@ -75,7 +78,8 @@ CheckPreDepends({ # 'Data::Dumper' => '2.101', 'Error' => '0.15', # 'Net::LDAP' => '0.25', # 'Unicode::String' => '2.06', - }); + }) +} require MiogaConf; @@ -115,7 +119,7 @@ my $docsubdirs = "docs"; # ---------------------------------------------------------------------------- sub MY::processPL { return ' -# Not realy in the good section, but at a good place: +# Not really in the good section, but at a good place: # between "all" and next "tardist" include config.mk @@ -124,10 +128,7 @@ tardist: doc dist: doc install :: if test -e $(TMP_DIR) ; then \ - if test -d $(TMP_DIR) ; then \ - ( su - $(APACHE_USER) -c "id" -s /bin/sh || \ - ( echo "===> Problem with \"$(APACHE_USER)\" user" ; exit 1 ) ) \ - else \ + if ! test -d $(TMP_DIR) ; then \ echo "===> File $(TMP_DIR) exists but is not a directory ..." ; \ exit 1 ; \ fi \ @@ -156,6 +157,31 @@ install-all :: (cd web && $(MAKE) setperms) || exit 1; +slapos-compilation :: install + for i in bin locales web ; \ + do \ + (cd $$i && $(MAKE) install) || exit 1;\ + done + # Create symlinks for static content that can be shared among all SlapOS instances + for i in var/lib/Mioga2/static var/lib/Mioga2/conf/themes/default var/lib/Mioga2/conf/xsl; do \ + mkdir -p `dirname "$(MIOGA_STATIC)/$$i"` && \ + mv "$(MIOGA_BASE)/$$i" "$(MIOGA_STATIC)/$$i" && \ + ln -s "$(MIOGA_STATIC)/$$i" "$(MIOGA_BASE)/$$i"; \ + done + # copy a minimal build system into mioga/build + mkdir -p "$(MIOGA_BUILDINST)" + cp -R --parents \ + Makefile.PL sql web/conf web/skel conf bin/search/crawl_sample.sh \ + "$(MIOGA_BUILDINST)" + +slapos-instantiation :: + rm -Rf web/conf/apache; (cd web/conf && $(MAKE) apache) + + for i in web/conf conf web/skel sql ; \ + do \ + (cd $$i && $(MAKE) install) || exit 1;\ + done + doc: for i in ' . $docsubdirs . ' ; \ do \ @@ -176,9 +202,18 @@ installall: install install-all # # ---------------------------------------------------------------------------- +my $Mioga2_pm = 'lib/Mioga2.pm'; +if ((not -e $Mioga2_pm) and exists($ENV{MIOGA_SITEPERL})) { + my $findfile = sub { + if ($_ eq 'Mioga2.pm') { + $Mioga2_pm = $File::Find::name; + } + }; + find($findfile, $ENV{MIOGA_SITEPERL}); +}; WriteMakefile( 'NAME' => 'Mioga', 'DIR' => ['bin', 'web', 'locales', 'docs', 'sql'], - 'VERSION_FROM' => 'lib/Mioga2.pm', + 'VERSION_FROM' => $Mioga2_pm, ); diff --git a/bin/mailinglist/miogamailinglist.pl b/bin/mailinglist/miogamailinglist.pl index 80668e2..fa1603a 100755 --- a/bin/mailinglist/miogamailinglist.pl +++ b/bin/mailinglist/miogamailinglist.pl @@ -205,11 +205,11 @@ sub MsgSendStock sub CheckUTF8 { my ($str) = @_; - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_str = $conv->convert($str); unless ($tmp_str) { my $charset = detect($str) || 'iso-8859-15'; # defaults to latin9 - $conv = Text::Iconv->new($charset, "utf8"); + $conv = Text::Iconv->new($charset, "UTF-8"); $str = $conv->convert($str); } return $str; diff --git a/bin/notifier/searchengine.pl b/bin/notifier/searchengine.pl index efd1ca2..fc5ba67 100755 --- a/bin/notifier/searchengine.pl +++ b/bin/notifier/searchengine.pl @@ -39,8 +39,7 @@ if (!open(FIFO, "+>$fifo")) { syslog('err', "Can't open fifo: $!. Exiting..."); } my $flags = fcntl(FIFO, F_GETFL, 0); - - +my $crawler = $config->GetBinariesDir()."/crawl.sh"; # MAIN LOOP my %instances; @@ -53,7 +52,7 @@ while (1) { $instances{$line} += 1; } foreach my $inst (keys(%instances)) { - system("/usr/local/bin/crawl.sh $inst"); + system("$crawler $inst"); } fcntl(FIFO, F_SETFL, $flags); } diff --git a/conf/Config.xml b/conf/Config.xml index e614cda..3a9b7e3 100644 --- a/conf/Config.xml +++ b/conf/Config.xml @@ -3,6 +3,9 @@ <version module="Mioga2"/> <config> + <parameter name="init_sql" question="Initialize database ?" + type="bool" default="no" xpath="/init_sql"/> + <parameter name="instance_ident" question="First Mioga instance Identifier ?" type="text" default="Mioga" xpath="/instance_ident"/> @@ -35,8 +38,18 @@ <parameter name="authentication" question="Authentification method ?" type="enum" default="Mioga2" values="Mioga2" xpath="/authentication"/> - + + <parameter name="bin_dir" question="Directory for helper scripts and binaries ?" + type="text" default="/usr/local/bin" + xpath="/bin_dir"/> + <parameter name="Database settings" type="submenu"> + <parameter name="db_host" question=" Mioga database server name or address ?" + type="text" default="localhost" + xpath="/database/DBhost"/> + <parameter name="db_port" question=" Mioga database server port ?" + type="text" default="5432" + xpath="/database/DBport"/> <parameter name="db_name" question=" Name of Mioga database ?" type="text" default="mioga2" xpath="/database/DBname"/> @@ -462,7 +475,6 @@ <app ident="Portal" package="Mioga2::Portal"/> <app ident="Search" package="Mioga2::Search"/> <app ident="Magellan" package="Mioga2::Magellan"/> - <app ident="Mermoz" package="Mioga2::Mermoz"/> <app ident="RSS" package="Mioga2::RSS"/> <app ident="Narkissos" package="Mioga2::Narkissos"/> <app ident="Colbert" package="Mioga2::Colbert"/> @@ -476,7 +488,7 @@ <mioglet ident="Workspace" package="Mioga2::Portal::WSMioglet"/> <mioglet ident="Organizer" package="Mioga2::Portal::OrgMioglet"/> <mioglet ident="News" package="Mioga2::Portal::NewsMioglet"/> - <mioglet ident="File" package="Mioga2::Portal::FileMioglet"/> + <mioglet ident="File" package="Miorouga2::Portal::FileMioglet"/> <mioglet ident="Articles" package="Mioga2::Portal::ArticlesMioglet"/> <mioglet ident="Poll" package="Mioga2::Portal::PollMioglet"/> <mioglet ident="Search" package="Mioga2::Portal::SearchMioglet"/> diff --git a/lib/Mioga2/Bottin.pm b/lib/Mioga2/Bottin.pm index ba4cd8d..0db5651 100644 --- a/lib/Mioga2/Bottin.pm +++ b/lib/Mioga2/Bottin.pm @@ -1742,11 +1742,11 @@ sub InitSuperAdminMode { sub CheckUTF8 { my ($str) = @_; - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_str = $conv->convert($str); unless ($tmp_str) { - my $charset = detect($str) || 'iso-8859-15'; # defaults to latin9 - $conv = Text::Iconv->new($charset, "utf8"); + my $charset = detect($str) || 'ISO-8859-15'; # defaults to latin9 + $conv = Text::Iconv->new($charset, "UTF-8"); $str = $conv->convert($str); } return $str; diff --git a/lib/Mioga2/Classes/URI.pm b/lib/Mioga2/Classes/URI.pm index 8678b33..bf97e71 100644 --- a/lib/Mioga2/Classes/URI.pm +++ b/lib/Mioga2/Classes/URI.pm @@ -75,15 +75,16 @@ sub new { # convert uri to UTF-8 my $uri = uri_unescape($options{uri}); + # attempt to see if uri is utf8 to avoid detection - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_uri = $conv->convert($uri); - + unless ($tmp_uri) { - my $charset = detect($uri) || 'iso-8859-15'; # defaults to latin9 + my $charset = detect($uri) || 'ISO-8859-15'; # defaults to latin9 warn "charset = '$charset' for uri = '$uri'" if $debug; - $conv = Text::Iconv->new($charset, "utf8"); + $conv = Text::Iconv->new($charset, "UTF-8"); $uri = $conv->convert($uri); warn "==> converted uri = '$uri'" if $debug; } diff --git a/lib/Mioga2/Config.pm b/lib/Mioga2/Config.pm index b088823..4edac62 100644 --- a/lib/Mioga2/Config.pm +++ b/lib/Mioga2/Config.pm @@ -28,7 +28,7 @@ Config.pm: Access class to the current Mioga instance configuration. This module permits to access to the current Mioga instance configuration parameters. -=head1 METHODS DESRIPTION +=head1 METHODS DESCRIPTION =cut diff --git a/lib/Mioga2/DAVFS.pm b/lib/Mioga2/DAVFS.pm index b56c4ad..7810f82 100644 --- a/lib/Mioga2/DAVFS.pm +++ b/lib/Mioga2/DAVFS.pm @@ -141,10 +141,11 @@ use Mioga2::tools::APIAuthz; use Mioga2::tools::database; use Mioga2::tools::string_utils; use Mioga2::tools::Convert; +use Net::INET6Glue::INET_is_INET6; use XML::LibXML (); use Mioga2::Constants; -my $debug = 0; +my $debug = 5; my $MULTI_STATUS = 207; # code DAV for the Multi-status response @@ -756,13 +757,17 @@ sub make_request { my $host = $self->{host}; my $port = $self->{port}; + my $hostport = $host; + $hostport = '['.$hostport.']' if $host =~ /:.*:/; + $hostport .= ':'.$port; + my $dav_uri = $config->GetDAVBasePath; my $mioga_uri = $config->GetBasePath; my $orig_uri = Mioga2::Classes::URI->new( uri => $callbacks->{uri}->() ); my $uri = $orig_uri->as_string; $uri =~ s/^$mioga_uri/$dav_uri/; - $uri = Mioga2::Classes::URI->new( uri => "$protocol://$host:$port$uri" ) + $uri = Mioga2::Classes::URI->new( uri => "$protocol://$hostport$uri" ) ->as_string; print STDERR "[Mioga2::DAVFS::make_request] uri = $uri\n" if $debug; @@ -774,7 +779,7 @@ sub make_request { # process headers if ( $header =~ /^destination/i && $value !~ $dav_uri ) { - $value =~ s!(//)[^/]+$mioga_uri!$1$host$dav_uri!; + $value =~ s!(//)[^/]+$mioga_uri!$1$hostport$dav_uri!; # was only $host before! $value = Mioga2::Classes::URI->new( uri => $value )->as_string; $value = $self->escapeSpecialChars($value); } diff --git a/lib/Mioga2/Database.pm b/lib/Mioga2/Database.pm index 4afa54b..ca8368c 100644 --- a/lib/Mioga2/Database.pm +++ b/lib/Mioga2/Database.pm @@ -61,7 +61,7 @@ sub new { my $self = { }; bless($self, $class); - for my $attr (qw/DBIlogin DBIpasswd DBIdriver DBname/) { + for my $attr (qw/DBhost DBport DBIlogin DBIpasswd DBIdriver DBname/) { if (!defined ($attributes{$attr})) { throw Mioga2::Exception::DB ("[Mioga2::Database::new]", "Cannot connect to database: " . $DBI::errstr); } @@ -72,8 +72,10 @@ sub new { my $dbiPassword = $self->{database}->{DBIpasswd}; my $dbDriver = $self->{database}->{DBIdriver}; my $dbName = $self->{database}->{DBname}; + my $dbHost = $self->{database}->{DBhost}; + my $dbPort = $self->{database}->{DBport}; - my $datasource = "dbi:$dbDriver:dbname=$dbName"; + my $datasource = "dbi:$dbDriver:dbname=$dbName;host=$dbHost;port=$dbPort"; $self->{dbh} = DBI->connect($datasource, $dbiUser, $dbiPassword); diff --git a/lib/Mioga2/Exception/DB.pm b/lib/Mioga2/Exception/DB.pm index 7ce5020..dd29d83 100644 --- a/lib/Mioga2/Exception/DB.pm +++ b/lib/Mioga2/Exception/DB.pm @@ -1,3 +1,4 @@ + # ============================================================================ # Mioga2 Project (C) 2003-2007 The Mioga2 Project # @@ -53,6 +54,7 @@ sub new { my($class, $function, $errDB, $errStr, $sql) = @_; my $self = $class->SUPER::new(-text => "$errStr : $errDB"); $self->{errDB} = $errDB; + $self->{errStr} = $errStr; $self->{sql} = $sql; $self->{function} = $function; return $self; @@ -76,6 +78,27 @@ sub as_string return $string; } +# ---------------------------------------------------------------------------- +=head2 getDBerr () +Return the error code as sent by the database connector. +=cut +# ---------------------------------------------------------------------------- +sub getDBerr { + my ($self) = @_; + return $self->{errDB}; +} + +# ---------------------------------------------------------------------------- +=head2 getDBerrstr () +Return the error string as sent by the database connector. +=cut +# ---------------------------------------------------------------------------- +sub getDBerrstr { + my ($self) = @_; + return $self->{errStr}; +} + + # ============================================================================ =head1 PRIVATE METHODS DESCRIPTION diff --git a/lib/Mioga2/InstanceList.pm b/lib/Mioga2/InstanceList.pm index 3e2cf7a..a676a1b 100644 --- a/lib/Mioga2/InstanceList.pm +++ b/lib/Mioga2/InstanceList.pm @@ -423,7 +423,9 @@ sub Store { $conf->RunHooks($self->{config}->{miogaconf}); # Run crawl.sh to initialize search engine database - my $crawlcmd = $self->{config}->{miogaconf}->GetMiogaPrefix () . "/bin/mioga2_index.pl --conf=" . $self->{config}->GetMiogaConfPath () . ' --search_conf=' . $self->{config}->GetInstallPath . "/conf/search_conf.xml" . ' ' . $self->Get ('ident'); + my $crawlcmd = $self->{config}->{miogaconf}->GetMiogaPrefix () . "/bin/mioga2_index.pl --conf=" . $self->{config}->GetMiogaConfPath () + . ' --search_conf=' . $self->{config}->{miogaconf}->GetInstallDir()."/conf/search_conf.xml" + . ' '. $self->Get ('ident'); system ("$crawlcmd"); } elsif (scalar (keys (%{$self->{update}}))) { diff --git a/lib/Mioga2/Magellan.pm b/lib/Mioga2/Magellan.pm index 86e2e42..4b3814a 100644 --- a/lib/Mioga2/Magellan.pm +++ b/lib/Mioga2/Magellan.pm @@ -327,10 +327,13 @@ sub GetNodes { $mygroup = $group; } + my $host = $config->GetMiogaConf()->GetDAVHost(); + $host = "[${host}]" if $host =~ /:.*?:/; + my $resources = Mioga2::Magellan::DAV::GetCollection( $context, $context->GetSessionToken, - $config->GetMiogaConf ()->GetDAVProtocol () . "://" . $config->GetMiogaConf ()->GetDAVHost () . ":" . $config->GetMiogaConf ()->GetDAVPort (), $node + $config->GetMiogaConf ()->GetDAVProtocol () . "://" . $host . ":" . $config->GetMiogaConf ()->GetDAVPort (), $node ); $inconsistent = pop (@$resources); @@ -853,7 +856,7 @@ sub GetResource { ); print STDERR "mime = $mime\n content= $content\n" if ($debug); if ($mime) { - #my $conv = Text::Iconv->new( 'utf8', 'utf8' ); + #my $conv = Text::Iconv->new( 'UTF-8', 'UTF-8' ); #my $encoding = $conv->convert($content); #if ($encoding) { if ($mime =~ /(application\/xml)|(text\/)|(application\/xsl)/) diff --git a/lib/Mioga2/Magellan/Archive.pm b/lib/Mioga2/Magellan/Archive.pm index 842ae90..3b9e7f7 100644 --- a/lib/Mioga2/Magellan/Archive.pm +++ b/lib/Mioga2/Magellan/Archive.pm @@ -163,7 +163,7 @@ sub Content return undef; } - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my %folders; while(my $file = <PRG>) { chomp($file); diff --git a/lib/Mioga2/Magellan/DAV.pm b/lib/Mioga2/Magellan/DAV.pm index cdf77f1..116ebf4 100644 --- a/lib/Mioga2/Magellan/DAV.pm +++ b/lib/Mioga2/Magellan/DAV.pm @@ -106,7 +106,7 @@ sub ExecuteRequest } if ($response->code >= 500) { - warn "Mioga2::Magellan::ExecuteRequest Failed: " . $response->content; + warn "Mioga2::Magellan::DAV::ExecuteRequest Failed: " . $response->content; } return $response; diff --git a/lib/Mioga2/MailingList.pm b/lib/Mioga2/MailingList.pm index c7d631c..3a92466 100644 --- a/lib/Mioga2/MailingList.pm +++ b/lib/Mioga2/MailingList.pm @@ -749,11 +749,11 @@ sub MailDeleteMsg sub CheckUTF8 { my ($str) = @_; - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_str = $conv->convert($str); unless ($tmp_str) { - my $charset = detect($str) || 'iso-8859-15'; # defaults to latin9 - $conv = Text::Iconv->new($charset, "utf8"); + my $charset = detect($str) || 'ISO-8859-15'; # defaults to latin9 + $conv = Text::Iconv->new($charset, "UTF-8"); $str = $conv->convert($str); } return $str; diff --git a/lib/Mioga2/MiogaConf.pm b/lib/Mioga2/MiogaConf.pm index 5b74a96..a46e27c 100644 --- a/lib/Mioga2/MiogaConf.pm +++ b/lib/Mioga2/MiogaConf.pm @@ -258,7 +258,7 @@ sub GetFilenameEncoding { sub GetBinariesDir { my ($self) = @_; - return $self->{binaries_dir}; + return $self->{bin_dir}; } # ============================================================================ diff --git a/lib/Mioga2/Search.pm b/lib/Mioga2/Search.pm index 2c20259..292f864 100644 --- a/lib/Mioga2/Search.pm +++ b/lib/Mioga2/Search.pm @@ -447,13 +447,13 @@ sub CheckArgs elsif (exists($context->{args}->{query})) { $query_string = $context->{args}->{query}; } - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_query = $conv->convert($query_string); unless ($tmp_query) { - my $charset = detect($query_string) || 'iso-8859-15'; # defaults to latin9 + my $charset = detect($query_string) || 'ISO-8859-15'; # defaults to latin9 warn "charset = '$charset' for query_string = '$query_string'" if $debug; - $conv = Text::Iconv->new($charset, "utf8"); + $conv = Text::Iconv->new($charset, "UTF-8"); $query_string = $conv->convert($query_string); warn "==> converted query_string = '$query_string'" if $debug; } diff --git a/lib/Mioga2/tools/string_utils.pm b/lib/Mioga2/tools/string_utils.pm index c56cc3b..36bfa5a 100644 --- a/lib/Mioga2/tools/string_utils.pm +++ b/lib/Mioga2/tools/string_utils.pm @@ -46,6 +46,7 @@ use Mioga2::Content::XSLT; use Mioga2::XML::Simple; use Exporter; use Text::Iconv; +use Encode; use Encode::Detect::Detector; use Data::Dumper; use HTML::TokeParser::Simple; @@ -715,11 +716,11 @@ Check if string is UTF8 and convert it if needed sub st_CheckUTF8 { my ($str) = @_; - my $conv = Text::Iconv->new('utf8', 'utf8'); + my $conv = Text::Iconv->new('UTF-8', 'UTF-8'); my $tmp_str = $conv->convert($str); unless ($tmp_str) { - my $charset = detect($str) || 'iso-8859-15'; # defaults to latin9 - $conv = Text::Iconv->new($charset, "utf8"); + my $charset = detect($str) || 'ISO-8859-15'; # defaults to latin9 + $conv = Text::Iconv->new($charset, "UTF-8"); $str = $conv->convert($str); utf8::decode ($str); } diff --git a/lib/MiogaConf.pm b/lib/MiogaConf.pm index 0870174..bbcc80a 100644 --- a/lib/MiogaConf.pm +++ b/lib/MiogaConf.pm @@ -836,6 +836,10 @@ sub CheckDepends my @missing; my @missing_clib; + # Some modules rewrite $ENV{PATH} without hesitation when "require"d, + # we need to put the old one back in place. + my $oldpath = $ENV{PATH}; + foreach my $dep (@{$self->{CONFIG}->{dependencies}->[0]->{dep}}) { my $version; if(exists $dep->{version}) { @@ -858,6 +862,7 @@ sub CheckDepends } } + $ENV{PATH} = $oldpath; foreach my $dep (@{$self->{CONFIG}->{dependencies}->[0]->{clib}}) { my $version; diff --git a/sql/Makefile b/sql/Makefile index 07b26f5..3d79b1b 100644 --- a/sql/Makefile +++ b/sql/Makefile @@ -15,19 +15,21 @@ install: cp upgradeMiogletDesc.pl $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d chmod a+x $(DESTDIR)$(INSTALL_DIR)/conf/Config.hook.d/upgradeMiogletDesc.pl - if [ $(INIT_SQL) = 'yes' ] ; \ + DB_STATE=`perl -w testdb.pl`; \ + if [ "$$DB_STATE" = "nodb" -o "$$DB_STATE" = "empty" ] ; \ then \ echo "Initialize database"; \ - su - $(POSTGRES_USER) -c "dropdb $(DB_NAME)" ; \ - su - $(POSTGRES_USER) -c "createdb --encoding UTF8 $(DB_NAME)" && \ - su $(POSTGRES_USER) -c "psql $(DB_NAME) < create_lang.sql" && \ - perl -w -I../lib initdb.pl ; \ - elif [ $(INIT_SQL) != 'noupdate' ]; then \ + dropdb -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) ; \ + createdb --encoding UTF8 -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) && \ + psql -h $(DB_HOST) -p $(DB_PORT) -U $(DBI_LOGIN) $(DB_NAME) < create_lang.sql && \ + perl -w -I../lib initdb.pl force_init_sql=1; \ + elif [ "$$DB_STATE" = "present" ]; then \ echo "Update database"; \ perl -w -I../lib updatedb.pl configxml=$(DESTDIR)$(INSTALL_DIR)/conf/Config.xml; \ + elif [ "$$DB_STATE" = "noserver" ]; then \ + echo "ERROR: Cannot connect to the database server!"; \ fi - clean: rm -f *~ diff --git a/sql/schema_base.sql b/sql/schema_base.sql index b7d8cc2..88d5e2d 100644 --- a/sql/schema_base.sql +++ b/sql/schema_base.sql @@ -429,10 +429,6 @@ CREATE OR REPLACE FUNCTION check_group_base_default_profile_id () RETURNS trigge END; ' LANGUAGE 'plpgsql'; -CREATE TRIGGER m_group_base_default_profile_id_check - BEFORE DELETE ON m_profile FOR EACH ROW - EXECUTE PROCEDURE check_group_base_default_profile_id (); - CREATE OR REPLACE FUNCTION check_group_base_mioga_id () RETURNS trigger AS ' DECLARE @@ -839,6 +835,10 @@ create table m_profile ( ); create unique index m_profile_ident_group_index on m_profile (ident, group_id); +CREATE TRIGGER m_group_base_default_profile_id_check + BEFORE DELETE ON m_profile FOR EACH ROW + EXECUTE PROCEDURE check_group_base_default_profile_id (); + -- -- Add referencial integrity on default_profile_id in m_group_base diff --git a/sql/testdb.pl b/sql/testdb.pl new file mode 100755 index 0000000..1952891 --- /dev/null +++ b/sql/testdb.pl @@ -0,0 +1,64 @@ +#!/usr/bin/perl -w + +# Tests the availability of the Mioga2 database. +# Returns on stdout one of: +# 'present' - The Mioga2 database has been found and contains data. +# 'empty' - The Mioga2 database exists but the table "m_mioga" is empty or nonexistent. +# 'nodb' - There is no Mioga2 database but the database server is working fine +# (i.e. one can try to create the database) +# 'noserver' - Connection to the database server failed. + +# This has been written for Mioga2/SlapOS, to avoid overwriting the database +# when re-instantiating the Apache/mod_perl partition. + +use strict; +use lib "../lib"; + +use Data::Dumper; +use DBI; +use Error qw(:try); +use Mioga2::Exception::DB; +use Mioga2::MiogaConf; + +# TODO: get this through a parameter? +# my $configxml = "../conf/Config.xml"; +my $miogaconf = "../web/conf/Mioga.conf"; + +my $result = 'undefined'; +try { + my $config = new Mioga2::MiogaConf($miogaconf); + my $dbh = $config->GetDBH(); + my $sql = 'SELECT COUNT(*) FROM m_mioga'; + my $sth = $dbh->prepare($sql); + my $exec_result = $sth->execute(); + if (not defined($exec_result)) { + throw Mioga2::Exception::DB("testdb.pl 0", $sth->err, $sth->errstr, $sql); + } + my $res = $sth->fetchrow_arrayref(); + if (not defined($res)) { + throw Mioga2::Exception::DB("testdb.pl 1", $sth->err, $sth->errstr, $sql); + } + my $count = $res->[0]; + if (not defined($count)) { + throw Mioga2::Exception::DB("testdb.pl 2", $sth->err, $sth->errstr, $sql); + } elsif ($count == 0) { + $result = 'empty'; + } else { + $result = 'present'; + } +} catch Mioga2::Exception::DB with { + my $err = shift; + my $errstr = $err->getDBerrstr(); + if ($errstr =~ m#database "mioga2" does not exist#) { + $result = 'nodb'; + } elsif ($errstr =~ m#relation "m_mioga" does not exist#) { + $result = 'empty'; + } else { + $result = 'noserver'; + } +} otherwise { + my $err = shift; + $result = 'noserver'; +}; + +print $result; diff --git a/sql/updatedb.pl b/sql/updatedb.pl index 67921e7..bb4db1a 100644 --- a/sql/updatedb.pl +++ b/sql/updatedb.pl @@ -25,7 +25,7 @@ foreach my $var qw(configxml miogaconf timezonexml dir) { my $config = new Mioga2::MiogaConf($miogaconf); -my $conf = new MiogaConf( dir => $dir, config => $configxml); +my $conf = new MiogaConf( dir => $dir, config => $configxml, force_init_sql => 0); $conf->Install($config); diff --git a/web/Makefile b/web/Makefile index 66af45f..9649a02 100644 --- a/web/Makefile +++ b/web/Makefile @@ -16,11 +16,11 @@ all :: install :: - if [ $(INIT_SQL) = 'yes' -a -d $(INSTALL_DIR) ] ; \ - then \ - su - $(POSTGRES_USER) -c "pg_dump -b -Ft --column-inserts $(DB_NAME) | gzip" > ${INSTALL_DIR}/db_dump.tar.gz ; \ - mv $(INSTALL_DIR) $(BACKUP_DIR) ; \ - fi +# if [ $(INIT_SQL) = 'yes' -a -d $(INSTALL_DIR) ] ; \ +# then \ +# su - $(POSTGRES_USER) -c "pg_dump -b -Ft --column-inserts $(DB_NAME) | gzip" > ${INSTALL_DIR}/db_dump.tar.gz ; \ +# mv $(INSTALL_DIR) $(BACKUP_DIR) ; \ +# fi mkdir -p $(TMP_DIR) mkdir -p $(DESTDIR)$(INSTALL_DIR)/$(INSTANCE_IDENT)/$(MIOGA_FILES) diff --git a/web/conf/Makefile b/web/conf/Makefile index 1573e5c..189f2fd 100644 --- a/web/conf/Makefile +++ b/web/conf/Makefile @@ -14,5 +14,6 @@ install: # is done in ../Makefile clean: + echo "VHH DEBUG: web/conf make clean, deleting apache/ !" rm -Rf apache Mioga.conf .memdump diff --git a/web/conf/startup.pl b/web/conf/startup.pl index a9dc968..6558061 100644 --- a/web/conf/startup.pl +++ b/web/conf/startup.pl @@ -29,6 +29,7 @@ use MIME::Entity (); use MIME::Parser (); use MIME::QuotedPrint (); use MiogaConf (); +use Net::INET6Glue::INET_is_INET6; use Net::LDAP (); use Parse::Yapp::Driver (); use Storable (); diff --git a/web/skel/Makefile b/web/skel/Makefile index e604e7d..fbaad2d 100644 --- a/web/skel/Makefile +++ b/web/skel/Makefile @@ -33,7 +33,7 @@ fr_FR : $(SRC_FR_FILES) install: rsync $(RSYNC_OPTS) $(SUBDIRS) $(DESTDIR)$(INSTALL_DIR)/conf/skel/ # Update instance default skeletons - for i in `mioga2_info.pl --conf=$(DESTDIR)$(INSTALL_DIR)/conf/Mioga.conf instances`; do if [ ! -d /var/lib/Mioga2/$$i/MiogaFiles/skel/ ]; then mkdir $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; fi; cp -R $(DESTDIR)$(INSTALL_DIR)/conf/skel/* $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; done +# for i in `mioga2_info.pl --conf=$(DESTDIR)$(INSTALL_DIR)/conf/Mioga.conf instances`; do if [ ! -d /var/lib/Mioga2/$$i/MiogaFiles/skel/ ]; then mkdir $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; fi; cp -R $(DESTDIR)$(INSTALL_DIR)/conf/skel/* $(DESTDIR)$(INSTALL_DIR)/$$i/MiogaFiles/skel/; done clean: rm -rf $(SUBDIRS) diff --git a/web/skel/src/en_US/group/50-standard.xml b/web/skel/src/en_US/group/50-standard.xml index 6cf89e5..e1ef140 100644 --- a/web/skel/src/en_US/group/50-standard.xml +++ b/web/skel/src/en_US/group/50-standard.xml @@ -12,7 +12,6 @@ <applications> <application ident="AnimGroup" active="1"/> <application ident="Magellan" active="1"/> - <application ident="Mermoz" active="1"/> <application ident="Organizer"/> <application ident="Contact"/> <application ident="Tasks"/> @@ -38,9 +37,6 @@ <application ident="Magellan"> <all_functions/> </application> - <application ident="Mermoz"> - <all_functions/> - </application> <application ident="Portal"> <all_functions/> </application> @@ -53,10 +49,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - <function>Standard</function> - </application> <application ident="Portal"> <function>Portal</function> </application> @@ -69,9 +61,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - </application> <application ident="Portal"> <function>Portal</function> </application> diff --git a/web/skel/src/en_US/group/60-admin.xml b/web/skel/src/en_US/group/60-admin.xml index c73b700..d3f368b 100644 --- a/web/skel/src/en_US/group/60-admin.xml +++ b/web/skel/src/en_US/group/60-admin.xml @@ -12,7 +12,6 @@ <applications> <application ident="AnimGroup" active="1"/> <application ident="Magellan" active="1"/> - <application ident="Mermoz" active="1"/> <application ident="Colbert" active="1"/> <application ident="Organizer"/> <application ident="Contact"/> @@ -39,9 +38,6 @@ <application ident="Magellan"> <all_functions/> </application> - <application ident="Mermoz"> - <all_functions/> - </application> <application ident="Colbert"> <all_functions/> </application> @@ -57,10 +53,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - <function>Standard</function> - </application> <application ident="Colbert"> <function>UsersWrite</function> <function>GroupsWrite</function> @@ -79,9 +71,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - </application> <application ident="Colbert"> <function>UsersRead</function> <function>GroupsRead</function> diff --git a/web/skel/src/en_US/instance/50-standard.xml b/web/skel/src/en_US/instance/50-standard.xml index cdb1e88..82a125b 100644 --- a/web/skel/src/en_US/instance/50-standard.xml +++ b/web/skel/src/en_US/instance/50-standard.xml @@ -102,10 +102,6 @@ </application> <application ident="MailingList"> </application> - <application ident="Mermoz"> - <all_users/> - <all_groups/> - </application> <application ident="Narkissos"> <all_users/> </application> diff --git a/web/skel/src/en_US/user/50-standard.xml b/web/skel/src/en_US/user/50-standard.xml index c8983bb..256400d 100644 --- a/web/skel/src/en_US/user/50-standard.xml +++ b/web/skel/src/en_US/user/50-standard.xml @@ -92,7 +92,6 @@ <application ident="FileBrowser"/> <application ident="Portal"/> <application ident="Search" active="1"/> - <application ident="Mermoz"/> <application ident="RSS" active="1"/> </applications> diff --git a/web/skel/src/en_US/user/60-admin.xml b/web/skel/src/en_US/user/60-admin.xml index 9083b6f..e246d19 100644 --- a/web/skel/src/en_US/user/60-admin.xml +++ b/web/skel/src/en_US/user/60-admin.xml @@ -101,7 +101,6 @@ <application ident="FileBrowser"/> <application ident="Portal"/> <application ident="Search" active="1"/> - <application ident="Mermoz"/> <application ident="RSS" active="1"/> </applications> diff --git a/web/skel/src/fr_FR/group/50-standard.xml b/web/skel/src/fr_FR/group/50-standard.xml index 954f71d..dfc79b1 100644 --- a/web/skel/src/fr_FR/group/50-standard.xml +++ b/web/skel/src/fr_FR/group/50-standard.xml @@ -35,9 +35,6 @@ <!-- Le navigateur de fichiers est accessible et actif. --> <application ident="Magellan" active="1"/> - <!-- L'application de rédaction d'e-mails est accessible et active. --> - <application ident="Mermoz" active="1"/> - <!-- Le portail est accessible et actif. --> <application ident="Portal" active="1"/> @@ -77,11 +74,6 @@ <all_functions/> </application> - <!-- Le profil "Animation" donne accès à toutes les fonctions de l'application Mermoz d'envoi d'e-mail. --> - <application ident="Mermoz"> - <all_functions/> - </application> - <!-- Le profil "Animation" donne accès à toutes les fonctions du portail de groupe. --> <application ident="Portal"> <all_functions/> @@ -102,12 +94,6 @@ <function>Read</function> </application> - <!-- Le profil "Membre" donne accès uniquement à l'envoi d'e-mail au groupe ou indépendamment aux différentes équipes du groupe via l'application d'envoi d'e-mail Mermoz. --> - <application ident="Mermoz"> - <function>Base</function> - <function>Standard</function> - </application> - <!-- Le profil "Membre" donne accès uniquement à la consultation du portail de groupe. --> <application ident="Portal"> <function>Portal</function> @@ -128,11 +114,6 @@ <function>Read</function> </application> - <!-- Le profil "Invité" donne accès uniquement à l'envoi d'e-mail au groupe via l'application d'envoi d'e-mail Mermoz. --> - <application ident="Mermoz"> - <function>Base</function> - </application> - <!-- Le profil "Invité" donne accès uniquement à la consultation du portail de groupe. --> <application ident="Portal"> <function>Portal</function> @@ -151,6 +132,7 @@ <space type="private"> <!-- La balise "acls" contient les définitions de droits d'accès à la racine de l'espace privé du groupe. --> + <acls> <!-- Les profils "Animation" et "Membre" ont accès en lecture et écriture. --> diff --git a/web/skel/src/fr_FR/group/60-admin.xml b/web/skel/src/fr_FR/group/60-admin.xml index d9bd724..1c97ca5 100644 --- a/web/skel/src/fr_FR/group/60-admin.xml +++ b/web/skel/src/fr_FR/group/60-admin.xml @@ -12,7 +12,6 @@ <applications> <application ident="AnimGroup" active="1"/> <application ident="Magellan" active="1"/> - <application ident="Mermoz" active="1"/> <application ident="Colbert" active="1"/> <application ident="Organizer"/> <application ident="Contact"/> @@ -39,9 +38,6 @@ <application ident="Magellan"> <all_functions/> </application> - <application ident="Mermoz"> - <all_functions/> - </application> <application ident="Colbert"> <all_functions/> </application> @@ -57,10 +53,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - <function>Standard</function> - </application> <application ident="Colbert"> <function>UsersWrite</function> <function>GroupsWrite</function> @@ -79,9 +71,6 @@ <application ident="Magellan"> <function>Read</function> </application> - <application ident="Mermoz"> - <function>Base</function> - </application> <application ident="Colbert"> <function>UsersRead</function> <function>GroupsRead</function> diff --git a/web/skel/src/fr_FR/instance/50-standard.xml b/web/skel/src/fr_FR/instance/50-standard.xml index 34a8536..f7d1eb1 100644 --- a/web/skel/src/fr_FR/instance/50-standard.xml +++ b/web/skel/src/fr_FR/instance/50-standard.xml @@ -215,12 +215,6 @@ <application ident="MailingList"> </application> - <!-- L'application d'envoi d'e-mail est accessible à tous les utilisateurs et à tous les groupes. --> - <application ident="Mermoz"> - <all_users/> - <all_groups/> - </application> - <!-- L'application de gestion des données personnelles est accessible à tous les utilisateurs. --> <application ident="Narkissos"> <all_users/> diff --git a/web/skel/src/fr_FR/user/50-standard.xml b/web/skel/src/fr_FR/user/50-standard.xml index c7da5e8..d07b180 100644 --- a/web/skel/src/fr_FR/user/50-standard.xml +++ b/web/skel/src/fr_FR/user/50-standard.xml @@ -138,7 +138,6 @@ <!-- L'afficheur de fichiers, le portail utilisateur et l'application d'envoi d'e-mails Mermoz sont accessible mais ne sont pas actives. L'utilisateur pourra les activer s'il le souhaite. --> <application ident="FileBrowser"/> <application ident="Portal"/> - <application ident="Mermoz"/> </applications> diff --git a/web/skel/src/fr_FR/user/60-admin.xml b/web/skel/src/fr_FR/user/60-admin.xml index afff18d..4d4df04 100644 --- a/web/skel/src/fr_FR/user/60-admin.xml +++ b/web/skel/src/fr_FR/user/60-admin.xml @@ -101,7 +101,6 @@ <application ident="FileBrowser"/> <application ident="Portal"/> <application ident="Search" active="1"/> - <application ident="Mermoz"/> <application ident="RSS" active="1"/> </applications>