diff options
author | plegall <plg@piwigo.org> | 2007-01-16 23:39:39 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2007-01-16 23:39:39 +0000 |
commit | 5d9a865fe1931869d3d9edb19f64d66783a0f4f4 (patch) | |
tree | 35805541591d81cbb9a7758ddb3e2da538a2237d /admin | |
parent | 62149d74a9724bba01c5ae5b8b99fa00e0a60fe7 (diff) |
Modification: new data model for history, more compact, more efficient. A
summary table is used as cache for history stats display.
New: a Perl script fill_history.pl was added to simulate a high load on
history table (making the efficiency of the new data model obvious).
Modification: function prepend_append_array_items moved from
include/functions_search.inc.php to include/functions_search.inc.php since
this function is used in new file admin/history.php
Modification: admin/images/*_stats.img.php replaced by a simpler and more
generic admin/images/stats.img.php unique file.
New: a history detail search page was added. Currently, only start and end
dates can be modified, it's just a beginning.
git-svn-id: http://piwigo.org/svn/trunk@1727 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | admin.php | 3 | ||||
-rw-r--r-- | admin/history.php | 388 | ||||
-rw-r--r-- | admin/images/daily_stats.img.php | 126 | ||||
-rw-r--r-- | admin/images/global_stats.img.php | 126 | ||||
-rw-r--r-- | admin/images/monthly_stats.img.php | 126 | ||||
-rw-r--r-- | admin/images/stats.img.php | 241 | ||||
-rw-r--r-- | admin/stats.php | 639 |
7 files changed, 1036 insertions, 613 deletions
@@ -82,7 +82,8 @@ $template->set_filenames(array('admin' => 'admin.tpl')); $template->assign_vars( array( 'U_SITE_MANAGER'=> $link_start.'site_manager', - 'U_HISTORY'=> $link_start.'stats', + 'U_HISTORY_STAT'=> $link_start.'stats', + 'U_HISTORY_SEARCH'=> $link_start.'history', 'U_FAQ'=> $link_start.'help', 'U_SITES'=> $link_start.'remote_site', 'U_MAINTENANCE'=> $link_start.'maintenance', diff --git a/admin/history.php b/admin/history.php new file mode 100644 index 000000000..aa2405ae5 --- /dev/null +++ b/admin/history.php @@ -0,0 +1,388 @@ +<?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: 2006-11-29 05:18:11 +0100 (mer, 29 nov 2006) $ +// | last modifier : $Author: rvelices $ +// | revision : $Revision: 1620 $ +// +-----------------------------------------------------------------------+ +// | 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. | +// +-----------------------------------------------------------------------+ + +/** + * Display filtered history lines + */ + +// echo '<pre>$_POST: +// '; print_r($_POST); echo '</pre>'; +// echo '<pre>$_GET: +// '; print_r($_GET); echo '</pre>'; + +// +-----------------------------------------------------------------------+ +// | functions | +// +-----------------------------------------------------------------------+ + +// +-----------------------------------------------------------------------+ +// | initialization | +// +-----------------------------------------------------------------------+ + +if (!defined('PHPWG_ROOT_PATH')) +{ + die('Hacking attempt!'); +} + +include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); + +if (isset($_GET['start']) and is_numeric($_GET['start'])) +{ + $page['start'] = $_GET['start']; +} +else +{ + $page['start'] = 0; +} + +// +-----------------------------------------------------------------------+ +// | Check Access and exit when user status is not ok | +// +-----------------------------------------------------------------------+ + +check_status(ACCESS_ADMINISTRATOR); + +// +-----------------------------------------------------------------------+ +// | Build search criteria and redirect to results | +// +-----------------------------------------------------------------------+ + +$errors = array(); +$search = array(); + +if (isset($_POST['submit'])) +{ + // dates + if (!empty($_POST['start_year'])) + { + $search['fields']['date-after'] = sprintf( + '%d-%02d-%02d', + $_POST['start_year'], + $_POST['start_month'], + $_POST['start_day'] + ); + } + + if (!empty($_POST['end_year'])) + { + $search['fields']['date-before'] = sprintf( + '%d-%02d-%02d', + $_POST['end_year'], + $_POST['end_month'], + $_POST['end_day'] + ); + } + + // echo '<pre>'; print_r($search); echo '</pre>'; + + 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 + (\''.serialize($search).'\') +;'; + pwg_query($query); + + $search_id = mysql_insert_id(); + + redirect( + PHPWG_ROOT_PATH.'admin.php?page=history&search_id='.$search_id + ); + } + else + { + array_push($errors, $lang['search_one_clause_at_least']); + } +} + +// +-----------------------------------------------------------------------+ +// | template init | +// +-----------------------------------------------------------------------+ + +$template->set_filenames(array('history'=>'admin/history.tpl')); + +$base_url = PHPWG_ROOT_PATH.'admin.php?page=history'; + +$template->assign_vars( + array( + 'U_HELP' => PHPWG_ROOT_PATH.'popuphelp.php?page=history', + + 'F_ACTION' => PHPWG_ROOT_PATH.'admin.php?page=history' + ) + ); + +$template->assign_vars( + array( + 'TODAY_DAY' => date('d', time()), + 'TODAY_MONTH' => date('m', time()), + 'TODAY_YEAR' => date('Y', time()), + ) + ); + +// +-----------------------------------------------------------------------+ +// | 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) = mysql_fetch_row(pwg_query($query)); + + $page['search'] = unserialize($serialized_rules); + + // echo '<pre>'; print_r($page['search']); echo '</pre>'; + + $clauses = array(); + + if (isset($page['search']['fields']['date-after'])) + { + array_push( + $clauses, + "date >= '".$page['search']['fields']['date-after']."'" + ); + } + + if (isset($page['search']['fields']['date-before'])) + { + array_push( + $clauses, + "date <= '".$page['search']['fields']['date-before']."'" + ); + } + + $clauses = prepend_append_array_items($clauses, '(', ')'); + + $where_separator = + implode( + "\n AND ", + $clauses + ); + + $query = ' +SELECT COUNT(*) + FROM '.HISTORY_TABLE.' + WHERE '.$where_separator.' +'; + + list($page['nb_lines']) = mysql_fetch_row(pwg_query($query)); + + $query = ' +SELECT date, time, user_id, IP, section, category_id, tag_ids, image_id + FROM '.HISTORY_TABLE.' + WHERE '.$where_separator.' + LIMIT '.$page['start'].', '.$conf['nb_logs_page'].' +;'; + + $result = pwg_query($query); + $history_lines = array(); + while ($row = mysql_fetch_array($result)) + { + $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; + } + + array_push( + $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 = mysql_fetch_array($result)) + { + $username_of[$row['id']] = $row['username']; + } + } + + if (count($category_ids) > 0) + { + $query = ' +SELECT id, uppercats + FROM '.CATEGORIES_TABLE.' + WHERE id IN ('.implode(',', array_keys($category_ids)).') +;'; + $uppercats_of = simple_hash_from_query($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 + FROM '.IMAGES_TABLE.' + WHERE id IN ('.implode(',', array_keys($image_ids)).') +;'; + $label_of_image = simple_hash_from_query($query, 'id', 'label'); + } + + $i = 0; + + foreach ($history_lines as $line) + { + $template->assign_block_vars( + 'detail', + array( + 'DATE' => $line['date'], + 'TIME' => $line['time'], + 'USER' => isset($username_of[$line['user_id']]) + ? $username_of[$line['user_id']] + : $line['user_id'] + , + 'IP' => $line['IP'], + 'IMAGE' => isset($line['image_id']) + ? $label_of_image[$line['image_id']] + : $line['image_id'], + 'SECTION' => $line['section'], + 'CATEGORY' => isset($line['category_id']) + ? $name_of_category[$line['category_id']] + : '', + 'TAG' => $line['tag_ids'], + 'T_CLASS' => ($i++ % 2) ? 'row1' : 'row2', + ) + ); + } +} + +// $groups_string = preg_replace( +// '/(\d+)/e', +// "\$groups['$1']", +// implode( +// ', ', +// $local_user['groups'] +// ) +// ); + +// +-----------------------------------------------------------------------+ +// | navigation bar | +// +-----------------------------------------------------------------------+ + +if (isset($page['search_id'])) +{ + $navbar = create_navigation_bar( + PHPWG_ROOT_PATH.'admin.php'.get_query_string_diff(array('start')), + $page['nb_lines'], + $page['start'], + $conf['nb_logs_page'] + ); + + $template->assign_block_vars( + 'navigation', + array( + 'NAVBAR' => $navbar + ) + ); +} + +// +-----------------------------------------------------------------------+ +// | filter form | +// +-----------------------------------------------------------------------+ + +$form = array(); + +if (isset($page['search'])) +{ + if (isset($page['search']['fields']['date-after'])) + { + $tokens = explode('-', $page['search']['fields']['date-after']); + + $form['start_year'] = (int)$tokens[0]; + $form['start_month'] = (int)$tokens[1]; + $form['start_day'] = (int)$tokens[2]; + } + + if (isset($page['search']['fields']['date-before'])) + { + $tokens = explode('-', $page['search']['fields']['date-before']); + + (int)$tokens[0]; + (int)$tokens[1]; + (int)$tokens[2]; + } +} +else +{ + // by default, at page load, we want the selected date to be the current + // date + $form['start_year'] = $form['end_year'] = date('Y'); + $form['start_month'] = $form['end_month'] = date('n'); + $form['start_day'] = $form['end_day'] = date('j'); +} + +// start date +get_day_list('start_day', @$form['start_day']); +get_month_list('start_month', @$form['start_month']); +// end date +get_day_list('end_day', @$form['end_day']); +get_month_list('end_month', @$form['end_month']); + +$template->assign_vars( + array( + 'START_YEAR' => @$form['start_year'], + 'END_YEAR' => @$form['end_year'], + ) + ); + +// +-----------------------------------------------------------------------+ +// | html code display | +// +-----------------------------------------------------------------------+ + +$template->assign_var_from_handle('ADMIN_CONTENT', 'history'); +?> diff --git a/admin/images/daily_stats.img.php b/admin/images/daily_stats.img.php deleted file mode 100644 index e5d320e86..000000000 --- a/admin/images/daily_stats.img.php +++ /dev/null @@ -1,126 +0,0 @@ -<?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. | -// +-----------------------------------------------------------------------+ -//----------------------------------------------------------- include -define('PHPWG_ROOT_PATH','../../'); -define('IN_ADMIN', true); -include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); -include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); -include_once( 'phpBarGraph.php' ); - -// +-----------------------------------------------------------------------+ -// | Check Access and exit when user status is not ok | -// +-----------------------------------------------------------------------+ -check_status(ACCESS_ADMINISTRATOR); - -//------------------------------------------------ variable definition -$outputFormat = "png"; -$legend = $lang['stats_daily_graph_title']; -$imageHeight = 256; -$imageWidth = 512; -$sql = ' -SELECT DISTINCT COUNT(*) - , HOUR(DATE_FORMAT(date, \'%H:%i:%s\')) - FROM '.HISTORY_TABLE.' - WHERE YEAR(date) = '.$_GET['year'].' - AND MONTH(date) = '.$_GET['month'].' - AND DAYOFMONTH(date) = '.$_GET['day'].' - GROUP BY DATE_FORMAT(date, \'%H\') DESC;'; - -//------------------------------------------------ Image definition -$image = ImageCreate($imageWidth, $imageHeight); -//$image = ImageCreateTrueColor($imageWidth, $imageHeight); -// Fill it with your favorite background color.. -$backgroundColor = ImageColorAllocate($image, 184, 184, 184); -ImageFill($image, 0, 0, $backgroundColor); -$white = ImageColorAllocate($image, 0, 0, 0); - -// Interlace the image.. -Imageinterlace($image, 1); - -// Create a new BarGraph.. -$myBarGraph = new PhpBarGraph; -$myBarGraph->SetX(10); // Set the starting x position -$myBarGraph->SetY(10); // Set the starting y position -$myBarGraph->SetWidth($imageWidth-20); // Set how wide the bargraph will be -$myBarGraph->SetHeight($imageHeight-20); // Set how tall the bargraph will be -$myBarGraph->SetNumOfValueTicks(3); // Set this to zero if you don't want to show any. These are the vertical bars to help see the values. - - -// You can try uncommenting these lines below for different looks. - -// $myBarGraph->SetShowLabels(false); // The default is true. Setting this to false will cause phpBarGraph to not print the labels of each bar. -$myBarGraph->SetShowValues(false); // The default is true. Setting this to false will cause phpBarGraph to not print the values of each bar. -// $myBarGraph->SetBarBorder(false); // The default is true. Setting this to false will cause phpBarGraph to not print the border of each bar. -// $myBarGraph->SetShowFade(false); // The default is true. Setting this to false will cause phpBarGraph to not print each bar as a gradient. -// $myBarGraph->SetShowOuterBox(false); // The default is true. Setting this to false will cause phpBarGraph to not print the outside box. -$myBarGraph->SetBarSpacing(5); // The default is 10. This changes the space inbetween each bar. - - -// Add Values to the bargraph.. -$result = pwg_query($sql) -or die(mysql_errno().": ".mysql_error()."<BR>".$sql); - -$hours = array(); -for ($i = 0; $i <= 23; $i++) -{ - $hours[$i] = 0; -} - -while ($r = mysql_fetch_row($result)) -{ - $hours[$r[1]]= $r[0]; -} -$o=0; -while (list ($key,$value) = each($hours )) -{ - $myBarGraph->AddValue($key, $value); -} - -//$myBarGraph->SetDebug(true); -// Set the colors of the bargraph.. -$myBarGraph->SetStartBarColor("6666ff"); // This is the color on the top of every bar. -$myBarGraph->SetEndBarColor("2222aa"); // This is the color on the bottom of every bar. This is not used when SetShowFade() is set to false. -$myBarGraph->SetLineColor("000000"); // This is the color all the lines and text are printed out with. - -// Print the BarGraph to the image.. -$myBarGraph->DrawBarGraph($image); -Imagestring($image, 2, 2, $imageHeight-14, $legend, $white); - -//------------------------------------------------ Image output -if ($outputFormat == "png") -{ - header("Content-type: image/png"); - ImagePNG($image); -} -else if (in_array($outputFormat, array("jpg", "jpeg"))) -{ - header("Content-type: image/jpeg"); - Imagejpeg($image); -} -// Destroy the image. -Imagedestroy($image); -?> diff --git a/admin/images/global_stats.img.php b/admin/images/global_stats.img.php deleted file mode 100644 index 557067e42..000000000 --- a/admin/images/global_stats.img.php +++ /dev/null @@ -1,126 +0,0 @@ -<?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. | -// +-----------------------------------------------------------------------+ -//----------------------------------------------------------- include -define('PHPWG_ROOT_PATH','../../'); -define('IN_ADMIN', true); -include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); -include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); -include_once( 'phpBarGraph.php' ); - -// +-----------------------------------------------------------------------+ -// | Check Access and exit when user status is not ok | -// +-----------------------------------------------------------------------+ -check_status(ACCESS_ADMINISTRATOR); - -//------------------------------------------------ variable definition -$outputFormat = "png"; -$legend = $lang['stats_global_graph_title']; -$imageHeight = 256; -$imageWidth = 320; -$sql = "SELECT DISTINCT COUNT(*), MONTH(date) - FROM ".HISTORY_TABLE." - WHERE (date > DATE_SUB(CURRENT_DATE(), INTERVAL 12 MONTH)) - GROUP BY DATE_FORMAT(date,'%Y-%m') DESC;"; - -//------------------------------------------------ Image definition -$image = ImageCreate($imageWidth, $imageHeight); -//$image = ImageCreateTrueColor($imageWidth, $imageHeight); -// Fill it with your favorite background color.. -$backgroundColor = ImageColorAllocate($image, 184, 184, 184); -ImageFill($image, 0, 0, $backgroundColor); -$white = ImageColorAllocate($image, 0, 0, 0); - -// Interlace the image.. -Imageinterlace($image, 1); - -// Create a new BarGraph.. -$myBarGraph = new PhpBarGraph; -$myBarGraph->SetX(10); // Set the starting x position -$myBarGraph->SetY(10); // Set the starting y position -$myBarGraph->SetWidth($imageWidth-20); // Set how wide the bargraph will be -$myBarGraph->SetHeight($imageHeight-20); // Set how tall the bargraph will be -$myBarGraph->SetNumOfValueTicks(3); // Set this to zero if you don't want to show any. These are the vertical bars to help see the values. - - -// You can try uncommenting these lines below for different looks. - -// $myBarGraph->SetShowLabels(false); // The default is true. Setting this to false will cause phpBarGraph to not print the labels of each bar. - $myBarGraph->SetShowValues(false); // The default is true. Setting this to false will cause phpBarGraph to not print the values of each bar. -// $myBarGraph->SetBarBorder(false); // The default is true. Setting this to false will cause phpBarGraph to not print the border of each bar. -// $myBarGraph->SetShowFade(false); // The default is true. Setting this to false will cause phpBarGraph to not print each bar as a gradient. -// $myBarGraph->SetShowOuterBox(false); // The default is true. Setting this to false will cause phpBarGraph to not print the outside box. -$myBarGraph->SetBarSpacing(5); // The default is 10. This changes the space inbetween each bar. - - -// Add Values to the bargraph.. -$result = pwg_query($sql) -or die(mysql_errno().": ".mysql_error()."<BR>".$sql); - -//$monthes =array_fill(1,12,0); -$monthes =array(); -$date = getdate(); -$current_month = $date['mon']; -for ($i=0;$i<12;$i++) -{ - $monthes[(($current_month-$i+11)%12)+1]=0; -} - -while ($r = mysql_fetch_row($result)) -{ - if (!$monthes[$r[1]]) $monthes[$r[1]]= $r[0]; -} -$monthes = array_reverse($monthes,true); -while (list ($key,$value) = each($monthes)) -{ - $nls_key = substr($lang['month'][$key],0,3); - $myBarGraph->AddValue($nls_key, $value); -} - -//$myBarGraph->SetDebug(true); -// Set the colors of the bargraph.. -$myBarGraph->SetStartBarColor("6666ff"); // This is the color on the top of every bar. -$myBarGraph->SetEndBarColor("2222aa"); // This is the color on the bottom of every bar. This is not used when SetShowFade() is set to false. -$myBarGraph->SetLineColor("000000"); // This is the color all the lines and text are printed out with. - -// Print the BarGraph to the image.. -$myBarGraph->DrawBarGraph($image); -Imagestring($image, 2, 2, $imageHeight-14, $legend, $white); - -//------------------------------------------------ Image output -if ($outputFormat == "png") -{ - header("Content-type: image/png"); - ImagePNG($image); -} -else if (in_array($outputFormat, array("jpg", "jpeg"))) -{ - header("Content-type: image/jpeg"); - Imagejpeg($image); -} -// Destroy the image. -Imagedestroy($image); -?>
\ No newline at end of file diff --git a/admin/images/monthly_stats.img.php b/admin/images/monthly_stats.img.php deleted file mode 100644 index 5ad3b0f55..000000000 --- a/admin/images/monthly_stats.img.php +++ /dev/null @@ -1,126 +0,0 @@ -<?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. | -// +-----------------------------------------------------------------------+ -//----------------------------------------------------------- include -define('PHPWG_ROOT_PATH','../../'); -define('IN_ADMIN', true); -include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); -include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); -include_once( 'phpBarGraph.php' ); - -// +-----------------------------------------------------------------------+ -// | Check Access and exit when user status is not ok | -// +-----------------------------------------------------------------------+ -check_status(ACCESS_ADMINISTRATOR); - -//------------------------------------------------ variable definition -$outputFormat = "png"; -$legend = $lang['stats_monthly_graph_title']; -$imageHeight = 256; -$imageWidth = 512; -$sql = ' -SELECT DISTINCT COUNT(*) - , DAYOFMONTH(date) - FROM '.HISTORY_TABLE.' - WHERE YEAR(date) = '.$_GET['year'].' - AND MONTH(date) = '.$_GET['month'].' - GROUP BY DATE_FORMAT(date, \'%Y-%m-%d\') DESC -;'; - -//------------------------------------------------ Image definition -$image = ImageCreate($imageWidth, $imageHeight); -//$image = ImageCreateTrueColor($imageWidth, $imageHeight); -// Fill it with your favorite background color.. -$backgroundColor = ImageColorAllocate($image, 184, 184, 184); -ImageFill($image, 0, 0, $backgroundColor); -$white = ImageColorAllocate($image, 0, 0, 0); - -// Interlace the image.. -Imageinterlace($image, 1); - -// Create a new BarGraph.. -$myBarGraph = new PhpBarGraph; -$myBarGraph->SetX(10); // Set the starting x position -$myBarGraph->SetY(10); // Set the starting y position -$myBarGraph->SetWidth($imageWidth-20); // Set how wide the bargraph will be -$myBarGraph->SetHeight($imageHeight-20); // Set how tall the bargraph will be -$myBarGraph->SetNumOfValueTicks(3); // Set this to zero if you don't want to show any. These are the vertical bars to help see the values. - - -// You can try uncommenting these lines below for different looks. - -// $myBarGraph->SetShowLabels(false); // The default is true. Setting this to false will cause phpBarGraph to not print the labels of each bar. -$myBarGraph->SetShowValues(false); // The default is true. Setting this to false will cause phpBarGraph to not print the values of each bar. -// $myBarGraph->SetBarBorder(false); // The default is true. Setting this to false will cause phpBarGraph to not print the border of each bar. -// $myBarGraph->SetShowFade(false); // The default is true. Setting this to false will cause phpBarGraph to not print each bar as a gradient. -// $myBarGraph->SetShowOuterBox(false); // The default is true. Setting this to false will cause phpBarGraph to not print the outside box. -$myBarGraph->SetBarSpacing(5); // The default is 10. This changes the space inbetween each bar. - - -// Add Values to the bargraph.. -$result = pwg_query($sql) -or die(mysql_errno().": ".mysql_error()."<BR>".$sql); - -$days = array(); -for ($i = 1; $i <= 31; $i++) -{ - $days[$i] = 0; -} - -while ($r = mysql_fetch_row($result)) -{ - $days[$r[1]]= $r[0]; -} -$o=0; -while (list ($key,$value) = each($days )) -{ - $myBarGraph->AddValue($key, $value); -} - -//$myBarGraph->SetDebug(true); -// Set the colors of the bargraph.. -$myBarGraph->SetStartBarColor("6666ff"); // This is the color on the top of every bar. -$myBarGraph->SetEndBarColor("2222aa"); // This is the color on the bottom of every bar. This is not used when SetShowFade() is set to false. -$myBarGraph->SetLineColor("000000"); // This is the color all the lines and text are printed out with. - -// Print the BarGraph to the image.. -$myBarGraph->DrawBarGraph($image); -Imagestring($image, 2, 2, $imageHeight-14, $legend, $white); - -//------------------------------------------------ Image output -if ($outputFormat == "png") -{ - header("Content-type: image/png"); - ImagePNG($image); -} -else if (in_array($outputFormat, array("jpg", "jpeg"))) -{ - header("Content-type: image/jpeg"); - Imagejpeg($image); -} -// Destroy the image. -Imagedestroy($image); -?>
\ No newline at end of file diff --git a/admin/images/stats.img.php b/admin/images/stats.img.php new file mode 100644 index 000000000..7a9d676a8 --- /dev/null +++ b/admin/images/stats.img.php @@ -0,0 +1,241 @@ +<?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: 2006-12-04 23:08:35 +0100 (lun, 04 déc 2006) $ +// | last modifier : $Author: rub $ +// | revision : $Revision: 1635 $ +// +-----------------------------------------------------------------------+ +// | 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. | +// +-----------------------------------------------------------------------+ +//----------------------------------------------------------- include +define('PHPWG_ROOT_PATH','../../'); +define('IN_ADMIN', true); +include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); +include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); +include_once( 'phpBarGraph.php' ); + +// +-----------------------------------------------------------------------+ +// | Check Access and exit when user status is not ok | +// +-----------------------------------------------------------------------+ +check_status(ACCESS_ADMINISTRATOR); + +//------------------------------------------------ variable definition +$outputFormat = "png"; +$legend = $lang['stats_global_graph_title']; +$imageHeight = 256; +$imageWidth = 500; + +foreach (array('day', 'month', 'year') as $key) +{ + if (isset($_GET[$key])) + { + $page[$key] = (int)$_GET[$key]; + } +} + +if (isset($page['day'])) +{ + if (!isset($page['month'])) + { + die('[stats.img.php] month is missing in URL'); + } +} + +if (isset($page['month'])) +{ + if (!isset($page['year'])) + { + die('[stats.img.php] year is missing in URL'); + } +} + +$query = ' +SELECT + nb_pages AS y,'; + +$min_x = null; +$max_x = null; + +if (isset($page['day'])) +{ + $query.= ' + hour AS x + FROM '.HISTORY_SUMMARY_TABLE.' + WHERE year = '.$page['year'].' + AND month = '.$page['month'].' + AND day = '.$page['day'].' + AND hour IS NOT NULL + ORDER BY hour ASC +'; + + $min_x = 0; + $max_x = 23; +} +elseif (isset($page['month'])) +{ + $query.= ' + day AS x + FROM '.HISTORY_SUMMARY_TABLE.' + WHERE year = '.$page['year'].' + AND month = '.$page['month'].' + AND day IS NOT NULL + AND hour IS NULL + ORDER BY day ASC +'; + + $min_x = 1; + $max_x = 31; +} +elseif (isset($page['year'])) +{ + $query.= ' + month AS x + FROM '.HISTORY_SUMMARY_TABLE.' + WHERE year = '.$page['year'].' + AND month IS NOT NULL + AND day IS NULL + ORDER BY month ASC +'; + + $min_x = 1; + $max_x = 12; +} +else +{ + $query.= ' + year AS x + FROM '.HISTORY_SUMMARY_TABLE.' + WHERE year IS NOT NULL + AND month IS NULL + ORDER BY year ASC +'; +} + +//------------------------------------------------ Image definition +$image = ImageCreate($imageWidth, $imageHeight); + +// Fill it with your favorite background color.. +$backgroundColor = ImageColorAllocate($image, 184, 184, 184); +ImageFill($image, 0, 0, $backgroundColor); +$white = ImageColorAllocate($image, 0, 0, 0); + +// Interlace the image.. +Imageinterlace($image, 1); + +// Create a new BarGraph.. +$myBarGraph = new PhpBarGraph; + +// Set the starting x position +$myBarGraph->SetX(10); + +// Set the starting y position +$myBarGraph->SetY(10); + +// Set how wide the bargraph will be +$myBarGraph->SetWidth($imageWidth-20); + +// Set how tall the bargraph will be +$myBarGraph->SetHeight($imageHeight-20); + +// Set this to zero if you don't want to show any. These are the vertical +// bars to help see the values. +// $myBarGraph->SetNumOfValueTicks(3); + + +// You can try uncommenting these lines below for different looks. +// +// The default is true. Setting this to false will cause phpBarGraph to not +// print the labels of each bar. +$myBarGraph->SetShowLabels(true); + +// The default is true. Setting this to false will cause phpBarGraph to not +// print the values of each bar. +$myBarGraph->SetShowValues(false); + +// The default is true. Setting this to false will cause phpBarGraph to not +// print the border of each bar. +$myBarGraph->SetBarBorder(true); + +// The default is true. Setting this to false will cause phpBarGraph to not +// print each bar as a gradient. +$myBarGraph->SetShowFade(true); + +// The default is true. Setting this to false will cause phpBarGraph to not +// print the outside box. +$myBarGraph->SetShowOuterBox(true); + +// The default is 10. This changes the space inbetween each bar. +$myBarGraph->SetBarSpacing(5); + + +// Add Values to the bargraph.. +$result = pwg_query($query); +$datas = array(); +while ($row = mysql_fetch_array($result)) +{ + $datas[$row['x']] = $row['y']; +} + +if (!isset($min_x) and !isset($max_x)) +{ + $min_x = min(array_keys($datas)); + $max_x = max(array_keys($datas)); +} + +for ($i = $min_x; $i <= $max_x; $i++) +{ + if (!isset($datas[$i])) + { + $datas[$i] = 0; + } + + $myBarGraph->AddValue($i, $datas[$i]); +} + +// Set the colors of the bargraph.. +// +// This is the color on the top of every bar. +$myBarGraph->SetStartBarColor("6666ff"); + +// This is the color on the bottom of every bar. This is not used when +// SetShowFade() is set to false. +$myBarGraph->SetEndBarColor("2222aa"); + +// This is the color all the lines and text are printed out with. +$myBarGraph->SetLineColor("000000"); + +// Print the BarGraph to the image.. +$myBarGraph->DrawBarGraph($image); +Imagestring($image, 2, 2, $imageHeight-14, $legend, $white); + +//------------------------------------------------ Image output +if ($outputFormat == "png") +{ + header("Content-type: image/png"); + ImagePNG($image); +} +else if (in_array($outputFormat, array("jpg", "jpeg"))) +{ + header("Content-type: image/jpeg"); + Imagejpeg($image); +} +// Destroy the image. +Imagedestroy($image); +?>
\ No newline at end of file diff --git a/admin/stats.php b/admin/stats.php index 0941e96d8..228860b9c 100644 --- a/admin/stats.php +++ b/admin/stats.php @@ -24,295 +24,466 @@ // | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | // | USA. | // +-----------------------------------------------------------------------+ -if( !defined("PHPWG_ROOT_PATH") ) + +if (!defined("PHPWG_ROOT_PATH")) { - die ("Hacking attempt!"); + die ("Hacking attempt!"); } include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); // +-----------------------------------------------------------------------+ +// | Functions | +// +-----------------------------------------------------------------------+ + +function get_summary($year = null, $month = null, $day = null) +{ + $query = ' +SELECT + year, + month, + day, + hour, + nb_pages + FROM '.HISTORY_SUMMARY_TABLE; + + if (isset($day)) + { + $query.= ' + WHERE year = '.$year.' + AND month = '.$month.' + AND day = '.$day.' + AND hour IS NOT NULL + ORDER BY + year ASC, + month ASC, + day ASC, + hour ASC +;'; + } + elseif (isset($month)) + { + $query.= ' + WHERE year = '.$year.' + AND month = '.$month.' + AND day IS NOT NULL + AND hour IS NULL + ORDER BY + year ASC, + month ASC, + day ASC +;'; + } + elseif (isset($year)) + { + $query.= ' + WHERE year = '.$year.' + AND month IS NOT NULL + AND day IS NULL + ORDER BY + year ASC, + month ASC +;'; + } + else + { + $query.= ' + WHERE year IS NOT NULL + AND month IS NULL + ORDER BY + year ASC +;'; + } + + $result = pwg_query($query); + + $output = array(); + while ($row = mysql_fetch_array($result)) + { + array_push($output, $row); + } + + return $output; +} + +// +-----------------------------------------------------------------------+ // | Check Access and exit when user status is not ok | // +-----------------------------------------------------------------------+ + check_status(ACCESS_ADMINISTRATOR); -$url_img = PHPWG_ROOT_PATH.'admin/images/'; -$nls_value_title = $lang['w_month']; -$group_clause = "DATE_FORMAT(date,'%Y-%m') DESC"; -$where_clause = "1"; +// +-----------------------------------------------------------------------+ +// | Refresh summary from details | +// +-----------------------------------------------------------------------+ + +$query = ' +SELECT + year, + month, + day, + hour, + max(id) AS max_id, + COUNT(*) AS nb_pages + FROM '.HISTORY_TABLE.' + WHERE summarized = \'false\' + GROUP BY + year ASC, + month ASC, + day ASC, + hour ASC +;'; +$result = pwg_query($query); + +$need_update = array(); +$max_id = 0; +$is_first = true; +$first_time_key = null; -if (isset($_GET['day']) && isset($_GET['month']) && isset($_GET['year']) ) +while ($row = mysql_fetch_array($result)) { - $url_img .= 'daily_stats.img.php?year='.$_GET['year'].'&month='.$_GET['month'].'&day='.$_GET['day']; - $nls_value_title = $lang['w_day']; - $group_clause = "DATE_FORMAT(date,'%Y-%m-%d') ASC"; - $where_clause = "(YEAR(date) = ".$_GET['year']." AND MONTH(date) = ".$_GET['month']." )"; + $time_keys = array( + sprintf( + '%4u', + $row['year'] + ), + sprintf( + '%4u.%02u', + $row['year'], $row['month'] + ), + sprintf( + '%4u.%02u.%02u', + $row['year'], $row['month'], $row['day'] + ), + sprintf( + '%4u.%02u.%02u.%02u', + $row['year'], $row['month'], $row['day'], $row['hour'] + ), + ); + + foreach ($time_keys as $time_key) + { + if (!isset($need_update[$time_key])) + { + $need_update[$time_key] = 0; + } + $need_update[$time_key] += $row['nb_pages']; + } + + if ($row['max_id'] > $max_id) + { + $max_id = $row['max_id']; + } + + if ($is_first) + { + $is_first = false; + $first_time_key = $time_keys[3]; + } } -elseif (isset($_GET['month']) && isset($_GET['year']) ) + +// Only the oldest time_key might be already summarized, so we have to +// update the 4 corresponding lines instead of simply inserting them. +// +// For example, if the oldest unsummarized is 2005.08.25.21, the 4 lines +// that can be updated are: +// +// +---------------+----------+ +// | id | nb_pages | +// +---------------+----------+ +// | 2005 | 241109 | +// | 2005.08 | 20133 | +// | 2005.08.25 | 620 | +// | 2005.08.25.21 | 151 | +// +---------------+----------+ + +$existing_time_keys = array(); + +if (isset($first_time_key)) +{ + list($year, $month, $day, $hour) = explode('.', $first_time_key); + + $time_keys = array( + sprintf('%4u', $year), + sprintf('%4u.%02u', $year, $month), + sprintf('%4u.%02u.%02u', $year, $month, $day), + sprintf('%4u.%02u.%02u.%02u', $year, $month, $day, $hour), + ); + + $query = ' +SELECT + id, + nb_pages + FROM '.HISTORY_SUMMARY_TABLE.' + WHERE id IN (\''.implode("', '", $time_keys).'\') +;'; + $result = pwg_query($query); + while ($row = mysql_fetch_array($result)) + { + $existing_time_keys[ $row['id'] ] = $row['nb_pages']; + } +} + +$updates = array(); +$inserts = array(); + +foreach (array_keys($need_update) as $time_key) +{ + $time_tokens = explode('.', $time_key); + + if (isset($existing_time_keys[$time_key])) + { + array_push( + $updates, + array( + 'id' => $time_key, + 'nb_pages' => $existing_time_keys[$time_key] + $need_update[$time_key], + ) + ); + } + else + { + array_push( + $inserts, + array( + 'id' => $time_key, + 'year' => $time_tokens[0], + 'month' => @$time_tokens[1], + 'day' => @$time_tokens[2], + 'hour' => @$time_tokens[3], + 'nb_pages' => $need_update[$time_key], + ) + ); + } +} + +if (count($updates) > 0) { - $url_img .= 'monthly_stats.img.php?year='.$_GET['year'].'&month='.$_GET['month']; - $nls_value_title = $lang['w_day']; - $group_clause = "DATE_FORMAT(date,'%Y-%m-%d') ASC"; - $where_clause = "(YEAR(date) = ".$_GET['year']." AND MONTH(date) = ".$_GET['month']." )"; + mass_updates( + HISTORY_SUMMARY_TABLE, + array( + 'primary' => array('id'), + 'update' => array('nb_pages'), + ), + $updates + ); } -else + +if (count($inserts) > 0) { - $url_img .= 'global_stats.img.php'; + mass_inserts( + HISTORY_SUMMARY_TABLE, + array_keys($inserts[0]), + $inserts + ); } +if ($max_id != 0) +{ + $query = ' +UPDATE '.HISTORY_TABLE.' + SET summarized = \'true\' + WHERE summarized = \'false\' + AND id <= '.$max_id.' +;'; + pwg_query($query); +} -//----------------------------------------------------- template initialization -if (isset($_GET['day']) && isset($_GET['month']) && isset($_GET['year']) ) +// +-----------------------------------------------------------------------+ +// | Page parameters check | +// +-----------------------------------------------------------------------+ + +foreach (array('day', 'month', 'year') as $key) { - $date_of_day=$_GET['day'].' '.$lang['month'][$_GET['month']].' '.$_GET['year']; - $title_page=$lang['stats_day_title'].' : '.$date_of_day; - $url_back = PHPWG_ROOT_PATH."admin.php?page=stats"; - $url_back = $url_back; - $title_details='<a href='.$url_back.'>'.$lang['stats_day_title'].'</a>'; - $title_day = $date_of_day; + if (isset($_GET[$key])) + { + $page[$key] = (int)$_GET[$key]; + } } -elseif ( isset($_GET['month']) && isset($_GET['year']) ) + +if (isset($page['day'])) { - $date_of_day=$lang['month'][$_GET['month']].' '.$_GET['year']; - $title_page=$lang['stats_month_title'].' : '.$date_of_day; - $url_back = PHPWG_ROOT_PATH."admin.php?page=stats"; - $url_back = $url_back; - $title_details='<a href='.$url_back.'>'.$lang['stats_day_title'].'</a>'; - $title_day=$lang['today']; + if (!isset($page['month'])) + { + die('month is missing in URL'); + } } -else + +if (isset($page['month'])) { - $date_of_day=''; - $title_page=$lang['stats_title']; - $title_details=$lang['stats_month_title']; - $title_day=$lang['today']; + if (!isset($page['year'])) + { + die('year is missing in URL'); + } } +$url_img = PHPWG_ROOT_PATH.'admin/images/stats.img.php'; -$template->set_filenames( array('stats'=>'admin/stats.tpl') ); - -$template->assign_vars(array( - 'L_VALUE'=>$nls_value_title, - 'L_PAGES_SEEN'=>$lang['stats_pages_seen'], - 'L_VISITORS'=>$lang['visitors'], - 'L_PICTURES'=>$lang['pictures'], - 'L_STAT_TITLE'=>$lang['stats_title'], - 'L_STAT_MONTH_TITLE'=>$lang['stats_month_title'], - 'L_STAT_MONTHLY_ALT'=>$lang['stats_global_graph_title'], - 'L_STAT_TITLE'=>$title_page, - 'L_STAT_DETAIL_TITLE'=>$title_details, - 'L_DATE_TITLE'=>$title_day, - 'L_STAT_MONTHLY_ALT'=>$lang['stats_global_graph_title'], - 'L_STAT_HOUR'=>$lang['stats_hour'], - 'L_STAT_LOGIN'=>$lang['stats_login'], - 'L_STAT_ADDR'=>$lang['stats_addr'], - 'L_STAT_CATEGORY'=>$lang['stats_category'], - 'L_STAT_FILE'=>$lang['stats_file'], - 'L_STAT_PICTURE'=>$lang['stats_picture'], +if (isset($page['year'])) +{ + $url_img.= '?year='.$page['year']; +} + +if (isset($page['month'])) +{ + $url_img.= '&month='.$page['month']; +} + +if (isset($page['day'])) +{ + $url_img.= '&day='.$page['day']; +} + +$summary_lines = get_summary( + @$page['year'], + @$page['month'], + @$page['day'] + ); + +// +-----------------------------------------------------------------------+ +// | Display statistics header | +// +-----------------------------------------------------------------------+ + +// page title creation +$title_parts = array(); + +$url = PHPWG_ROOT_PATH.'admin.php?page=stats'; + +array_push( + $title_parts, + '<a href="'.$url.'">'.l10n('Overall').'</a>' + ); + +$period_label = l10n('Year'); + +if (isset($page['year'])) +{ + $url.= '&year='.$page['year']; + + array_push( + $title_parts, + '<a href="'.$url.'">'.sprintf(l10n('Year %d'), $page['year']).'</a>' + ); + + $period_label = l10n('Month'); +} + +if (isset($page['month'])) +{ + $url.= '&month='.$page['month']; + + array_push( + $title_parts, + '<a href="'.$url.'">'.$lang['month'][$page['month']].'</a>' + ); + + $period_label = l10n('Day'); +} + +if (isset($page['day'])) +{ + $url.= '&day='.$page['day']; + + $time = mktime(12, 0, 0, $page['month'], $page['day'], $page['year']); - 'IMG_REPORT'=>$url_img - )); + $day_title = sprintf( + '%u (%s)', + $page['day'], + $lang['day'][date('w', $time)] + ); + + array_push( + $title_parts, + '<a href="'.$url.'">'.$day_title.'</a>' + ); -//---------------------------------------------------------------- log history -$query = ' -SELECT DISTINCT COUNT(*) as p, - DAYOFMONTH(date) as d, - MONTH(date) as m, - YEAR(date) as y - FROM '.HISTORY_TABLE.' - WHERE '.$where_clause.' - GROUP BY '.$group_clause.';'; - -$result = pwg_query( $query ); -$i=0; -while ( $row = mysql_fetch_array( $result ) ) + $period_label = l10n('Hour'); +} + +$template->set_filenames(array('stats'=>'admin/stats.tpl')); + +$template->assign_vars( + array( + 'L_STAT_TITLE' => implode($conf['level_separator'], $title_parts), + 'SRC_REPORT' => $url_img, + 'PERIOD_LABEL' => $period_label, + ) + ); + +// +-----------------------------------------------------------------------+ +// | Display statistic rows | +// +-----------------------------------------------------------------------+ + +$i = 1; + +foreach ($summary_lines as $line) { - $where_clause=""; + // echo '<pre>'; print_r($line); echo '</pre>'; + $value = ''; - if (isset($_GET['month']) && isset($_GET['year']) ) + + if (isset($line['hour'])) + { + $value.= $line['hour'].' '.l10n('hour'); + } + else if (isset($line['day'])) { - $where_clause = 'DAYOFMONTH(date) = '.$row['d'].' - AND MONTH(date) = '.$row['m'].' - AND YEAR(date) = '.$row['y']; - - $week_day = - $lang['day'][date('w', mktime(12,0,0,$row['m'],$row['d'],$row['y']))]; - $url = PHPWG_ROOT_PATH.'admin.php' .'?page=stats' - .'&year='.$row['y'] - .'&month='.$row['m'] - .'&day='.$row['d'] + .'&year='.$line['year'] + .'&month='.$line['month'] + .'&day='.$line['day'] ; + $time = mktime(12, 0, 0, $line['month'], $line['day'], $line['year']); + $value = '<a href="'.$url.'">'; - $value.= $row['d'].' ('.$week_day.')'; - $value.= "</a>"; + $value.= $line['day'].' ('.$lang['day'][date('w', $time)].')'; + $value.= "</a>"; } - else + else if (isset($line['month'])) { - $current_month = $row['y']."-"; - if ($row['m'] <10) {$current_month.='0';} - $current_month .= $row['m']; - - $where_clause = "DATE_FORMAT(date,'%Y-%m') = '".$current_month."'"; - $url = PHPWG_ROOT_PATH.'admin.php' .'?page=stats' - .'&year='.$row['y'] - .'&month='.$row['m'] + .'&year='.$line['year'] + .'&month='.$line['month'] ; $value = '<a href="'.$url.'">'; - $value.= $lang['month'][$row['m']].' '.$row['y']; + $value.= $lang['month'][$line['month']]; $value.= "</a>"; } - - // Number of pictures seen - $query = ' -SELECT COUNT(*) as p - FROM '.HISTORY_TABLE.' - WHERE '.$where_clause.' - AND FILE = \'picture\' -;'; - $pictures = mysql_fetch_array(pwg_query( $query )); - - // Number of different visitors - $query = ' -SELECT COUNT(*) as p, login - FROM '.HISTORY_TABLE.' - WHERE '.$where_clause.' - GROUP BY login, IP -;'; - $user_results = pwg_query( $query ); - $nb_visitors = 0; - $auth_users = array(); - while ( $user_array = mysql_fetch_array( $user_results ) ) + else { - if ($user_array['login'] == 'guest') - $nb_visitors += 1; - else - array_push($auth_users, $user_array['login']); + // at least the year is defined + $url = + PHPWG_ROOT_PATH.'admin.php' + .'?page=stats' + .'&year='.$line['year'] + ; + + $value = '<a href="'.$url.'">'; + $value.= $line['year']; + $value.= "</a>"; } - $nb_visitors +=count(array_unique($auth_users)); - $class = ($i % 2)? 'row1':'row2'; $i++; - $template->assign_block_vars('statrow',array( - 'VALUE'=>$value, - 'PAGES'=>$row['p'], - 'VISITORS'=>$nb_visitors, - 'IMAGES'=>$pictures['p'], - - 'T_CLASS'=>$class - )); -} -$nb_visitors = mysql_num_rows( $result ); -$days = array(); -$max_nb_visitors = 0; -$max_pages_seen = 0; - -//----------------------------------------------------------- stats / jour - -if ( isset( $_GET['month'] ) && isset( $_GET['month'] ) && isset( $_GET['day'] ) ) -{ if ($_GET['day'] <10) {$current_day='0'; - $current_day.= $_GET['day'];} - else {$current_day = $_GET['day'];} - if ($_GET['month'] <10) {$current_month='0'; - $current_month.= $_GET['month'];} - else {$current_month = $_GET['month'];} - $current_year = $_GET['year']; -} - -else -{ $current_date = GetDate(); - if ($current_date['mday'] <10) {$current_day='0'; - $current_day.= $current_date['mday'];} - else {$current_day = $current_date['mday'];} - if ($current_date['mon'] <10) {$current_month='0'; - $current_month.= $current_date['mon'];} - else {$current_month = $current_date['mon'];} - $current_year = $current_date['year']; + $template->assign_block_vars( + 'statrow', + array( + 'VALUE' => $value, + 'PAGES' => $line['nb_pages'], + + 'T_CLASS' => ($i++ % 2) ? 'row1' : 'row2' + ) + ); } -// Set WHERE clause -$where = ' WHERE DATE_FORMAT(date,\'%Y-%m-%d\') = \''.$current_year."-".$current_month."-".$current_day.'\''; - -// Set LIMIT clause -$limit = ' LIMIT '; -$page['start'] = 0; -if (isset($_GET['start']) and is_numeric($_GET['start'])) $page['start'] = abs($_GET['start']); -$limit .= $page['start']; -$limit .= ','.$conf['nb_logs_page']; - -$query = ' -SELECT DATE_FORMAT(date,\'%H:%i:%s\') AS hour, - login, - IP, - category, - file, - picture - FROM '.HISTORY_TABLE. - $where.' - ORDER BY date DESC'. - $limit. - ';'; - - -$result = pwg_query( $query ); - -$i=0; - -while ( $row = mysql_fetch_array( $result ) ) -{ - $class = ($i % 2)? 'row1':'row2'; $i++; - $template->assign_block_vars('detail',array( - 'HOUR'=>$row['hour'], - 'LOGIN'=>$row['login'], - 'IP'=>$row['IP'], - 'CATEGORY'=>$row['category'], - 'FILE'=>$row['file'], - 'PICTURE'=>$row['picture'], - 'T_CLASS'=>$class - )); - } - - -// Get total number of logs -$query = ' - SELECT COUNT(date) as nb_logs - FROM '.HISTORY_TABLE. - $where.' - ;'; - - $result = pwg_query($query); - $row = mysql_fetch_array($result); - $page['nb_logs']=$row['nb_logs']; - - //display nav bar -$url = $_SERVER['PHP_SELF'].'?page=stats'; -$url.= isset($_GET['year']) ? '&year='.$_GET['year'] : ''; -$url.= isset($_GET['month']) ? '&month='.$_GET['month'] : ''; -$url.= isset($_GET['day']) ? '&day='.$_GET['day'] : ''; - -$page['navigation_bar'] = -create_navigation_bar( - $url, - $page['nb_logs'], - $page['start'], - $conf['nb_logs_page'] - ); - -$template->assign_block_vars( - 'navigation', - array( - 'NAV_BAR' => $page['navigation_bar'] - ) - ); +// +-----------------------------------------------------------------------+ +// | Sending html code | +// +-----------------------------------------------------------------------+ -//----------------------------------------------------------- sending html code $template->assign_var_from_handle('ADMIN_CONTENT', 'stats'); ?> |