From: Stefan Schantl Date: Tue, 22 Sep 2020 18:25:08 +0000 (+0200) Subject: ipinfo.cgi: Allow to display multiple flags. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=33975f578d4aefdd5737b4eddc39e033e77d8ad0;p=people%2Fpmueller%2Fipfire-2.x.git ipinfo.cgi: Allow to display multiple flags. Signed-off-by: Stefan Schantl Signed-off-by: Michael Tremer --- diff --git a/config/cfgroot/location-functions.pl b/config/cfgroot/location-functions.pl index b0b8cd0866..2cfe7f908f 100644 --- a/config/cfgroot/location-functions.pl +++ b/config/cfgroot/location-functions.pl @@ -190,10 +190,13 @@ sub get_locations() { return @sorted_locations; } -# Function to check if a given address has a special flag. -sub address_has_flag($) { +# Function to check if a given address has one ore more special flags. +sub address_has_flags($) { my ($address) = @_; + # Array to store the flags of the address. + my @flags; + # Init libloc database handle. my $db_handle = &init(); @@ -206,10 +209,16 @@ sub address_has_flag($) { # Grab the mapped location code for this flag. $mapped_code = $network_flags{$flag}; - # Return the code. - return $mapped_code; + # Add the mapped code to the array of flags. + push(@flags, $mapped_code); } } + + # Sort the array of flags. + @flags = sort(@flags); + + # Return the array of flags. + return @flags; } 1; diff --git a/html/cgi-bin/ipinfo.cgi b/html/cgi-bin/ipinfo.cgi index cce6097ffd..d8cb6c6b76 100644 --- a/html/cgi-bin/ipinfo.cgi +++ b/html/cgi-bin/ipinfo.cgi @@ -64,7 +64,7 @@ if (&General::validip($addr)) { # enumerate location information for IP address... my $db_handle = &Location::Functions::init(); my $ccode = &Location::Functions::lookup_country_code($db_handle, $addr); - my $network_flag = &Location::Functions::address_has_flag($addr); + my @network_flags = &Location::Functions::address_has_flags($addr); # Try to get the continent of the country code. my $continent = &Location::get_continent_code($db_handle, $ccode); @@ -111,12 +111,48 @@ if (&General::validip($addr)) { &Header::openbox('100%', 'left', $addr . " $ccode (" . $hostname . ') : '.$whois_server); # Check if the address has a flag. - if ($network_flag) { - # Get - my $network_flag_name = &Location::Functions::get_full_country_name($network_flag); + if (@network_flags) { + # Get amount of flags for this network. + my $flags_amount = @network_flags; + my $processed_flags; + + # The message string which will be displayed. + my $message_string = "This address is marked as"; + + # Loop through the array of network_flags. + foreach my $network_flag (@network_flags) { + # Increment value of processed flags. + $processed_flags++; + + # Get the network flag name. + my $network_flag_name = &Location::Functions::get_full_country_name($network_flag); + + # Add the flag name to the message string. + $message_string = "$message_string" . " $network_flag_name"; + + # Check if multiple flags are set for this network. + if ($flags_amount gt "1") { + # Check if the the current flag is the next-to-last one. + if ($processed_flags eq $flags_amount - 1) { + $message_string = "$message_string" . " and "; + + # Check if the current flag it the last one. + } elsif ($processed_flags eq $flags_amount) { + # The message is finished add a dot for ending the sentence. + $message_string = "$message_string" . "."; + + # Otherwise add a simple comma to the message string. + } else { + $message_string = "$message_string" . ", "; + } + } else { + # Nothing special to do, simple add a dot to finish the sentence. + $message_string = "$message_string" . "."; + } + } - # Display notice. - print "

This address is marked as $network_flag_name.

\n"; + # Display the generated notice. + print "

$message_string

\n"; print "
\n"; }