New: history logs high quality access via action.php. A new column

#history.is_high was added. Filter was added on administration history
detail view.

Modification: function get_sql_condition_FandF was slightly refactored for
presentation improvement.


git-svn-id: http://piwigo.org/svn/trunk@1817 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
plegall 2007-02-14 22:53:02 +00:00
parent 58a359e3c1
commit aabdb3e929
8 changed files with 340 additions and 37 deletions

View file

@ -61,17 +61,17 @@ function do_error( $code, $str )
}
if ( !isset($_GET['id']) or !is_numeric($_GET['id'])
if (!isset($_GET['id'])
or !is_numeric($_GET['id'])
or !isset($_GET['part'])
or !in_array($_GET['part'], array('t','e','i','h') ) )
{
do_error(400, 'Invalid request - id/part');
}
$id = $_GET['id'];
$query = '
SELECT * FROM '. IMAGES_TABLE.'
WHERE id='.$id.'
WHERE id='.$_GET['id'].'
;';
$result = pwg_query($query);
@ -84,11 +84,14 @@ if ( empty($element_info) )
// $filter['visible_categories'] and $filter['visible_images']
// are not used because it's not necessary (filter <> restriction)
$query='
SELECT id FROM '.CATEGORIES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.'
ON category_id=id
WHERE image_id='.$id.'
'.get_sql_condition_FandF(array('forbidden_categories' => 'category_id'), 'AND').'
SELECT id
FROM '.CATEGORIES_TABLE.'
INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON category_id = id
WHERE image_id = '.$_GET['id'].'
'.get_sql_condition_FandF(
array('forbidden_categories' => 'category_id'),
' AND'
).'
LIMIT 1
;';
if ( mysql_num_rows(pwg_query($query))<1 )
@ -123,6 +126,11 @@ if ( empty($file) )
do_error(404, 'Requested file not found');
}
if ($_GET['part'] == 'h') {
$is_high = true;
pwg_log($_GET['id'], $is_high);
}
$http_headers = array();
$ctype = null;

View file

@ -94,6 +94,9 @@ if (isset($_POST['submit']))
);
}
$search['fields']['pictures'] = $_POST['pictures'];
$search['fields']['high'] = $_POST['high'];
// echo '<pre>'; print_r($search); echo '</pre>';
if (!empty($search))
@ -181,6 +184,46 @@ SELECT rules
);
}
if (isset($page['search']['fields']['pictures']))
{
$clause = null;
if ($page['search']['fields']['pictures'] == 'no')
{
$clause = 'image_id IS NULL';
}
if ($page['search']['fields']['pictures'] == 'only')
{
$clause = 'image_id IS NOT NULL';
}
if (isset($clause))
{
array_push($clauses, $clause);
}
}
if (isset($page['search']['fields']['high']))
{
$clause = null;
if ($page['search']['fields']['high'] == 'no')
{
$clause = "is_high IS NULL or is_high = 'false'";
}
if ($page['search']['fields']['high'] == 'only')
{
$clause = "is_high = 'true'";
}
if (isset($clause))
{
array_push($clauses, $clause);
}
}
$clauses = prepend_append_array_items($clauses, '(', ')');
$where_separator =
@ -198,7 +241,16 @@ SELECT COUNT(*)
list($page['nb_lines']) = mysql_fetch_row(pwg_query($query));
$query = '
SELECT date, time, user_id, IP, section, category_id, tag_ids, image_id
SELECT
date,
time,
user_id,
IP,
section,
category_id,
tag_ids,
image_id,
is_high
FROM '.HISTORY_TABLE.'
WHERE '.$where_separator.'
LIMIT '.$page['start'].', '.$conf['nb_logs_page'].'
@ -298,6 +350,18 @@ SELECT id, IF(name IS NULL, file, name) AS label
'T_CLASS' => ($i++ % 2) ? 'row1' : 'row2',
)
);
if (isset($line['image_id']))
{
if ($line['is_high'] == 'true')
{
$template->assign_block_vars('detail.high', array());
}
else
{
$template->assign_block_vars('detail.no_high', array());
}
}
}
}
@ -352,10 +416,13 @@ if (isset($page['search']))
{
$tokens = explode('-', $page['search']['fields']['date-before']);
(int)$tokens[0];
(int)$tokens[1];
(int)$tokens[2];
$form['end_year'] = (int)$tokens[0];
$form['end_month'] = (int)$tokens[1];
$form['end_day'] = (int)$tokens[2];
}
$form['pictures'] = $page['search']['fields']['pictures'];
$form['high'] = $page['search']['fields']['high'];
}
else
{
@ -364,6 +431,8 @@ else
$form['start_year'] = $form['end_year'] = date('Y');
$form['start_month'] = $form['end_month'] = date('n');
$form['start_day'] = $form['end_day'] = date('j');
$form['pictures'] = 'yes';
$form['high'] = 'yes';
}
// start date
@ -380,6 +449,28 @@ $template->assign_vars(
)
);
foreach (array('pictures', 'high') as $block)
{
foreach (array('yes', 'no', 'only') as $item)
{
$selected = '';
if ($item == $form[$block])
{
$selected = 'selected="selected"';
}
$template->assign_block_vars(
$block.'_option',
array(
'VALUE' => $item,
'CONTENT' => l10n($item),
'SELECTED' => $selected,
)
);
}
}
// +-----------------------------------------------------------------------+
// | html code display |
// +-----------------------------------------------------------------------+

