From 7cf89e780086ab0cc4f2dc4ef38aba48fe3cdd43 Mon Sep 17 00:00:00 2001
From: idebr <idebr@1879760.no-reply.drupal.org>
Date: Tue, 31 Mar 2015 14:33:48 +0200
Subject: [PATCH] Issue #2462931 by idenr: Remove custom admin overview theme
 implementation

---
 feedback.admin.inc | 102 +++++++++++++----------------------------------------
 feedback.module    |   3 --
 2 files changed, 25 insertions(+), 80 deletions(-)

diff --git a/feedback.admin.inc b/feedback.admin.inc
index 425df52..4c6657b 100644
--- a/feedback.admin.inc
+++ b/feedback.admin.inc
@@ -16,20 +16,12 @@ function feedback_admin_view_form($form, &$form_state) {
     FEEDBACK_PROCESSED => t('Processed feedback messages'),
   );
   $form['#feedback_header'] = array(
-    array(),
-    array('data' => t('Location'), 'field' => 'f.location_masked', 'sort' => 'asc'),
-    array('data' => t('Date'), 'field' => 'f.timestamp'),
-    array('data' => t('User'), 'field' => 'u.name'),
-    t('Message'),
-    t('Operations'),
+    'location' => array('data' => t('Location'), 'field' => 'f.location_masked', 'sort' => 'asc'),
+    'date' => array('data' => t('Date'), 'field' => 'f.timestamp'),
+    'user' => array('data' => t('User'), 'field' => 'u.name'),
+    'message' => t('Message'),
+    'operations' => t('Operations'),
   );
-  // Hack to prevent pager_query() from issuing PHP notices.
-  if (!isset($_GET['page'])) {
-    $_GET['page'] = '';
-  }
-  if (count(explode(',', $_GET['page'])) < 2) {
-    $_GET['page'] .= ',0';
-  }
 
   $form['feedback-messages'] = array('#tree' => TRUE);
   $query = db_select('feedback', 'f')->extend('PagerDefault')->extend('TableSort');
@@ -37,6 +29,7 @@ function feedback_admin_view_form($form, &$form_state) {
   $query->fields('f')
     ->limit(50);
   foreach (array(FEEDBACK_OPEN, FEEDBACK_PROCESSED) as $status) {
+    $options = array();
     $status_query = clone $query;
     $fids = $status_query->element($status)
       ->condition('f.status', $status)
@@ -51,41 +44,40 @@ function feedback_admin_view_form($form, &$form_state) {
     if (!empty($fids)) {
       $entries = feedback_load_multiple($fids);
       foreach ($entries as $fid => $entry) {
-        $form['feedback-messages'][$status][$fid] = array(
-          '#type' => 'checkbox',
-          '#return_value' => FEEDBACK_PROCESSED,
-          '#default_value' => FALSE,
-        );
-        $form['feedback-messages'][$status][$fid]['location'] = array(
-          '#markup' => l(truncate_utf8($entry->location, 32, FALSE, TRUE), $entry->url),
-        );
-        $form['feedback-messages'][$status][$fid]['date'] = array(
-          '#markup' => format_date($entry->timestamp, 'small'),
-        );
-        $form['feedback-messages'][$status][$fid]['user'] = array(
-          '#markup' => check_plain(format_username($entry)),
-        );
-
+        $options[$fid]['location'] = l(truncate_utf8($entry->location, 32, FALSE, TRUE), $entry->url);
+        $options[$fid]['date'] = format_date($entry->timestamp, 'small');
+        $options[$fid]['user'] = check_plain(format_username($entry));
         feedback_build_content($entry, 'teaser');
-        $form['feedback-messages'][$status][$fid]['message'] = $entry->content;
+        $options[$fid]['message'] = drupal_render($entry->content);
         unset($entry->content);
 
-        $form['feedback-messages'][$status][$fid]['operations'] = array(
+        $operations = array(
           '#theme' => 'links',
           '#links' => array(
             'edit' => array(
               'title' => t('edit'),
-              'href' => "admin/reports/feedback/$fid/edit"
+              'href' => "admin/reports/feedback/$fid/edit",
             ),
             'delete' => array(
               'title' => t('delete'),
-              'href' => "admin/reports/feedback/$fid/delete"
+              'href' => "admin/reports/feedback/$fid/delete",
             ),
           ),
           '#attributes' => array(),
         );
+        $options[$fid]['operations'] = drupal_render($operations);
       }
     }
+    $form['feedback-messages'][$status]['overview'] = array(
+      '#type' => 'tableselect',
+      '#header' => $form['#feedback_header'],
+      '#options' => $options,
+      '#empty' => t('No feedback entries available.'),
+    );
+    $form['feedback-messages'][$status]['pager'] = array(
+      '#theme' => 'pager',
+      '#element' => $status,
+    );
   }
   $form['submit'] = array(
     '#type' => 'submit',
@@ -97,57 +89,13 @@ function feedback_admin_view_form($form, &$form_state) {
 }
 
 /**
- * Output a sortable table containing all feedback entries.
- */
-function theme_feedback_admin_view_form($variables) {
-  $form = $variables['form'];
-  $output = '';
-  foreach (element_children($form['feedback-messages']) as $status) {
-    $item = &$form['feedback-messages'][$status];
-    if (!isset($item['#type']) || $item['#type'] != 'fieldset') {
-      continue;
-    }
-    // Build the table.
-    $rows = array();
-    foreach (element_children($item) as $element_entry) {
-      $entry = &$item[$element_entry];
-      // Render the data first.
-      $rows[] = array(
-        0,
-        drupal_render($entry['location']),
-        drupal_render($entry['date']),
-        drupal_render($entry['user']),
-        drupal_render($entry['message']),
-        drupal_render($entry['operations']),
-      );
-      // Render the checkbox.
-      $rows[count($rows) - 1][0] = drupal_render($entry);
-    }
-    if (empty($rows)) {
-      $rows[] = array(array('data' => t('No feedback entries available.'), 'colspan' => 6));
-    }
-    // Inject the table.
-    $item['messages'] = array(
-      '#markup' => theme('table', array('header' => $form['#feedback_header'], 'rows' => $rows)),
-      '#suffix' => theme('pager', array('element' => $status)),
-      '#weight' => -1,
-    );
-    // Render the fieldset.
-    $output .= drupal_render($item);
-  }
-  // Render internal FAPI and potential extra form elements.
-  $output .= drupal_render_children($form);
-  return $output;
-}
-
-/**
  * Form submit callback for admin view form.
  */
 function feedback_admin_view_form_submit($form, &$form_state) {
   $update = array();
   // Determine feedback entries to update.
   foreach ($form_state['values']['feedback-messages'] as $status => $values) {
-    $values = array_filter($values);
+    $values = array_filter($values['overview']);
     if (!empty($values)) {
       $entries = feedback_load_multiple(array_keys($values));
       foreach ($entries as $fid => $entry) {
diff --git a/feedback.module b/feedback.module
index 1572020..1568b08 100644
--- a/feedback.module
+++ b/feedback.module
@@ -20,9 +20,6 @@ define('FEEDBACK_PROCESSED', 1);
  */
 function feedback_theme() {
   return array(
-    'feedback_admin_view_form' => array(
-      'render element' => 'form',
-    ),
     'feedback_entry' => array(
       'render element' => 'elements',
       'template' => 'feedback-entry',
-- 
2.1.0

