Browse Source

updated to 7.x-2.x-dev (2013-Mar-04)

Bachir Soussi Chiadmi 10 years ago
parent
commit
ca63b9bbca

+ 0 - 70
CHANGELOG.txt

@@ -1,70 +0,0 @@
-
-Feedback 7.x-2.x, xxxx-xx-xx
-----------------------------
-#1027786 by Jody Lynn, sun: Removed soft-dependency on Block module.
-#323506 by Jody Lynn, tim.plunkett | zilla: Added Allow to delete items.
-#470316 by Jody Lynn | smk-ka: Added Visibility settings.
-#1014726 by Jody Lynn: Changed Add constants for feedback status codes.
-#775322 by Jody Lynn: Mollom integration
-#351698 by Jody Lynn and sun: feedback is now a fieldable entity!
-#1086552 by Dru-p, Jody Lynn, sun: prevent PHP notice
-by Jody Lynn: spelling error in comment
-by The Great Git Migration: Stripping CVS keywords
-#305744 by sun: Replaced custom JS form submissions with AJAX framework.
-by sun: Updated for new resizable textarea markup.
-#402438 by sun: Fixed minor CRUD API glitches and cleaned up code.
-#402438 by Jody Lynn, sun: Added proper CRUD API functions and hooks.
-by sun: Added basic tests.
-#1011152 by sun, Jody Lynn: Removed translations directory.
-#961674 by pmorel, sun: Updated for various D7 API changes.
-by sun: Ported to Drupal 7.
-
-
-Feedback 6.x-2.x, xxxx-xx-xx
-----------------------------
-#730582 by q0rban, Michel Poulain, sun: Fixed styling in WebKit browsers.
-#387818 by antgiant: Fixed width of feedback textarea.
-#688306 by Berdir: Fixed compatibility with PHP 5.3.
-
-
-Feedback 6.x-2.1, 2010-01-27
-----------------------------
-#690856 by sun (SA-2010-011): Fixed un-escaped user agent string.
-by sun: Fixed JS behaviors are executed more than once.
-#636158 by smk-ka: Changed administrative page callbacks to be located in admin
-  include.
-#370223 by sun, Jeff Burnz: Fixed compatibility with custom block markup.
-#341667 by sun: Fixed IE6 does not support position: fixed.
-#409590 by sun: Added storage and output of absolute URL for feedback messages.
-#378878 by jcruz, sun: Added display of useragent if Browscap is not installed.
-#364388 by xibun: Added French translation.
-#357247 by cassus: Added Hungarian translation.
-#350356 by sun: Fixed README.txt.
-#299847 by sun: Fixed pager not properly generated for admin list of feedbacks.
-#302358 by sun: Fixed upgrade path to Drupal 6.x.
-
-
-Feedback 6.x-2.0, 2008-10-19
-----------------------------
-#322135 by sun: Fixed FAPI callbacks, DB query arguments, and PHP notices.
-#285972 by wikidkaka, sun: Fixed compatibility with Zen Classic theme.
-#302358 by sun: Removed dependency on jQuery Update module.
-#302358 by sun: Ported Feedback to Drupal 6.x.
-#305713 by eliosh: Added Italian translation.
-
-
-Feedback 5.x-2.0, 2008-07-16
-----------------------------
-#279636 by smk-ka: Added BrowsCap support to record and output user agents.
-#279636 by sun: Usability: Added AJAX throbber to indicate form submission.
-#279636 by sun: Added administrative user interface form to allow marking
-  feedback entries as processed.
-#279636 by sun: Added log of previous feedbacks to feedback form to prevent
-  duplicates.  Uses 'masked' paths (much like D6) to include all feedbacks with
-  the same path pattern like the current page (except of node/%).
-#279636 by sun: Fixed compatibility with (hopefully) all themes.
-#279636 by sun: Fixed compatibility with Bluemarine, Marvin, and Pushbutton
-  themes.
-#279636 by sun: Fixed compatibility with Garland theme.
-Initial commit of Feedback 2.x.
-

