OpenSearch endpoint for Elgg
+OVERVIEW
+-------------
+OpenSearch is a standard for exposing the data in your website for search
+to browsers and other web sites. For more information on this technology, visit
+the Wikipedia page on OpenSearch at http://en.wikipedia.org/wiki/OpenSearch
+
INSTALL
-Rename config.ini.sample to config.ini
-Edit config.ini to reflect your site
-Activate the plugin
+-------------
+ * Rename config.ini.sample to config.ini
+ * Edit config.ini to reflect your site
+ * Activate the plugin
USAGE
+-------------
Adds an OpenSearch description definition to the html head. Browsers
will pick this up and allow you to add site specific search to your
search bar.
The plugin also provides an RSS 2.0 feed that conforms to the OpenSearch
-standard.
+standard.
<?php
+/**
+ * OpenSearch English language file
+ */
$english = array(
'opensearch:title' => "Search: %s",
- 'opensearch:description' => "Search results for \"%s\"",
-
+ 'opensearch:description' => "Search results for \"%s\"",
);
add_translation("en", $english);
<?xml version="1.0" encoding="UTF-8"?>
-<plugin_manifest>
- <field key="author" value="Cash Costello" />
- <field key="version" value="1.0" />
- <field key="description" value="OpenSearch plugin" />
- <field key="website" value="http://cashcostello.com/blog/" />
- <field key="copyright" value="Cash Costello 2010" />
- <field key="licence" value="GNU Public License version 2" />
- <field key="elgg_version" value="2010030101" />
-</plugin_manifest>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>OpenSearch</name>
+ <author>Cash Costello</author>
+ <version>1.1</version>
+ <category>utility</category>
+ <category>search</category>
+ <description>OpenSearch integration</description>
+ <website>https://github.com/cash/opensearch</website>
+ <copyright>Cash Costello 2010-2011</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
\ No newline at end of file
* @license http://opensource.org/licenses/gpl-2.0.php GPL 2
*/
-register_elgg_event_handler('init', 'system', 'opensearch_init');
+elgg_register_event_handler('init', 'system', 'opensearch_init');
function opensearch_init() {
- global $CONFIG;
-
- register_page_handler('opensearch', 'opensearch_handler');
-
- elgg_extend_view('metatags', 'opensearch/includes');
+ elgg_register_page_handler('opensearch', 'opensearch_handler');
+ elgg_extend_view('page/elements/head', 'opensearch/includes');
}
/**
* Handles OpenSearch requests
*
* @param array $page An array of URL elements
- * @return boolean
+ * @return bool
*/
function opensearch_handler($page) {
- global $CONFIG;
-
switch ($page[0]) {
case 'osd.xml':
elgg_set_viewtype('xml');
- page_draw('', elgg_view('opensearch/description'));
- return TRUE;
+ echo elgg_view_page('', elgg_view('opensearch/description'));
+ return true;
break;
}
-
+ return false;
}
<?php
+/**
+ * OpenSearch head include
+ */
-$url = "{$vars['url']}pg/opensearch/osd.xml";
-$title = $vars['config']->sitename;
+$url = elgg_normalize_url('opensearch/osd.xml');
+$title = elgg_get_site_entity()->name;
?>
<link rel="search" type="application/opensearchdescription+xml" href="<?php echo $url; ?>" title="<?php echo $title; ?>" />
<?php
+/**
+ * Page shell for OpenSearch RSS feed
+ */
global $OPEN_SEARCH_COUNT;
// Set title
$search_terms = get_input('q');
-$title = $vars['config']->sitename;
-$title .= ' ' . sprintf(elgg_echo('opensearch:title'), $search_terms);
+$title = elgg_get_site_entity()->name;
+$title .= ' ' . elgg_echo('opensearch:title', array($search_terms));
-$description = sprintf(elgg_echo('opensearch:description'), $search_terms);
+$description = elgg_echo('opensearch:description', array($search_terms));
// Remove viewtype from URL
-$search_url = str_replace('&view=opensearch_rss','', full_url());
-
-$os_url = "{$vars['url']}pg/opensearch/osd.xml";
+$search_url = str_replace('&view=opensearch_rss', '', full_url());
+$os_url = elgg_normalize_url('opensearch/osd.xml');
?>
<rss version="2.0" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
--- /dev/null
+<?php
+/**
+ * OpenSearch RSS layout shell
+ */
+echo $vars['content'];
\ No newline at end of file
+++ /dev/null
-<?php
-/**
- * To support Elgg 1.7
- */
-
-require_once(dirname(dirname(__FILE__)) . "/page_shells/default.php");
<?php
+/**
+ * OpenSearch search layout
+ */
echo $vars['body'];
\ No newline at end of file
<?php
+/**
+ * OpenSearch serach results list
+ */
global $OPEN_SEARCH_COUNT;
if (!isset($OPEN_SEARCH_COUNT)) {
*/
// reset cache headers because IE8 is stupid
-header('Pragma: public', TRUE);
-header('Cache-Control: public', TRUE);
+header('Pragma: public', true);
+header('Cache-Control: public', true);
$config_ini = dirname(dirname(dirname(dirname(__FILE__)))) . '/config.ini';
$config = parse_ini_file($config_ini);
-if ($config == FALSE) {
+if ($config == false) {
elgg_log("Unable to parse OpenSearch config file", 'ERROR');
- return TRUE;
+ return true;
}
extract($config);
-$site = get_entity($CONFIG->site_guid);
+$site = elgg_get_site_entity();
$email = $site->email;
-$rss_url = "{$vars['url']}pg/search/?q={searchTerms}&view=opensearch_rss";
-$html_url = "{$vars['url']}pg/search/?q={searchTerms}";
+$rss_url = elgg_normalize_url('search/?q={searchTerms}&view=opensearch_rss');
+$rss_url = elgg_format_url($rss_url);
+$html_url = elgg_normalize_url('search/?q={searchTerms}');
+$site_url = elgg_get_site_url();
?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<Url type="text/html" template="<?php echo $html_url; ?>"/>
<Url type="application/rss+xml" template="<?php echo $rss_url; ?>"/>
<?php if (isset($ico)): ?>
- <Image height="16" width="16" type="image/vnd.microsoft.icon"><?php echo "{$vars['url']}$ico"; ?></Image>
+ <Image height="16" width="16" type="image/vnd.microsoft.icon"><?php echo "{$site_url}$ico"; ?></Image>
<?php endif; ?>
<?php if (isset($png)): ?>
- <Image height="64" width="64" type="image/png"><?php echo "{$vars['url']}$png"; ?></Image>
+ <Image height="64" width="64" type="image/png"><?php echo "{$site_url}$png"; ?></Image>
<?php endif; ?>
<?php if (isset($tags)): ?>
<Tags><?php echo $tags; ?></Tags>