';
$item_tmpl = '
%3$s %1$s';
foreach ($news as $item)
{
$html .= sprintf($item_tmpl,
news_date($item['date'], $locale),
$item['link'],
$item['title']
);
}
$html .= '';
return $html;
}
/**
* @param string $dt date in the form ISO 8601 (2015-02-24T15:42:00+01:00)
* @param string $locale
*
* @return string localised date
*/
function news_date($dt, $locale = 'en')
{
$eng_months = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
$localised_months = array(_r('Jan'), _r('Feb'), _r('Mar'), _r('Apr'), _r('May'), _r('Jun'), _r('Jul'), _r('Aug'), _r('Sep'), _r('Oct'), _r('Nov'), _r('Dec'));
$date_format = _r('M d Y');
if ((strpbrk($date_format, 'dj') == false) // check valid day formats
|| (strpbrk($date_format, 'M') == false) // check valid month formats (all are 'FmMn' but we replace them in 3 letter form)
|| (strpbrk($date_format, 'oYy') == false)) // check valid year formats
{
$date_format = 'M d Y'; // fallback for invalid date format localisation
}
return str_replace($eng_months, $localised_months, date($date_format, strtotime($dt)));
}
/**
* @param string $locale
* @param integer $count
* @param integer $cache_timeout
*
* @return array
*/
function get_news($locale = 'en', $count = 5, $cache_timeout = 5)
{
return get_feed(blog_link($locale), $count, cache_timeout);
}
/**
*/
function get_feed($url, $count = 5, $cache_timeout = 5)
{
include_once G_APP_ROOT . '/lib/simplepie/simplepie.inc';
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->set_cache_location(realpath(G_APP_ROOT . '/_nav/var/tmp/cache'));
$feed->set_cache_duration(3600 * $cache_timeout);
$feed->set_timeout(2);
$feed->enable_order_by_date(true);
$feed->init();
$feed->handle_content_type();
$items = array();
foreach ($feed->get_items(0, $count) as $item)
{
$items[] = array(
'source' => $item->get_feed()->get_link(),
'link' => $item->get_permalink(),
'title' => $item->get_title(),
'date' => $item->get_date('c'),
'desc' => $item->get_description(),
'author' => $item->get_author()
);
}
unset($feed);
return $items;
}
/**
*
* @param string $locale locale this feed is expected to be in
* @param string $news_title feed title
* @param string $link feed main site title
* @param string $feed feed url
* @param integer $count how many items to return
* @param string $skip url whose element we want to skip (why?)
* @param boolean split title that has been built by aggregator
* @param string $discrete_title more discrete title
*
* @return string
*/
function show_feed($locale, $news_title, $link, $feed, $count = 5, $skip = null, $split = false, $discrete_title = null) {
if (!is_null($skip))
$count += 5;
$data = get_feed($feed, $count);
if(0 == count($data)) {
$feed = rtrim($feed, '10'); // cut 10 as a fallback (type=rss)
$data = get_feed($feed, $count);
}
if(0 == count($data)) {
$feed = $feed .'10'; // add 10 as a fallback (type=rss10)
$data = get_feed($feed, $count);
}
if(0 == count($data)) {
return;
}
$s = '';
$header = '';
$source = null;
$date_separator = (is_null($discrete_title) ? null : '| ');
$s .= '';
foreach ($data as $d) {
if (!is_null($skip) && strpos($d['link'], $skip) !== false)
continue;
if ($split && strpos($d['title'], ') : ') !== false) {
$title = explode(') : ', $d['title']);
$source = ' / ' . array_shift($title) . ')';
$source = (is_null($date_separator) ? $source : null);
$title = implode(' : ', $title);
} else {
$title = $d['title'];
$source = null;
}
$s .= sprintf('- %s%s %s%s
',
$discrete_title, $d['link'], $title, $date_separator, news_date($d['date'], $locale));
$discrete_title = null;
}
$s .= '
';
if (is_null($date_separator)) {
$header = sprintf('', $link, $news_title, $source);
}
$s = $header . $s;
echo $s;
}
/**
*/
function blog_link($locale)
{
$news = array(
'el' => 'https://blog.mageia.org/el/',
'en' => 'https://blog.mageia.org/en/',
'es' => 'https://blog.mageia.org/es/',
'fr' => 'https://blog.mageia.org/fr/',
'de' => 'https://blog.mageia.org/de/',
'it' => 'https://blog.mageia.org/it/',
'pl' => 'https://blog.mageia.org/en/', // pl when up to date
'pt' => 'https://blog.mageia.org/pt/',
'ro' => 'https://blog.mageia.org/ro/',
'ru' => 'https://blog.mageia.org/en/', // ru, when up to date
'tr' => 'https://blog.mageia.org/tr/',
/* missing: et, fi, lv, nb, nl, sl, zh-cn, zh-tw */
);
if (!array_key_exists($locale, $news))
$locale = 'en';
$source_url = $news[$locale];
return $source_url;
}
function planet_link($locale)
{
$planets = array('en', 'fr', 'de', 'es', 'it', 'pt');
$locale = in_array($locale, $planets) ? $locale : 'en';
return sprintf('https://planet.mageia.org/%s/', $locale);
}