Commit:    1ac8ba63b833887574e5cb45ac23b2968dbc7dc8
Author:    Andreas Heigl <[email protected]>         Sun, 23 Mar 2014 05:42:38 
+0100
Parents:   cb31387978bd6e4f294f1207dc81a023d46a621f
Branches:  master

Link:       
http://git.php.net/?p=web/php.git;a=commitdiff;h=1ac8ba63b833887574e5cb45ac23b2968dbc7dc8

Log:
Optimizes Usergroup-display

This comit adds three things:

1. Support for 2-letter Countrycodes as defined in ISO 3166-1 alpha2.
For that I added a list of country codes from
http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements

2. Caching of retrieved usergroup-information. For that the list of
usergroups as well as the iCalendar-files of the single usergroups are
loaded one every 24 hours into files on the filesystem. those files are
then used for information retrieval

3. Slight optimization of UG-display.
For that I've changed display-style from an unordered to a definition
list. I've also set the date before the meeting-information as that
visually calms the whole list a bit.

Changed paths:
  A  include/countries-alpha2.inc
  M  include/layout.inc
  M  include/site.inc
  M  ug.php

diff --git a/include/countries-alpha2.inc b/include/countries-alpha2.inc
new file mode 100644
index 0000000..8fe976f
--- /dev/null
+++ b/include/countries-alpha2.inc
@@ -0,0 +1,255 @@
+<?php
+/**
+ * Taken from http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
+ */
+$COUNTRIES_ALPHA2 = array(
+    "AD" => "Andorra",
+    "AE" => "United Arab Emirates",
+    "AF" => "Afghanistan",
+    "AG" => "Antigua and Barbuda",
+    "AI" => "Anguilla",
+    "AL" => "Albania",
+    "AM" => "Armenia",
+    "AO" => "Angola",
+    "AQ" => "Antarctica",
+    "AR" => "Argentina",
+    "AS" => "American Samoa",
+    "AT" => "Austria",
+    "AU" => "Australia",
+    "AW" => "Aruba",
+    "AX" => "Åland Islands",
+    "AZ" => "Azerbaijan",
+    "BA" => "Bosnia and Herzegovina",
+    "BB" => "Barbados",
+    "BD" => "Bangladesh",
+    "BE" => "Belgium",
+    "BF" => "Burkina Faso",
+    "BG" => "Bulgaria",
+    "BH" => "Bahrain",
+    "BI" => "Burundi",
+    "BJ" => "Benin",
+    "BL" => "Saint Barthélemy",
+    "BM" => "Bermuda",
+    "BN" => "Brunei Darussalam",
+    "BO" => "Bolivia, Plurinational State of",
+    "BQ" => "Bonaire, Sint Eustatius and Saba",
+    "BR" => "Brazil",
+    "BS" => "Bahamas",
+    "BT" => "Bhutan",
+    "BV" => "Bouvet Island",
+    "BW" => "Botswana",
+    "BY" => "Belarus",
+    "BZ" => "Belize",
+    "CA" => "Canada",
+    "CC" => "Cocos (Keeling) Islands",
+    "CD" => "Congo, the Democratic Republic of the",
+    "CF" => "Central African Republic",
+    "CG" => "Congo",
+    "CH" => "Switzerland",
+    "CI" => "Côte d'Ivoire",
+    "CK" => "Cook Islands",
+    "CL" => "Chile",
+    "CM" => "Cameroon",
+    "CN" => "China",
+    "CO" => "Colombia",
+    "CR" => "Costa Rica",
+    "CU" => "Cuba",
+    "CV" => "Cape Verde",
+    "CW" => "Curaçao",
+    "CX" => "Christmas Island",
+    "CY" => "Cyprus",
+    "CZ" => "Czech Republic",
+    "DE" => "Germany",
+    "DJ" => "Djibouti",
+    "DK" => "Denmark",
+    "DM" => "Dominica",
+    "DO" => "Dominican Republic",
+    "DZ" => "Algeria",
+    "EC" => "Ecuador",
+    "EE" => "Estonia",
+    "EG" => "Egypt",
+    "EH" => "Western Sahara",
+    "ER" => "Eritrea",
+    "ES" => "Spain",
+    "ET" => "Ethiopia",
+    "FI" => "Finland",
+    "FJ" => "Fiji",
+    "FK" => "Falkland Islands (Malvinas)",
+    "FM" => "Micronesia, Federated States of",
+    "FO" => "Faroe Islands",
+    "FR" => "France",
+    "GA" => "Gabon",
+    "GB" => "United Kingdom",
+    "GD" => "Grenada",
+    "GE" => "Georgia",
+    "GF" => "French Guiana",
+    "GG" => "Guernsey",
+    "GH" => "Ghana",
+    "GI" => "Gibraltar",
+    "GL" => "Greenland",
+    "GM" => "Gambia",
+    "GN" => "Guinea",
+    "GP" => "Guadeloupe",
+    "GQ" => "Equatorial Guinea",
+    "GR" => "Greece",
+    "GS" => "South Georgia and the South Sandwich Islands",
+    "GT" => "Guatemala",
+    "GU" => "Guam",
+    "GW" => "Guinea-Bissau",
+    "GY" => "Guyana",
+    "HK" => "Hong Kong",
+    "HM" => "Heard Island and McDonald Islands",
+    "HN" => "Honduras",
+    "HR" => "Croatia",
+    "HT" => "Haiti",
+    "HU" => "Hungary",
+    "ID" => "Indonesia",
+    "IE" => "Ireland",
+    "IL" => "Israel",
+    "IM" => "Isle of Man",
+    "IN" => "India",
+    "IO" => "British Indian Ocean Territory",
+    "IQ" => "Iraq",
+    "IR" => "Iran, Islamic Republic of",
+    "IS" => "Iceland",
+    "IT" => "Italy",
+    "JE" => "Jersey",
+    "JM" => "Jamaica",
+    "JO" => "Jordan",
+    "JP" => "Japan",
+    "KE" => "Kenya",
+    "KG" => "Kyrgyzstan",
+    "KH" => "Cambodia",
+    "KI" => "Kiribati",
+    "KM" => "Comoros",
+    "KN" => "Saint Kitts and Nevis",
+    "KP" => "Korea, Democratic People's Republic of",
+    "KR" => "Korea, Republic of",
+    "KW" => "Kuwait",
+    "KY" => "Cayman Islands",
+    "KZ" => "Kazakhstan",
+    "LA" => "Lao People's Democratic Republic",
+    "LB" => "Lebanon",
+    "LC" => "Saint Lucia",
+    "LI" => "Liechtenstein",
+    "LK" => "Sri Lanka",
+    "LR" => "Liberia",
+    "LS" => "Lesotho",
+    "LT" => "Lithuania",
+    "LU" => "Luxembourg",
+    "LV" => "Latvia",
+    "LY" => "Libya",
+    "MA" => "Morocco",
+    "MC" => "Monaco",
+    "MD" => "Moldova, Republic of",
+    "ME" => "Montenegro",
+    "MF" => "Saint Martin (French part)",
+    "MG" => "Madagascar",
+    "MH" => "Marshall Islands",
+    "MK" => "Macedonia, the former Yugoslav Republic of",
+    "ML" => "Mali",
+    "MM" => "Myanmar",
+    "MN" => "Mongolia",
+    "MO" => "Macao",
+    "MP" => "Northern Mariana Islands",
+    "MQ" => "Martinique",
+    "MR" => "Mauritania",
+    "MS" => "Montserrat",
+    "MT" => "Malta",
+    "MU" => "Mauritius",
+    "MV" => "Maldives",
+    "MW" => "Malawi",
+    "MX" => "Mexico",
+    "MY" => "Malaysia",
+    "MZ" => "Mozambique",
+    "NA" => "Namibia",
+    "NC" => "New Caledonia",
+    "NE" => "Niger",
+    "NF" => "Norfolk Island",
+    "NG" => "Nigeria",
+    "NI" => "Nicaragua",
+    "NL" => "Netherlands",
+    "NO" => "Norway",
+    "NP" => "Nepal",
+    "NR" => "Nauru",
+    "NU" => "Niue",
+    "NZ" => "New Zealand",
+    "OM" => "Oman",
+    "PA" => "Panama",
+    "PE" => "Peru",
+    "PF" => "French Polynesia",
+    "PG" => "Papua New Guinea",
+    "PH" => "Philippines",
+    "PK" => "Pakistan",
+    "PL" => "Poland",
+    "PM" => "Saint Pierre and Miquelon",
+    "PN" => "Pitcairn",
+    "PR" => "Puerto Rico",
+    "PS" => "Palestine, State of",
+    "PT" => "Portugal",
+    "PW" => "Palau",
+    "PY" => "Paraguay",
+    "QA" => "Qatar",
+    "RE" => "Réunion",
+    "RO" => "Romania",
+    "RS" => "Serbia",
+    "RU" => "Russian Federation",
+    "RW" => "Rwanda",
+    "SA" => "Saudi Arabia",
+    "SB" => "Solomon Islands",
+    "SC" => "Seychelles",
+    "SD" => "Sudan",
+    "SE" => "Sweden",
+    "SG" => "Singapore",
+    "SH" => "Saint Helena, Ascension and Tristan da Cunha",
+    "SI" => "Slovenia",
+    "SJ" => "Svalbard and Jan Mayen",
+    "SK" => "Slovakia",
+    "SL" => "Sierra Leone",
+    "SM" => "San Marino",
+    "SN" => "Senegal",
+    "SO" => "Somalia",
+    "SR" => "Suriname",
+    "SS" => "South Sudan",
+    "ST" => "Sao Tome and Principe",
+    "SV" => "El Salvador",
+    "SX" => "Sint Maarten (Dutch part)",
+    "SY" => "Syrian Arab Republic",
+    "SZ" => "Swaziland",
+    "TC" => "Turks and Caicos Islands",
+    "TD" => "Chad",
+    "TF" => "French Southern Territories",
+    "TG" => "Togo",
+    "TH" => "Thailand",
+    "TJ" => "Tajikistan",
+    "TK" => "Tokelau",
+    "TL" => "Timor-Leste",
+    "TM" => "Turkmenistan",
+    "TN" => "Tunisia",
+    "TO" => "Tonga",
+    "TR" => "Turkey",
+    "TT" => "Trinidad and Tobago",
+    "TV" => "Tuvalu",
+    "TW" => "Taiwan, Province of China",
+    "TZ" => "Tanzania, United Republic of",
+    "UA" => "Ukraine",
+    "UG" => "Uganda",
+    "UM" => "United States Minor Outlying Islands",
+    "US" => "United States",
+    "UY" => "Uruguay",
+    "UZ" => "Uzbekistan",
+    "VA" => "Holy See (Vatican City State)",
+    "VC" => "Saint Vincent and the Grenadines",
+    "VE" => "Venezuela, Bolivarian Republic of",
+    "VG" => "Virgin Islands, British",
+    "VI" => "Virgin Islands, U.S.",
+    "VN" => "Viet Nam",
+    "VU" => "Vanuatu",
+    "WF" => "Wallis and Futuna",
+    "WS" => "Samoa",
+    "YE" => "Yemen",
+    "YT" => "Mayotte",
+    "ZA" => "South Africa",
+    "ZM" => "Zambia",
+    "ZW" => "Zimbabwe",
+);
\ No newline at end of file
diff --git a/include/layout.inc b/include/layout.inc
index f6b585d..235e6fc 100644
--- a/include/layout.inc
+++ b/include/layout.inc
@@ -606,16 +606,25 @@ function get_near_usergroups()
 function get_usergroups_in($country, &$allcountries = array()) {
     $filename = $_SERVER["DOCUMENT_ROOT"] . "/backend/usergroups.json";
 
+    // get the complete list of usergroups once a day
+    if (! file_exists($filename) || (time()-24*60*60) > filemtime($filename)) {
+        $data = file_get_contents('http://php.ug/api/rest/listtype.json/1');
+        file_put_contents($filename, $data);
+    }
+
     $matches = array();
     $data = json_decode(file_get_contents($filename), true);
     foreach($data["groups"] as $group) {
-        if (isset($group["ccc"])) {
-            $allcountries[$group["ccc"]] = 1;
-            if ($group["ccc"] == $country) {
+        if (isset($group["country"])) {
+            $allcountries[$group["country"]] = 1;
+            if ($group["country"] == $country) {
                 $matches[] = $group;
             }
         }
     }
+    usort($matches, function($first, $second){
+        return strnatcasecmp($first['name'], $second['name']);
+    });
 
     return $matches;
 }
diff --git a/include/site.inc b/include/site.inc
index b7a0bb4..6960180 100644
--- a/include/site.inc
+++ b/include/site.inc
@@ -8,6 +8,9 @@ include $_SERVER['DOCUMENT_ROOT'] . '/include/mirrors.inc';
 // Define $COUNTRIES array
 include $_SERVER['DOCUMENT_ROOT'] . '/include/countries.inc';
 
+// Define $COUNTRIES_ALPHA2 array
+include $_SERVER['DOCUMENT_ROOT'] . '/include/countries-alpha2.inc';
+
 // Define $LANGUAGES array
 include $_SERVER['DOCUMENT_ROOT'] . '/include/languages.inc';
 
diff --git a/ug.php b/ug.php
index f055ff0..b0a8b59 100644
--- a/ug.php
+++ b/ug.php
@@ -12,36 +12,38 @@ site_header("Hypertext Preprocessor",
 
 
 function print_cc_header($country) {
-    global $COUNTRIES;
+    global $COUNTRIES_ALPHA2;
     ?>
     <div class="country" id="<?php echo $country ?>">
-    <h2 class="title countrytitle">User Groups in <?php echo 
$COUNTRIES[$country] ?>
+    <h2 class="title countrytitle">User Groups in <?php echo 
$COUNTRIES_ALPHA2[$country] ?>
         <img height="25" width="45" src="/images/flags/beta/<?php echo 
strtolower($country) ?>.png">
     </h2>
     <ul class="ugs">
     <?php
 }
 function ug_get_more_info($group) {
-    if (trim($group["icalendar_url"])) {
-        $url = $group["icalendar_url"];
-        /*
+    if (! trim($group["icalendar_url"])) {
+        return null;
+    }
+    $url = $group["icalendar_url"];
+
+    $filename = "backend/events/" . md5($url);
+    if (! file_exists($filename) || (time()-24*60*60) > filemtime($filename)) {
         if (strncmp("webcal://", $url, strlen("webcal://")) == 0) {
             $url = str_replace("webcal://", "http://";, $url);
-            $data = file_get_contents($url);
-            file_put_contents("backend/events/" . 
md5($group["icalendar_url"]), $data);
-        }
-         */
-        $filename = "backend/events/" . md5($url);
-        /* Broken icalendar link */
-        if (!file_exists($filename)) {
-            return "";
         }
-        $data = file($filename, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
-        $retval = ug_get_next_even_from_ical_array($data);
-        return $retval;
+        $data = file_get_contents($url);
+        file_put_contents("backend/events/" . md5($group["icalendar_url"]), 
$data);
     }
+    // */
+    /* Broken icalendar link */
+    if (!file_exists($filename)) {
+        return null;
+    }
+    $data = file($filename, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
+    $retval = ug_get_next_even_from_ical_array($data);
 
-    return "";
+    return $retval;
 }
 function ug_get_next_even_from_ical_array($ical) {
     $ok = false;
@@ -76,7 +78,9 @@ function ug_get_next_even_from_ical_array($ical) {
     return array("event" => $data);
 }
 function print_ug_matches($matches) {
+    global $COUNTRIES_ALPHA2, $country;
     $content = "";
+    echo '<dl>';
     foreach($matches as $group) {
         $data = ug_get_more_info($group);
         $details = "";
@@ -88,22 +92,22 @@ function print_ug_matches($matches) {
              * newlines making this look like geocities */
             //$description = 
nl2br(htmlspecialchars($data["event"]["DESCRIPTION"]), false);
             if ($url) { /* Google Calendar doesn't have this */
-                $details = ": <a href='$url'>{$summary}</a> - {$d}"; //<br>" . 
$description;
+                $details = "{$d} - <a href='$url'>{$summary}</a>"; //<br>" . 
$description;
             } else {
-                $details = ": $summary - {$d}";// . $description;
+                $details = "{$d} - $summary";// . $description;
             }
         }
-        echo '<li class="ug"><a href="'. $group["url"].'">' . $group["name"] . 
"</a>$details</li>";
+        echo '<dt class="ug"><a href="'. $group["url"].'">' . $group["name"] . 
"</a></dt><dd>$details</dd>";
     }
     if (!$matches) {
-        echo "<li>There are no known User Groups in {$COUNTRIES[$country]} at 
this time :(</li>";
+        echo "<dt>Sorry</dt><dd>There are no known User Groups in 
{$COUNTRIES_ALPHA2[$country]} at this time :(</dd>";
     }
-    echo "</ul>";
+    echo "</dl>";
 }
 
 $country = isset($_GET["cc"]) ? $_GET["cc"] : $COUNTRY;
-
-if (isset($COUNTRIES[$country])) {
+$allcountries = array();
+if (isset($COUNTRIES_ALPHA2[$country])) {
     $matches = get_usergroups_in($country, $allcountries);
     print_cc_header($country);
     print_ug_matches($matches);
@@ -111,13 +115,16 @@ if (isset($COUNTRIES[$country])) {
     echo "<h1>Unknown country</h1>";
 }
 
-
+uksort($allcountries, function($first, $second){
+    global $COUNTRIES_ALPHA2;
+    return strnatcasecmp($COUNTRIES_ALPHA2[$first], 
$COUNTRIES_ALPHA2[$second]);
+});
 
 $SIDEBAR_DATA = <<< EOF
     <p class="panel"><a href="http://php.ug/ug/promote";>Register new UG</a></p>
 EOF;
 foreach($allcountries as $country => $nada) {
-    $SIDEBAR_DATA .= '<p class="panel"><a href="/ug.php?cc=' . $country . '">' 
. $COUNTRIES[$country] . '</a></p>';
+    $SIDEBAR_DATA .= '<p class="panel"><a href="/ug.php?cc=' . $country . '">' 
. $COUNTRIES_ALPHA2[$country] . '</a></p>';
 }
 
 // Print the common footer.
-- 
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to