 6db359c622
			
		
	
	
	6db359c622
	
	
	
		
			
			Change "Piwigo - a PHP based picture gallery" into "Piwigo - a PHP based photo gallery" git-svn-id: http://piwigo.org/svn/trunk@8728 68402e56-0260-453c-a942-63ccdbb3a9ee
		
			
				
	
	
		
			517 lines
		
	
	
		
			No EOL
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			517 lines
		
	
	
		
			No EOL
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Piwigo - a PHP based photo gallery                                    |
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Copyright(C) 2008-2011 Piwigo Team                  http://piwigo.org |
 | |
| // | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
 | |
| // | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | This program is free software; you can redistribute it and/or modify  |
 | |
| // | it under the terms of the GNU General Public License as published by  |
 | |
| // | the Free Software Foundation                                          |
 | |
| // |                                                                       |
 | |
| // | This program is distributed in the hope that it will be useful, but   |
 | |
| // | WITHOUT ANY WARRANTY; without even the implied warranty of            |
 | |
| // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
 | |
| // | General Public License for more details.                              |
 | |
| // |                                                                       |
 | |
| // | You should have received a copy of the GNU General Public License     |
 | |
| // | along with this program; if not, write to the Free Software           |
 | |
| // | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
 | |
| // | USA.                                                                  |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| if (!defined("PHPWG_ROOT_PATH"))
 | |
| {
 | |
|   die ("Hacking attempt!");
 | |
| }
 | |
| 
 | |
| include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
 | |
| include_once(PHPWG_ROOT_PATH.'admin/include/functions_history.inc.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 = pwg_db_fetch_assoc($result))
 | |
|   {
 | |
|     array_push($output, $row);
 | |
|   }
 | |
| 
 | |
|   return $output;
 | |
| }
 | |
| 
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Check Access and exit when user status is not ok                      |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| check_status(ACCESS_ADMINISTRATOR);
 | |
| 
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Refresh summary from details                                          |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| $query = '
 | |
| SELECT
 | |
|     date,
 | |
|     '.pwg_db_get_hour('time').' AS hour,
 | |
|     MAX(id) AS max_id,
 | |
|     COUNT(*) AS nb_pages
 | |
|   FROM '.HISTORY_TABLE.'
 | |
|   WHERE summarized = \'false\'
 | |
|   GROUP BY
 | |
|     date,
 | |
|     hour
 | |
|   ORDER BY
 | |
|     date ASC,
 | |
|     hour ASC
 | |
| ;';
 | |
| $result = pwg_query($query);
 | |
| 
 | |
| $need_update = array();
 | |
| 
 | |
| $max_id = 0;
 | |
| $is_first = true;
 | |
| $first_time_key = null;
 | |
| 
 | |
| while ($row = pwg_db_fetch_assoc($result))
 | |
| {
 | |
|   $time_keys = array(
 | |
|     substr($row['date'], 0, 4), //yyyy
 | |
|     substr($row['date'], 0, 7), //yyyy-mm
 | |
|     substr($row['date'], 0, 10),//yyyy-mm-dd
 | |
|     sprintf(
 | |
|       '%s-%02u',
 | |
|       $row['date'], $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];
 | |
|   }
 | |
| }
 | |
| 
 | |
| // 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 |
 | |
| // +---------------+----------+
 | |
| 
 | |
| 
 | |
| $updates = array();
 | |
| $inserts = array();
 | |
| 
 | |
| if (isset($first_time_key))
 | |
