Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0e7795f3

Von Moritz Bunkus vor fast 13 Jahren hinzugefügt

  • ID 0e7795f35b2e3f839001a9fdb7e21f4dd4f2f84e
  • Vorgänger 8b6ad9a4
  • Nachfolger 677f9c72

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

Fix für Bugs 1740 und 1761.

Unterschiede anzeigen:

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&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