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 .= ''; + $manifest = ff_hh_getmanifest(FF_HH_STABLE_BASEDIR); - foreach ($manifest as $line) { - $outstr .= sprintf('', $line['hw'], FF_HH_STABLE_BASEDIR, $line['filename'], $line['ver']); + $outstr = "
"; + $outstr .= '
ModellStable
%s%s
'; + + 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('', $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 .= ''; + + // 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 .= ''; + + $outstr .= ''; } - + $outstr .= '
ModellErstinstallationAktualisierung
%sHardware Version ' . join(', ', $hw_ver_links) . 'Hardware Version ' . join(', ', $hw_ver_links) . '
'; - //$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' ); } +