View file

@ -606,7 +606,7 @@ function mass_updates($tablename, $dbfields, $datas)
UPDATE '.$tablename.'
SET ';
$is_first = true;
foreach ($dbfields['update'] as $num => $key)
foreach ($dbfields['update'] as $key)
{
if (!$is_first)
{
@ -625,13 +625,16 @@ function mass_updates($tablename, $dbfields, $datas)
}
$query.= '
WHERE ';
foreach ($dbfields['primary'] as $num => $key)
$is_first = true;
foreach ($dbfields['primary'] as $key)
{
if ($num > 1)
if (!$is_first)
{
$query.= ' AND ';
}
$query.= $key.' = \''.$data[$key].'\'';
$is_first = false;
}
$query.= '
;';
@ -1901,6 +1904,97 @@ SELECT image_id
associate_images_to_categories($images, $destinations);
}
/**
* Create an XML file with PhpWebGallery informations about a list of
* pictures.
*
* The goal of the export feature is to make easier the reading of
* informations related to pictures outside of PhpWebGallery.
*
* @param array image_ids
*/
function export_pwg_data($image_ids)
{
global $conf;
if (count($image_ids) == 0)
{
return;
}
$fp = fopen($conf['export_file'], 'w');
$xml_string = '<export>'."\n";
$query = '
SELECT tag_id,
image_id
FROM '.IMAGE_TAG_TABLE.'
WHERE image_id IN ('.implode(',', $image_ids).')
;';
$result = pwg_query($query);
$tags_of = array();
$all_tag_ids = array();
$tag_name_of = array();
if (mysql_num_rows($result))
{
while ($row = mysql_fetch_array($result))
{
array_push($all_tag_ids, $row['tag_id']);
if (!isset($tags_of[ $row['image_id'] ])) {
$tags_of[ $row['image_id'] ] = array();
}
array_push(
$tags_of[ $row['image_id'] ],
$row['tag_id']
);
}
$all_tag_ids = array_unique($all_tag_ids);
$query = '
SELECT id,
name
FROM '.TAGS_TABLE.'
WHERE id IN ('.implode(',', $all_tag_ids).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$tag_name_of[ $row['id'] ] = $row['name'];
}
}
$query = '
SELECT id,
path
FROM '.IMAGES_TABLE.'
WHERE id IN ('.implode(',', $image_ids).')
;';
$result = pwg_query($query);
while ($row = mysql_fetch_array($result))
{
$xml_string.= " <photo>\n";
$xml_string.= " <id>".$row['id']."</id>\n";
$xml_string.= " <path>".$row['path']."</path>\n";
foreach ($tags_of[ $row['id'] ] as $tag_id)
{
$xml_string.= " <tag>".$tag_name_of[$tag_id]."</tag>\n";
}
$xml_string.= " </photo>\n";
}
$xml_string.= '</export>';
fwrite($fp, $xml_string);
fclose($fp);
}
/**
* Check configuration and add notes on problem
*
@ -1937,7 +2031,6 @@ function check_conf()
);
}
}
/**
* Refer main PhpWebGallery URLs (currently PHPWG_DOMAIN domain)
*

View file

@ -410,7 +410,7 @@ function replace_search( $string, $search )
return $string;
}
function pwg_log($image_id = null)
function pwg_log($image_id = null, $is_high = false)
{
global $conf, $user, $page;
@ -468,6 +468,7 @@ INSERT INTO '.HISTORY_TABLE.'
section,
category_id,
image_id,
is_high,
tag_ids
)
VALUES
@ -483,6 +484,7 @@ INSERT INTO '.HISTORY_TABLE.'
'.(isset($page['section']) ? "'".$page['section']."'" : 'NULL').',
'.(isset($page['category']) ? $page['category'] : 'NULL').',
'.(isset($image_id) ? $image_id : 'NULL').',
'.(isset($image_id) ? "'".boolean_to_string($is_high)."'" : 'NULL').',
'.(isset($tags_string) ? "'".$tags_string."'" : 'NULL').'
)
;';

View file

@ -1089,22 +1089,20 @@ function get_email_address_as_display_text($email_address)
}
/*
* Compute sql where condition with restrict and filter data
* Compute sql where condition with restrict and filter data. "FandF" means
* Forbidden and Filters.
*
* FandF: Forbidden and Filters
*
* @param $condition_fields array:
* keys are condition to aply and
* values are sql field to use
* array('forbidden_categories' => 'ic.category_id')
* $prefix_condition string:
* this value are concatenated if sql is not empty
* $force_one_condition:
* if there are not condition , use this condition "1 = 1"
* @param array condition_fields: read function body
* @param string prefix_condition: prefixes sql if condition is not empty
* @param boolean force_one_condition: use at least "1 = 1"
*
* @return string sql where/conditions
*/
function get_sql_condition_FandF($condition_fields, $prefix_condition = null, $force_one_condition = false)
function get_sql_condition_FandF(
$condition_fields,
$prefix_condition = null,
$force_one_condition = false
)
{
global $user, $filter;
@ -1115,30 +1113,37 @@ function get_sql_condition_FandF($condition_fields, $prefix_condition = null, $f
switch($condition)
{
case 'forbidden_categories':
{
if (!empty($user['forbidden_categories']))
{
$sql_list[] = $field_name.' NOT IN ('.$user['forbidden_categories'].')';
$sql_list[] =
$field_name.' NOT IN ('.$user['forbidden_categories'].')';
}
break;
}
case 'visible_categories':
{
if (!empty($filter['visible_categories']))
{
$sql_list[] = $field_name.' IN ('.$filter['visible_categories'].')';
$sql_list[] =
$field_name.' IN ('.$filter['visible_categories'].')';
}
break;
}
case 'visible_images':
{
if (!empty($filter['visible_images']))
{
$sql_list[] = $field_name.' IN ('.$filter['visible_images'].')';
$sql_list[] =
$field_name.' IN ('.$filter['visible_images'].')';
}
break;
}
default:
{
die('Unknow condition');
break;
}
}
}

View file

@ -0,0 +1,61 @@
<?php
// +-----------------------------------------------------------------------+
// | PhpWebGallery - a PHP based picture gallery |
// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
// | Copyright (C) 2003-2007 PhpWebGallery Team - http://phpwebgallery.net |
// +-----------------------------------------------------------------------+
// | branch : BSF (Best So Far)
// | file : $Id: 45-database.php 1741 2007-01-22 21:47:03Z vdigital $
// | last update : $Date: 2007-01-22 22:47:03 +0100 (lun., 22 janv. 2007) $
// | last modifier : $Author: vdigital $
// | revision : $Revision: 1741 $
// +-----------------------------------------------------------------------+
// | 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. |
// +-----------------------------------------------------------------------+
if (!defined('PHPWG_ROOT_PATH'))
{
die('Hacking attempt!');
}
$upgrade_description = 'Add #history.is_high column';
include_once(PHPWG_ROOT_PATH.'include/constants.php');
// +-----------------------------------------------------------------------+
// | Upgrade content |
// +-----------------------------------------------------------------------+
$query = "
ALTER TABLE ".HISTORY_TABLE."
ADD COLUMN is_high ENUM('true', 'false') DEFAULT NULL
;";
pwg_query($query);
$query = "
UPDATE ".HISTORY_TABLE."
SET is_high = 'false'
WHERE image_id IS NOT NULL
AND is_high IS NULL
;";
pwg_query($query);
echo
"\n"
.'"'.$upgrade_description.'"'.', ended'
."\n"
;
?>

View file

@ -126,6 +126,7 @@ CREATE TABLE `phpwebgallery_history` (
`tag_ids` varchar(50) default NULL,
`image_id` mediumint(8) default NULL,
`summarized` enum('true','false') default 'false',
`is_high` enum('true','false') default NULL,
PRIMARY KEY (`id`),
KEY `history_i1` (`summarized`)
) TYPE=MyISAM;

View file

@ -49,6 +49,39 @@
</li>
</ul>
<ul>
<li><label></label></li>
<li></li>
</ul>
<label>
{lang:Pictures}
<select name="pictures">
<!-- BEGIN pictures_option -->
<option
value="{pictures_option.VALUE}"
{pictures_option.SELECTED}
>
{pictures_option.CONTENT}
</option>
<!-- END pictures_option -->
</select>
</label>
<label>
{lang:High quality}
<select name="high">
<!-- BEGIN high_option -->
<option
value="{high_option.VALUE}"
{high_option.SELECTED}
>
{high_option.CONTENT}
</option>
<!-- END high_option -->
</select>
</label>
<input class="submit" type="submit" name="submit" value="{lang:submit}" {TAG_INPUT_ENABLED}/>
</fieldset>
</form>
@ -68,6 +101,7 @@
<th>{lang:user}</th>
<th>{lang:IP}</th>
<th>{lang:image}</th>
<th>{lang:high quality}</th>
<th>{lang:section}</th>
<th>{lang:category}</th>
<th>{lang:tags}</th>
@ -79,6 +113,14 @@
<td>{detail.USER}</td>
<td>{detail.IP}</td>
<td>{detail.IMAGE}</td>
<td>
<!-- BEGIN high -->
<img src="{themeconf:icon_dir}/check.png" alt="{lang:yes}">
<!-- END high -->
<!-- BEGIN no_high -->
<img src="{themeconf:icon_dir}/uncheck.png" alt="{lang:no}">
<!-- END no_high -->
</td>
<td>{detail.SECTION}</td>
<td>{detail.CATEGORY}</td>
<td>{detail.TAGS}</td>