Index: l10n_community/pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/pages.inc,v
retrieving revision 1.1.2.20.2.24.2.20
diff -u -p -r1.1.2.20.2.24.2.20 pages.inc
--- l10n_community/pages.inc	9 Nov 2010 18:54:30 -0000	1.1.2.20.2.24.2.20
+++ l10n_community/pages.inc	10 Nov 2010 13:47:01 -0000
@@ -137,7 +137,7 @@ function l10n_community_overview_languag
   }
 
   $languages = l10n_community_get_languages();
-  $content_output = module_invoke('l10n_groups', 'l10n_community_build_language_page', $languages[$langcode]);
+  $content_output = module_invoke('l10n_packager', 'l10n_community_build_language_page', $languages[$langcode]);
   if (empty($content_output)) {
     // Try to fill in with taxonomy.
     if (module_exists('taxonomy')) {
Index: l10n_groups/l10n_groups.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_groups/Attic/l10n_groups.module,v
retrieving revision 1.1.2.4.2.10.2.12
diff -u -p -r1.1.2.4.2.10.2.12 l10n_groups.module
--- l10n_groups/l10n_groups.module	17 Jun 2010 10:42:09 -0000	1.1.2.4.2.10.2.12
+++ l10n_groups/l10n_groups.module	10 Nov 2010 13:47:01 -0000
@@ -21,6 +21,14 @@ function l10n_groups_menu() {
     'type' => MENU_LOCAL_TASK,
     'weight' => 200,
   );
+  $items['translate/languages/%l10n_community_language/posts'] = array(
+    'title' => 'Group posts',
+    'page callback' => 'l10n_groups_posts_page',
+    'page arguments' => array(2),
+    'access arguments' => array('access localization community'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 100,
+  );
   return $items;
 }
 
@@ -374,9 +382,9 @@ function l10n_groups_broadcast($langcode
 /**
  * Language page content creator.
  */
-function l10n_groups_l10n_community_build_language_page($language) {
+function l10n_groups_posts_page($langcode) {
   $groups = l10n_groups_get_groups();
-  if (isset($groups[$language->language]) && node_access('view', $group_node = node_load($groups[$language->language]))) {
+  if (isset($groups[$langcode]) && node_access('view', $group_node = node_load($groups[$langcode]))) {
     return node_view($group_node, FALSE, TRUE);
   }
   else {
Index: l10n_packager/l10n_packager.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_packager/Attic/l10n_packager.module,v
retrieving revision 1.1.2.4.2.19
diff -u -p -r1.1.2.4.2.19 l10n_packager.module
--- l10n_packager/l10n_packager.module	2 Sep 2010 09:47:56 -0000	1.1.2.4.2.19
+++ l10n_packager/l10n_packager.module	10 Nov 2010 13:47:01 -0000
@@ -311,3 +311,59 @@ function l10n_packager_build_download_li
 
   return $rendered;
 }
+
+/**
+ * Build download table contents for the language view pages.
+ */
+function l10n_packager_l10n_community_build_language_page($language) {
+  $output = '<h3 id="downloads">'. t('Top downloads') .'</h3>';
+  $download_headers = array(t('Project', t('Version'), t('Downloads'), t('Date created'), t('Up to date as of')));
+  if ($project = l10n_community_get_highlighted_project()) {
+    $highlighted_downloads = l10n_packager_project_downloads($project, $language);
+    $output .= '<div class="download-table download-table-ok view-project-release-download-table"><h4>'. $project->title .'</h4>';
+    $output .= theme('table', $download_headers, $highlighted_downloads);
+    $output .= '</div>';
+  }
+  return $output;
+}
+
+/**
+ * Build download table rows for the language view pages.
+ */
+function l10n_packager_project_downloads($project, $language) {
+  $files = array();
+  $branches = array();
+  $result = db_query("SELECT r.*, pr.*, pr.checked as release_checked, lf.*, f.* FROM {l10n_server_release} r INNER JOIN {l10n_packager_release} pr ON r.rid = pr.rid INNER JOIN {l10n_packager_file} lf ON r.rid = lf.rid INNER JOIN {files} f ON lf.fid = f.fid WHERE r.pid = %d AND lf.language = '%s'", $project->pid, $language->language);
+  while ($item = db_fetch_object($result)) {
+    // @todo: bad, bad harcoding of Drupal versioning schemes.
+    $branch = preg_replace(($project->uri == 'drupal' ? '!^(\d\.)(.+)$!' : '!^(\d\.x-\d\.)(.+)$!'), '\1', $item->title) .'x';
+    $branches[$branch] = TRUE;
+    $files[$branch][$item->rid] = $item;
+  }
+
+  if (empty($branches)) {
+    return array($project->title, array('data' => t('Not available.'), 'colspan' => 4));
+  }
+
+  ksort($branches);
+  $download_url = variable_get('l10n_packager_update_url', file_create_url(l10n_packager_directory()));
+
+  $rows = array();
+  foreach (array_keys($branches) as $branch) {
+
+    // Grab the latest item and compute its up to date stats.
+    krsort($files[$branch]);
+    $latest_item = array_shift($files[$branch]);
+    $up_to_date = max($latest_item->checked, $latest_item->release_checked);
+
+    $rows[] = array(
+      l(t($project->title), 'translate/projects/'. $project->uri),
+      $latest_item->title,
+      l(t('Download') .' ('. format_size($latest_item->filesize) . ')', $download_url .'/'. intval($branch) .'.x/'. $project->uri .'/'. $latest_item->filename),
+      format_date($latest_item->timestamp, 'custom', 'Y-M-d', 0),
+      format_date($up_to_date, 'custom', 'Y-M-d', 0),
+    );
+  }
+
+  return $rows;
+}
