'; $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 .= ''; if (is_null($date_separator)) { $header = sprintf('

    %s%s

    ', $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); }