quotesite: move supported command list into hash
[quotesite.git] / quotesite / Base.pm
1 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
2 # licensed under GNU GPL v2
3
4 package quotesite::Base;
5
6 use strict;
7 use Data::Dumper;
8
9 sub new {
10     my $class = shift;
11     my $self = {'_DEBUG' => 0, '_OUT' => sub {print shift}};
12
13     bless($self, $class);
14
15     $self->_prepare_parameters();
16
17     return $self;
18 }
19
20 sub error {
21     my $self = shift;
22     my $t;
23
24     $t = sprintf(shift(@_), @_);
25     $t =~ s/%/%%/g;
26     $self->{'_OUT'}($t);
27 }
28
29 sub debug {
30     my $self = shift;
31     my @data = @_;
32
33     $data[0] = "DEBUG: " . $data[0];
34     if ($self->{'_DEBUG'} != 0) {$self->error(@data)};
35 }
36
37 sub mergeconfig {
38     my $self = shift;
39     my $c = shift;
40     my $o;
41
42     return $self->{'_CONFIG'} unless defined($c);
43
44     foreach $o (keys(%{$c->{'option'}})) {
45         if (exists($self->{'_CONFIG'}->{'option'}->{$o})) {
46             $self->{'_CONFIG'}->{'option'}->{$o}->{'content'} = $c->{'option'}->{$o}->{'content'};
47         }
48     }
49
50     return $self->{'_CONFIG'};
51 }
52
53 sub _prepare_parameters {
54     my $self = shift;
55     my $p;
56
57     $self->{'_CONFIG'} = {'option' => {'enabled' => {'content' => '1'}}};
58
59     foreach $p (keys(%{$self->{'_PARAMS'}})) {
60         $self->{'_CONFIG'}->{'option'}->{$p}->{'content'} = $self->{'_PARAMS'}->{$p}->[0];
61     }
62 }
63
64 sub _getval {
65     my $self = shift;
66     my $key = shift;
67     my $val;
68
69     $val = $self->{'_CONFIG'}->{'option'}->{$key}->{'content'};
70     $self->debug('Returning %s=%s', $key, $val);
71
72     return $val;
73 }
74
75 sub setval {
76     my $self = shift;
77     my $key = shift;
78     my $val = shift;
79
80     if (exists($self->{'_CONFIG'}->{'option'}->{$key})) {
81         $self->{'_CONFIG'}->{'option'}->{$key}->{'content'} = $val;
82     } else {
83         $self->error('Module %s does not have a parameter named %s', $self->{'NAME'}, $key);
84     }
85 }
86
87 sub setio {
88     my $self = shift;
89     my $io = shift;
90
91     $self->{'_OUT'} = $io;
92 }
93
94 sub getconfstr {
95     my $self = shift;
96     my $s = 'Options for ' . $self->{'NAME'} . ":\n";
97     my $k;
98     my $p;
99
100     foreach $k (keys(%{$self->{'_CONFIG'}->{'option'}})) {
101         $p = $self->{'_CONFIG'}->{'option'}->{$k}->{'content'};
102         $p =~ s/%/%%/g;
103         $s .= sprintf("  %s: %s", $k, $p);
104         if ($self->{'_CONFIG'}->{'option'}->{$k}->{'content'} eq $self->{'_PARAMS'}->{$k}->[0]) {
105             $s .= " (default)\n";
106         } else {
107             $s .= "\n";
108         }
109     }
110
111     return $s;
112 }
113
114 # Return a list of the parameters supported by the module
115 # Does not return the 'enabled' parameter
116 sub getparamlist {
117     my $self = shift;
118     my $word = shift;
119
120     return grep {$_ ne 'enabled' && /^$word/} keys %{$self->{'_PARAMS'}};
121 }
122
123 # Return a list of valid parameter values, if the parameter has
124 # such a list.
125 sub getparamvalues {
126     my $self = shift;
127     my $param = shift;
128     my $word = shift;
129
130     unless(exists($self->{'_PARAMS'}->{$param}->[2])) {
131         return ();
132     } else {
133         return grep {/^$word/} keys %{$self->{'_PARAMS'}->{$param}->[2]};
134     }
135 }
136
137
138 sub gethelpstr {
139     my $self = shift;
140     my $s = 'Help for ' . $self->{'NAME'} . ":\n";
141     my $k;
142     my $p;
143
144     if (exists($self->{'DESC'})) {
145         $s .= "Description:\n " . $self->{'DESC'};
146     }
147
148     $s .= " Options:\n";
149     foreach $k (keys(%{$self->{'_CONFIG'}->{'option'}})) {
150         $p = $self->{'_PARAMS'}->{$k}->[0];
151         $p =~ s/%/%%/g;
152         if (exists($self->{'_PARAMS'}->{$k}->[2])) {
153             # The parameter has a list of allowed values. Add the keys and their help
154             $s .= sprintf("  %s: %s (default: %s)\n", $k, $self->{'_PARAMS'}->{$k}->[1], $p);
155             foreach (sort keys(%{$self->{'_PARAMS'}->{$k}->[2]})) {
156                 $s .= sprintf("     %s: %s\n", $_, $self->{'_PARAMS'}->{$k}->[2]->{$_});
157             }
158         } else {
159             # The parameter just has a default value and a help text
160             $s .= sprintf("  %s: %s (default: %s)\n", $k, $self->{'_PARAMS'}->{$k}->[1], $p);
161         }
162     }
163
164     return $s;
165 }
166
167 sub setdebug {
168     my $self = shift;
169
170     $self->{'_DEBUG'} = shift;
171 }
172
173 1;