| {
 | |
|   list($year, $month, $day, $hour) = explode('-', $first_time_key);
 | |
| 
 | |
|   $query = '
 | |
| SELECT *
 | |
|   FROM '.HISTORY_SUMMARY_TABLE.'
 | |
|   WHERE year='.$year.'
 | |
|     AND ( month IS NULL
 | |
|       OR ( month='.$month.'
 | |
|         AND ( day is NULL 
 | |
|           OR (day='.$day.'
 | |
|             AND (hour IS NULL OR hour='.$hour.')
 | |
|           )
 | |
|         )
 | |
|       )
 | |
|     )
 | |
| ;';
 | |
|   $result = pwg_query($query);
 | |
|   while ($row = pwg_db_fetch_assoc($result))
 | |
|   {
 | |
|     $key = sprintf('%4u', $row['year']);
 | |
|     if ( isset($row['month']) )
 | |
|     {
 | |
|       $key .= sprintf('-%02u', $row['month']);
 | |
|       if ( isset($row['day']) )
 | |
|       {
 | |
|         $key .= sprintf('-%02u', $row['day']);
 | |
|         if ( isset($row['hour']) )
 | |
|         {
 | |
|           $key .= sprintf('-%02u', $row['hour']);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (isset($need_update[$key]))
 | |
|     {
 | |
|       $row['nb_pages'] += $need_update[$key];
 | |
|       array_push($updates, $row);
 | |
|       unset($need_update[$key]);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| foreach ($need_update as $time_key => $nb_pages)
 | |
| {
 | |
|   $time_tokens = explode('-', $time_key);
 | |
| 
 | |
|   array_push(
 | |
|       $inserts,
 | |
|       array(
 | |
|         'year'     => $time_tokens[0],
 | |
|         'month'    => @$time_tokens[1],
 | |
|         'day'      => @$time_tokens[2],
 | |
|         'hour'     => @$time_tokens[3],
 | |
|         'nb_pages' => $nb_pages,
 | |
|         )
 | |
|       );
 | |
| }
 | |
| 
 | |
| if (count($updates) > 0)
 | |
| {
 | |
|   mass_updates(
 | |
|     HISTORY_SUMMARY_TABLE,
 | |
|     array(
 | |
|       'primary' => array('year','month','day','hour'),
 | |
|       'update'  => array('nb_pages'),
 | |
|       ),
 | |
|     $updates
 | |
|     );
 | |
| }
 | |
| 
 | |
| if (count($inserts) > 0)
 | |
| {
 | |
|   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);
 | |
| }
 | |
| 
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Page parameters check                                                 |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| 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('month is missing in URL');
 | |
|   }
 | |
| }
 | |
| 
 | |
| if (isset($page['month']))
 | |
| {
 | |
|   if (!isset($page['year']))
 | |
|   {
 | |
|     die('year is missing in URL');
 | |
|   }
 | |
| }
 | |
| 
 | |
| $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.'">'.$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']);
 | |
| 
 | |
|   $day_title = sprintf(
 | |
|     '%u (%s)',
 | |
|     $page['day'],
 | |
|     $lang['day'][date('w', $time)]
 | |
|     );
 | |
| 
 | |
|   array_push(
 | |
|     $title_parts,
 | |
|     '<a href="'.$url.'">'.$day_title.'</a>'
 | |
|     );
 | |
| 
 | |
|   $period_label = l10n('Hour');
 | |
| }
 | |
| 
 | |
| $template->set_filename('stats', 'stats.tpl');
 | |
| 
 | |
| // TabSheet initialization
 | |
| history_tabsheet();
 | |
| 
 | |
| $base_url = get_root_url().'admin.php?page=history';
 | |
| 
 | |
| $template->assign(
 | |
|   array(
 | |
|     'L_STAT_TITLE' => implode($conf['level_separator'], $title_parts),
 | |
|     'PERIOD_LABEL' => $period_label,
 | |
|     'U_HELP' => get_root_url().'admin/popuphelp.php?page=history',
 | |
|     'F_ACTION' => $base_url,
 | |
|     )
 | |
|   );
 | |
| 
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Display statistic rows                                                |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| $max_width = 400;
 | |
| 
 | |
| $datas = array();
 | |
| 
 | |
| if (isset($page['day']))
 | |
| {
 | |
|   $key = 'hour';
 | |
|   $min_x = 0;
 | |
|   $max_x = 23;
 | |
| }
 | |
| elseif (isset($page['month']))
 | |
| {
 | |
|   $key = 'day';
 | |
|   $min_x = 1;
 | |
|   $max_x = date(
 | |
|     't',
 | |
|     mktime(12, 0, 0, $page['month'], 1, $page['year'])
 | |
|     );
 | |
| }
 | |
| elseif (isset($page['year']))
 | |
| {
 | |
|   $key = 'month';
 | |
|   $min_x = 1;
 | |
|   $max_x = 12;
 | |
| }
 | |
| else
 | |
| {
 | |
|   $key = 'year';
 | |
| }
 | |
| 
 | |
| $max_pages = 1;
 | |
| foreach ($summary_lines as $line)
 | |
| {
 | |
|   if ($line['nb_pages'] > $max_pages)
 | |
|   {
 | |
|     $max_pages = $line['nb_pages'];
 | |
|   }
 | |
| 
 | |
|   $datas[ $line[$key] ] = $line['nb_pages'];
 | |
| }
 | |
| 
 | |
| if (!isset($min_x) and !isset($max_x) and count($datas) > 0)
 | |
| {
 | |
|   $min_x = min(array_keys($datas));
 | |
|   $max_x = max(array_keys($datas));
 | |
| }
 | |
| 
 | |
| if (count($datas) > 0)
 | |
| {
 | |
|   for ($i = $min_x; $i <= $max_x; $i++)
 | |
|   {
 | |
|     if (!isset($datas[$i]))
 | |
|     {
 | |
|       $datas[$i] = 0;
 | |
|     }
 | |
| 
 | |
|     $url = null;
 | |
| 
 | |
|     if (isset($page['day']))
 | |
|     {
 | |
|       $value = sprintf('%02u', $i);
 | |
|     }
 | |
|     else if (isset($page['month']))
 | |
|     {
 | |
|       $url =
 | |
|         get_root_url().'admin.php'
 | |
|         .'?page=stats'
 | |
|         .'&year='.$page['year']
 | |
|         .'&month='.$page['month']
 | |
|         .'&day='.$i
 | |
|         ;
 | |
| 
 | |
|       $time = mktime(12, 0, 0, $page['month'], $i, $page['year']);
 | |
| 
 | |
|       $value = $i.' ('.$lang['day'][date('w', $time)].')';
 | |
|     }
 | |
|     else if (isset($page['year']))
 | |
|     {
 | |
|       $url =
 | |
|         get_root_url().'admin.php'
 | |
|         .'?page=stats'
 | |
|         .'&year='.$page['year']
 | |
|         .'&month='.$i
 | |
|         ;
 | |
| 
 | |
|       $value = $lang['month'][$i];
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|       // at least the year is defined
 | |
|       $url =
 | |
|         get_root_url().'admin.php'
 | |
|         .'?page=stats'
 | |
|         .'&year='.$i
 | |
|         ;
 | |
| 
 | |
|       $value = $i;
 | |
|     }
 | |
| 
 | |
|     if ($datas[$i] != 0 and isset($url))
 | |
|     {
 | |
|       $value = '<a href="'.$url.'">'.$value.'</a>';
 | |
|     }
 | |
| 
 | |
|     $template->append(
 | |
|       'statrows',
 | |
|       array(
 | |
|         'VALUE' => $value,
 | |
|         'PAGES' => $datas[$i],
 | |
|         'WIDTH' => ceil(($datas[$i] * $max_width) / $max_pages ),
 | |
|         )
 | |
|       );
 | |
|   }
 | |
| }
 | |
| 
 | |
| // +-----------------------------------------------------------------------+
 | |
| // | Sending html code                                                     |
 | |
| // +-----------------------------------------------------------------------+
 | |
| 
 | |
| $template->assign_var_from_handle('ADMIN_CONTENT', 'stats');
 | |
| ?>
 |