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