$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,
''.l10n('Overall').''
);
$period_label = l10n('Year');
if (isset($page['year']))
{
$url.= '&year='.$page['year'];
array_push(
$title_parts,
''.$page['year'].''
);
$period_label = l10n('Month');
}
if (isset($page['month']))
{
$url.= '&month='.$page['month'];
array_push(
$title_parts,
''.$lang['month'][$page['month']].''
);
$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,
''.$day_title.''
);
$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 = ''.$value.'';
}
$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');
?>