]> git.ipfire.org Git - people/ms/ipfire-2.x.git/commitdiff
freifunk: Load networks as separate files
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 1 Dec 2014 20:01:55 +0000 (21:01 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 9 Mar 2015 11:19:38 +0000 (12:19 +0100)
html/cgi-bin/freifunk.cgi

index 36acaeea82f79b0224b2ac41b3b2deb0412589f3..e60d46c13dc07715c8a40fcc627bd676ba4c512f 100755 (executable)
@@ -31,7 +31,7 @@ require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
 
 my $FASTD_CONFIG = "${General::swroot}/freifunk/fastd.conf";
-my $NETWORKS_LIST = "${General::swroot}/freifunk/networks.json";
+my $NETWORKS_DIR = "${General::swroot}/freifunk/networks";
 
 #workaround to suppress a warning when a variable is used only once
 my @dummy = ( ${Header::colouryellow} );
@@ -322,23 +322,50 @@ sub BatmanAdvVersion() {
        }
 }
 
+sub LoadNetworks() {
+       opendir (DIR, $NETWORKS_DIR) or die $!;
+
+       my @networks = ();
+       while (my $filename = readdir(DIR)) {
+               my $network = &LoadNetwork("$NETWORKS_DIR/$filename");
+
+               if (defined($network)) {
+                       push(@networks, $network);
+               }
+       }
+
+       closedir(DIR);
+
+       return @networks;
+}
+
+sub LoadNetwork() {
+       my $file = shift;
+
+       if (-e $file) {
+               return JSON::Parse::json_file_to_perl($file);
+       }
+
+       return undef;
+}
+
 sub GetNetworkList() {
-       my $list = JSON::Parse::json_file_to_perl($NETWORKS_LIST);
+       my @networks = &LoadNetworks();
        my @ret = ();
 
-       foreach my $network (@$list) {
+       foreach my $network (@networks) {
                push(@ret, [$network->{'id'}, $network->{'name'}]);
        }
 
-       return sort { $a->{1} cmp $b->{1} } @ret;
+       return sort { $a{1} cmp $b{1} } @ret;
 }
 
 sub GetNetwork($) {
        my $id = shift;
 
-       my $list = JSON::Parse::json_file_to_perl($NETWORKS_LIST);
+       my @networks = &LoadNetworks();
 
-       foreach my $network (@$list) {
+       foreach my $network (@networks) {
                return $network if ($network->{'id'} eq $id);
        }