+ 0 - 0
LICENSE.txt


+ 5 - 4
README.txt

@@ -29,15 +29,16 @@ To submit bug reports and feature suggestions, or to track changes:
 -- CONFIGURATION --
 
 * Configure user permissions in Administration » People » Permissions »
-Feedback.
-* Configure fields at Administration » Configuration »  User interface »
-Feedback
+  Feedback.
+
+* Configure fields at Administration » Configuration » User interface »
+  Feedback.
 
 
 -- USAGE --
 
 * To view all feedback messages, go to Administration » Reports » Feedback
-messages
+  messages.
 
 
 -- CONTACT --

+ 0 - 0
feedback-entry.tpl.php


+ 0 - 0
feedback-form-display.tpl.php


+ 60 - 14
feedback.admin.inc

@@ -9,6 +9,8 @@
  * Build a (sortable) form containing a checkbox for each feedback entry.
  */
 function feedback_admin_view_form($form, &$form_state) {
+  $form['#attached']['js'][] = drupal_get_path('module', 'feedback') . '/feedback.admin.js';
+
   $status_headings = array(
     FEEDBACK_OPEN => t('Open feedback messages'),
     FEEDBACK_PROCESSED => t('Processed feedback messages'),
@@ -57,7 +59,7 @@ function feedback_admin_view_form($form, &$form_state) {
         $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)));
