[ Pobierz całość w formacie PDF ]
. (Nie ma żadnej gwarancji co do tego, jaka to jest kolejność, gdyż nie jest ona
związana z kolejnością dokonywania wpisów do tej tablicy).
452 foreach $sorted_field (@sorted_fields) {
453
454 # Print the name and value pairs in FORM array.
455
456 if ($ALT_NAME{$sorted_field} && $FORM{$sorted_field}) {
457 $results .= "$ALT_NAME{$sorted_field}:
$FORM{$sorted_field}\n";
458 }
459 elsif ($FORM{$sorted_field}) {
460 $results .= "$sorted_field: $FORM{$sorted_field}\n";
461 }
462 $SORTED_FIELD{$sorted_field} = 1;
463 }
464 $results .= "\n";
Teraz możemy dodać posortowane pola wraz z ich wartościami do zmiennej ul . Linia
452. rozpoczyna pętlę przeglądającą nazwy pól zapamiętanych w tabeli d_ i ld .
W linii 456. sprawdzamy, czy dla przeglądanej zmiennej zdefiniowano nazwę alternatywną
a . f& e a e a a e .
oraz czy zmienna ma zdefiniowaną wartość. Jeśli oba warunki są spełnione, dodajemy
do rezultatu nazwę i wartość zmiennej. Jeśli nie, wtedy w linii 459. sprawdzamy, czy
zmienna ma zdefiniowaną wartość. Jeśli tak, w linii 460. dodajemy domyślną nazwę
zmiennej oraz tę wartość do zmiennej ul . W linii 462. ustawiamy odpowiednie
pole w tablicy asocjacyjnej T D_ l LD oznaczające, że dane pole zostało przetworzo-
ne. (Najwygodniejszą metodą sprawdzenia obecności klucza jest zastosowanie tablicy
asocjacyjnej). W linii 463. kończymy pętlę, a w linii 464. dodajemy do ul dodat-
kową pustą linię do oddzielenia posortowanych pól od kolejnej sekcji.
468 foreach $field_name (keys %FORM) {
469 if (!$SORTED_FIELD{$field_name}) {
470 if ($ALT_NAME{$field_name}) {
471 $results .= "$ALT_NAME{$field_name}:
$FORM{$field_name}\n";
472 }
473 else {
474 $results .= "$field_name: $FORM{$field_name}\n";
475 }
476 }
477 }
478 $results .= "\n" . ('-' x 75) . "\n\n";
Ostatnim krokiem wyprowadzania wartości pól jest sprawdzenie, czy nie pozostały jakieś
pola nie uwzględnione w liście pól posortowanych. W liniach 468. do 477. wykonujemy
pętlę sprawdzającą, czy każde pole z tabeli zostało przetworzone. W linii 468.
rozpoczynamy pętlę, zaś w następnej przeglądamy tablicę asocjacyjną T D_ l LD, aby
stwierdzić, czy dane pole zostało już przetworzone. Jeśli nie, sprawdzamy, czy zdefi-
niowano alternatywną nazwa dla tego pola i dodajemy ją wraz z wartością ul . Jeśli
nie zdefiniowano nazwy alternatywnej, po prostu dodajemy nazwę zmiennej wraz z jej
wartością. W linii 478. po zakończeniu pętli uzupełniamy ul o dodatkowy separator.
482 foreach $env_variable (split(/,/, $CONFIG{'env_report'})) {
483 $results .= "$env_variable: $ENV{$env_variable}\n";
484 }
485 }
Ostatnim krokiem przygotowania domyślnej wiadomości jest dodanie zmiennych śro-
dowiskowych, określonych w zmiennej konfiguracyjnej e _ e . Linia 482. dzieli jej
zawartość na poszczególne nazwy zmiennych środowiskowych, przechodząc kolejno
każdą z nich. (W tej linii skorzystaliśmy z możliwości bezpośredniego przekazywania
wyniku jednej funkcji do innej; rezultat wywołania funkcji split trafia bez pośrednictwa
żadnej tymczasowej zmiennej typu tablicowego do polecenia foreach). W linii 485.
kończymy rozpoczęty wcześniej (w linii 411.) blok warunkowy.
a e a
Jesteśmy teraz gotowi do wysłania wiadomości.
489 if ($CONFIG{'email_template'}
&& &valid_directory($CONFIG{'email_template'})) {
490 $message = $CONFIG{'email_template'};
491 }
492 elsif ($CONFIG{'recipient'} !~ /^none$/i || $CONFIG{'mail_list'}) {
493 $message = $results;
f& a
494 }
Zdefiniowanie zmiennej konfiguracyjnej e a _ e a e oznacza, że chcemy skorzystać
z własnego pliku wzorca do formatowania wiadomości. W przeciwnym razie zostanie
wykorzystany domyślny tekst. W linii 489. sprawdzamy, czy wzorzec został określony
i czy znajduje się we właściwym katalogu. Odbywa się to przez wywołanie procedury
valid_directory, którą zdefiniowano pod koniec programu. Jeśli określono wzorzec,
w linii 490. ustawiamy e a e na nazwę pliku. ( będzie użyte przez procedurę
send_email do rozstrzygnięcia, jaki jest format wysyłanej wiadomości). Jeśli nie w linii
493. ustawiamy jej wartość na domyślny tekst wiadomości.
dn n ni il u li d un i
ni i h n i i . d ni du l
i l n dn li uni li i
id n i l i li n h .
B d i n h d i n n
ni li ni n i
i n i i d ni l .
498 if ($CONFIG{'recipient'} !~ /^none$/i) {
499 if (&send_email($subject, $from, $CONFIG{'recipient'}, $CONFIG{'cc'},
500 $CONFIG{'bcc'}, $message, '', '')) {
501 &error($Error_Message);
502 }
503 }
W liniach 498. do 503. przesyłamy wiadomość pod adresy zdefiniowane polem i i n .
W linii 498. upewniamy się, że pole to ma wartość różną od none, a następnie wywołujemy
procedurę send_email próbując wysłać wiadomość. Jeśli wysłanie się nie powiedzie,
w linii 501. generowany jest komunikat błędu i program kończy pracę.
504 foreach $recipient (split(/,/, $CONFIG{'mail_list'})) {
505 if (&send_email($subject, $from, $recipient, $CONFIG{'cc'},
506 $CONFIG{'bcc'}, $message, '', '')) {
507 &error($Error_Message);
508 }
509 }
W liniach 504. do 509. wysyłamy list na adresy znajdujące się na odpowiednich listach
dystrybucyjnych. W linii 504 rozpoczynamy pętlę kolejno przetwarzającą adresy z listy,
wywołując w liniach 505. i 506. procedurę send_email dla każdego z nich. W przypad-
ku niepowodzenia w linii 507. generujemy komunikat błędu i kończymy pracę programu.
a e e
Kolejna część programu jest bardzo podobna do poprzedniej i powinna być łatwa do
zrozumienia. Zajmujemy się w niej wysłaniem odpowiedzi do odwiedzającego, o ile taka
odpowiedz została określona.
516 if (($CONFIG{'reply_message_template'} ||
$CONFIG{'reply_message_attach'})
a . f& e a e a a e .
517 && $CONFIG{'email'}) {
Odpowiedz chcemy wysyłać jedynie wtedy, gdy odwiedzający udostępnił nam swój adres
e-mailowy oraz określono wzór listu lub gdy zachodzi potrzeba wysłania odwiedzają-
cemu pliku. W liniach 516. i 517. sprawdzamy, czy te warunki zostały spełnione.
a e
I znów musimy zacząć od skonfigurowania kilku zmiennych pomocniczych.
521 $to = $from;
W linii 521. wykorzystujemy fakt, że adres nadawcy odpowiedzi jest taki sam jak adres
[ Pobierz całość w formacie PDF ]