]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
ipinfo.cgi: Allow to display multiple flags.
authorStefan Schantl <stefan.schantl@ipfire.org>
Tue, 22 Sep 2020 18:25:08 +0000 (20:25 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 24 Sep 2020 17:36:38 +0000 (17:36 +0000)
Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
config/cfgroot/location-functions.pl
html/cgi-bin/ipinfo.cgi

index b0b8cd086605712bb047a964fe221e308e518daf..2cfe7f908fd92db2dd7c49be5630d8337bf2de79 100644 (file)
@@ -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;
index cce6097ffd8e8f9e9ea5c6dbb5f589215597f0f4..d8cb6c6b76a30150f37ba7d88af508fbf1d240a8 100644 (file)
@@ -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 . " <a href='country.cgi#$ccode'><img src='$flag_icon' border='0' align='absmiddle' alt='$ccode' title='$ccode' /></a> (" . $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 "<h3>This address is marked as $network_flag_name.</h3>\n";
+               # Display the generated notice.
+               print "<h3>$message_string</h3>\n";
                print "<br>\n";
        }