Revision 0e7795f3
Von Moritz Bunkus vor fast 13 Jahren hinzugefügt
SL/Form.pm | ||
---|---|---|
1114 | 1114 |
} |
1115 | 1115 |
|
1116 | 1116 |
my $result; |
1117 |
my $command_formatter = sub { |
|
1118 |
my ($out_mode, $out) = @_; |
|
1119 |
return $out_mode eq '|-' ? SL::Template::create(type => 'ShellCommand', form => $self)->parse($out) : $out; |
|
1120 |
}; |
|
1117 | 1121 |
|
1118 | 1122 |
if ($self->{OUT}) { |
1123 |
$self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT}); |
|
1119 | 1124 |
open(OUT, $self->{OUT_MODE}, $self->{OUT}) or $self->error("error on opening $self->{OUT} with mode $self->{OUT_MODE} : $!"); |
1120 | 1125 |
} else { |
1121 | 1126 |
*OUT = ($::dispatcher->get_standard_filehandles)[1]; |
... | ... | |
1200 | 1205 |
#print(STDERR "OUT $self->{OUT}\n"); |
1201 | 1206 |
for my $i (1 .. $self->{copies}) { |
1202 | 1207 |
if ($self->{OUT}) { |
1208 |
$self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT}); |
|
1209 |
|
|
1203 | 1210 |
open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!"); |
1204 | 1211 |
print OUT $_ while <IN>; |
1205 | 1212 |
close OUT; |
SL/Template.pm | ||
---|---|---|
16 | 16 |
use SL::Template::LaTeX; |
17 | 17 |
use SL::Template::OpenDocument; |
18 | 18 |
use SL::Template::PlainText; |
19 |
use SL::Template::ShellCommand; |
|
19 | 20 |
use SL::Template::XML; |
20 | 21 |
|
21 | 22 |
sub create { |
SL/Template/ShellCommand.pm | ||
---|---|---|
1 |
package SL::Template::ShellCommand; |
|
2 |
|
|
3 |
use parent qw(SL::Template::LaTeX); |
|
4 |
|
|
5 |
use strict; |
|
6 |
|
|
7 |
use String::ShellQuote; |
|
8 |
|
|
9 |
sub new { |
|
10 |
my $type = shift; |
|
11 |
|
|
12 |
return $type->SUPER::new(@_); |
|
13 |
} |
|
14 |
|
|
15 |
sub substitute_vars { |
|
16 |
my ($self, $text, @indices) = @_; |
|
17 |
|
|
18 |
my $form = $self->{"form"}; |
|
19 |
|
|
20 |
while ($text =~ /$self->{substitute_vars_re}/) { |
|
21 |
my ($tag_pos, $tag_len) = ($-[0], $+[0] - $-[0]); |
|
22 |
my ($var, @option_list) = split(/\s+/, $1); |
|
23 |
my %options = map { ($_ => 1) } @option_list; |
|
24 |
|
|
25 |
my $value = $self->_get_loop_variable($var, 0, @indices); |
|
26 |
$value = $form->parse_amount({ numberformat => $::myconfig{output_numberformat} || $::myconfig{numberformat} }, $value) if $options{NOFORMAT}; |
|
27 |
$value = $self->format_string($value); # Don't allow NOESCAPE for arguments passed to shell commands. |
|
28 |
|
|
29 |
substr($text, $tag_pos, $tag_len, $value); |
|
30 |
} |
|
31 |
|
|
32 |
return $text; |
|
33 |
} |
|
34 |
|
|
35 |
sub format_string { |
|
36 |
my ($self, $variable) = @_; |
|
37 |
|
|
38 |
return shell_quote_best_effort($variable); |
|
39 |
} |
|
40 |
|
|
41 |
sub get_mime_type { |
|
42 |
return "text/plain"; |
|
43 |
} |
|
44 |
|
|
45 |
sub parse { |
|
46 |
my ($self, $text) = @_; |
|
47 |
|
|
48 |
return $self->parse_block($text); |
|
49 |
} |
|
50 |
|
|
51 |
1; |
doc/dokumentenvorlagen-und-variablen.html | ||
---|---|---|
51 | 51 |
<li><a href="#variablen_ausgeben">Variablen ausgeben</a> |
52 | 52 |
</li> |
53 | 53 |
|
54 |
<li><a href="#verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a> |
|
55 |
</li> |
|
56 |
|
|
54 | 57 |
<li><a href="dokumentenvorlagen-und-variablen.html#tag_style"> |
55 | 58 |
Anfang und Ende der Tags verändern</a></li> |
56 | 59 |
|
... | ... | |
229 | 232 |
zum Inhaltsverzeichnis</a></small><br> |
230 | 233 |
<hr> |
231 | 234 |
|
235 |
<h2><a name="verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a></h2> |
|
236 |
|
|
237 |
<p> |
|
238 |
In der Admininstration können Drucker definiert werden. Auch im dort |
|
239 |
eingebbaren Druckbefehl können die hier aufgelisteten Variablen und |
|
240 |
Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach den |
|
241 |
Regeln der gängigen Shells formatiert, sodass Sonderzeichen |
|
242 |
wie <code>`...`</code> nicht zu unerwünschtem Verhalten führen. |
|
243 |
</p> |
|
244 |
|
|
245 |
<p> |
|
246 |
Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl, für |
|
247 |
das die Telefonnummer eines Ansprechpartners als Teil der |
|
248 |
Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das |
|
249 |
z.B. wie folgt aussehen: |
|
250 |
</p> |
|
251 |
|
|
252 |
<p> |
|
253 |
<code>send_fax --number <%if cp_phone2%><%cp_phone2%><%else%><%cp_phone1%><%end%></code> |
|
254 |
</p> |
|
255 |
|
|
256 |
<small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis"> |
|
257 |
zum Inhaltsverzeichnis</a></small><br> |
|
258 |
<hr> |
|
259 |
|
|
232 | 260 |
<h2><a name="tag_style"> |
233 | 261 |
Anfang und Ende der Tags verändern</a></h2> |
234 | 262 |
|
Auch abrufbar als: Unified diff
$::form-Variablen in Druckbefehlen verfügbar machen
Fix für Bugs 1740 und 1761.