$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 | // +---------------+----------+ $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) { mass_updates( HISTORY_SUMMARY_TABLE, array( 'primary' => array('id'), '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', 'admin/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().'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'); ?>