// ATOM and RSS feed.
if ($targetPage == Router::$PAGE_FEED_ATOM || $targetPage == Router::$PAGE_FEED_RSS) {
$feedType = $targetPage == Router::$PAGE_FEED_RSS ? FeedBuilder::$FEED_RSS : FeedBuilder::$FEED_ATOM;
- header('Content-Type: application/'. $feedType .'+xml; charset=utf-8');
-
- // Cache system
- $query = $_SERVER['QUERY_STRING'];
- $cache = new CachedPage(
- $conf->get('resource.page_cache'),
- page_url($_SERVER),
- startsWith($query, 'do='. $targetPage) && !$loginManager->isLoggedIn()
- );
- $cached = $cache->cachedVersion();
- if (!empty($cached)) {
- echo $cached;
- exit;
- }
- $factory = new FormatterFactory($conf, $loginManager->isLoggedIn());
- // Generate data.
- $feedGenerator = new FeedBuilder(
- $bookmarkService,
- $factory->getFormatter(),
- $feedType,
- $_SERVER,
- $_GET,
- $loginManager->isLoggedIn()
- );
- $feedGenerator->setLocale(strtolower(setlocale(LC_COLLATE, 0)));
- $feedGenerator->setHideDates($conf->get('privacy.hide_timestamps') && !$loginManager->isLoggedIn());
- $feedGenerator->setUsePermalinks(isset($_GET['permalinks']) || !$conf->get('feed.rss_permalinks'));
- $data = $feedGenerator->buildData();
-
- // Process plugin hook.
- $pluginManager->executeHooks('render_feed', $data, array(
- 'loggedin' => $loginManager->isLoggedIn(),
- 'target' => $targetPage,
- ));
-
- // Render the template.
- $PAGE->assignAll($data);
- $PAGE->renderPage('feed.'. $feedType);
- $cache->cache(ob_get_contents());
- ob_end_flush();
+ header('Location: ./feed-'. $feedType .'?'. http_build_query($_GET));
exit;
}
// Display opensearch plugin (XML)
if ($targetPage == Router::$PAGE_OPENSEARCH) {
- header('Content-Type: application/xml; charset=utf-8');
- $PAGE->assign('serverurl', index_url($_SERVER));
- $PAGE->renderPage('opensearch');
+ header('Location: ./open-search');
exit;
}
// -------- User clicks on a tag in a link: The tag is added to the list of searched tags (searchtags=...)
if (isset($_GET['addtag'])) {
- // Get previous URL (http_referer) and add the tag to the searchtags parameters in query.
- if (empty($_SERVER['HTTP_REFERER'])) {
- // In case browser does not send HTTP_REFERER
- header('Location: ?searchtags='.urlencode($_GET['addtag']));
- exit;
- }
- parse_str(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY), $params);
-
- // Prevent redirection loop
- if (isset($params['addtag'])) {
- unset($params['addtag']);
- }
-
- // Check if this tag is already in the search query and ignore it if it is.
- // Each tag is always separated by a space
- if (isset($params['searchtags'])) {
- $current_tags = explode(' ', $params['searchtags']);
- } else {
- $current_tags = array();
- }
- $addtag = true;
- foreach ($current_tags as $value) {
- if ($value === $_GET['addtag']) {
- $addtag = false;
- break;
- }
- }
- // Append the tag if necessary
- if (empty($params['searchtags'])) {
- $params['searchtags'] = trim($_GET['addtag']);
- } elseif ($addtag) {
- $params['searchtags'] = trim($params['searchtags']).' '.trim($_GET['addtag']);
- }
-
- // We also remove page (keeping the same page has no sense, since the
- // results are different)
- unset($params['page']);
-
- header('Location: ?'.http_build_query($params));
+ header('Location: ./add-tag/'. $_GET['addtag']);
exit;
}
// -------- User clicks on a tag in result count: Remove the tag from the list of searched tags (searchtags=...)
if (isset($_GET['removetag'])) {
- // Get previous URL (http_referer) and remove the tag from the searchtags parameters in query.
- if (empty($_SERVER['HTTP_REFERER'])) {
- header('Location: ?');
- exit;
- }
-
- // In case browser does not send HTTP_REFERER
- parse_str(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY), $params);
-
- // Prevent redirection loop
- if (isset($params['removetag'])) {
- unset($params['removetag']);
- }
-
- if (isset($params['searchtags'])) {
- $tags = explode(' ', $params['searchtags']);
- // Remove value from array $tags.
- $tags = array_diff($tags, array($_GET['removetag']));
- $params['searchtags'] = implode(' ', $tags);
-
- if (empty($params['searchtags'])) {
- unset($params['searchtags']);
- }
-
- // We also remove page (keeping the same page has no sense, since
- // the results are different)
- unset($params['page']);
- }
- header('Location: ?'.http_build_query($params));
+ header('Location: ./remove-tag/'. $_GET['removetag']);
exit;
}
// -------- User wants to change the number of bookmarks per page (linksperpage=...)
if (isset($_GET['linksperpage'])) {
- if (is_numeric($_GET['linksperpage'])) {
- $_SESSION['LINKS_PER_PAGE']=abs(intval($_GET['linksperpage']));
- }
-
- if (! empty($_SERVER['HTTP_REFERER'])) {
- $location = generateLocation($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'], array('linksperpage'));
- } else {
- $location = '?';
- }
- header('Location: '. $location);
+ header('Location: ./links-per-page?nb='. $_GET['linksperpage']);
exit;
}
// -------- User wants to see only private bookmarks (toggle)
if (isset($_GET['visibility'])) {
- if ($_GET['visibility'] === 'private') {
- // Visibility not set or not already private, set private, otherwise reset it
- if (empty($_SESSION['visibility']) || $_SESSION['visibility'] !== 'private') {
- // See only private bookmarks
- $_SESSION['visibility'] = 'private';
- } else {
- unset($_SESSION['visibility']);
- }
- } elseif ($_GET['visibility'] === 'public') {
- if (empty($_SESSION['visibility']) || $_SESSION['visibility'] !== 'public') {
- // See only public bookmarks
- $_SESSION['visibility'] = 'public';
- } else {
- unset($_SESSION['visibility']);
- }
- }
-
- if (! empty($_SERVER['HTTP_REFERER'])) {
- $location = generateLocation($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'], array('visibility'));
- } else {
- $location = '?';
- }
- header('Location: '. $location);
+ header('Location: ./visibility/'. $_GET['visibility']);
exit;
}
// -------- User wants to see only untagged bookmarks (toggle)
if (isset($_GET['untaggedonly'])) {
- $_SESSION['untaggedonly'] = empty($_SESSION['untaggedonly']);
-
- if (! empty($_SERVER['HTTP_REFERER'])) {
- $location = generateLocation($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'], array('untaggedonly'));
- } else {
- $location = '?';
- }
- header('Location: '. $location);
+ header('Location: ./untagged-only');
exit;
}
$this->get('/tag-list', '\Shaarli\Front\Controller\TagCloudController:list')->setName('taglist');
$this->get('/daily', '\Shaarli\Front\Controller\DailyController:index')->setName('daily');
$this->get('/daily-rss', '\Shaarli\Front\Controller\DailyController:rss')->setName('dailyrss');
+ $this->get('/feed-atom', '\Shaarli\Front\Controller\FeedController:atom')->setName('feedatom');
+ $this->get('/feed-rss', '\Shaarli\Front\Controller\FeedController:rss')->setName('feedrss');
+ $this->get('/open-search', '\Shaarli\Front\Controller\OpenSearchController:index')->setName('opensearch');
$this->get('/add-tag/{newTag}', '\Shaarli\Front\Controller\TagController:addTag')->setName('add-tag');
+ $this->get('/remove-tag/{tag}', '\Shaarli\Front\Controller\TagController:removeTag')->setName('remove-tag');
+
+ $this
+ ->get('/links-per-page', '\Shaarli\Front\Controller\SessionFilterController:linksPerPage')
+ ->setName('filter-links-per-page')
+ ;
+ $this
+ ->get('/visibility/{visibility}', '\Shaarli\Front\Controller\SessionFilterController:visibility')
+ ->setName('visibility')
+ ;
+ $this
+ ->get('/untagged-only', '\Shaarli\Front\Controller\SessionFilterController:untaggedOnly')
+ ->setName('untagged-only')
+ ;
})->add('\Shaarli\Front\ShaarliMiddleware');
$response = $app->run(true);