Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 72585c35

Von Moritz Bunkus vor mehr als 12 Jahren hinzugefügt

  • ID 72585c35d48589e072325ffc46c720df080e2ca1
  • Vorgänger c29f804f
  • Nachfolger 8dc39e5b

$::form-Variablen in Druckbefehlen verfügbar machen

Fix für Bugs 1740 und 1761.

Unterschiede anzeigen:

SL/Form.pm
1113 1113
  }
1114 1114

  
1115 1115
  my $result;
1116
  my $command_formatter = sub {
1117
    my ($out_mode, $out) = @_;
1118
    return $out_mode eq '|-' ? SL::Template::create(type => 'ShellCommand', form => $self)->parse($out) : $out;
1119
  };
1116 1120

  
1117 1121
  if ($self->{OUT}) {
1122
    $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
1118 1123
    open(OUT, $self->{OUT_MODE}, $self->{OUT}) or $self->error("error on opening $self->{OUT} with mode $self->{OUT_MODE} : $!");
1119 1124
  } else {
1120 1125
    *OUT = ($::dispatcher->get_standard_filehandles)[1];
......
1199 1204
      #print(STDERR "OUT $self->{OUT}\n");
1200 1205
      for my $i (1 .. $self->{copies}) {
1201 1206
        if ($self->{OUT}) {
1207
          $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
1208

  
1202 1209
          open  OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
1203 1210
          print OUT $_ while <IN>;
1204 1211
          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&auml;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 &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</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&auml;ndern</a></h2>
234 262

  

Auch abrufbar als: Unified diff