-        $form['feedback-messages'][$status][$fid]['message'] = feedback_format_message($entry);
+        $form['feedback-messages'][$status][$fid]['message'] = feedback_build_content($entry, 'teaser');
         $form['feedback-messages'][$status][$fid]['operations'] = array(
           '#theme' => 'links',
           '#links' => array(
@@ -206,6 +208,9 @@ function feedback_entry_form($form, &$form_state, $entry) {
 
 /**
  * Form submit callback for entry edit form.
+ *
+ * @todo Duplicates feedback_form_submit(). Add all default entity properties
+ *   as #type 'value' to feedback_form() and merge the two submit handlers.
  */
 function feedback_entry_form_submit(&$form, &$form_state) {
   $entry = feedback_load($form['#fid']);
@@ -248,34 +253,35 @@ function feedback_admin_settings_form($form, &$form_state) {
 }
 
 /**
- * Generate an array for rendering the given entry.
+ * Generate a render array for viewing a feedback entry.
  *
  * @param $entry
  *   A feedback entry object.
  * @param $view_mode
- *   View mode, e.g. 'full'.
+ *   View mode, e.g. 'full', 'teaser'...
  * @param $langcode
  *   (optional) A language code to use for rendering. Defaults to the global
  *   content language of the current request.
  *
  * @return
  *   An array as expected by drupal_render().
+ *
+ * @todo This is an API function; move into feedback.module.
  */
 function feedback_view($entry, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
     $langcode = $GLOBALS['language_content']->language;
   }
 
-  // Retrieve all entry fields and attach to $entry->content.
+  // Populate $entry->content with a render() array.
   feedback_build_content($entry, $view_mode, $langcode);
 
   $build = $entry->content;
-  // We don't need duplicate rendering info in entry->content.
   unset($entry->content);
 
   $build += array(
     '#theme' => 'feedback_entry',
-    '#entry' => $entry,
+    '#feedback' => $entry,
     '#view_mode' => $view_mode,
     '#language' => $langcode,
   );
@@ -288,26 +294,68 @@ function feedback_view($entry, $view_mode = 'full', $langcode = NULL) {
 }
 
 /**
- * Builds a structured array representing the feedback message content.
+ * Builds a structured array representing the feedback entry's content.
  *
  * @param $entry
  *   A feedback entry object.
  * @param $view_mode
- *   View mode, e.g. 'full'.
+ *   View mode, e.g. 'full', 'teaser'...
  * @param $langcode
  *   (optional) A language code to use for rendering. Defaults to the global
  *   content language of the current request.
+ *
+ * @todo This is an API function; move into feedback.module.
  */
 function feedback_build_content($entry, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
     $langcode = $GLOBALS['language_content']->language;
   }
+  // Remove previously built content, if exists.
+  $entry->content = array();
+
+  // Allow modules to change the view mode.
+  $context = array(
+    'entity_type' => 'feedback',
+    'entity' => $entry,
+    'langcode' => $langcode,
+  );
+  drupal_alter('entity_view_mode', $view_mode, $context);
+
+  $entry->content['message'] = array(
+    '#markup' => check_plain($entry->message),
+  );
+  if (!empty($entry->useragent)) {
+    $entry->content['browser'] = array(
+      '#theme' => 'container',
+      '#attributes' => array('class' => array('browserinfo', 'description')),
+    );
+    if (module_exists('browscap')) {
+      $browserinfo = browscap_get_browser($entry->useragent);
+      // Browscap returns useragent but not always parent info.
+      $browser = (isset($browserinfo['parent']) ? $browserinfo['parent'] . ' / ' . $browserinfo['platform'] : $browserinfo['useragent']);
+      $entry->content['browser']['#markup'] = check_plain($browser);
+    }
+    else {
+      $entry->content['browser']['#markup'] = check_plain($entry->useragent);
+    }
+  }
 
   // Build fields content.
-  field_attach_prepare_view('feedback', array($entry->fid => $entry), $view_mode);
-  entity_prepare_view('feedback', array($entry->fid => $entry));
-  $entry->content = field_attach_view('feedback', $entry, $view_mode, $langcode);
+  field_attach_prepare_view('feedback', array($entry->fid => $entry), $view_mode, $langcode);
+  entity_prepare_view('feedback', array($entry->fid => $entry), $langcode);
+  $entry->content += field_attach_view('feedback', $entry, $view_mode, $langcode);
+
+  $entry->content['links'] = array(
+    '#theme' => 'links__feedback',
+    '#pre_render' => array('drupal_pre_render_links'),
+    '#attributes' => array('class' => array('links', 'inline')),
+  );
+  $uri = entity_uri('feedback', $entry);
+  if ($uri['path'] != $_GET['q'] && arg(0) != 'admin') {
+    $entry->content['links']['#links']['view'] = array('title' => t('view'), 'href' => $uri['path']);
+  }
 
+  // Allow modules to make their own additions to the entry.
   module_invoke_all('feedback_view', $entry, $view_mode, $langcode);
   module_invoke_all('entity_view', $entry, 'feedback', $view_mode, $langcode);
 }
@@ -324,8 +372,7 @@ function template_preprocess_feedback_entry(&$variables) {
   foreach (element_children($variables['elements']) as $key) {
     $variables['content'][$key] = $variables['elements'][$key];
   }
-
-  $entry = $variables['elements']['#entry'];
+  $entry = $variables['elements']['#feedback'];
 
   // Preprocess fields.
   field_attach_preprocess('feedback', $entry, $variables['elements'], $variables);
@@ -333,7 +380,6 @@ function template_preprocess_feedback_entry(&$variables) {
   $variables['location'] = l($entry->location, $entry->url);
   $variables['date'] = format_date($entry->timestamp, 'small');
   $variables['account'] = check_plain(format_username($entry));
-  $variables['message'] = feedback_format_message($entry);
 }
 
 /**

+ 16 - 0
feedback.admin.js

@@ -0,0 +1,16 @@
+(function ($) {
+
+/**
+ * Attach auto-submit to admin view form.
+ */
+Drupal.behaviors.feedbackAdminForm = {
+  attach: function (context) {
+    $('#feedback-admin-view-form', context).once('feedback', function () {
+      $(this).find('fieldset.feedback-messages :input[type="checkbox"]').click(function () {
+        this.form.submit();
+      });
+    });
+  }
+};
+
+})(jQuery);

+ 0 - 0
feedback.api.php


+ 0 - 0
feedback.controller.inc


+ 0 - 0
feedback.css


+ 2 - 2
feedback.info

@@ -9,9 +9,9 @@ files[] = views/feedback_handler_field_feedback_link_delete.inc
 files[] = views/feedback_handler_field_feedback_link_edit.inc
 files[] = tests/feedback.test
 
-; Information added by drupal.org packaging script on 2012-11-10
+; Information added by drupal.org packaging script on 2013-03-04
 version = "7.x-2.x-dev"
 core = "7.x"
 project = "feedback"
-datestamp = "1352509461"
+datestamp = "1362358407"
 

+ 0 - 13
feedback.js

@@ -1,18 +1,5 @@
 (function ($) {
 
-/**
- * Attach auto-submit to admin view form.
- */
-Drupal.behaviors.feedbackAdminForm = {
-  attach: function (context) {
-    $('#feedback-admin-view-form', context).once('feedback', function () {
-      $(this).find('fieldset.feedback-messages :input[type="checkbox"]').click(function () {
-        this.form.submit();
-      });
-    });
-  }
-};
-
 /**
  * Attach collapse behavior to the feedback form block.
  */

+ 56 - 40
feedback.module

@@ -63,6 +63,14 @@ function feedback_entity_info() {
           'label' => t('Full feedback entry'),
           'custom settings' => FALSE,
         ),
+        'teaser' => array(
+          'label' => t('Teaser'),
+          'custom settings' => FALSE,
+        ),
+        'widget' => array(
+          'label' => t('Widget'),
+          'custom settings' => FALSE,
+        ),
       ),
       // Disable Metatags (metatag) module's entity form additions.
       'metatags' => FALSE,
@@ -72,6 +80,49 @@ function feedback_entity_info() {
   return $return;
 }
 
+/**
+ * Implements hook_field_extra_fields().
+ */
+function feedback_field_extra_fields() {
+  $extras['feedback']['feedback']['form']['help'] = array(
+    'label' => t('Help'),
+    'description' => t('Feedback submission guidelines'),
+    'weight' => -10,
+  );
+  $extras['feedback']['feedback']['form']['messages'] = array(
+    'label' => t('Entries'),
+    'description' => t('Existing feedback entries for the current page'),
+    'weight' => -5,
+  );
+  $extras['feedback']['feedback']['form']['message'] = array(
+    'label' => t('Message'),
+    'description' => t('Feedback message form text field'),
+    'weight' => 0,
+  );
+
+  $extras['feedback']['feedback']['display']['location'] = array(
+    'label' => t('Location'),
+    'description' => t('The URL of the page the message was submitted on'),
+    'weight' => -15,
+  );
+  $extras['feedback']['feedback']['display']['date'] = array(
+    'label' => t('Date'),
+    'description' => t('The submission date of the message'),
+    'weight' => -10,
+  );
+  $extras['feedback']['feedback']['display']['user'] = array(
+    'label' => t('User'),
+    'description' => t('The name of the user who submitted the message'),
+    'weight' => -5,
+  );
+  $extras['feedback']['feedback']['display']['message'] = array(
+    'label' => t('Message'),
+    'description' => t('The main feedback message'),
+    'weight' => 0,
+  );
+  return $extras;
+}
+
 /**
  * Entity uri callback.
  */
@@ -157,17 +208,6 @@ function feedback_menu() {
   return $items;
 }
 
-/**
- * Implements hook_init().
- */
-function feedback_init() {
-  if (user_access('access feedback form')) {
-    $path = drupal_get_path('module', 'feedback');
-    drupal_add_css($path . '/feedback.css');
-    drupal_add_js($path . '/feedback.js');
-  }
-}
-
 /**
  * Implements hook_page_build().
  */
@@ -178,6 +218,9 @@ function feedback_page_build(&$page) {
       '#title' => t('Feedback'),
       '#content' => drupal_get_form('feedback_form'),
     );
+    $path = drupal_get_path('module', 'feedback');
+    $page['page_bottom']['feedback']['#attached']['css'][] = $path . '/feedback.css';
+    $page['page_bottom']['feedback']['#attached']['js'][] = $path . '/feedback.js';
   }
 }
 
@@ -238,6 +281,7 @@ function feedback_form($form, &$form_state) {
       $feedbacks = feedback_load_multiple(array(), array('status' => FEEDBACK_OPEN, 'location' => $_GET['q']));
     }
     if ($feedbacks) {
+      form_load_include($form_state, 'inc', 'feedback', 'feedback.admin');
       $form['messages'] = array(
         '#prefix' => '<div class="feedback-messages">',
         '#suffix' => '</div>',
@@ -247,7 +291,7 @@ function feedback_form($form, &$form_state) {
         $form['messages'][$fid]['submitted'] = array('#markup' => t('@feedback-author !feedback-date:', array('@feedback-author' => format_username($feedback), '!feedback-date' => format_date($feedback->timestamp, 'small'))));
         $form['messages'][$fid]['submitted']['#prefix'] = '<div class="feedback-submitted">';
         $form['messages'][$fid]['submitted']['#suffix'] = '</div>';
-        $form['messages'][$fid]['body'] = feedback_format_message($feedback);
+        $form['messages'][$fid]['body'] = feedback_build_content($feedback, 'widget');
         $form['messages'][$fid]['body']['#prefix'] = '<div class="feedback-body">';
         $form['messages'][$fid]['body']['#suffix'] = '</div>';
       }
@@ -340,34 +384,6 @@ function feedback_form_ajax_callback($form, &$form_state) {
   return $build;
 }
 
-/**
- * Returns HTML for a feedback entry.
- *
- * @param $entry
- *   A feedback object.
- */
-function feedback_format_message($entry) {
-  $message = check_plain($entry->message);
-  if (!empty($entry->useragent)) {
-    if (module_exists('browscap')) {
-      $browserinfo = browscap_get_browser($entry->useragent);
-      // Browscap returns useragent but not always parent info.
-      $browser = (isset($browserinfo['parent']) ? $browserinfo['parent'] . ' / ' . $browserinfo['platform'] : $browserinfo['useragent']);
-      $message .= '<div class="browserinfo">(' . check_plain($browser) . ')</div>';
-    }
-    else {
-      $message .= '<div class="browserinfo">(' . check_plain($entry->useragent) . ')</div>';
-    }
-  }
-  $elements['message'] = array('#markup' => $message);
-  $uri = entity_uri('feedback', $entry);
-  if ($uri['path'] != $_GET['q']) {
-    $links['view'] = array('title' => t('view'), 'href' => $uri['path']);
-    $elements['links'] = array('#theme' => 'links__feedback_message', '#links' => $links);
-  }
-  return $elements;
-}
-
 /**
  * Loads a feedback entry from the database.
  *

+ 0 - 0
images/throbber.gif


+ 0 - 0
tests/feedback.test


+ 0 - 13
tests/feedback_test.info

@@ -1,13 +0,0 @@
-name = Feedback testing
-description = Tests Feedback module functionality. Do not enable.
-core = 7.x
-package = Testing
-hidden = TRUE
-dependencies[] = feedback
-
-; Information added by drupal.org packaging script on 2012-11-10
-version = "7.x-2.x-dev"
-core = "7.x"
-project = "feedback"
-datestamp = "1352509461"
-

+ 0 - 7
tests/feedback_test.install

@@ -1,7 +0,0 @@
-<?php
-
-/**
- * @file
- * Installation functionality for Feedback testing module.
- */
-

+ 0 - 7
tests/feedback_test.module

@@ -1,7 +0,0 @@
-<?php
-
-/**
- * @file
- * Testing functionality for Feedback module.
- */
-

+ 0 - 0
views/feedback.views.inc


+ 36 - 15
views/feedback.views_default.inc

@@ -66,7 +66,7 @@ function feedback_views_default_views() {
     ),
     'message' => array(
       'align' => '',
-      'separator' => '',
+      'separator' => ' ',
       'empty_column' => 0,
     ),
     'useragent' => array(
@@ -102,7 +102,9 @@ function feedback_views_default_views() {
   $handler->display->display_options['empty']['area']['id'] = 'area';
   $handler->display->display_options['empty']['area']['table'] = 'views';
   $handler->display->display_options['empty']['area']['field'] = 'area';
-  $handler->display->display_options['empty']['area']['content'] = 'There are no feedback entries.';
+  $handler->display->display_options['empty']['area']['empty'] = TRUE;
+  $handler->display->display_options['empty']['area']['content'] = 'There are no open feedback entries.';
+  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
   /* Relationship: Feedback: User Id */
   $handler->display->display_options['relationships']['uid']['id'] = 'uid';
   $handler->display->display_options['relationships']['uid']['table'] = 'feedback';
@@ -140,18 +142,18 @@ function feedback_views_default_views() {
   $handler->display->display_options['fields']['view_entry']['field'] = 'view_entry';
   $handler->display->display_options['fields']['view_entry']['label'] = '';
   $handler->display->display_options['fields']['view_entry']['element_label_colon'] = FALSE;
-  /* Field: Feedback: Delete entry */
-  $handler->display->display_options['fields']['view_entry_delete']['id'] = 'view_entry_delete';
-  $handler->display->display_options['fields']['view_entry_delete']['table'] = 'feedback';
-  $handler->display->display_options['fields']['view_entry_delete']['field'] = 'view_entry_delete';
-  $handler->display->display_options['fields']['view_entry_delete']['label'] = '';
-  $handler->display->display_options['fields']['view_entry_delete']['element_label_colon'] = FALSE;
   /* Field: Feedback: Edit entry */
   $handler->display->display_options['fields']['view_entry_edit']['id'] = 'view_entry_edit';
   $handler->display->display_options['fields']['view_entry_edit']['table'] = 'feedback';
   $handler->display->display_options['fields']['view_entry_edit']['field'] = 'view_entry_edit';
   $handler->display->display_options['fields']['view_entry_edit']['label'] = '';
   $handler->display->display_options['fields']['view_entry_edit']['element_label_colon'] = FALSE;
+  /* Field: Feedback: Delete entry */
+  $handler->display->display_options['fields']['view_entry_delete']['id'] = 'view_entry_delete';
+  $handler->display->display_options['fields']['view_entry_delete']['table'] = 'feedback';
+  $handler->display->display_options['fields']['view_entry_delete']['field'] = 'view_entry_delete';
+  $handler->display->display_options['fields']['view_entry_delete']['label'] = '';
+  $handler->display->display_options['fields']['view_entry_delete']['element_label_colon'] = FALSE;
   /* Sort criterion: Feedback: Timestamp */
   $handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp';
   $handler->display->display_options['sorts']['timestamp']['table'] = 'feedback';
@@ -163,9 +165,17 @@ function feedback_views_default_views() {
   $handler->display->display_options['filters']['status']['value'] = '0';
   $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
 
-  /* Display: Page */
-  $handler = $view->new_display('page', 'Page', 'page_1');
+  /* Display: Open Entries */
+  $handler = $view->new_display('page', 'Open Entries', 'page_1');
   $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
+  $handler->display->display_options['defaults']['header'] = FALSE;
+  /* Header: Global: Text area */
+  $handler->display->display_options['header']['text']['id'] = 'text';
+  $handler->display->display_options['header']['text']['table'] = 'views';
+  $handler->display->display_options['header']['text']['field'] = 'area';
+  $handler->display->display_options['header']['text']['empty'] = TRUE;
+  $handler->display->display_options['header']['text']['content'] = '<h3>Open Feedback Messages</h3>';
+  $handler->display->display_options['header']['text']['format'] = 'full_html';
   $handler->display->display_options['path'] = 'admin/reports/feedback';
   $handler->display->display_options['menu']['type'] = 'normal';
   $handler->display->display_options['menu']['title'] = 'Feedback messages';
@@ -173,17 +183,27 @@ function feedback_views_default_views() {
   $handler->display->display_options['menu']['weight'] = '0';
   $handler->display->display_options['menu']['name'] = 'management';
 
-  /* Display: Attachment */
-  $handler = $view->new_display('attachment', 'Attachment', 'attachment_1');
+  /* Display: Processed Entries */
+  $handler = $view->new_display('attachment', 'Processed Entries', 'attachment_1');
   $handler->display->display_options['defaults']['title'] = FALSE;
   $handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
   $handler->display->display_options['pager']['type'] = 'some';
   $handler->display->display_options['defaults']['header'] = FALSE;
   /* Header: Global: Text area */
-  $handler->display->display_options['header']['text']['id'] = 'area';
+  $handler->display->display_options['header']['text']['id'] = 'text';
   $handler->display->display_options['header']['text']['table'] = 'views';
   $handler->display->display_options['header']['text']['field'] = 'area';
-  $handler->display->display_options['header']['text']['content'] = 'Processed Feedback Messages';
+  $handler->display->display_options['header']['text']['empty'] = TRUE;
+  $handler->display->display_options['header']['text']['content'] = '<h3>Processed Feedback Messages</h3>';
+  $handler->display->display_options['header']['text']['format'] = 'full_html';
+  $handler->display->display_options['defaults']['empty'] = FALSE;
+  /* No results behavior: Global: Text area */
+  $handler->display->display_options['empty']['area']['id'] = 'area';
+  $handler->display->display_options['empty']['area']['table'] = 'views';
+  $handler->display->display_options['empty']['area']['field'] = 'area';
+  $handler->display->display_options['empty']['area']['empty'] = TRUE;
+  $handler->display->display_options['empty']['area']['content'] = 'There are no processed feedback entries.';
+  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
   $handler->display->display_options['defaults']['filter_groups'] = FALSE;
   $handler->display->display_options['defaults']['filters'] = FALSE;
   /* Filter criterion: Feedback: Status */
@@ -215,7 +235,8 @@ function feedback_views_default_views() {
     t('next ›'),
     t('last »'),
     t('Open Feedback Messages'),
-    t('There are no feedback entries.'),
+    t('There are no processed feedback entries.'),
+    t('There are no open feedback entries.'),
     t('User'),
     t('Location'),
     t('Date'),

+ 0 - 0
views/feedback_handler_field_feedback_link.inc


+ 13 - 0
views/feedback_handler_field_feedback_link_delete.inc

@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Field handler to present a link to delete a feedback entry.
+ */
+class feedback_handler_field_feedback_link_delete extends feedback_handler_field_feedback_link {
+  function render_link($data, $values) {
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = "admin/reports/feedback/$data/delete";
+    $text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
+    return $text;
+  }
+}

+ 13 - 0
views/feedback_handler_field_feedback_link_edit.inc

@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Field handler to present a link to edit a feedback entry.
+ */
+class feedback_handler_field_feedback_link_edit extends feedback_handler_field_feedback_link {
+  function render_link($data, $values) {
+    $this->options['alter']['make_link'] = TRUE;
+    $this->options['alter']['path'] = "admin/reports/feedback/$data/edit";
+    $text = !empty($this->options['text']) ? $this->options['text'] : t('edit');
+    return $text;
+  }
+}