source: trunk/feed.php @ 2299

Last change on this file since 2299 was 2299, checked in by plg, 16 years ago

Bug fixed: as rvelices notified me by email, my header replacement script was
bugged (r2297 was repeating new and old header).

By the way, I've also removed the replacement keywords. We were using them
because it was a common usage with CVS but it is advised not to use them with
Subversion. Personnaly, it is a problem when I search differences between 2
Piwigo installations outside Subversion.

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008      Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24define('PHPWG_ROOT_PATH','./');
25include_once(PHPWG_ROOT_PATH.'include/common.inc.php');
26include_once(PHPWG_ROOT_PATH.'include/functions_notification.inc.php');
27
28// +-----------------------------------------------------------------------+
29// |                               functions                               |
30// +-----------------------------------------------------------------------+
31
32/**
33 * creates a Unix timestamp (number of seconds since 1970-01-01 00:00:00
34 * GMT) from a MySQL datetime format (2005-07-14 23:01:37)
35 *
36 * @param string mysql datetime format
37 * @return int timestamp
38 */
39function mysqldt_to_ts($mysqldt)
40{
41  $date = explode_mysqldt($mysqldt);
42  return mktime($date['hour'], $date['minute'], $date['second'],
43                $date['month'], $date['day'], $date['year']);
44}
45
46/**
47 * creates an ISO 8601 format date (2003-01-20T18:05:41+04:00) from Unix
48 * timestamp (number of seconds since 1970-01-01 00:00:00 GMT)
49 *
50 * function copied from Dotclear project http://dotclear.net
51 *
52 * @param int timestamp
53 * @return string ISO 8601 date format
54 */
55function ts_to_iso8601($ts)
56{
57  $tz = date('O',$ts);
58  $tz = substr($tz, 0, -2).':'.substr($tz, -2);
59  return date('Y-m-d\\TH:i:s',$ts).$tz;
60}
61
62// +-----------------------------------------------------------------------+
63// |                            initialization                             |
64// +-----------------------------------------------------------------------+
65
66$feed_id= isset($_GET['feed']) ? $_GET['feed'] : '';
67$image_only=isset($_GET['image_only']);
68
69// echo '<pre>'.generate_key(50).'</pre>';
70if ( !empty($feed_id) )
71{
72  $query = '
73SELECT user_id,
74       last_check
75  FROM '.USER_FEED_TABLE.'
76  WHERE id = \''.$feed_id.'\'
77;';
78  $feed_row = mysql_fetch_assoc(pwg_query($query));
79  if ( empty($feed_row) )
80  {
81    page_not_found('Unknown/missing feed identifier');
82  }
83  if ($feed_row['user_id']!=$user['id'])
84  { // new user
85    $user = build_user( $feed_row['user_id'], true );
86  }
87}
88else
89{
90  $image_only = true;
91  if (!is_a_guest())
92  {// auto session was created - so switch to guest
93    $user = build_user( $conf['guest_id'], true );
94  }
95}
96
97// Check the status now after the user has been loaded
98check_status(ACCESS_GUEST);
99
100list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
101
102include_once(PHPWG_ROOT_PATH.'include/feedcreator.class.php');
103
104set_make_full_url();
105
106$rss = new UniversalFeedCreator();
107$rss->encoding=get_pwg_charset();
108$rss->title = $conf['gallery_title'];
109$rss->title.= ' (as '.$user['username'].')';
110
111$rss->link = $conf['gallery_url'];
112
113// +-----------------------------------------------------------------------+
114// |                            Feed creation                              |
115// +-----------------------------------------------------------------------+
116
117$news = array();
118if (!$image_only)
119{
120  $news = news($feed_row['last_check'], $dbnow, true, true);
121
122  if (count($news) > 0)
123  {
124    $item = new FeedItem();
125    $item->title = sprintf(l10n('New on %s'),
126        format_date($dbnow, 'mysql_datetime') );
127    $item->link = $conf['gallery_url'];
128
129    // content creation
130    $item->description = '<ul>';
131    foreach ($news as $line)
132    {
133      $item->description.= '<li>'.$line.'</li>';
134    }
135    $item->description.= '</ul>';
136    $item->descriptionHtmlSyndicated = true;
137
138    $item->date = mysqldt_to_ts($dbnow);
139    $item->author = 'PhpWebGallery notifier';
140    $item->guid= sprintf('%s', $dbnow);;
141
142    $rss->addItem($item);
143
144    $query = '
145UPDATE '.USER_FEED_TABLE.'
146  SET last_check = \''.$dbnow.'\'
147  WHERE id = \''.$feed_id.'\'
148;';
149    pwg_query($query);
150  }
151}
152
153if ( !empty($feed_id) and empty($news) )
154{// update the last check from time to time to avoid deletion by maintenance tasks
155  if ( !isset($feed_row['last_check'])
156    or time()-mysqldt_to_ts($feed_row['last_check']) > 30*24*3600 )
157  {
158    $query = '
159UPDATE '.USER_FEED_TABLE.'
160  SET last_check = DATE_ADD(\''.$dbnow.'\', INTERVAL -15 DAY )
161  WHERE id = \''.$feed_id.'\'
162;';
163    pwg_query($query);
164  }
165}
166
167$dates = get_recent_post_dates_array($conf['recent_post_dates']['RSS']);
168
169foreach($dates as $date_detail)
170{ // for each recent post date we create a feed item
171  $item = new FeedItem();
172  $date = $date_detail['date_available'];
173  $item->title = get_title_recent_post_date($date_detail);
174  $item->link = make_index_url(
175        array(
176          'chronology_field' => 'posted',
177          'chronology_style'=> 'monthly',
178          'chronology_view' => 'calendar',
179          'chronology_date' => explode('-', substr($date,0,10) )
180        )
181      );
182
183  $item->description .=
184    '<a href="'.make_index_url().'">'.$conf['gallery_title'].'</a><br/> ';
185
186  $item->description .= get_html_description_recent_post_date($date_detail);
187
188  $item->descriptionHtmlSyndicated = true;
189
190  $item->date = mysqldt_to_ts($date);
191  $item->author = 'PhpWebGallery notifier';
192  $item->guid= sprintf('%s', 'pics-'.$date);;
193
194  $rss->addItem($item);
195}
196
197$fileName= $conf['local_data_dir'].'/tmp';
198@mkdir($fileName); // just in case
199$fileName.='/feed.xml';
200// send XML feed
201echo $rss->saveFeed('RSS2.0', $fileName, true);
202?>
Note: See TracBrowser for help on using the repository browser.