From aabdb3e9295474760b2d3fd5d76d2c235970fe16 Mon Sep 17 00:00:00 2001 From: plegall Date: Wed, 14 Feb 2007 22:53:02 +0000 Subject: 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 --- action.php | 24 ++++++--- admin/history.php | 101 ++++++++++++++++++++++++++++++++++-- admin/include/functions.php | 101 ++++++++++++++++++++++++++++++++++-- include/functions.inc.php | 4 +- include/functions_user.inc.php | 43 ++++++++------- install/db/51-database.php | 61 ++++++++++++++++++++++ install/phpwebgallery_structure.sql | 1 + template/yoga/admin/history.tpl | 42 +++++++++++++++ 8 files changed, 340 insertions(+), 37 deletions(-) create mode 100644 install/db/51-database.php diff --git a/action.php b/action.php index 586d730a3..73ac6d72b 100644 --- a/action.php +++ b/action.php @@ -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; diff --git a/admin/history.php b/admin/history.php index ea7add177..516e940cf 100644 --- a/admin/history.php +++ b/admin/history.php @@ -94,6 +94,9 @@ if (isset($_POST['submit'])) ); } + $search['fields']['pictures'] = $_POST['pictures']; + $search['fields']['high'] = $_POST['high']; + // echo '
'; print_r($search); echo '
'; 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()); + } + } } } @@ -351,11 +415,14 @@ if (isset($page['search'])) if (isset($page['search']['fields']['date-before'])) { $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 @@ -379,6 +448,28 @@ $template->assign_vars( 'END_YEAR' => @$form['end_year'], ) ); + +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 | diff --git a/admin/include/functions.php b/admin/include/functions.php index 4c56dc20f..ad493f877 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -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 = ''."\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.= " \n"; + $xml_string.= " ".$row['id']."\n"; + $xml_string.= " ".$row['path']."\n"; + + foreach ($tags_of[ $row['id'] ] as $tag_id) + { + $xml_string.= " ".$tag_name_of[$tag_id]."\n"; + } + + $xml_string.= " \n"; + } + + $xml_string.= ''; + 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) * diff --git a/include/functions.inc.php b/include/functions.inc.php index 42e54415c..c52fa5457 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -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').' ) ;'; diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php index bf514ed31..b1ddddf0f 100644 --- a/include/functions_user.inc.php +++ b/include/functions_user.inc.php @@ -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; - + } } } diff --git a/install/db/51-database.php b/install/db/51-database.php new file mode 100644 index 000000000..21b22d18b --- /dev/null +++ b/install/db/51-database.php @@ -0,0 +1,61 @@ + diff --git a/install/phpwebgallery_structure.sql b/install/phpwebgallery_structure.sql index 52c671eba..0b39c9018 100644 --- a/install/phpwebgallery_structure.sql +++ b/install/phpwebgallery_structure.sql @@ -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; diff --git a/template/yoga/admin/history.tpl b/template/yoga/admin/history.tpl index 746890ab8..f0d364d6f 100644 --- a/template/yoga/admin/history.tpl +++ b/template/yoga/admin/history.tpl @@ -49,6 +49,39 @@ + + + + + + @@ -68,6 +101,7 @@ {lang:user} {lang:IP} {lang:image} + {lang:high quality} {lang:section} {lang:category} {lang:tags} @@ -79,6 +113,14 @@ {detail.USER} {detail.IP} {detail.IMAGE} + + + {lang:yes} + + + {lang:no} + + {detail.SECTION} {detail.CATEGORY} {detail.TAGS} -- cgit v1.2.3