aboutsummaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2007-01-16 23:39:39 +0000
committerplegall <plg@piwigo.org>2007-01-16 23:39:39 +0000
commit5d9a865fe1931869d3d9edb19f64d66783a0f4f4 (patch)
tree35805541591d81cbb9a7758ddb3e2da538a2237d /admin
parent62149d74a9724bba01c5ae5b8b99fa00e0a60fe7 (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.php3
-rw-r--r--admin/history.php388
-rw-r--r--admin/images/daily_stats.img.php126
-rw-r--r--admin/images/global_stats.img.php126
-rw-r--r--admin/images/monthly_stats.img.php126
-rw-r--r--admin/images/stats.img.php241
-rw-r--r--admin/stats.php639
7 files changed, 1036 insertions, 613 deletions
diff --git a/admin.php b/admin.php
index b284be0a8..73b5ebb9a 100644
--- a/admin.php
+++ b/admin.php
@@ -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'].'&amp;month='.$_GET['month'].'&amp;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'].'&amp;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.= '&amp;month='.$page['month'];
+}
+
+if (isset($page['day']))
+{
+ $url_img.= '&amp;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.= '&amp;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.= '&amp;month='.$page['month'];
+
+ array_push(
+ $title_parts,
+ '<a href="'.$url.'">'.$lang['month'][$page['month']].'</a>'
+ );
+
+ $period_label = l10n('Day');
+}
+
+if (isset($page['day']))
+{
+ $url.= '&amp;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'
- .'&amp;year='.$row['y']
- .'&amp;month='.$row['m']
- .'&amp;day='.$row['d']
+ .'&amp;year='.$line['year']
+ .'&amp;month='.$line['month']
+ .'&amp;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'
- .'&amp;year='.$row['y']
- .'&amp;month='.$row['m']
+ .'&amp;year='.$line['year']
+ .'&amp;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'
+ .'&amp;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']) ? '&amp;year='.$_GET['year'] : '';
-$url.= isset($_GET['month']) ? '&amp;month='.$_GET['month'] : '';
-$url.= isset($_GET['day']) ? '&amp;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');
?>