- new feature : RSS notification feed. Feed generator is an external tool

(FeedCreator class v1.7.2). New file feed.php

- new database field : comments.validation_date (datetime). This field is
  required for notification feed.

- new database field : users.feed_id (varchar(50)). users.feed_id is an
  alias of users.id but is much more complicated to find (50 characters,
  figures or letters, case sensitive) : the purpose is to keep it secret (as
  far as possible).

- new database field : users.last_feed_check (datetime)

- new database field : users.registration_date (datetime)

- bug fixed : no need to add the (unavailable) session id to install.php in
  the installation form.

- modified database field : images.date_available become more precise (date
  to datetime). This precision is needed for notification feed.

- new index : comments_i1 (validation_date). Might be useful for feed
  queries.

- new index : comments_i2 (image_id). Useful each time you want to have
  informations about an element and its associated comments.

- version 9.11 of mysqldump outputs database field names and table names
  with backquote "`" (didn't find how to take them off)


git-svn-id: http://piwigo.org/svn/trunk@801 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
plegall 2005-07-16 14:29:35 +00:00
parent 315f9c5670
commit 9bafdff171
15 changed files with 2306 additions and 206 deletions

View file

@ -180,7 +180,8 @@ $template->assign_vars(array(
'NAME_IMG'=>isset($_POST['name'])?$_POST['name']:@$row['name'],
'SIZE_IMG'=>@$row['width'].' * '.@$row['height'],
'FILESIZE_IMG'=>@$row['filesize'].' KB',
'REGISTRATION_DATE_IMG'=> format_date($row['date_available']),
'REGISTRATION_DATE_IMG'
=> format_date($row['date_available'], 'mysql_datetime', true),
'AUTHOR_IMG'=>isset($_POST['author'])?$_POST['author']:@$row['author'],
'CREATION_DATE_IMG'=>$date,
'KEYWORDS_IMG'=>isset($_POST['keywords'])?$_POST['keywords']:@$row['keywords'],

View file

@ -31,7 +31,8 @@ if (!defined('PHPWG_ROOT_PATH'))
}
include_once(PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php');
define('CURRENT_DATE', date('Y-m-d'));
list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
define('CURRENT_DATE', $dbnow);
// +-----------------------------------------------------------------------+
// | functions |
// +-----------------------------------------------------------------------+

View file

@ -31,7 +31,9 @@ if (!defined('PHPWG_ROOT_PATH'))
}
include_once( PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php');
define('CURRENT_DATE', date('Y-m-d'));
list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
define('CURRENT_DATE', $dbnow);
$error_labels = array('PWG-UPDATE-1' => $lang['update_wrong_dirname_short'],
'PWG-UPDATE-2' => $lang['update_missing_tn_short']);
$errors = array();

View file

@ -293,6 +293,16 @@ $template->assign_block_vars('summary', array(
'U_SUMMARY'=>add_session_id( 'about.php?'.str_replace( '&', '&', $_SERVER['QUERY_STRING'] ) )
));
// notification feed
$template->assign_block_vars(
'summary',
array(
'TITLE'=>l10n('RSS notification feed'),
'NAME'=>l10n('Notification feed'),
'U_SUMMARY'=>
'feed.php'.(ANONYMOUS != $user['id'] ? '?feed='.$user['feed_id'] : '')
));
//------------------------------------------------------ main part : thumbnails
if (isset($page['cat'])
and ((is_numeric($page['cat']) and $page['cat_nb_images'] != 0)

View file

@ -157,6 +157,7 @@ if (isset($_POST['validate']) and count($_POST['comment_id']) > 0)
$query = '
UPDATE '.COMMENTS_TABLE.'
SET validated = \'true\'
, validation_date = NOW()
WHERE id IN ('.implode(',', $_POST['comment_id']).')
;';
pwg_query($query);

View file

@ -1,3 +1,36 @@
2005-06-16 Pierrick LE GALL
* new feature : RSS notification feed. Feed generator is an
external tool (FeedCreator class v1.7.2). New file feed.php
* new database field : comments.validation_date (datetime). This
field is required for notification feed.
* new database field : users.feed_id (varchar(50)). users.feed_id
is an alias of users.id but is much more complicated to find (50
characters, figures or letters, case sensitive) : the purpose is
to keep it secret (as far as possible).
* new database field : users.last_feed_check (datetime)
* new database field : users.registration_date (datetime)
* bug fixed : no need to add the (unavailable) session id to
install.php in the installation form.
* modified database field : images.date_available become more
precise (date to datetime). This precision is needed for
notification feed.
* new index : comments_i1 (validation_date). Might be useful for
feed queries.
* new index : comments_i2 (image_id). Useful each time you want to
have informations about an element and its associated comments.
* version 9.11 of mysqldump outputs database field names and table
names with backquote "`" (didn't find how to take them off)
2005-06-30 Pierrick LE GALL
* category permissions management comes back! (it disappeared in

445
feed.php Normal file
View file

@ -0,0 +1,445 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $RCSfile$
// | last update : $Date$
// | last modifier : $Author$
// | revision : $Revision$
// +-----------------------------------------------------------------------+
// | 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');
// +-----------------------------------------------------------------------+
// | functions |
// +-----------------------------------------------------------------------+
/**
* new comments between two dates, according to authorized categories
*
* @param string start (mysql datetime format)
* @param string end (mysql datetime format)
* @param string forbidden categories (comma separated)
* @return array comment ids
*/
function new_comments($start, $end)
{
global $user;
$query = '
SELECT DISTINCT c.id AS comment_id
FROM '.COMMENTS_TABLE.' AS c
, '.IMAGE_CATEGORY_TABLE.' AS ic
WHERE c.image_id = ic.image_id
AND c.validation_date > \''.$start.'\'
AND c.validation_date <= \''.$end.'\'
AND category_id NOT IN ('.$user['forbidden_categories'].')
;';
return array_from_query($query, 'comment_id');
}
/**
* unvalidated at a precise date
*
* Comments that are registered and not validated yet on a precise date
*
* @param string date (mysql datetime format)
* @return array comment ids
*/
function unvalidated_comments($date)
{
$query = '
SELECT DISTINCT id
FROM '.COMMENTS_TABLE.'
WHERE date <= \''.$date.'\'
AND (validated = \'false\'
OR validation_date > \''.$date.'\')
;';
return array_from_query($query, 'id');
}
/**
* new elements between two dates, according to authorized categories
*
* @param string start (mysql datetime format)
* @param string end (mysql datetime format)
* @param string forbidden categories (comma separated)
* @return array element ids
*/
function new_elements($start, $end)
{
global $user;
$query = '
SELECT DISTINCT image_id
FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
WHERE date_available > \''.$start.'\'
AND date_available <= \''.$end.'\'
AND category_id NOT IN ('.$user['forbidden_categories'].')
;';
return array_from_query($query, 'image_id');
}
/**
* updated categories between two dates, according to authorized categories
*
* @param string start (mysql datetime format)
* @param string end (mysql datetime format)
* @param string forbidden categories (comma separated)
* @return array element ids
*/
function updated_categories($start, $end)
{
global $user;
$query = '
SELECT DISTINCT category_id
FROM '.IMAGES_TABLE.' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON image_id = id
WHERE date_available > \''.$start.'\'
AND date_available <= \''.$end.'\'
AND category_id NOT IN ('.$user['forbidden_categories'].')
;';
return array_from_query($query, 'category_id');
}
/**
* new registered users between two dates
*
* @param string start (mysql datetime format)
* @param string end (mysql datetime format)
* @return array user ids
*/
function new_users($start, $end)
{
$query = '
SELECT id
FROM '.USERS_TABLE.'
WHERE registration_date > \''.$start.'\'
AND registration_date <= \''.$end.'\'
;';
return array_from_query($query, 'id');
}
/**
* What's new between two dates ?
*
* Informations : number of new comments, number of new elements, number of
* updated categories. Administrators are also informed about : number of
* unvalidated comments, number of new users (TODO : number of unvalidated
* elements)
*
* @param string start date (mysql datetime format)
* @param string end date (mysql datetime format)
*/
function news($start, $end)
{
global $user;
$news = array();
$nb_new_comments = count(new_comments($start, $end));
if ($nb_new_comments > 0)
{
array_push($news, sprintf(l10n('%d new comments'), $nb_new_comments));
}
$nb_new_elements = count(new_elements($start, $end));
if ($nb_new_elements > 0)
{
array_push($news, sprintf(l10n('%d new elements'), $nb_new_elements));
}
$nb_updated_categories = count(updated_categories($start, $end));
if ($nb_updated_categories > 0)
{
array_push($news, sprintf(l10n('%d categories updated'),
$nb_updated_categories));
}
if ('admin' == $user['status'])
{
$nb_unvalidated_comments = count(unvalidated_comments($end));
if ($nb_unvalidated_comments > 0)
{
array_push($news, sprintf(l10n('%d comments to validate'),
$nb_unvalidated_comments));
}
$nb_new_users = count(new_users($start, $end));
if ($nb_new_users > 0)
{
array_push($news, sprintf(l10n('%d new users'), $nb_new_users));
}
}
return $news;
}
/**
* explodes a MySQL datetime format (2005-07-14 23:01:37) in fields "year",
* "month", "day", "hour", "minute", "second".
*
* @param string mysql datetime format
* @return array
*/
function explode_mysqldt($mysqldt)
{
$date = array();
list($date['year'],
$date['month'],
$date['day'],
$date['hour'],
$date['minute'],
$date['second'])
= preg_split('/[-: ]/', $mysqldt);
return $date;
}
/**
* creates a MySQL datetime format (2005-07-14 23:01:37) from a Unix
* timestamp (number of seconds since 1970-01-01 00:00:00 GMT)
*
* @param int unix timestamp
* @return string mysql datetime format
*/
function ts_to_mysqldt($ts)
{
return date('Y-m-d H:i:s', $ts);
}
/**
* 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 |
// +-----------------------------------------------------------------------+
// clean $user array (include/user.inc.php has been executed)
$user = array();
// echo '<pre>'.generate_key(50).'</pre>';
if (isset($_GET['feed'])
and preg_match('/^[A-Za-z0-9]{50}$/', $_GET['feed']))
{
$query = '
SELECT id, status, last_feed_check
FROM '.USERS_TABLE.'
WHERE feed_id = \''.$_GET['feed'].'\'
;';
$user = mysql_fetch_array(pwg_query($query));
}
else
{
$user = array('id' => ANONYMOUS,
'status' => 'guest');
}
$user['forbidden_categories'] = calculate_permissions($user['id'],
$user['status']);
if ('' == $user['forbidden_categories'])
{
$user['forbidden_categories'] = '-1';
}
list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
include_once(PHPWG_ROOT_PATH.'include/feedcreator.class.php');
$rss = new UniversalFeedCreator();
// $rss->useCached(); // use cached version if age<1 hour
$rss->title = 'PhpWebGallery notifications';
$rss->link = 'http://phpwebgallery.net';
// +-----------------------------------------------------------------------+
// | Feed creation |
// +-----------------------------------------------------------------------+
if (ANONYMOUS != $user['id'])
{
$news = news($user['last_feed_check'], $dbnow);
if (count($news) > 0)
{
// echo '<pre>';
// print_r($news);
// echo '</pre>';
$item = new FeedItem();
$item->title = sprintf(l10n('New on %s'), $dbnow);
$item->link = 'http://phpwebgallery.net';
// content creation
$item->description = '<ul>';
foreach ($news as $line)
{
$item->description.= '<li>'.$line.'</li>';
}
$item->description.= '</ul>';
$item->descriptionHtmlSyndicated = true;
$item->date = $dbnow;
$item->author = 'PhpWebGallery notifier';
$rss->addItem($item);
}
$query = '
UPDATE '.USERS_TABLE.'
SET last_feed_check = \''.$dbnow.'\'
WHERE id = '.$user['id'].'
;';
pwg_query($query);
}
else
{
// The feed is filled with periodical blocks of informations. Date
// "checkpoints" cut the blocks. The first step is to find those
// checkpoints according to the configured feed period.
//
// checkpoints are first calculated in Unix timestamp (number of seconds
// since 1970-01-01 00:00:00 GMT) and then converted to MySQL datetime
// format.
$now = explode_mysqldt($dbnow);
$checkpoints = array();
$checkpoints[0] = mysqldt_to_ts($dbnow);
// if the feed period was not configured the right way (ie among the list
// of possible values), the configuration is overloaded here.
if (!in_array($conf['feed_period'],
array('hour', 'half day', 'day', 'week', 'month')))
{
$conf['feed_period'] = 'week';
}
// foreach feed_period possible, we need to find the beginning of the
// current period. The variable $timeshift contains the shift to apply to
// each checkpoint to find the previous one with strtotime function
switch ($conf['feed_period'])
{
// 2005-07-14 23:36:19 => 2005-07-14 23:00:00
case 'hour' :
{
$checkpoints[1] = mktime($now['hour'],0,0,
$now['month'],$now['day'],$now['year']);
$timeshift = '1 hour ago';
break;
}
// 2005-07-14 23:36:19 => 2005-07-14 12:00:00
case 'half day' :
{
$checkpoints[1] = mktime(($now['hour'] < 12) ? 0 : 12,0,0,
$now['month'],$now['day'],$now['year']);
$timeshift = '12 hours ago';
break;
}
// 2005-07-14 23:36:19 => 2005-07-14 00:00:00
case 'day' :
{
$checkpoints[1] = mktime(0,0,0,$now['month'],$now['day'],$now['year']);
$timeshift = '1 day ago';
break;
}
// 2005-07-14 23:36:19 => 2005-07-11 00:00:00
case 'week' :
{
$checkpoints[1] = strtotime('last monday', $checkpoints[0]);
$timeshift = '1 week ago';
break;
}
// 2005-07-14 23:36:19 => 2005-07-01 00:00:00
case 'month' :
{
$checkpoints[1] = mktime(0,0,0,$now['month'],1,$now['year']);
$timeshift = '1 month ago';
break;
}
}
for ($i = 2; $i <= 11; $i++)
{
$checkpoints[$i] = strtotime($timeshift, $checkpoints[$i-1]);
}
// converts all timestamp values to MySQL datetime format
$checkpoints = array_map('ts_to_mysqldt', $checkpoints);
for ($i = 1; $i <= max(array_keys($checkpoints)); $i++)
{
$news = news($checkpoints[$i], $checkpoints[$i-1]);
if (count($news) > 0)
{
$item = new FeedItem();
$item->title = sprintf(l10n('New from %s to %s'),
$checkpoints[$i],
$checkpoints[$i-1]);
$item->link = 'http://phpwebgallery.net';
// content creation
$item->description = '<ul>';
foreach ($news as $line)
{
$item->description.= '<li>'.$line.'</li>';
}
$item->description.= '</ul>';
$item->descriptionHtmlSyndicated = true;
$item->date = ts_to_iso8601(mysqldt_to_ts($checkpoints[$i-1]));
$item->author = 'PhpWebGallery notifier';
$rss->addItem($item);
}
}
}
// send XML feed
echo $rss->saveFeed('RSS2.0', '', true);
?>

View file

@ -212,4 +212,8 @@ $conf['show_version'] = true;
// If the array is empty, the "Links" box won't be displayed on the main
// page.
$conf['links'] = array();
// feed_period : how long between two feed refresh ? Possible values are
// "hour", "half day", "day", "week", "month".
$conf['feed_period'] = 'week';
?>

File diff suppressed because it is too large Load diff

View file

@ -110,6 +110,7 @@ SELECT id
$insert['nb_line_page'] = $conf['nb_line_page'];
$insert['language'] = $conf['default_language'];
$insert['recent_period'] = $conf['recent_period'];
$insert['feed_id'] = find_available_feed_id();
$insert['expand'] = boolean_to_string($conf['auto_expand']);
$insert['show_nb_comments'] = boolean_to_string($conf['show_nb_comments']);
if ( $mail_address != '' )
@ -141,6 +142,13 @@ INSERT INTO '.USERS_TABLE.'
$is_first = false;
}
$query.= ')
;';
pwg_query($query);
$query = '
UPDATE '.USERS_TABLE.'
SET registration_date = NOW()
WHERE id = '.mysql_insert_id().'
;';
pwg_query($query);
}
@ -379,4 +387,27 @@ SELECT username
return $username;
}
/**
* search an available feed_id
*
* @return string feed identifier
*/
function find_available_feed_id()
{
while (true)
{
$key = generate_key(50);
$query = '
SELECT COUNT(*)
FROM '.USERS_TABLE.'
WHERE feed_id = \''.$key.'\'
;';
list($count) = mysql_fetch_row(pwg_query($query));
if (0 == $count)
{
return $key;
}
}
}
?>

View file

@ -156,11 +156,6 @@ class Template {
// Run the compiled code.
$_str = '';
// echo '<pre>'.($this->compiled_code[$handle]).'</pre>';
$fp = @fopen( './log/debug.log', 'a+' );
fwrite( $fp, "\n\n" );
fwrite( $fp, $this->compiled_code[$handle] );
fclose( $fp );
eval($this->compiled_code[$handle]);
$this->output.= $_str;

View file

@ -306,6 +306,13 @@ if ( isset( $_POST['install'] ))
$query.= ",'admin','".$language."'";
$query.= ",'".$admin_mail."');";
mysql_query($query);
$query = '
UPDATE '.USERS_TABLE.'
SET feed_id = \''.find_available_feed_id().'\'
WHERE id = 1
;';
mysql_query($query);
// guest user
$query = 'INSERT INTO '.USERS_TABLE;
@ -348,7 +355,7 @@ $template->assign_vars(
'L_END_TITLE'=>$lang['install_end_title'],
'L_END_MESSAGE'=>$lang['install_end_message'],
'F_ACTION'=>add_session_id( 'install.php' ),
'F_ACTION'=>'install.php',
'F_DB_HOST'=>$dbhost,
'F_DB_USER'=>$dbuser,
'F_DB_NAME'=>$dbname,

View file

@ -1,4 +1,5 @@
table:caddie
table:categories
table:comments
table:config
@ -17,8 +18,10 @@ table:user_group
table:users
table:waiting
column:user_id table:caddie type:smallint nullable:N length:5 signed:Y
column:element_id table:caddie type:mediumint nullable:N length:8 signed:Y
column:id table:categories type:smallint nullable:N length:5 signed:N
column:date_last table:categories type:date nullable:Y
column:date_last table:categories type:datetime nullable:Y
column:nb_images table:categories type:mediumint nullable:N length:8 signed:N
column:name table:categories type:varchar nullable:N length:255 binary:N
column:id_uppercat table:categories type:smallint nullable:Y length:5 signed:N
@ -39,6 +42,7 @@ column:date table:comments type:datetime
column:author table:comments type:varchar nullable:Y length:255 binary:N
column:content table:comments type:longtext nullable:Y
column:validated table:comments type:enum('true','false') nullable:N
column:validation_date table:comments type:datetime nullable:Y
column:param table:config type:varchar nullable:N length:40 binary:N
column:value table:config type:varchar nullable:Y length:255 binary:N
column:comment table:config type:varchar nullable:Y length:255 binary:N
@ -58,7 +62,7 @@ column:image_id table:image_category type:mediumint
column:category_id table:image_category type:smallint nullable:N length:5 signed:N
column:id table:images type:mediumint nullable:N length:8 signed:N
column:file table:images type:varchar nullable:N length:255 binary:N
column:date_available table:images type:date nullable:N
column:date_available table:images type:datetime nullable:N
column:date_creation table:images type:date nullable:Y
column:tn_ext table:images type:varchar nullable:Y length:4 binary:N
column:name table:images type:varchar nullable:Y length:255 binary:N
@ -91,7 +95,7 @@ column:user_id table:user_group type:smallint
column:group_id table:user_group type:smallint nullable:N length:5 signed:N
column:id table:users type:smallint nullable:N length:5 signed:N
column:username table:users type:varchar nullable:N length:20 binary:Y
column:password table:users type:varchar nullable:N length:255 binary:N
column:password table:users type:varchar nullable:Y length:32 binary:N
column:mail_address table:users type:varchar nullable:Y length:255 binary:N
column:nb_image_line table:users type:tinyint nullable:N length:1 signed:N
column:nb_line_page table:users type:tinyint nullable:N length:3 signed:N
@ -103,6 +107,9 @@ column:expand table:users type:enum('true','false')
column:show_nb_comments table:users type:enum('true','false') nullable:N
column:recent_period table:users type:tinyint nullable:N length:3 signed:N
column:template table:users type:varchar nullable:N length:255 binary:N
column:last_feed_check table:users type:datetime nullable:Y
column:feed_id table:users type:varchar nullable:Y length:50 binary:Y
column:registration_date table:users type:datetime nullable:N
column:id table:waiting type:int nullable:N length:10 signed:N
column:storage_category_id table:waiting type:smallint nullable:N length:5 signed:N
column:file table:waiting type:varchar nullable:N length:255 binary:N
@ -113,6 +120,8 @@ column:tn_ext table:waiting type:char
column:validated table:waiting type:enum('true','false') nullable:N
column:infos table:waiting type:text nullable:Y
PK:caddie_pk table:caddie column:user_id
PK:caddie_pk table:caddie column:element_id
PK:categories_pk table:categories column:id
PK:comments_pk table:comments column:id
PK:config_pk table:config column:param
@ -137,6 +146,8 @@ PK:users_pk table:users column:id
PK:waiting_pk table:waiting column:id
index:categories_i2 table:categories column:id_uppercat
index:comments_i2 table:comments column:validation_date
index:comments_i1 table:comments column:image_id
index:history_i1 table:history column:date
index:image_category_i1 table:image_category column:image_id
index:image_category_i2 table:image_category column:category_id

View file

@ -1,275 +1,281 @@
-- MySQL dump 8.21
-- MySQL dump 9.11
--
-- Host: localhost Database: pwg-bsf
---------------------------------------------------------
-- Server version 3.23.49-log
-- ------------------------------------------------------
-- Server version 4.0.24_Debian-10-log
--
-- Table structure for table 'phpwebgallery_caddie'
-- Table structure for table `phpwebgallery_caddie`
--
DROP TABLE IF EXISTS phpwebgallery_caddie;
CREATE TABLE phpwebgallery_caddie (
user_id smallint(5) NOT NULL default '0',
element_id mediumint(8) NOT NULL default '0',
PRIMARY KEY (user_id,element_id)
DROP TABLE IF EXISTS `phpwebgallery_caddie`;
CREATE TABLE `phpwebgallery_caddie` (
`user_id` smallint(5) NOT NULL default '0',
`element_id` mediumint(8) NOT NULL default '0',
PRIMARY KEY (`user_id`,`element_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_categories'
-- Table structure for table `phpwebgallery_categories`
--
DROP TABLE IF EXISTS phpwebgallery_categories;
CREATE TABLE phpwebgallery_categories (
id smallint(5) unsigned NOT NULL auto_increment,
date_last date default NULL,
nb_images mediumint(8) unsigned NOT NULL default '0',
name varchar(255) NOT NULL default '',
id_uppercat smallint(5) unsigned default NULL,
comment text,
dir varchar(255) default NULL,
rank tinyint(3) unsigned default NULL,
status enum('public','private') NOT NULL default 'public',
site_id tinyint(4) unsigned default '1',
visible enum('true','false') NOT NULL default 'true',
uploadable enum('true','false') NOT NULL default 'false',
representative_picture_id mediumint(8) unsigned default NULL,
uppercats varchar(255) NOT NULL default '',
commentable enum('true','false') NOT NULL default 'true',
global_rank varchar(255) default NULL,
PRIMARY KEY (id),
KEY categories_i2 (id_uppercat)
DROP TABLE IF EXISTS `phpwebgallery_categories`;
CREATE TABLE `phpwebgallery_categories` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`date_last` datetime default NULL,
`nb_images` mediumint(8) unsigned NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`id_uppercat` smallint(5) unsigned default NULL,
`comment` text,
`dir` varchar(255) default NULL,
`rank` tinyint(3) unsigned default NULL,
`status` enum('public','private') NOT NULL default 'public',
`site_id` tinyint(4) unsigned default '1',
`visible` enum('true','false') NOT NULL default 'true',
`uploadable` enum('true','false') NOT NULL default 'false',
`representative_picture_id` mediumint(8) unsigned default NULL,
`uppercats` varchar(255) NOT NULL default '',
`commentable` enum('true','false') NOT NULL default 'true',
`global_rank` varchar(255) default NULL,
PRIMARY KEY (`id`),
KEY `categories_i2` (`id_uppercat`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_comments'
-- Table structure for table `phpwebgallery_comments`
--
DROP TABLE IF EXISTS phpwebgallery_comments;
CREATE TABLE phpwebgallery_comments (
id int(11) unsigned NOT NULL auto_increment,
image_id mediumint(8) unsigned NOT NULL default '0',
date datetime NOT NULL default '0000-00-00 00:00:00',
author varchar(255) default NULL,
content longtext,
validated enum('true','false') NOT NULL default 'false',
PRIMARY KEY (id)
DROP TABLE IF EXISTS `phpwebgallery_comments`;
CREATE TABLE `phpwebgallery_comments` (
`id` int(11) unsigned NOT NULL auto_increment,
`image_id` mediumint(8) unsigned NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`author` varchar(255) default NULL,
`content` longtext,
`validated` enum('true','false') NOT NULL default 'false',
`validation_date` datetime default NULL,
PRIMARY KEY (`id`),
KEY `comments_i2` (`validation_date`),
KEY `comments_i1` (`image_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_config'
-- Table structure for table `phpwebgallery_config`
--
DROP TABLE IF EXISTS phpwebgallery_config;
CREATE TABLE phpwebgallery_config (
param varchar(40) NOT NULL default '',
value varchar(255) default NULL,
comment varchar(255) default NULL,
PRIMARY KEY (param)
DROP TABLE IF EXISTS `phpwebgallery_config`;
CREATE TABLE `phpwebgallery_config` (
`param` varchar(40) NOT NULL default '',
`value` varchar(255) default NULL,
`comment` varchar(255) default NULL,
PRIMARY KEY (`param`)
) TYPE=MyISAM COMMENT='configuration table';
--
-- Table structure for table 'phpwebgallery_favorites'
-- Table structure for table `phpwebgallery_favorites`
--
DROP TABLE IF EXISTS phpwebgallery_favorites;
CREATE TABLE phpwebgallery_favorites (
user_id smallint(5) unsigned NOT NULL default '0',
image_id mediumint(8) unsigned NOT NULL default '0',
PRIMARY KEY (user_id,image_id)
DROP TABLE IF EXISTS `phpwebgallery_favorites`;
CREATE TABLE `phpwebgallery_favorites` (
`user_id` smallint(5) unsigned NOT NULL default '0',
`image_id` mediumint(8) unsigned NOT NULL default '0',
PRIMARY KEY (`user_id`,`image_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_group_access'
-- Table structure for table `phpwebgallery_group_access`
--
DROP TABLE IF EXISTS phpwebgallery_group_access;
CREATE TABLE phpwebgallery_group_access (
group_id smallint(5) unsigned NOT NULL default '0',
cat_id smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (group_id,cat_id)
DROP TABLE IF EXISTS `phpwebgallery_group_access`;
CREATE TABLE `phpwebgallery_group_access` (
`group_id` smallint(5) unsigned NOT NULL default '0',
`cat_id` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`group_id`,`cat_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_groups'
-- Table structure for table `phpwebgallery_groups`
--
DROP TABLE IF EXISTS phpwebgallery_groups;
CREATE TABLE phpwebgallery_groups (
id smallint(5) unsigned NOT NULL auto_increment,
name varchar(255) NOT NULL default '',
PRIMARY KEY (id)
DROP TABLE IF EXISTS `phpwebgallery_groups`;
CREATE TABLE `phpwebgallery_groups` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_history'
-- Table structure for table `phpwebgallery_history`
--
DROP TABLE IF EXISTS phpwebgallery_history;
CREATE TABLE phpwebgallery_history (
date datetime NOT NULL default '0000-00-00 00:00:00',
login varchar(15) default NULL,
IP varchar(50) NOT NULL default '',
category varchar(150) default NULL,
file varchar(50) default NULL,
picture varchar(150) default NULL,
KEY history_i1 (date)
DROP TABLE IF EXISTS `phpwebgallery_history`;
CREATE TABLE `phpwebgallery_history` (
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`login` varchar(15) default NULL,
`IP` varchar(50) NOT NULL default '',
`category` varchar(150) default NULL,
`file` varchar(50) default NULL,
`picture` varchar(150) default NULL,
KEY `history_i1` (`date`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_image_category'
-- Table structure for table `phpwebgallery_image_category`
--
DROP TABLE IF EXISTS phpwebgallery_image_category;
CREATE TABLE phpwebgallery_image_category (
image_id mediumint(8) unsigned NOT NULL default '0',
category_id smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (image_id,category_id),
KEY image_category_i1 (image_id),
KEY image_category_i2 (category_id)
DROP TABLE IF EXISTS `phpwebgallery_image_category`;
CREATE TABLE `phpwebgallery_image_category` (
`image_id` mediumint(8) unsigned NOT NULL default '0',
`category_id` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`image_id`,`category_id`),
KEY `image_category_i1` (`image_id`),
KEY `image_category_i2` (`category_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_images'
-- Table structure for table `phpwebgallery_images`
--
DROP TABLE IF EXISTS phpwebgallery_images;
CREATE TABLE phpwebgallery_images (
id mediumint(8) unsigned NOT NULL auto_increment,
file varchar(255) NOT NULL default '',
date_available date NOT NULL default '0000-00-00',
date_creation date default NULL,
tn_ext varchar(4) default '',
name varchar(255) default NULL,
comment text,
author varchar(255) default NULL,
hit int(10) unsigned NOT NULL default '0',
filesize mediumint(9) unsigned default NULL,
width smallint(9) unsigned default NULL,
height smallint(9) unsigned default NULL,
keywords varchar(255) default NULL,
storage_category_id smallint(5) unsigned default NULL,
representative_ext varchar(4) default NULL,
date_metadata_update date default NULL,
average_rate float(5,2) unsigned default NULL,
path varchar(255) NOT NULL default '',
PRIMARY KEY (id),
KEY images_i2 (date_available),
KEY images_i1 (storage_category_id),
KEY images_i3 (average_rate),
KEY images_i4 (hit),
KEY images_i5 (date_creation)
DROP TABLE IF EXISTS `phpwebgallery_images`;
CREATE TABLE `phpwebgallery_images` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`file` varchar(255) NOT NULL default '',
`date_available` datetime NOT NULL default '0000-00-00 00:00:00',
`date_creation` date default NULL,
`tn_ext` varchar(4) default '',
`name` varchar(255) default NULL,
`comment` text,
`author` varchar(255) default NULL,
`hit` int(10) unsigned NOT NULL default '0',
`filesize` mediumint(9) unsigned default NULL,
`width` smallint(9) unsigned default NULL,
`height` smallint(9) unsigned default NULL,
`keywords` varchar(255) default NULL,
`storage_category_id` smallint(5) unsigned default NULL,
`representative_ext` varchar(4) default NULL,
`date_metadata_update` date default NULL,
`average_rate` float(5,2) unsigned default NULL,
`path` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `images_i2` (`date_available`),
KEY `images_i1` (`storage_category_id`),
KEY `images_i3` (`average_rate`),
KEY `images_i4` (`hit`),
KEY `images_i5` (`date_creation`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_rate'
-- Table structure for table `phpwebgallery_rate`
--
DROP TABLE IF EXISTS phpwebgallery_rate;
CREATE TABLE phpwebgallery_rate (
user_id smallint(5) unsigned NOT NULL default '0',
element_id mediumint(8) unsigned NOT NULL default '0',
rate tinyint(2) unsigned NOT NULL default '0',
PRIMARY KEY (user_id,element_id)
DROP TABLE IF EXISTS `phpwebgallery_rate`;
CREATE TABLE `phpwebgallery_rate` (
`user_id` smallint(5) unsigned NOT NULL default '0',
`element_id` mediumint(8) unsigned NOT NULL default '0',
`rate` tinyint(2) unsigned NOT NULL default '0',
PRIMARY KEY (`user_id`,`element_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_sessions'
-- Table structure for table `phpwebgallery_sessions`
--
DROP TABLE IF EXISTS phpwebgallery_sessions;
CREATE TABLE phpwebgallery_sessions (
id varchar(255) binary NOT NULL default '',
user_id smallint(5) unsigned NOT NULL default '0',
expiration datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
DROP TABLE IF EXISTS `phpwebgallery_sessions`;
CREATE TABLE `phpwebgallery_sessions` (
`id` varchar(255) binary NOT NULL default '',
`user_id` smallint(5) unsigned NOT NULL default '0',
`expiration` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_sites'
-- Table structure for table `phpwebgallery_sites`
--
DROP TABLE IF EXISTS phpwebgallery_sites;
CREATE TABLE phpwebgallery_sites (
id tinyint(4) NOT NULL auto_increment,
galleries_url varchar(255) NOT NULL default '',
PRIMARY KEY (id),
UNIQUE KEY sites_ui1 (galleries_url)
DROP TABLE IF EXISTS `phpwebgallery_sites`;
CREATE TABLE `phpwebgallery_sites` (
`id` tinyint(4) NOT NULL auto_increment,
`galleries_url` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `sites_ui1` (`galleries_url`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_user_access'
-- Table structure for table `phpwebgallery_user_access`
--
DROP TABLE IF EXISTS phpwebgallery_user_access;
CREATE TABLE phpwebgallery_user_access (
user_id smallint(5) unsigned NOT NULL default '0',
cat_id smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (user_id,cat_id)
DROP TABLE IF EXISTS `phpwebgallery_user_access`;
CREATE TABLE `phpwebgallery_user_access` (
`user_id` smallint(5) unsigned NOT NULL default '0',
`cat_id` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`user_id`,`cat_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_user_forbidden'
-- Table structure for table `phpwebgallery_user_forbidden`
--
DROP TABLE IF EXISTS phpwebgallery_user_forbidden;
CREATE TABLE phpwebgallery_user_forbidden (
user_id smallint(5) unsigned NOT NULL default '0',
need_update enum('true','false') NOT NULL default 'true',
forbidden_categories text,
PRIMARY KEY (user_id)
DROP TABLE IF EXISTS `phpwebgallery_user_forbidden`;
CREATE TABLE `phpwebgallery_user_forbidden` (
`user_id` smallint(5) unsigned NOT NULL default '0',
`need_update` enum('true','false') NOT NULL default 'true',
`forbidden_categories` text,
PRIMARY KEY (`user_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_user_group'
-- Table structure for table `phpwebgallery_user_group`
--
DROP TABLE IF EXISTS phpwebgallery_user_group;
CREATE TABLE phpwebgallery_user_group (
user_id smallint(5) unsigned NOT NULL default '0',
group_id smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (group_id,user_id)
DROP TABLE IF EXISTS `phpwebgallery_user_group`;
CREATE TABLE `phpwebgallery_user_group` (
`user_id` smallint(5) unsigned NOT NULL default '0',
`group_id` smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`group_id`,`user_id`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_users'
-- Table structure for table `phpwebgallery_users`
--
DROP TABLE IF EXISTS phpwebgallery_users;
CREATE TABLE phpwebgallery_users (
id smallint(5) unsigned NOT NULL auto_increment,
username varchar(20) binary NOT NULL default '',
password varchar(255) NOT NULL default '',
mail_address varchar(255) default NULL,
nb_image_line tinyint(1) unsigned NOT NULL default '5',
nb_line_page tinyint(3) unsigned NOT NULL default '3',
status enum('admin','guest') NOT NULL default 'guest',
language varchar(50) NOT NULL default 'english',
maxwidth smallint(6) default NULL,
maxheight smallint(6) default NULL,
expand enum('true','false') NOT NULL default 'false',
show_nb_comments enum('true','false') NOT NULL default 'false',
recent_period tinyint(3) unsigned NOT NULL default '7',
template varchar(255) NOT NULL default 'default',
PRIMARY KEY (id),
UNIQUE KEY users_ui1 (username)
DROP TABLE IF EXISTS `phpwebgallery_users`;
CREATE TABLE `phpwebgallery_users` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`username` varchar(20) binary NOT NULL default '',
`password` varchar(32) default NULL,
`mail_address` varchar(255) default NULL,
`nb_image_line` tinyint(1) unsigned NOT NULL default '5',
`nb_line_page` tinyint(3) unsigned NOT NULL default '3',
`status` enum('admin','guest') NOT NULL default 'guest',
`language` varchar(50) NOT NULL default 'english',
`maxwidth` smallint(6) default NULL,
`maxheight` smallint(6) default NULL,
`expand` enum('true','false') NOT NULL default 'false',
`show_nb_comments` enum('true','false') NOT NULL default 'false',
`recent_period` tinyint(3) unsigned NOT NULL default '7',
`template` varchar(255) NOT NULL default 'default',
`last_feed_check` datetime default NULL,
`feed_id` varchar(50) binary default NULL,
`registration_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `users_ui1` (`username`)
) TYPE=MyISAM;
--
-- Table structure for table 'phpwebgallery_waiting'
-- Table structure for table `phpwebgallery_waiting`
--
DROP TABLE IF EXISTS phpwebgallery_waiting;
CREATE TABLE phpwebgallery_waiting (
id int(10) unsigned NOT NULL auto_increment,
storage_category_id smallint(5) unsigned NOT NULL default '0',
file varchar(255) NOT NULL default '',
username varchar(255) NOT NULL default '',
mail_address varchar(255) NOT NULL default '',
date int(10) unsigned NOT NULL default '0',
tn_ext char(3) default NULL,
validated enum('true','false') NOT NULL default 'false',
infos text,
PRIMARY KEY (id)
DROP TABLE IF EXISTS `phpwebgallery_waiting`;
CREATE TABLE `phpwebgallery_waiting` (
`id` int(10) unsigned NOT NULL auto_increment,
`storage_category_id` smallint(5) unsigned NOT NULL default '0',
`file` varchar(255) NOT NULL default '',
`username` varchar(255) NOT NULL default '',
`mail_address` varchar(255) NOT NULL default '',
`date` int(10) unsigned NOT NULL default '0',
`tn_ext` char(3) default NULL,
`validated` enum('true','false') NOT NULL default 'false',
`infos` text,
PRIMARY KEY (`id`)
) TYPE=MyISAM;

View file

@ -342,23 +342,34 @@ if ( isset( $_POST['content'] ) && !empty($_POST['content']) )
if ( mysql_num_rows( pwg_query( $query ) ) == 0
or $conf['anti-flood_time'] == 0 )
{
$query = 'INSERT INTO '.COMMENTS_TABLE;
$query.= ' (author,date,image_id,content,validated) VALUES (';
$query.= "'".$author."'";
$query.= ',NOW(),'.$_GET['image_id'];
$query.= ",'".htmlspecialchars( $_POST['content'], ENT_QUOTES)."'";
if ( !$conf['comments_validation'] or $user['status'] == 'admin' )
{
$query.= ",'true'";
list($dbnow) = mysql_fetch_row(pwg_query('SELECT NOW();'));
$data = array();
$data{'author'} = $author;
$data{'date'} = $dbnow;
$data{'image_id'} = $_GET['image_id'];
$data{'content'} = htmlspecialchars( $_POST['content'], ENT_QUOTES);
if (!$conf['comments_validation'] or $user['status'] == 'admin')
{
$data{'validated'} = 'true';
$data{'validation_date'} = $dbnow;
}
else
{
$query.= ",'false'";
$data{'validated'} = 'false';
}
$query.= ');';
pwg_query( $query );
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
$fields = array('author', 'date', 'image_id', 'content', 'validated',
'validation_date');
mass_inserts(COMMENTS_TABLE, $fields, array($data));
// information message
$message = $lang['comment_added'];
if (!$conf['comments_validation'] or $user['status'] == 'admin')
if ( $conf['comments_validation'] and $user['status'] != 'admin' )
{
$message.= '<br />'.$lang['comment_to_validate'];
@ -479,7 +490,8 @@ if ( !empty($picture['current']['date_creation']) )
}
// date of availability
$availability_date = format_date($picture['current']['date_available']);
$availability_date = format_date($picture['current']['date_available'],
'mysql_datetime');
// size in pixels
if ($picture['current']['is_picture'])