12266213d0
* translation system and unit tests * Translations everywhere Dont use translation merge It is not available with PHP builtin gettext, so it would have lead to inconsistency.
111 lines
2.9 KiB
PHP
111 lines
2.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* PubSubHubbub plugin.
|
|
*
|
|
* PubSub is a protocol which fasten up RSS fetching:
|
|
* - Every time a new link is posted, Shaarli notify the hub.
|
|
* - The hub notify all feed subscribers that a new link has been posted.
|
|
* - Subscribers retrieve the new link.
|
|
*/
|
|
|
|
use pubsubhubbub\publisher\Publisher;
|
|
use Shaarli\Config\ConfigManager;
|
|
|
|
/**
|
|
* Plugin init function - set the hub to the default appspot one.
|
|
*
|
|
* @param ConfigManager $conf instance.
|
|
*/
|
|
function pubsubhubbub_init($conf)
|
|
{
|
|
$hub = $conf->get('plugins.PUBSUBHUB_URL');
|
|
if (empty($hub)) {
|
|
// Default hub.
|
|
$conf->set('plugins.PUBSUBHUB_URL', 'https://pubsubhubbub.appspot.com/');
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Render feed hook.
|
|
* Adds the hub URL in ATOM and RSS feed.
|
|
*
|
|
* @param array $data Template data.
|
|
* @param ConfigManager $conf instance.
|
|
*
|
|
* @return array updated template data.
|
|
*/
|
|
function hook_pubsubhubbub_render_feed($data, $conf)
|
|
{
|
|
$feedType = $data['_PAGE_'] == Router::$PAGE_FEED_RSS ? FeedBuilder::$FEED_RSS : FeedBuilder::$FEED_ATOM;
|
|
$template = file_get_contents(PluginManager::$PLUGINS_PATH . '/pubsubhubbub/hub.'. $feedType .'.xml');
|
|
$data['feed_plugins_header'][] = sprintf($template, $conf->get('plugins.PUBSUBHUB_URL'));
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Save link hook.
|
|
* Publish to the hub when a link is saved.
|
|
*
|
|
* @param array $data Template data.
|
|
* @param ConfigManager $conf instance.
|
|
*
|
|
* @return array unaltered data.
|
|
*/
|
|
function hook_pubsubhubbub_save_link($data, $conf)
|
|
{
|
|
$feeds = array(
|
|
index_url($_SERVER) .'?do=atom',
|
|
index_url($_SERVER) .'?do=rss',
|
|
);
|
|
|
|
$httpPost = function_exists('curl_version') ? false : 'nocurl_http_post';
|
|
try {
|
|
$p = new Publisher($conf->get('plugins.PUBSUBHUB_URL'));
|
|
$p->publish_update($feeds, $httpPost);
|
|
} catch (Exception $e) {
|
|
error_log(sprintf(t('Could not publish to PubSubHubbub: %s'), $e->getMessage()));
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
/**
|
|
* Http function used to post to the hub endpoint without cURL extension.
|
|
*
|
|
* @param string $url Hub endpoint.
|
|
* @param string $postString String to POST.
|
|
*
|
|
* @return bool
|
|
*
|
|
* @throws Exception An error occurred.
|
|
*/
|
|
function nocurl_http_post($url, $postString) {
|
|
$params = array('http' => array(
|
|
'method' => 'POST',
|
|
'content' => $postString,
|
|
'user_agent' => 'PubSubHubbub-Publisher-PHP/1.0',
|
|
));
|
|
|
|
$context = stream_context_create($params);
|
|
$fp = @fopen($url, 'rb', false, $context);
|
|
if (!$fp) {
|
|
throw new Exception(sprintf(t('Could not post to %s'), $url));
|
|
}
|
|
$response = @stream_get_contents($fp);
|
|
if ($response === false) {
|
|
throw new Exception(sprintf(t('Bad response from the hub %s'), $url));
|
|
}
|
|
return $response;
|
|
}
|
|
|
|
/**
|
|
* This function is never called, but contains translation calls for GNU gettext extraction.
|
|
*/
|
|
function pubsubhubbub_dummy_translation()
|
|
{
|
|
// meta
|
|
t('Enable PubSubHubbub feed publishing.');
|
|
}
|