diff options
Diffstat (limited to 'BSF/feed.php')
-rw-r--r-- | BSF/feed.php | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/BSF/feed.php b/BSF/feed.php new file mode 100644 index 000000000..3c435cff1 --- /dev/null +++ b/BSF/feed.php @@ -0,0 +1,202 @@ +<?php +// +-----------------------------------------------------------------------+ +// | Piwigo - a PHP based picture gallery | +// +-----------------------------------------------------------------------+ +// | Copyright(C) 2008 Piwigo Team http://piwigo.org | +// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | +// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | +// +-----------------------------------------------------------------------+ +// | This program is free software; you can redistribute it and/or modify | +// | it under the terms of the GNU General Public License as published by | +// | the Free Software Foundation | +// | | +// | This program is distributed in the hope that it will be useful, but | +// | WITHOUT ANY WARRANTY; without even the implied warranty of | +// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | +// | General Public License for more details. | +// | | +// | You should have received a copy of the GNU General Public License | +// | along with this program; if not, write to the Free Software | +// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | +// | USA. | +// +-----------------------------------------------------------------------+ + +define('PHPWG_ROOT_PATH','./'); +include_once(PHPWG_ROOT_PATH.'include/common.inc.php'); +include_once(PHPWG_ROOT_PATH.'include/functions_notification.inc.php'); + +// +-----------------------------------------------------------------------+ +// | functions | +// +-----------------------------------------------------------------------+ + +/** + * creates a Unix timestamp (number of seconds since 1970-01-01 00:00:00 + * GMT) from a MySQL datetime format (2005-07-14 23:01:37) + * + * @param string mysql datetime format + * @return int timestamp + */ +function mysqldt_to_ts($mysqldt) +{ + $date = explode_mysqldt($mysqldt); + return mktime($date['hour'], $date['minute'], $date['second'], + $date['month'], $date['day'], $date['year']); +} + +/** + * creates an ISO 8601 format date (2003-01-20T18:05:41+04:00) from Unix + * timestamp (number of seconds since 1970-01-01 00:00:00 GMT) + * + * function copied from Dotclear project http://dotclear.net + * + * @param int timestamp + * @return string ISO 8601 date format + */ +function ts_to_iso8601($ts) +{ + $tz = date('O',$ts); + $tz = substr($tz, 0, -2).':'.substr($tz, -2); + return date('Y-m-d\\TH:i:s',$ts).$tz; +} + +// +-----------------------------------------------------------------------+ +// | initialization | +// +-----------------------------------------------------------------------+ + +$feed_id= isset($_GET['feed']) ? $_GET['feed'] : ''; +$image_only=isset($_GET['image_only']); + +// echo '<pre>'.generate_key(50).'</pre>'; +if ( !empty($feed_id) ) +{ + $query = ' +SELECT user_id, + last_check + FROM '.USER_FEED_TABLE.' + WHERE id = \''.$feed_id.'\' +;'; + $feed_row = mysql_fetch_assoc(pwg_query($query)); + if ( empty($feed_row) ) + { + page_not_found('Unknown/missing feed identifier'); + } + if ($feed_row['user_id']!=$user['id']) + { // new user + $user = build_user( $feed_row['user_id'], true ); + } +} +else +{ + $image_only = true; + if (!is_a_guest()) + {// auto session was created - so switch to guest + $user = build_user( $conf['guest_id'], true ); + } +} + +// Check the status now after the user has been loaded +check_status(ACCESS_GUEST); + +list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();')); + +include_once(PHPWG_ROOT_PATH.'include/feedcreator.class.php'); + +set_make_full_url(); + +$rss = new UniversalFeedCreator(); +$rss->encoding=get_pwg_charset(); +$rss->title = $conf['gallery_title']; +$rss->title.= ' (as '.$user['username'].')'; + +$rss->link = $conf['gallery_url']; + +// +-----------------------------------------------------------------------+ +// | Feed creation | +// +-----------------------------------------------------------------------+ + +$news = array(); +if (!$image_only) +{ + $news = news($feed_row['last_check'], $dbnow, true, true); + + if (count($news) > 0) + { + $item = new FeedItem(); + $item->title = sprintf(l10n('New on %s'), + format_date($dbnow, 'mysql_datetime') ); + $item->link = $conf['gallery_url']; + + // content creation + $item->description = '<ul>'; + foreach ($news as $line) + { + $item->description.= '<li>'.$line.'</li>'; + } + $item->description.= '</ul>'; + $item->descriptionHtmlSyndicated = true; + + $item->date = mysqldt_to_ts($dbnow); + $item->author = 'Piwigo notifier'; + $item->guid= sprintf('%s', $dbnow);; + + $rss->addItem($item); + + $query = ' +UPDATE '.USER_FEED_TABLE.' + SET last_check = \''.$dbnow.'\' + WHERE id = \''.$feed_id.'\' +;'; + pwg_query($query); + } +} + +if ( !empty($feed_id) and empty($news) ) +{// update the last check from time to time to avoid deletion by maintenance tasks + if ( !isset($feed_row['last_check']) + or time()-mysqldt_to_ts($feed_row['last_check']) > 30*24*3600 ) + { + $query = ' +UPDATE '.USER_FEED_TABLE.' + SET last_check = DATE_ADD(\''.$dbnow.'\', INTERVAL -15 DAY ) + WHERE id = \''.$feed_id.'\' +;'; + pwg_query($query); + } +} + +$dates = get_recent_post_dates_array($conf['recent_post_dates']['RSS']); + +foreach($dates as $date_detail) +{ // for each recent post date we create a feed item + $item = new FeedItem(); + $date = $date_detail['date_available']; + $item->title = get_title_recent_post_date($date_detail); + $item->link = make_index_url( + array( + 'chronology_field' => 'posted', + 'chronology_style'=> 'monthly', + 'chronology_view' => 'calendar', + 'chronology_date' => explode('-', substr($date,0,10) ) + ) + ); + + $item->description .= + '<a href="'.make_index_url().'">'.$conf['gallery_title'].'</a><br/> '; + + $item->description .= get_html_description_recent_post_date($date_detail); + + $item->descriptionHtmlSyndicated = true; + + $item->date = mysqldt_to_ts($date); + $item->author = 'Piwigo notifier'; + $item->guid= sprintf('%s', 'pics-'.$date);; + + $rss->addItem($item); +} + +$fileName= $conf['local_data_dir'].'/tmp'; +@mkdir($fileName); // just in case +$fileName.='/feed.xml'; +// send XML feed +echo $rss->saveFeed('RSS2.0', $fileName, true); +?>
\ No newline at end of file |