$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'); ?>