From 18603c5d947cd16dc86de8854a2c80ef2bd1843e Mon Sep 17 00:00:00 2001 From: lars Date: Sun, 8 Jan 2006 15:36:35 +0000 Subject: [PATCH] fixed static sub call improved detection of ezmlm-idx directory --- Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm | 98 ++++++++++++++++++-------- Ezmlm/tags/Ezmlm-0.07/Makefile.PL | 10 ++- Ezmlm/tags/Ezmlm-0.07/test.pl | 12 ++-- Ezmlm/tags/packages/Ezmlm-0.07.tar.gz | Bin 14405 -> 14776 bytes 4 files changed, 82 insertions(+), 38 deletions(-) diff --git a/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm b/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm index 3df563a..28c6a98 100644 --- a/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm +++ b/Ezmlm/tags/Ezmlm-0.07/Ezmlm.pm @@ -401,7 +401,14 @@ sub isdigest { sub getpart { my($self, $part) = @_; my(@contents, $content); - if(open(PART, "<$self->{'LIST_NAME'}/$part")) { + # check for the file in the list directory first + my $filename = $self->{'LIST_NAME'} . "/$part"; + # check for default file in config directory, if necessary + # BEWARE: get_config_dir and get_lang may _not_ cause an eternal loop :) + $filename = $self->get_config_dir() . '/' . $self->get_lang() . "/$part" + if (!(-e "$filename") && (get_version() >= 5) && + ($part ne 'conf-etc') && ($part ne 'conf-lang')); + if (open(PART, "<$filename")) { while() { chomp($contents[$#contents++] = $_); $content .= $_; @@ -432,9 +439,9 @@ sub setpart { # == get the configuration directory for this list (idx >= 5.0) == # return '/etc/ezmlm' for idx < 5.0 sub get_config_dir { - my ($self) = shift; + my $self = shift; my $conf_dir; - if (($self->_get_version() >= 5) && (-e "$self->{'LIST_NAME'}/conf-etc")) { + if ((get_version() >= 5) && (ref $self) && (-e "$self->{'LIST_NAME'}/conf-etc")) { chomp($conf_dir = $self->getpart('conf-etc')); } else { $conf_dir = '/etc/ezmlm'; @@ -446,7 +453,7 @@ sub get_config_dir { # return without error for idx < 5.0 sub set_config_dir { my ($self, $conf_dir) = @_; - return (0==0) if ($self->_get_version() < 5); + return (0==0) if (get_version() < 5); $self->setpart('conf-etc', "$conf_dir"); } @@ -454,16 +461,20 @@ sub set_config_dir { # == get list of available languages (for idx >= 5.0) == # return empty list for idx < 5.0 sub get_available_languages { - my ($self) = shift; + my $self = shift; my @langs = (); - return @langs if ($self->_get_version() < 5); + return @langs if (get_version() < 5); - $self->_seterror(undef); + $self->_seterror(undef) if (ref $self); # check for language directories my $conf_dir; - ($self->_seterror(-1, 'could not retrieve configuration directory') && return 0) - unless ($conf_dir = $self->get_config_dir()); + if (ref $self) { + ($self->_seterror(-1, 'could not retrieve configuration directory') && return 0) + unless ($conf_dir = $self->get_config_dir()); + } else { + $conf_dir = get_config_dir(); + } if (opendir DIR, "$conf_dir") { my @dirs; @dirs = grep !/^\./, readdir DIR; @@ -474,8 +485,8 @@ sub get_available_languages { } return @langs; } else { - $self->_seterror(-1, 'could not access configuration directory'); - return 0; + $self->_seterror(-1, 'could not access configuration directory') if (ref $self); + return undef; } } @@ -485,7 +496,7 @@ sub get_available_languages { sub get_lang { my ($self) = shift; my $lang; - return '' if ($self->_get_version() < 5); + return '' if (get_version() < 5); if (-e "$self->{'LIST_NAME'}/conf-lang") { chomp($lang = $self->getpart('conf-lang')); } else { @@ -499,8 +510,13 @@ sub get_lang { # return without error for idx < 5.0 sub set_lang { my ($self, $lang) = @_; - return (0==0) if ($self->_get_version() < 5); - $self->setpart('conf-lang', "$lang"); + return (0==0) if (get_version() < 5); + if ($lang eq 'default') { + return 1 if (unlink "$self->{'LIST_NAME'}/conf-lang"); + } else { + return 1 if ($self->setpart('conf-lang', "$lang")); + } + return 0; } @@ -525,13 +541,17 @@ sub get_available_text_files { } # default text files (only idx >= 5.0) - if (($self->_get_version() >= 5) && (opendir GLOBDIR, $self->get_config_dir . '/' . $self->get_lang())) { - my @global_files = grep !/^\./, readdir GLOBDIR; - closedir GLOBDIR; - foreach $item (@global_files) { - unless ($seen{$item}) { - push (@files, $item); - $seen{$item} = 1; + if (get_version() >= 5) { + my $dirname = $self->get_config_dir . '/' . $self->get_lang() . '/text'; + $dirname = $self->get_config_dir . '/default/text' unless (-e $dirname); + if (opendir GLOBDIR, $dirname) { + my @global_files = grep !/^\./, readdir GLOBDIR; + closedir GLOBDIR; + foreach $item (@global_files) { + unless ($seen{$item}) { + push (@files, $item); + $seen{$item} = 1; + } } } } @@ -550,8 +570,9 @@ sub get_text_content { if (-e "$self->{'LIST_NAME'}/text/$textfile") { return $self->getpart("text/$textfile"); - } elsif ($self->_get_version >= 5) { + } elsif (get_version() >= 5) { my $filename = $self->get_config_dir() . '/' . $self->get_lang() . "/text/$textfile"; + $filename = "/etc/ezmlm/default/$textfile" unless (-e "$filename"); my @contents; my $content; if (open(PART, "<$filename")) { @@ -580,12 +601,14 @@ sub get_text_content { sub set_text_content { my ($self, $textfile, @content) = @_; mkdir "$self->{'LIST_NAME'}/text" unless (-e "$self->{'LIST_NAME'}/text"); - $self->setpart("text/$textfile", @content); + return 1 if ($self->setpart("text/$textfile", @content)); + return 0; } # == check if specified text file is customized or default (for idx >= 5.0) == # return whether the text file exists in the list's directory (false) or not (true) +# empty filename returns false sub is_text_default { my ($self, $textfile) = @_; return (0==1) if ($textfile eq ''); @@ -596,17 +619,19 @@ sub is_text_default { } } + # == remove non-default text file (for idx >= 5.0) == # return without error for idx < 5 # otherwise: remove customized text file from the list's directory sub reset_text { my ($self, $textfile) = @_; - return if ($self->_get_version() < 5); + return if (get_version() < 5); return if ($textfile eq ''); return if ($textfile =~ /[^\w_\.-]/); return if ($self->is_text_default($textfile)); ($self->_seterror(-1, "could not remove customized text file ($textfile)") && return 0) unless unlink("$self->{'LIST_NAME'}/text/$textfile"); + return 1; } @@ -623,12 +648,12 @@ sub errno { # == Test the compatiblity of the module == sub check_version { - my($self) = @_; + my $self = shift; my $version = `$EZMLM_BASE/ezmlm-make -V 2>&1`; - $self->_seterror(undef); + $self->_seterror(undef) if (ref $self); # ezmlm-idx is necessary - if ($self->_get_version() >= 4) { + if (get_version() >= 4) { return 0; } else { return $version; @@ -641,11 +666,9 @@ sub check_version { # 3 => ezmlm v0.53 # 4 => ezmlm-idx v0.4* # 5 => ezmlm-idx v5.* -sub _get_version { - my($self) = @_; +sub get_version { my ($ezmlm, $idx); my $version = `$EZMLM_BASE/ezmlm-make -V 2>&1`; - $self->_seterror(undef); $version = $1 if ($version =~ m/^[^:]*:\s+(.*)$/); $ezmlm = $1 if ($version =~ m/ezmlm-([\d\.]+)$/); @@ -1027,10 +1050,13 @@ system-wide default text file, if there is no customized text file for this list =head2 Change the list's settings (for ezmlm-idx >= 5.0) + Mail::Ezmlm->get_config_dir; $list->get_config_dir; $list->set_config_dir('/etc/ezmlm-local'); -These function access the file 'conf-etc' in the mailing list's directory. +These function access the file 'conf-etc' in the mailing list's directory. The +static function always returns the default configuration directory of ezmlm-idx +(/etc/ezmlm). $list->get_available_languages; $list->get_lang; @@ -1041,6 +1067,16 @@ for automatic replies of ezmlm-idx (v5.0 or higher, the configured language is s in 'conf-lang' within the mailing list's directory). Customized files (in the 'text' directory of a mailing list directory) override the default language setting. +=head2 Get the installed version of ezmlm + + Mail::Ezmlm->get_version; + +The result is one of the following: + 0 - unknown + 3 - ezmlm 0.53 + 4 - ezmlm-idx 0.4xx + 5 - ezmlm-idx 5.x + =head2 Creating MySQL tables: $list->createsql(); diff --git a/Ezmlm/tags/Ezmlm-0.07/Makefile.PL b/Ezmlm/tags/Ezmlm-0.07/Makefile.PL index 7e6f918..d0d5804 100644 --- a/Ezmlm/tags/Ezmlm-0.07/Makefile.PL +++ b/Ezmlm/tags/Ezmlm-0.07/Makefile.PL @@ -34,9 +34,17 @@ ezmlm-make, ezmlm-sub, etc). EOM *prompt = \&ExtUtils::MakeMaker::prompt; + + # guess default + $ezmlm_path = '/usr/local/bin'; + $ezmlm_path = '/usr/local/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/local/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); + $ezmlm_path = '/usr/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); foreach (1..10) { - $ezmlm_path = prompt('Ezmlm binary directory?', '/usr/local/bin'); + $ezmlm_path = prompt('Ezmlm binary directory?', "$ezmlm_path"); last if (-e "$ezmlm_path/ezmlm-make"); print "I can't find $ezmlm_path/ezmlm-make. Please try again\n"; if (! -e "$ezmlm_path/ezmlm-make") { diff --git a/Ezmlm/tags/Ezmlm-0.07/test.pl b/Ezmlm/tags/Ezmlm-0.07/test.pl index 39b1670..4e0d4ee 100644 --- a/Ezmlm/tags/Ezmlm-0.07/test.pl +++ b/Ezmlm/tags/Ezmlm-0.07/test.pl @@ -148,7 +148,7 @@ if ($list->get_text_content('sub-ok') eq "testing message\n") { } print 'Testing if text file is marked as customized (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { if ($list->is_text_default('sub-ok')) { print 'not ok 12 [', $list->errmsg(), "]\n"; $failed++; @@ -160,7 +160,7 @@ if ($list->_get_version >= 5) { } print 'Testing resetting text files (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { $list->reset_text('sub-ok'); if ($list->is_text_default('sub-ok')) { print "ok 13\n"; @@ -173,7 +173,7 @@ if ($list->_get_version >= 5) { } print 'Testing retrieving available languages (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { my @avail_langs = $list->get_available_languages(); if ($#avail_langs > 0) { print "ok 14\n"; @@ -186,7 +186,7 @@ if ($list->_get_version >= 5) { } print 'Testing changing the configured language (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { my @avail_langs = $list->get_available_languages(); $list->set_lang($avail_langs[$#avail_langs-1]); if ($list->get_lang() eq $avail_langs[$#avail_langs-1]) { @@ -200,7 +200,7 @@ if ($list->_get_version >= 5) { } print 'Testing getting the configuration directory (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { if ($list->get_config_dir() ne '') { print "ok 16\n"; } else { @@ -212,7 +212,7 @@ if ($list->_get_version >= 5) { } print 'Testing changing the configuration directory (only idx >= 5.0): '; -if ($list->_get_version >= 5) { +if ($list->get_version() >= 5) { $list->set_config_dir('/etc/ezmlm-local'); if ($list->get_config_dir() eq '/etc/ezmlm-local') { print "ok 17\n"; diff --git a/Ezmlm/tags/packages/Ezmlm-0.07.tar.gz b/Ezmlm/tags/packages/Ezmlm-0.07.tar.gz index be158760bf9c7bedecd6e467684535be2926eed8..8345eb647f713db2d2d1981d6e223c7891b6873c 100644 GIT binary patch literal 14776 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 SeQuwx@cbWAZoT;c@Bjdnh^OBG literal 14405 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%0A48jbnPb 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 Lj&^{m0Pp|+M3pnx