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.15
diff -u -p -r1.1.2.4.2.15 l10n_packager.module
--- l10n_packager/l10n_packager.module	17 Jun 2010 10:42:09 -0000	1.1.2.4.2.15
+++ l10n_packager/l10n_packager.module	1 Sep 2010 11:51:19 -0000
@@ -35,6 +35,15 @@ define('L10N_PACKAGER_API_VERSION', '1.1
  * Implementation of hook_menu().
  */
 function l10n_packager_menu() {
+  $items['translate/downloads'] = array(
+    'title' => 'Download translations',
+    'description' => 'Download pre-generated translation packages.',
+    'page callback' => 'l10n_packager_explore_downloads',
+    'file' => 'l10n_packager.pages.inc',
+    'access arguments' => array('access localization community'),
+    'weight' => 20,
+  );
+
   // Administration tools.
   $items['admin/l10n_server/packager'] = array(
     'title' => 'Packaging tools',
Index: l10n_packager/l10n_packager.pages.inc
===================================================================
RCS file: l10n_packager/l10n_packager.pages.inc
diff -N l10n_packager/l10n_packager.pages.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ l10n_packager/l10n_packager.pages.inc	1 Sep 2010 11:51:19 -0000
@@ -0,0 +1,145 @@
+<?php
+// $Id: l10n_packager.admin.inc,v 1.1.2.4.2.5 2010/05/26 11:05:29 goba Exp $
+
+/**
+ * @file
+ *   Front end pages for translation packaging.
+ */
+
+function l10n_packager_explore_downloads() {
+  $projects = l10n_server_get_projects();
+  $output = drupal_get_form('l10n_packager_download_project_form', $projects);
+  $output .= l10n_packager_show_downloads();
+  return $output;
+}
+
+/**
+ * Form callback. Allow user to pick project to show downloads for.
+ */
+function l10n_packager_download_project_form(&$form_state, $projects) {
+  if (empty($form_state['values'])) {
+    $form_state['values'] = array(
+      'project' => (isset($_GET['project']) && isset($projects[$_GET['project']]) ? $projects[$_GET['project']]->title : ''),
+    );
+  }
+  $form['project'] = array(
+    '#default_value' => $form_state['values']['project'],
+  );
+  if (($count = count($projects)) <= 30) {
+    // Radio box widget for as much as 5 projects, select widget for 5-30 projects.
+    $form['project']['#type'] = ($count <= 5 ? 'radios' : 'select');
+    $form['project']['#options'] = array();
+    foreach ($projects as $project) {
+      // Title used to conform to the autocomplete behavior.
+      $form['project']['#options'][$project->title] = $project->title;
+    }
+  }
+  else {
+    // Autocomplete field for more then 30 projects.
+    $form['project'] += array(
+      '#type' => 'textfield',
+      '#autocomplete_path' => 'translate/project-autocomplete',
+    );
+  }
+  $form['submit'] = array('#type' => 'submit', '#value' => t('Show downloads'));
+  return $form;
+}
+
+/**
+ * Form validation.
+ */
+function l10n_packager_download_project_form_validate($form, &$form_state) {
+  if (!empty($form_state['values']['project'])) {
+    if ($project = l10n_server_get_projects(array('uri' => l10n_community_project_uri_by_title($form_state['values']['project'])))) {
+      $form_state['values']['uri'] = $project->uri;
+    }
+    else {
+      form_set_error('project', t('Invalid project name.'));
+    }
+  }
+}
+
+/**
+ * Form submission.
+ */
+function l10n_packager_download_project_form_submit($form, $form_state) {
+  drupal_goto('translate/downloads', 'project='. $form_state['values']['uri']);
+}
+
+/**
+ * Generate list of file downloads for given project.
+ */
+function l10n_packager_show_downloads() {
+  if (empty($_GET['project'])) {
+    if ($drupal = l10n_server_get_projects(array('uri' => 'drupal'))) {
+      $project = $drupal;
+    }
+    else {
+      return '';
+    }
+  }
+  else {
+    $project = l10n_server_get_projects(array('uri' => $_GET['project']));
+    if (empty($project)) {
+      drupal_set_message(t('Requested project not found.'), 'warning');
+      return '';
+    }
+  }
+
+  $files = array();
+  $majors = array();
+  $result = db_query('SELECT * FROM {l10n_server_release} r INNER JOIN {l10n_packager_file} lf ON r.rid = lf.rid INNER JOIN {files} f ON lf.fid = f.fid WHERE r.pid = %d', $project->pid);
+  while ($item = db_fetch_object($result)) {
+    $majors[intval($item->title)] = TRUE;
+    $files[$item->language][intval($item->title)][$item->title] = $item;
+  }
+
+  if (empty($majors)) {
+    drupal_set_message(t('No translation downloads found for %project.', array('%project' => $project->title)), 'warning');
+    return '';
+  }
+
+  // Set proper title for given project.
+  drupal_set_title(t('@project translation downloads', array('@project' => $project->title)));
+
+  ksort($majors);
+  $languages = l10n_community_get_languages();
+  $download_url = variable_get('l10n_packager_update_url', file_create_url(l10n_packager_directory()));
+
+  $table = array();
+  foreach ($languages as $langcode => $language) {
+    $row = array();
+    // Start off the row with the language name and code.
+    $row[] = array('data' => t($language->name) .' ('. $langcode .')', 'class' => 'rowhead');
+    foreach ($majors as $major) {
+      $major_cell = array();
+      // Generate a cell for each major version.
+      if (!empty($files[$langcode][$major])) {
+        ksort($files[$langcode][$major]);
+        foreach ($files[$langcode][$major] as $item) {
+          $major_cell[] = l(
+            $item->title,
+            // @todo: bad, bad practice to hardcode the path format here.
+            $download_url .'/'. $major .'.x/'. $project->uri .'/'. $item->filename,
+            array('attributes' =>
+              array('title' =>
+                t('Generated: @time, Size: @size',
+                  array('@time' => format_date($item->timestamp, 'custom', 'r', 0), '@size' => format_size($item->filesize))
+                )
+              )
+            )
+          );
+        }
+      }
+      $row[] = join(', ', $major_cell);
+    }
+    $table[] = $row;
+  }
+
+  $header = array(t('Languages'));
+  foreach (array_keys($majors) as $major) {
+    $header[] = $major .'.x';
+  }
+
+  return theme('table', $header, $table);
+}
