diff --git a/data/config.default.php b/data/config.default.php index a0010e9..9febb79 100644 --- a/data/config.default.php +++ b/data/config.default.php @@ -630,4 +630,35 @@ $descriptionAnchors = array( */ $googleAnalyticsCode = null; + + + +/**************************** + * avahi export script + */ + +/** + * Location of avahi service files, + * often /etc/avahi/services/ + * + * @var string + */ +$avahiServiceFilePath = '/etc/avahi/services/'; + +/** + * File name prefix of SemanticScuttle-generated + * service files + * + * @var string + */ +$avahiServiceFilePrefix = 'semanticscuttle-'; + +/** + * Name of tag that bookmarks need to have to + * get exported into avahi service files. + * + * @var string + */ +$avahiTagName = 'zeroconf'; + ?> diff --git a/doc/ChangeLog b/doc/ChangeLog index 6e2676e..3dbeaed 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -19,6 +19,8 @@ ChangeLog for SemantiScuttle special characters did not get escaped. - Special header file for shell scripts (header-standalone.php) - Fix E_NOTICE when calling alltags.php without any parameter +- Implement request #2833793: Export to avahi config files + - we support zeroconf networking! 0.95.2 - 2010-01-16 diff --git a/scripts/avahi-export.php b/scripts/avahi-export.php new file mode 100644 index 0000000..f609949 --- /dev/null +++ b/scripts/avahi-export.php @@ -0,0 +1,107 @@ + + * @license GPL http://www.gnu.org/licenses/gpl.html + * @link http://sourceforge.net/projects/semanticscuttle + */ +require_once dirname(__FILE__) . '/../src/SemanticScuttle/header-standalone.php'; + +$fileprefix = $GLOBALS['avahiServiceFilePrefix']; +$filepath = $GLOBALS['avahiServiceFilePath']; + +$arSchemes = array( + 'ftp' => array(21, '_ftp._tcp'), + 'ssh' => array(22, '_ftp._tcp'), + 'sftp' => array(22, '_sftp-ssh._tcp'), + 'http' => array(80, '_http._tcp'), +); + +if (!is_writable($filepath)) { + echo "avahi service directory is not writable:\n"; + echo $filepath . "\n"; + exit(1); +} + +//clean out existing SemanticScuttle service files +$existing = glob($filepath . '/' . $fileprefix . '*'); +if (count($existing) > 0) { + foreach ($existing as $file) { + unlink($file); + } +} + +$bs = SemanticScuttle_Service_Factory::get('Bookmark'); +$bookmarks = $bs->getBookmarks(0, null, null, $GLOBALS['avahiTagName']); +$bookmarks = $bookmarks['bookmarks']; + +if (count($bookmarks) == 0) { + echo 'No "' . $GLOBALS['avahiTagName'] . '"-tagged bookmarks available.' . "\n"; + exit(0); +} + +$written = 0; +foreach ($bookmarks as $bm) { + $xTitle = htmlspecialchars($bm['bTitle']); + $parts = parse_url($bm['bAddress']); + + if (!isset($parts['host'])) { + echo 'No hostname in: ' . $bm['bAddress'] . "\n"; + exit(2); + } + + $xHostname = htmlspecialchars($parts['host']); + $xPath = isset($parts['path']) ? $parts['path'] : ''; + if (isset($parts['query'])) { + $xPath .= '?' . $parts['query']; + } + if (isset($parts['fragment'])) { + $xPath .= '#' . $parts['fragment']; + } + + $scheme = isset($parts['scheme']) ? $parts['scheme'] : 'http'; + if (!isset($arSchemes[$scheme])) { + //dying is hard, but at least the user knows + // that something is seriously wrong + echo "Unknown scheme: $scheme\n"; + exit(3); + } + list($xPort, $xType) = $arSchemes[$scheme]; + + if (isset($parts['port'])) { + $xPort = (int)$parts['port']; + } + + $xml = << + + + {$xTitle} + + {$xType} + {$xHostname} + {$xPort} + path={$xPath} + + +XML; + + $file = $filepath . '/' . $fileprefix . $bm['bId'] . '.service'; + file_put_contents($file, $xml); + ++$written; +} + +echo $written . " service files created\n"; +?> \ No newline at end of file