com web/php: Optimizes Usergroup-display: include/countries-alpha2.inc include/layout.inc include/site.inc ug.php
| From: | Hannes Magnusson | Date: | Sun, 23 Mar 2014 04:42:38 +0000 |
| Subject: | com web/php: Optimizes Usergroup-display: include/countries-alpha2.inc include/layout.inc include/site.inc ug.php | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-18603@lists.php.net to get a copy of this message | ||
Commit: 1ac8ba63b833887574e5cb45ac23b2968dbc7dc8
Author: Andreas Heigl <andreas@heigl.org> 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.
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.