diff --git a/admin/history.php b/admin/history.php index 9a4238fc8..ed7951f1d 100644 --- a/admin/history.php +++ b/admin/history.php @@ -26,15 +26,6 @@ if (!defined('PHPWG_ROOT_PATH')) include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); include_once(PHPWG_ROOT_PATH.'admin/include/functions_history.inc.php'); -if (isset($_GET['start']) and is_numeric($_GET['start'])) -{ - $page['start'] = $_GET['start']; -} -else -{ - $page['start'] = 0; -} - $types = array_merge(array('none'), get_enums(HISTORY_TABLE, 'image_type')); $display_thumbnails = array('no_display_thumbnail' => l10n('No display'), @@ -48,107 +39,6 @@ $display_thumbnails = array('no_display_thumbnail' => l10n('No display'), check_status(ACCESS_ADMINISTRATOR); -// +-----------------------------------------------------------------------+ -// | Build search criteria and redirect to results | -// +-----------------------------------------------------------------------+ - -$page['errors'] = array(); -$search = array(); - -if (isset($_POST['submit'])) -{ - // dates - if (!empty($_POST['start'])) - { - check_input_parameter('start', $_POST, false, '/^\d{4}-\d{2}-\d{2}$/'); - $search['fields']['date-after'] = $_POST['start']; - } - - if (!empty($_POST['end'])) - { - check_input_parameter('end', $_POST, false, '/^\d{4}-\d{2}-\d{2}$/'); - $search['fields']['date-before'] = $_POST['end']; - } - - if (empty($_POST['types'])) - { - $search['fields']['types'] = $types; - } - else - { - check_input_parameter('types', $_POST, true, '/^('.implode('|', $types).')$/'); - $search['fields']['types'] = $_POST['types']; - } - - $search['fields']['user'] = intval($_POST['user']); - - if (!empty($_POST['image_id'])) - { - $search['fields']['image_id'] = intval($_POST['image_id']); - } - - if (!empty($_POST['filename'])) - { - $search['fields']['filename'] = str_replace( - '*', - '%', - pwg_db_real_escape_string($_POST['filename']) - ); - } - - if (!empty($_POST['ip'])) - { - $search['fields']['ip'] = str_replace( - '*', - '%', - pwg_db_real_escape_string($_POST['ip']) - ); - } - - check_input_parameter('display_thumbnail', $_POST, false, '/^('.implode('|', array_keys($display_thumbnails)).')$/'); - - $search['fields']['display_thumbnail'] = $_POST['display_thumbnail']; - // Display choise are also save to one cookie - if (!empty($_POST['display_thumbnail']) - and isset($display_thumbnails[$_POST['display_thumbnail']])) - { - $cookie_val = $_POST['display_thumbnail']; - } - else - { - $cookie_val = null; - } - - pwg_set_cookie_var('display_thumbnail', $cookie_val, strtotime('+1 month') ); - - // TODO manage inconsistency of having $_POST['image_id'] and - // $_POST['filename'] simultaneously - - if (!empty($search)) - { - // register search rules in database, then they will be available on - // thumbnails page and picture page. - $query =' -INSERT INTO '.SEARCH_TABLE.' - (rules) - VALUES - (\''.pwg_db_real_escape_string(serialize($search)).'\') -;'; - - pwg_query($query); - - $search_id = pwg_db_insert_id(SEARCH_TABLE); - - redirect( - PHPWG_ROOT_PATH.'admin.php?page=history&search_id='.$search_id - ); - } - else - { - $page['errors'][] = l10n('Empty query. No criteria has been entered.'); - } -} - // +-----------------------------------------------------------------------+ // | template init | // +-----------------------------------------------------------------------+ @@ -165,351 +55,6 @@ $template->assign( ) ); -// +-----------------------------------------------------------------------+ -// | history lines | -// +-----------------------------------------------------------------------+ - -if (isset($_GET['search_id']) - and $page['search_id'] = (int)$_GET['search_id']) -{ - // what are the lines to display in reality ? - $query = ' -SELECT rules - FROM '.SEARCH_TABLE.' - WHERE id = '.$page['search_id'].' -;'; - list($serialized_rules) = pwg_db_fetch_row(pwg_query($query)); - - $page['search'] = unserialize($serialized_rules); - - // Used when filtering on a specific user from displayed lines - if (isset($_GET['user_id'])) - { - if (!is_numeric($_GET['user_id'])) - { - die('user_id GET parameter must be an integer value'); - } - - $page['search']['fields']['user'] = $_GET['user_id']; - - $query =' -INSERT INTO '.SEARCH_TABLE.' - (rules) - VALUES - (\''.serialize($page['search']).'\') -;'; - pwg_query($query); - - $search_id = pwg_db_insert_id(SEARCH_TABLE); - - redirect( - PHPWG_ROOT_PATH.'admin.php?page=history&search_id='.$search_id - ); - } - - /*TODO - no need to get a huge number of rows from db (should take only what needed for display + SQL_CALC_FOUND_ROWS*/ - $data = trigger_change('get_history', array(), $page['search'], $types); - usort($data, 'history_compare'); - - $page['nb_lines'] = count($data); - - //Number of ids of each kind - $history_lines = array(); - $user_ids = array(); - $username_of = array(); - $category_ids = array(); - $image_ids = array(); - $has_tags = false; - - foreach ($data as $row) - { - $user_ids[$row['user_id']] = 1; - - if (isset($row['category_id'])) - { - $category_ids[$row['category_id']] = 1; - } - - if (isset($row['image_id'])) - { - $image_ids[$row['image_id']] = 1; - } - - if (isset($row['tag_ids'])) - { - $has_tags = true; - } - - $history_lines[] = $row; - } - - // prepare reference data (users, tags, categories...) - if (count($user_ids) > 0) - { - $query = ' -SELECT '.$conf['user_fields']['id'].' AS id - , '.$conf['user_fields']['username'].' AS username - FROM '.USERS_TABLE.' - WHERE id IN ('.implode(',', array_keys($user_ids)).') -;'; - $result = pwg_query($query); - - $username_of = array(); - while ($row = pwg_db_fetch_assoc($result)) - { - $username_of[$row['id']] = stripslashes($row['username']); - } - } - - if (count($category_ids) > 0) - { - $query = ' -SELECT id, uppercats - FROM '.CATEGORIES_TABLE.' - WHERE id IN ('.implode(',', array_keys($category_ids)).') -;'; - $uppercats_of = query2array($query, 'id', 'uppercats'); - - $name_of_category = array(); - - foreach ($uppercats_of as $category_id => $uppercats) - { - $name_of_category[$category_id] = get_cat_display_name_cache( - $uppercats - ); - } - } - - if (count($image_ids) > 0) - { - $query = ' -SELECT - id, - IF(name IS NULL, file, name) AS label, - filesize, - file, - path, - representative_ext - FROM '.IMAGES_TABLE.' - WHERE id IN ('.implode(',', array_keys($image_ids)).') -;'; - $image_infos = query2array($query, 'id'); - } - - if ($has_tags > 0) - { - $query = ' -SELECT - id, - name, url_name - FROM '.TAGS_TABLE; - - global $name_of_tag; // used for preg_replace - $name_of_tag = array(); - $result = pwg_query($query); - while ($row=pwg_db_fetch_assoc($result)) - { - $name_of_tag[ $row['id'] ] = ''.trigger_change("render_tag_name", $row['name'], $row).''; - } - } - - $i = 0; - $first_line = $page['start'] + 1; - $last_line = $page['start'] + $conf['nb_logs_page']; - - $summary['total_filesize'] = 0; - $summary['guests_IP'] = array(); - - foreach ($history_lines as $line) - { - if (isset($line['image_type']) and $line['image_type'] == 'high') - { - $summary['total_filesize'] += @intval($image_infos[$line['image_id']]['filesize']); - } - - if ($line['user_id'] == $conf['guest_id']) - { - if (!isset($summary['guests_IP'][ $line['IP'] ])) - { - $summary['guests_IP'][ $line['IP'] ] = 0; - } - - $summary['guests_IP'][ $line['IP'] ]++; - } - - $i++; - - if ($i < $first_line or $i > $last_line) - { - continue; - } - - $user_string = ''; - if (isset($username_of[$line['user_id']])) - { - $user_string.= $username_of[$line['user_id']]; - } - else - { - $user_string.= $line['user_id']; - } - $user_string.= ' +'; - - $tags_string = ''; - if (isset($line['tag_ids'])) - { - $tags_string = preg_replace_callback( - '/(\d+)/', - function($m) use ($name_of_tag) { return isset($name_of_tag[$m[1]]) ? $name_of_tag[$m[1]] : $m[1];} , - str_replace( - ',', - ', ', - $line['tag_ids'] - ) - ); - } - - $image_string = ''; - if (isset($line['image_id'])) - { - $picture_url = make_picture_url( - array( - 'image_id' => $line['image_id'], - ) - ); - - if (isset($image_infos[$line['image_id']])) - { - $element = array( - 'id' => $line['image_id'], - 'file' => $image_infos[$line['image_id']]['file'], - 'path' => $image_infos[$line['image_id']]['path'], - 'representative_ext' => $image_infos[$line['image_id']]['representative_ext'], - ); - $thumbnail_display = $page['search']['fields']['display_thumbnail']; - } - else - { - $thumbnail_display = 'no_display_thumbnail'; - } - - $image_title = '('.$line['image_id'].')'; - - if (isset($image_infos[$line['image_id']]['label'])) - { - $image_title.= ' '.trigger_change('render_element_description', $image_infos[$line['image_id']]['label']); - } - else - { - $image_title.= ' unknown filename'; - } - - $image_string = ''; - - switch ($thumbnail_display) - { - case 'no_display_thumbnail': - { - $image_string= ''.$image_title.''; - break; - } - case 'display_thumbnail_classic': - { - $image_string = - '' - .''.$image_title.'' - .''; - break; - } - case 'display_thumbnail_hoverbox': - { - $image_string = - '' - .''.$image_title.'' - .''.$image_title.''; - break; - } - } - } - - // Put in ajax response done - $template->append( - 'search_results', - array( - 'DATE' => $line['date'], - 'TIME' => $line['time'], - 'USER' => $user_string, - 'IP' => $line['IP'], - 'IMAGE' => $image_string, - 'TYPE' => $line['image_type'], - 'SECTION' => $line['section'], - 'CATEGORY' => isset($line['category_id']) - ? ( isset($name_of_category[$line['category_id']]) - ? $name_of_category[$line['category_id']] - : 'deleted '.$line['category_id'] ) - : '', - 'TAGS' => $tags_string, - ) - ); - } - - $summary['nb_guests'] = 0; - if (count(array_keys($summary['guests_IP'])) > 0) - { - $summary['nb_guests'] = count(array_keys($summary['guests_IP'])); - - // we delete the "guest" from the $username_of hash so that it is - // avoided in next steps - unset($username_of[ $conf['guest_id'] ]); - } - - $summary['nb_members'] = count($username_of); - - $member_strings = array(); - foreach ($username_of as $user_id => $user_name) - { - $member_string = $user_name.' +'; - - $member_strings[] = $member_string; - } - - // Put in ajax response - $template->assign( - 'search_summary', - array( - 'NB_LINES' => l10n_dec( - '%d line filtered', '%d lines filtered', - $page['nb_lines'] - ), - 'FILESIZE' => $summary['total_filesize'] != 0 ? ceil($summary['total_filesize']/1024).' MB' : '', - 'USERS' => l10n_dec( - '%d user', '%d users', - $summary['nb_members'] + $summary['nb_guests'] - ), - 'MEMBERS' => sprintf( - l10n_dec('%d member', '%d members', $summary['nb_members']).': %s', - implode(', ', $member_strings) - ), - 'GUESTS' => l10n_dec( - '%d guest', '%d guests', - $summary['nb_guests'] - ), - ) - ); - - unset($name_of_tag); -} - // +-----------------------------------------------------------------------+ // | navigation bar | // +-----------------------------------------------------------------------+ @@ -543,23 +88,6 @@ if (isset($page['search'])) { $form['end'] = $page['search']['fields']['date-before']; } - - $form['types'] = $page['search']['fields']['types']; - - if (isset($page['search']['fields']['user'])) - { - $form['user'] = $page['search']['fields']['user']; - } - else - { - $form['user'] = null; - } - - $form['image_id'] = @$page['search']['fields']['image_id']; - $form['filename'] = @$page['search']['fields']['filename']; - $form['ip'] = @$page['search']['fields']['ip']; - - $form['display_thumbnail'] = @$page['search']['fields']['display_thumbnail']; } else { @@ -572,7 +100,6 @@ else pwg_get_cookie_var('display_thumbnail', 'no_display_thumbnail'); } - $template->assign( array( 'IMAGE_ID' => @$form['image_id'], @@ -583,28 +110,6 @@ $template->assign( ) ); -$template->assign( - array( - 'type_option_values' => $types, - 'type_option_selected' => $form['types'] - ) - ); - - -$query = ' -SELECT - '.$conf['user_fields']['id'].' AS id, - '.$conf['user_fields']['username'].' AS username - FROM '.USERS_TABLE.' - ORDER BY username ASC -;'; -$template->assign( - array( - 'user_options' => query2array($query, 'id','username'), - 'user_options_selected' => array(@$form['user']) - ) -); - $template->assign('display_thumbnails', $display_thumbnails); $template->assign('display_thumbnail_selected', $form['display_thumbnail']); $template->assign('guest_id', $conf['guest_id']); diff --git a/include/ws_functions/pwg.php b/include/ws_functions/pwg.php index 78f8b6fb5..6d14d38fc 100644 --- a/include/ws_functions/pwg.php +++ b/include/ws_functions/pwg.php @@ -581,6 +581,7 @@ SELECT /** * API method * Returns lines of an history search + * @since 13 */ function ws_history_search($param, &$service) {