diff --git a/README.md b/README.md
index 48a7af4..0e419f9 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,12 @@
freifunk-versions
=================
-Wordpress plugin to render latest gluon firmware version table
+Wordpress plugin to render latest (Hamburg-flavoured)
+[gluon firmware](https://github.com/freifunkhamburg/gluon) version table.
+
+Provides shortcode `[ff_hh_versions]` to display table.
+Input data is read from http://gw09.hamburg.freifunk.net/stable/sysupgrade/manifest
+
+Output looks like this:
+
+![shortcode output example](http://mschuette.name/wp/wp-upload/freifunk_versions.png)
diff --git a/freifunk-versions.php b/freifunk-versions.php
index e073596..d57b361 100644
--- a/freifunk-versions.php
+++ b/freifunk-versions.php
@@ -3,25 +3,32 @@
Plugin Name: Freifunk Hamburg Firmware List Shortcode
Plugin URI: http://mschuette.name/
Description: Defines shortcodes to display Freifunk Hamburg Firmware versions
-Version: 0.1
+Version: 0.2
Author: Martin Schuette
Author URI: http://mschuette.name/
Licence: 2-clause BSD
*/
-define('FF_HH_STABLE_BASEDIR', 'http://gw09.hamburg.freifunk.net/stable/sysupgrade/');
+define('FF_HH_STABLE_BASEDIR', 'http://gw09.hamburg.freifunk.net/stable/');
define('FF_HH_CACHETIME', 15);
/* gets metadata from URL, handles caching */
-function ff_hh_getmanifest () {
+function ff_hh_getmanifest ($basedir) {
// Caching
if ( false === ( $manifest = get_transient( "ff_hh_manifest" ) ) ) {
$manifest = array();
- $input = wp_remote_retrieve_body( wp_remote_get(FF_HH_STABLE_BASEDIR . 'manifest') );
+ $input = wp_remote_retrieve_body( wp_remote_get($basedir . 'sysupgrade/manifest') );
foreach ( explode("\n", $input) as $line ) {
- $ret = sscanf($line, '%s %s %s %s', $hw, $ver, $hash, $filename);
- if ($ret === 4)
- $manifest[] = compact('hw', 'ver', 'filename');
+ $ret = sscanf($line, '%s %s %s %s', $hw, $sw_ver, $hash, $filename);
+ if ($ret === 4) {
+ if (preg_match('/^(.*)-v(\d+)$/', $hw, $matches)) {
+ $hw = $matches[1];
+ $hw_ver = $matches[2];
+ } else {
+ $hw_ver = '1';
+ }
+ $manifest[$hw][$hw_ver] = $filename;
+ }
}
$cachetime = FF_HH_CACHETIME * MINUTE_IN_SECONDS;
@@ -36,17 +43,46 @@ if ( ! shortcode_exists( 'ff_hh_versions' ) ) {
// Example:
// [ff_hh_versions]
function ff_hh_shortcode_handler( $atts, $content, $name ) {
- $manifest = ff_hh_getmanifest();
- $outstr = "
";
- $outstr .= '
Modell | Stable |
';
+ $manifest = ff_hh_getmanifest(FF_HH_STABLE_BASEDIR);
- foreach ($manifest as $line) {
- $outstr .= sprintf('%s | %s |
', $line['hw'], FF_HH_STABLE_BASEDIR, $line['filename'], $line['ver']);
+ $outstr = "";
+ $outstr .= '
Modell | Erstinstallation | Aktualisierung |
';
+
+ foreach ($manifest as $hw => $versions) {
+ // beautify HW model names
+ if (!strncmp($hw, 'tp-link', 7)) {
+ $hw = strtoupper($hw);
+ $hw = str_replace('-', ' ', $hw);
+ $hw = str_replace('TP LINK TL ', 'TP-Link TL-', $hw);
+ } elseif (!strncmp($hw, 'ubiquiti', 8)) {
+ $hw = str_replace('-', ' ', $hw);
+ $hw = ucwords($hw);
+ }
+ $outstr .= sprintf('%s | ', $hw);
+
+ // factory versions
+ $hw_ver_links = array();
+ foreach ($versions as $hw_ver => $filename) {
+ $filename = str_replace('-sysupgrade', '', $filename);
+ $hw_ver_links[] = sprintf('%s.x',
+ FF_HH_STABLE_BASEDIR.'factory/', $filename, $hw_ver);
+ }
+ $outstr .= 'Hardware Version ' . join(', ', $hw_ver_links) . ' | ';
+
+ // sysupgrade versions
+ $hw_ver_links = array();
+ foreach ($versions as $hw_ver => $filename) {
+ $hw_ver_links[] = sprintf('%s.x',
+ FF_HH_STABLE_BASEDIR.'sysupgrade/', $filename, $hw_ver);
+ }
+ $outstr .= 'Hardware Version ' . join(', ', $hw_ver_links) . ' | ';
+
+ $outstr .= '
';
}
-
+
$outstr .= '
';
- //$outstr .= '
'.print_r($manifest, true).'
';
$outstr .= '
';
+ // $outstr .= ''.print_r($manifest, true).'
';
return $outstr;
}
@@ -55,3 +91,4 @@ function ff_hh_uninstall_hook() {
delete_option( 'ff_hh_manifest' );
}
+