From 993366d6a6c22d6d795f3b4db2398c67327c3d1c Mon Sep 17 00:00:00 2001
From: Mario Di Lorenzo <mario.dilorenzo@garr.it>
Date: Thu, 6 Mar 2025 14:31:14 +0100
Subject: [PATCH] fixed eduGAIN_map.php

---
 lib/eduGAIN_map.php | 68 +++++++++++++--------------------------------
 1 file changed, 20 insertions(+), 48 deletions(-)

diff --git a/lib/eduGAIN_map.php b/lib/eduGAIN_map.php
index 8a31cf4..effa3dc 100644
--- a/lib/eduGAIN_map.php
+++ b/lib/eduGAIN_map.php
@@ -3,34 +3,26 @@
 class eduGAIN_map {
 
     static function make_maps($active_only = 0) {
-        // Debugging message to indicate map creation has started
         Utils::debug(4, "making maps");
-
-        // Set paths for maps and map source files
         $maps_dir = TECHNICAL_HOME."/web/maps/";
         $maps_source = TECHNICAL_HOME."/lib/Map_source/";
-
-        // Map files for Europe and World
         $europe_in = "eduGAIN-Europe.svg";
         $world_in = "worldHigh.svg";
 
-        // Define the color mapping based on the status values
         $Colours = [
-            0 => "#d0d0d0", // Default color (grey)
-            1 => "#1e73be", // Color for status 1 (blue)
-            4 => "#81d742", // Color for status 4 (green)
-            5 => "#d93",    // Color for status 5 (orange)
-            6 => "#d93",    // Color for status 6 (orange)
+            0 => "#d0d0d0",
+            1 => "#1e73be",
+            4 => "#81d742",
+            5 => "#d93",
+            6 => "#d93",
         ];
 
-        // Special colors for specific country codes
         $Colour = [];
         $Colour['va'] = '#c0c0c0';
         $Colour['im'] = '#c0c0c0';
         $Colour['gg'] = '#c0c0c0';
         $Colour['je'] = '#c0c0c0';
 
-        // Fetch data for federations based on whether we want only active ones or all
         if ($active_only == 1) {
             $json = json_decode(file_get_contents(ROOT_URL."/api.php?action=list_federation_map_codes&opt=1"));
             $file_suffix = '_active';
@@ -38,60 +30,48 @@ class eduGAIN_map {
             $json = json_decode(file_get_contents(ROOT_URL."/api.php?action=list_federation_map_codes"));
             $file_suffix = '';
         }
-
-        // Initialize array to store the status of countries
         $Status = [];
-
-        // Loop through the JSON data to process the country status
         foreach ($json as $key => $element) {
             $countries = $element->country_code;
-            if (empty($countries)) {
+            if (!is_array($countries)) {
+                $countries = [$countries]; // Convert string to array
+            }
+	    if (empty($countries)) {
                 continue;
             }
             foreach ($countries as $country) {
-                // Get the current status or default to 0
                 $c = isset($Status[$country]) ? $Status[$country] : 0;
-                // Update the status for this country
                 $s = $Status[$country] = max($c, $element->status);
-                // Set the color for the country based on status
                 $Colour[$country] = empty($Colours[$s]) ? 'none' : $Colours[$s];
             }
         }
 
-        // Generate Europe Map
+// Generate Europe
+
         $svg_if = fopen($maps_source.$europe_in, "r");
         $png_out = 'europe'.$file_suffix.'.png';
         $svg_out = 'europe'.$file_suffix.'.svg';
 
-        // Initialize empty SVG content
         $svg = '';
         $path = 0;
-
-        // Read the SVG file and apply colors based on the status of each country
         while ($buffer = fgets($svg_if)) {
-            if (preg_match('/^ *<path/', $buffer)) {
+            if (preg_match('/^ *<path/', $buffer))
                 $path = 1;
-            }
-            if (preg_match('/^ +id="([\w]+).*"$/', $buffer, $m)) {
+            if (preg_match('/^ +id="([\w]+).*"$/', $buffer, $m))
                 $id = $m[1];
-            }
             $out = $buffer;
-            // Apply fill color based on status
             if (preg_match('/^ +style=".*fill:#[^;]+;.*\/>/', $buffer)) {
                 if ($path) {
-                    if ($id == "Large") {
-                        $c = '#ffffff'; // Color for "Large" id
-                    } else {
-                        $c = empty($Colour[$id]) ? "#c0c0c0" : $Colour[$id]; // Use country color or default
-                    }
+                    if ($id == "Large")
+                        $c = '#ffffff';
+                    else
+                        $c = empty($Colour[$id]) ? "#c0c0c0" : $Colour[$id];
                     $out = preg_replace('/(style=".*fill:)#[^;]+;/', '$1'.$c.';', $buffer);
                 }
                 $path = 0;
             }
             $svg .= $out;
         }
-
-        // Convert SVG to PNG format and save the file
         $png = new Imagick();
         $png->setBackgroundColor(new ImagickPixel("transparent"));
         $png->readImageBlob($svg);
@@ -104,25 +84,20 @@ class eduGAIN_map {
             return(false);
         };
 
-        // Generate World Map
+// Generate world
+
         $png_out = 'world_s'.$file_suffix.'.png';
         $svg_out = 'world'.$file_suffix.'.svg';
         $png_out_l = 'world_l'.$file_suffix.'.png';
-
-        // Load the world map SVG
         $xml = simplexml_load_file($maps_source.$world_in);
-
-        // Loop through the countries and update the fill color based on their status
         for ($i = 0; $i < count($xml->g->path); $i++) {
             $buffer = $xml->g->path[$i];
             $id = strtolower($buffer->attributes()->id);
             if (isset($Status["$id"]) && isset($Colours[$Status["$id"]])) {
-                // Apply the color style for each country
                 $xml->g->path[$i]->attributes()->style = "fill: ".$Colours[$Status["$id"]].";";
             }
         }
 
-        // Convert updated world SVG to XML and PNG
         $svg = $xml->asXML();
         $png = new Imagick();
         $png->setBackgroundColor(new ImagickPixel("transparent"));
@@ -135,13 +110,10 @@ class eduGAIN_map {
         if (file_put_contents($maps_dir.$svg_out, $svg) === false) {
             return(false);
         }
-
-        // Resize the world map PNG for smaller version
         $png->scaleImage(420, 350, true);
         if (file_put_contents($maps_dir.$png_out, $png) === false) {
             return(false);
         }
-
         return(true);
     }
-}
\ No newline at end of file
+}
-- 
GitLab