From: <de...@de...> - 2006-10-14 23:46:28
|
Author: HaraldJoerg Date: 2006-10-14 06:24:36 -0500 (Sat, 14 Oct 2006) New Revision: 11721 Modified: twiki/branches/MAIN/bin/configure twiki/branches/MAIN/lib/TWiki/Configure/Checkers/BasicSanity.pm twiki/branches/MAIN/lib/TWiki/Configure/Item.pm twiki/branches/MAIN/lib/TWiki/Configure/Load.pm twiki/branches/MAIN/lib/TWiki/Configure/Section.pm twiki/branches/MAIN/lib/TWiki/Configure/UI.pm twiki/branches/MAIN/lib/TWiki/Configure/UIs/Root.pm twiki/branches/MAIN/lib/TWiki/Configure/UIs/Section.pm twiki/branches/MAIN/lib/TWiki/Configure/UIs/Value.pm twiki/branches/MAIN/lib/TWiki/Configure/Value.pm Log: Item2977: Several changes were needed. * factored out TWiki::Configure::UI::collectMessages * Consistently moved attributes =warnings= and =errors= from the UIs to the items (only the latter are hierarchical) * enabled printing of Total error/warning summary * tuned formatting of error/warning summary * moved getDepth from TWiki::Configure::Section to TWiki::Configure::Item * removed some (but not all) problems with running under -w * killed unused $root and $eroot in configure * re-initialized item $stub for each of the checkers for correct error count * Removed some =use <module>= before =use base '<module>'= (=use base= implies =use=) Modified: twiki/branches/MAIN/bin/configure =================================================================== --- twiki/branches/MAIN/bin/configure 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/bin/configure 2006-10-14 11:24:36 UTC (rev 11721) @@ -311,10 +311,7 @@ # use this script recursively to serve the icon image print CGI::img({src=>$scriptName.'?action=image;image=T-logo-140x40-t.gif;type=image/gif', class=>'logo', alt=>'TWiki', width=>'140', height=>'40'}); -my $root = new TWiki::Configure::Root(); my $stub = new TWiki::Configure::Item(); -$root->addChild($stub); - my $sanityUI = TWiki::Configure::UI::loadChecker('BasicSanity', $stub); print $sanityUI->ui(); @@ -434,20 +431,17 @@ print CGI::h1( 'Configuration'); - # Use a common root for the first three sections, because - # they will never be saved - my $eroot = new TWiki::Configure::Root(); + # The first three sections go without a root my $stub = new TWiki::Configure::Item(); - $eroot->addChild($stub); my $eui = TWiki::Configure::UI::loadChecker('Environment', $stub); # See if this platform has special detection or checking requirements # (most don't) - $eroot->addChild($stub = new TWiki::Configure::Item()); + $stub = new TWiki::Configure::Item(); my $osui = TWiki::Configure::UI::loadChecker( $Config::Config{osname}, $stub); - $eroot->addChild($stub = new TWiki::Configure::Item()); + $stub = new TWiki::Configure::Item(); my $cgiui = TWiki::Configure::UI::loadChecker('CGISetup', $stub); # Use a separate root for the saveable sections @@ -554,7 +548,7 @@ if ($TWiki::Configure::UI::toterrors || $TWiki::Configure::UI::totwarnings) { my $mess = 'Total: '.$TWiki::Configure::UI::toterrors.' error'. - ($TWiki::Configure::UI::toterrors==1?'':'s'). + ($TWiki::Configure::UI::toterrors==1?'':'s').', '. $TWiki::Configure::UI::totwarnings.' warning'. ($TWiki::Configure::UI::totwarnings==1?'':'s'); print CGI::div($mess); Modified: twiki/branches/MAIN/lib/TWiki/Configure/Checkers/BasicSanity.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/Checkers/BasicSanity.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/Checkers/BasicSanity.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -19,8 +19,6 @@ package TWiki::Configure::Checkers::BasicSanity; -use TWiki::Configure::Checker; - use base 'TWiki::Configure::Checker'; sub new { Modified: twiki/branches/MAIN/lib/TWiki/Configure/Item.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/Item.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/Item.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -15,9 +15,13 @@ # # As per the GPL, removal of this notice is prohibited. # +# ====================================================================== # Abstract base class of all configuration components. A configuration # component may be a collection item (a ConfigSection) or an individual Value. - +# +# Objects of this class are intended to form a tree with references in +# both directions, circular references ahead. But configure isn't +# supposed to be run in a persistent environment anyway. package TWiki::Configure::Item; use strict; @@ -28,10 +32,23 @@ my $this = bless({}, $class); $this->{parent} = undef; $this->{desc} = ''; + $this->{errors} = 0; + $this->{warnings} = 0; return $this; } +sub getDepth { + my $depth = 0; + my $mum = shift; + + while ($mum) { + $depth++; + $mum = $mum->{parent}; + } + return $depth; +} + sub addToDesc { my ($this, $desc) = @_; @@ -42,7 +59,10 @@ die "Implementation required"; } -# Accept an attribute setting for this item (e.g. a key name). + +# Purpose +# Accept an attribute setting for this item (e.g. a key name). +# Sort of a generic write accessor. sub set { my ($this, %params) = @_; foreach my $k (keys %params) { @@ -50,6 +70,13 @@ } } + +# Purpose +# Increase a numeric value, recursing up to a parentless item +# Assumptions +# All item levels have $key defined and initialized +# (intended for use with 'warnings' and 'errors') +# Parents of items are items (or precisely: can inc()) sub inc { my ($this, $key) = @_; @@ -57,6 +84,7 @@ $this->{parent}->inc($key) if $this->{parent}; } + sub getSectionObject { return undef; } Modified: twiki/branches/MAIN/lib/TWiki/Configure/Load.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/Load.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/Load.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -131,11 +131,12 @@ =cut sub readDefaults { - my %read = ( 'TWiki.spec' ); + my %read = ( ); my @errors; eval { do 'TWiki.spec'; + $read{'TWiki.spec'} = $INC{'TWiki.spec'}; }; push(@errors, $@) if ($@); foreach my $dir (@INC) { Modified: twiki/branches/MAIN/lib/TWiki/Configure/Section.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/Section.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/Section.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -20,13 +20,12 @@ package TWiki::Configure::Section; -use TWiki::Configure::Item; - use base 'TWiki::Configure::Item'; sub new { my ($class, $head) = @_; + # SMELL: What is the base object supposed to do with the UI class? my $this = $class->SUPER::new('TWiki::Configure::UIs::Section'); $this->{headline} = $head; Modified: twiki/branches/MAIN/lib/TWiki/Configure/UI.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/UI.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/UI.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -35,8 +35,6 @@ my $this = bless( {}, $class); Carp::confess unless $item; $this->{item} = $item; - $this->{errors} = 0; - $this->{warnings} = 0; return $this; } @@ -110,6 +108,7 @@ } # STATIC Used by a whole bunch of things that just need to show a key-value row +# (called as a method, i.e. with class as first parameter) sub setting { my $this = shift; my $key = shift; @@ -123,14 +122,7 @@ my( $this, $head, $attr, $body ) = @_; my $headText = $head . CGI::span({ class => 'blockLinkAttribute' }, $attr); $body = CGI::start_table({width => '100%', -border => 0, -cellspacing => 0, -cellpadding => 0}).$body.CGI::end_table(); - my $mess = ''; - my $errorsMess = ($this->{errors} > 1) ? ' errors' : ' error'; - my $warningsMess = ($this->{warnings} > 1) ? ' warnings' : ' warning'; - $mess .= CGI::span({class=>'error'}, $this->{errors} . $errorsMess) if $this->{errors}; - if ($this->{errors} && $this->{warnings}) { - $mess .= ' '; - } - $mess .= CGI::span({class=>'warn'}, $this->{warnings} . $warningsMess) if $this->{warnings}; + my $mess = $this->collectMessages($this->{item}); my $anchor = $this->_makeAnchor( $head ); my $id = $anchor; @@ -169,6 +161,7 @@ sub WARN { my $this = shift; $this->{item}->inc('warnings'); + $totwarnings++; return CGI::div(CGI::span({class=>'warn'}, CGI::strong('Warning: ').join("\n",@_))); } @@ -177,6 +170,7 @@ sub ERROR { my $this = shift; $this->{item}->inc('errors'); + $toterrors++; return CGI::div(CGI::span({class=>'error'}, CGI::strong('Error: ').join("\n",@_))); } @@ -232,6 +226,22 @@ return 1; } + +sub collectMessages { + my $this = shift; + my ($item) = @_; + + my $warnings = $item->{warnings} || 0; + my $errors = $item->{errors} || 0; + my $errorsMess = "$errors error" . (($errors > 1) ? 's' : ''); + my $warningsMess = "$warnings warning" . (($warnings > 1) ? 's' : ''); + my $mess = ''; + $mess .= ' ' . CGI::span({class=>'error'}, $errorsMess) if $errors; + $mess .= ' ' . CGI::span({class=>'warn'}, $warningsMess) if $warnings; + + return $mess; +} + sub _encode { my $pass = shift; my @saltchars = ( 'a'..'z', 'A'..'Z', '0'..'9', '.', '/' ); Modified: twiki/branches/MAIN/lib/TWiki/Configure/UIs/Root.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/UIs/Root.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/UIs/Root.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -17,8 +17,6 @@ # package TWiki::Configure::UIs::Root; -use TWiki::Configure::UIs::Section; - use base 'TWiki::Configure::UIs::Section'; # Visit the nodes in a tree of configuration items, and generate Modified: twiki/branches/MAIN/lib/TWiki/Configure/UIs/Section.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/UIs/Section.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/UIs/Section.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -25,8 +25,6 @@ package TWiki::Configure::UIs::Section; -use TWiki::Configure::UI; - use base 'TWiki::Configure::UI'; # depth == 1 is the root @@ -51,14 +49,7 @@ my $linkId = 'blockLink'.$id; my $linkAnchor = $id.'link'; - my $warnings = $section->{warnings} || 0; - my $errors = $section->{errors} || 0; - my $errorsMess = $errors . ' error'. (($errors > 1) ? 's' : ''); - my $warningsMess = $warnings . ' warning'. (($warnings > 1) ? 's' : ''); - my $mess = ''; - $mess .= CGI::span({class=>'error'}, $errorsMess) if $errors; - $mess .= ' ' if ($errors && $warnings); - $mess .= CGI::span({class=>'warn'}, $warningsMess) if $warnings; + my $mess = $this->collectMessages($section); my $guts = "<!-- $depth $section->{headline} -->"; if ($depth == 2) { Modified: twiki/branches/MAIN/lib/TWiki/Configure/UIs/Value.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/UIs/Value.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/UIs/Value.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -21,8 +21,6 @@ package TWiki::Configure::UIs::Value; -use TWiki::Configure::UI; - use base 'TWiki::Configure::UI'; # Generates the appropriate HTML for getting a value to configure the Modified: twiki/branches/MAIN/lib/TWiki/Configure/Value.pm =================================================================== --- twiki/branches/MAIN/lib/TWiki/Configure/Value.pm 2006-10-14 04:05:02 UTC (rev 11720) +++ twiki/branches/MAIN/lib/TWiki/Configure/Value.pm 2006-10-14 11:24:36 UTC (rev 11721) @@ -19,15 +19,13 @@ use strict; -use TWiki::Configure::Item; - use base 'TWiki::Configure::Item'; use TWiki::Configure::Type; # The opts are additional parameters, and by convention may # be a number (for a string length), a comma separated list of values -# (for a select) and may also have an M for mandatory. +# (for a select) and may also have an M for mandatory, or a H for hidden. sub new { my $class = shift; |