From 516df145c32d1da8acbfeb164f37896585b03236 Mon Sep 17 00:00:00 2001 From: rvelices Date: Mon, 18 Sep 2006 22:51:09 +0000 Subject: RSS feed improvements: - send 404 when feed id missing/unknown - added a guid element for each feed item (make the difference between 2 different 0/1 items - they have the same link element) - don't update last_check unless some news are available - new images/updated albums removed from the 0/1 feed item - added 5 different feed items for new images/updated albums (generated by grouping post date) with more information, thumbnails and links git-svn-id: http://piwigo.org/svn/trunk@1549 68402e56-0260-453c-a942-63ccdbb3a9ee --- feed.php | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 122 insertions(+), 13 deletions(-) (limited to 'feed.php') diff --git a/feed.php b/feed.php index ce307ece2..61fd63300 100644 --- a/feed.php +++ b/feed.php @@ -109,10 +109,10 @@ SELECT uf.user_id AS id, ;'; $user = mysql_fetch_array(pwg_query($query)); } -else + +if ( empty($user) ) { - echo l10n('Unknown feed identifier'); - exit(); + page_not_found('Unknown/missing feed identifier'); } $user['forbidden_categories'] = calculate_permissions($user['id'], @@ -126,9 +126,16 @@ list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();')); include_once(PHPWG_ROOT_PATH.'include/feedcreator.class.php'); +$base_url = 'http://'.$_SERVER["HTTP_HOST"].cookie_path(); +if ( strrpos($base_url, '/') !== strlen($base_url)-1 ) +{ + $base_url .= '/'; +} +$page['root_path']=$base_url; + $rss = new UniversalFeedCreator(); -$rss->title = $conf['gallery_title'].', notifications'; +$rss->title = $conf['gallery_title']; $rss->title.= ' (as '.$user['username'].')'; $rss->link = $conf['gallery_url']; @@ -137,14 +144,14 @@ $rss->link = $conf['gallery_url']; // | Feed creation | // +-----------------------------------------------------------------------+ -$news = news($user['last_check'], $dbnow); +$news = news($user['last_check'], $dbnow, true); if (count($news) > 0) { - $item = new FeedItem(); + $item = new FeedItem(); $item->title = sprintf(l10n('New on %s'), $dbnow); $item->link = $conf['gallery_url']; - + // content creation $item->description = ''; $item->descriptionHtmlSyndicated = true; - + $item->date = ts_to_iso8601(mysqldt_to_ts($dbnow)); - $item->author = 'PhpWebGallery notifier'; - + $item->author = 'PhpWebGallery notifier'; + $item->guid= sprintf('%s', $dbnow);; + $rss->addItem($item); -} -$query = ' + $query = ' UPDATE '.USER_FEED_TABLE.' SET last_check = \''.$dbnow.'\' WHERE id = \''.$_GET['feed'].'\' ;'; -pwg_query($query); + pwg_query($query); +} + + +// build items for new images/albums +$query = ' +SELECT date_available, + COUNT(DISTINCT id) nb_images, + COUNT(DISTINCT category_id) nb_cats + FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id + WHERE category_id NOT IN ('.$user['forbidden_categories'].') + GROUP BY date_available + ORDER BY date_available DESC + LIMIT 0,5 +;'; +$result = pwg_query($query); +$dates = array(); +while ($row = mysql_fetch_array($result)) +{ + array_push($dates, $row); +} + +foreach($dates as $date_detail) +{ // for each recent post date we create a feed item + $date = $date_detail['date_available']; + $exploded_date = explode_mysqldt($date); + $item = new FeedItem(); + $item->title = sprintf(l10n('%d new elements'), $date_detail['nb_images']); + $item->title .= ' ('.$lang['month'][(int)$exploded_date['month']].' '.$exploded_date['day'].')'; + $item->link = make_index_url( + array( + 'chronology_field' => 'posted', + 'chronology_style'=> 'monthly', + 'chronology_view' => 'calendar', + 'chronology_date' => explode('-', substr($date,0,10) ) + ) + ); + + $item->description .= + ''.$conf['gallery_title'].'
'; + + $item->description .= + '
  • ' + .sprintf(l10n('%d new elements'), $date_detail['nb_images']) + .' (' + .'' + .l10n('recent_pics_cat').'' + .')' + .'
  • '; + + // get some thumbnails ... + $query = ' +SELECT DISTINCT id, path, name, tn_ext + FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id=image_id + WHERE category_id NOT IN ('.$user['forbidden_categories'].') + AND date_available="'.$date.'" + AND tn_ext IS NOT NULL + LIMIT 0,6 +;'; + $result = pwg_query($query); + while ($row = mysql_fetch_array($result)) + { + $tn_src = get_thumbnail_src($row['path'], @$row['tn_ext']); + $item->description .= ''; + } + $item->description .= '...
    '; + + + $item->description .= + '
  • ' + .sprintf(l10n('%d categories updated'), $date_detail['nb_cats']) + .'
  • '; + // get some categories ... + $query = ' +SELECT DISTINCT c.uppercats, COUNT(DISTINCT i.id) img_count + FROM '.IMAGES_TABLE.' i INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON i.id=image_id + INNER JOIN '.CATEGORIES_TABLE.' c ON c.id=category_id + WHERE category_id NOT IN ('.$user['forbidden_categories'].') + AND date_available="'.$date.'" + GROUP BY category_id + ORDER BY img_count DESC + LIMIT 0,6 +;'; + $result = pwg_query($query); + $item->description .= ''; + + $item->descriptionHtmlSyndicated = true; + + $item->date = ts_to_iso8601(mysqldt_to_ts($date)); + $item->author = 'PhpWebGallery notifier'; + $item->guid= sprintf('%s', 'pics-'.$date);; + + $rss->addItem($item); +} // send XML feed echo $rss->saveFeed('RSS2.0', '', true); -- cgit v1.2.3