updated to 7.x-2.x-dev (2013-Mar-04)
This commit is contained in:
parent
a2b9816e52
commit
ca63b9bbca
@ -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
LICENSE.txt
Normal file → Executable file
0
LICENSE.txt
Normal file → Executable file
9
README.txt
Normal file → Executable file
9
README.txt
Normal file → Executable file
@ -29,15 +29,16 @@ To submit bug reports and feature suggestions, or to track changes:
|
|||||||
-- CONFIGURATION --
|
-- CONFIGURATION --
|
||||||
|
|
||||||
* Configure user permissions in Administration » People » Permissions »
|
* Configure user permissions in Administration » People » Permissions »
|
||||||
Feedback.
|
Feedback.
|
||||||
* Configure fields at Administration » Configuration » User interface »
|
|
||||||
Feedback
|
* Configure fields at Administration » Configuration » User interface »
|
||||||
|
Feedback.
|
||||||
|
|
||||||
|
|
||||||
-- USAGE --
|
-- USAGE --
|
||||||
|
|
||||||
* To view all feedback messages, go to Administration » Reports » Feedback
|
* To view all feedback messages, go to Administration » Reports » Feedback
|
||||||
messages
|
messages.
|
||||||
|
|
||||||
|
|
||||||
-- CONTACT --
|
-- CONTACT --
|
||||||
|
0
feedback-entry.tpl.php
Normal file → Executable file
0
feedback-entry.tpl.php
Normal file → Executable file
0
feedback-form-display.tpl.php
Normal file → Executable file
0
feedback-form-display.tpl.php
Normal file → Executable file
74
feedback.admin.inc
Normal file → Executable file
74
feedback.admin.inc
Normal file → Executable file
@ -9,6 +9,8 @@
|
|||||||
* Build a (sortable) form containing a checkbox for each feedback entry.
|
* Build a (sortable) form containing a checkbox for each feedback entry.
|
||||||
*/
|
*/
|
||||||
function feedback_admin_view_form($form, &$form_state) {
|
function feedback_admin_view_form($form, &$form_state) {
|
||||||
|
$form['#attached']['js'][] = drupal_get_path('module', 'feedback') . '/feedback.admin.js';
|
||||||
|
|
||||||
$status_headings = array(
|
$status_headings = array(
|
||||||
FEEDBACK_OPEN => t('Open feedback messages'),
|
FEEDBACK_OPEN => t('Open feedback messages'),
|
||||||
FEEDBACK_PROCESSED => t('Processed 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]['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]['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]['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(
|
$form['feedback-messages'][$status][$fid]['operations'] = array(
|
||||||
'#theme' => 'links',
|
'#theme' => 'links',
|
||||||
'#links' => array(
|
'#links' => array(
|
||||||
@ -206,6 +208,9 @@ function feedback_entry_form($form, &$form_state, $entry) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Form submit callback for entry edit form.
|
* 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) {
|
function feedback_entry_form_submit(&$form, &$form_state) {
|
||||||
$entry = feedback_load($form['#fid']);
|
$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
|
* @param $entry
|
||||||
* A feedback entry object.
|
* A feedback entry object.
|
||||||
* @param $view_mode
|
* @param $view_mode
|
||||||
* View mode, e.g. 'full'.
|
* View mode, e.g. 'full', 'teaser'...
|
||||||
* @param $langcode
|
* @param $langcode
|
||||||
* (optional) A language code to use for rendering. Defaults to the global
|
* (optional) A language code to use for rendering. Defaults to the global
|
||||||
* content language of the current request.
|
* content language of the current request.
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
* An array as expected by drupal_render().
|
* 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) {
|
function feedback_view($entry, $view_mode = 'full', $langcode = NULL) {
|
||||||
if (!isset($langcode)) {
|
if (!isset($langcode)) {
|
||||||
$langcode = $GLOBALS['language_content']->language;
|
$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);
|
feedback_build_content($entry, $view_mode, $langcode);
|
||||||
|
|
||||||
$build = $entry->content;
|
$build = $entry->content;
|
||||||
// We don't need duplicate rendering info in entry->content.
|
|
||||||
unset($entry->content);
|
unset($entry->content);
|
||||||
|
|
||||||
$build += array(
|
$build += array(
|
||||||
'#theme' => 'feedback_entry',
|
'#theme' => 'feedback_entry',
|
||||||
'#entry' => $entry,
|
'#feedback' => $entry,
|
||||||
'#view_mode' => $view_mode,
|
'#view_mode' => $view_mode,
|
||||||
'#language' => $langcode,
|
'#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
|
* @param $entry
|
||||||
* A feedback entry object.
|
* A feedback entry object.
|
||||||
* @param $view_mode
|
* @param $view_mode
|
||||||
* View mode, e.g. 'full'.
|
* View mode, e.g. 'full', 'teaser'...
|
||||||
* @param $langcode
|
* @param $langcode
|
||||||
* (optional) A language code to use for rendering. Defaults to the global
|
* (optional) A language code to use for rendering. Defaults to the global
|
||||||
* content language of the current request.
|
* 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) {
|
function feedback_build_content($entry, $view_mode = 'full', $langcode = NULL) {
|
||||||
if (!isset($langcode)) {
|
if (!isset($langcode)) {
|
||||||
$langcode = $GLOBALS['language_content']->language;
|
$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.
|
// Build fields content.
|
||||||
field_attach_prepare_view('feedback', array($entry->fid => $entry), $view_mode);
|
field_attach_prepare_view('feedback', array($entry->fid => $entry), $view_mode, $langcode);
|
||||||
entity_prepare_view('feedback', array($entry->fid => $entry));
|
entity_prepare_view('feedback', array($entry->fid => $entry), $langcode);
|
||||||
$entry->content = field_attach_view('feedback', $entry, $view_mode, $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('feedback_view', $entry, $view_mode, $langcode);
|
||||||
module_invoke_all('entity_view', $entry, 'feedback', $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) {
|
foreach (element_children($variables['elements']) as $key) {
|
||||||
$variables['content'][$key] = $variables['elements'][$key];
|
$variables['content'][$key] = $variables['elements'][$key];
|
||||||
}
|
}
|
||||||
|
$entry = $variables['elements']['#feedback'];
|
||||||
$entry = $variables['elements']['#entry'];
|
|
||||||
|
|
||||||
// Preprocess fields.
|
// Preprocess fields.
|
||||||
field_attach_preprocess('feedback', $entry, $variables['elements'], $variables);
|
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['location'] = l($entry->location, $entry->url);
|
||||||
$variables['date'] = format_date($entry->timestamp, 'small');
|
$variables['date'] = format_date($entry->timestamp, 'small');
|
||||||
$variables['account'] = check_plain(format_username($entry));
|
$variables['account'] = check_plain(format_username($entry));
|
||||||
$variables['message'] = feedback_format_message($entry);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
16
feedback.admin.js
Executable file
16
feedback.admin.js
Executable file
@ -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
feedback.api.php
Normal file → Executable file
0
feedback.api.php
Normal file → Executable file
0
feedback.controller.inc
Normal file → Executable file
0
feedback.controller.inc
Normal file → Executable file
0
feedback.css
Normal file → Executable file
0
feedback.css
Normal file → Executable file
4
feedback.info
Normal file → Executable file
4
feedback.info
Normal file → Executable file
@ -9,9 +9,9 @@ files[] = views/feedback_handler_field_feedback_link_delete.inc
|
|||||||
files[] = views/feedback_handler_field_feedback_link_edit.inc
|
files[] = views/feedback_handler_field_feedback_link_edit.inc
|
||||||
files[] = tests/feedback.test
|
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"
|
version = "7.x-2.x-dev"
|
||||||
core = "7.x"
|
core = "7.x"
|
||||||
project = "feedback"
|
project = "feedback"
|
||||||
datestamp = "1352509461"
|
datestamp = "1362358407"
|
||||||
|
|
||||||
|
13
feedback.js
Normal file → Executable file
13
feedback.js
Normal file → Executable file
@ -1,18 +1,5 @@
|
|||||||
(function ($) {
|
(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.
|
* Attach collapse behavior to the feedback form block.
|
||||||
*/
|
*/
|
||||||
|
96
feedback.module
Normal file → Executable file
96
feedback.module
Normal file → Executable file
@ -63,6 +63,14 @@ function feedback_entity_info() {
|
|||||||
'label' => t('Full feedback entry'),
|
'label' => t('Full feedback entry'),
|
||||||
'custom settings' => FALSE,
|
'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.
|
// Disable Metatags (metatag) module's entity form additions.
|
||||||
'metatags' => FALSE,
|
'metatags' => FALSE,
|
||||||
@ -72,6 +80,49 @@ function feedback_entity_info() {
|
|||||||
return $return;
|
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.
|
* Entity uri callback.
|
||||||
*/
|
*/
|
||||||
@ -157,17 +208,6 @@ function feedback_menu() {
|
|||||||
return $items;
|
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().
|
* Implements hook_page_build().
|
||||||
*/
|
*/
|
||||||
@ -178,6 +218,9 @@ function feedback_page_build(&$page) {
|
|||||||
'#title' => t('Feedback'),
|
'#title' => t('Feedback'),
|
||||||
'#content' => drupal_get_form('feedback_form'),
|
'#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']));
|
$feedbacks = feedback_load_multiple(array(), array('status' => FEEDBACK_OPEN, 'location' => $_GET['q']));
|
||||||
}
|
}
|
||||||
if ($feedbacks) {
|
if ($feedbacks) {
|
||||||
|
form_load_include($form_state, 'inc', 'feedback', 'feedback.admin');
|
||||||
$form['messages'] = array(
|
$form['messages'] = array(
|
||||||
'#prefix' => '<div class="feedback-messages">',
|
'#prefix' => '<div class="feedback-messages">',
|
||||||
'#suffix' => '</div>',
|
'#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'] = 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']['#prefix'] = '<div class="feedback-submitted">';
|
||||||
$form['messages'][$fid]['submitted']['#suffix'] = '</div>';
|
$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']['#prefix'] = '<div class="feedback-body">';
|
||||||
$form['messages'][$fid]['body']['#suffix'] = '</div>';
|
$form['messages'][$fid]['body']['#suffix'] = '</div>';
|
||||||
}
|
}
|
||||||
@ -340,34 +384,6 @@ function feedback_form_ajax_callback($form, &$form_state) {
|
|||||||
return $build;
|
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.
|
* Loads a feedback entry from the database.
|
||||||
*
|
*
|
||||||
|
0
images/throbber.gif
Normal file → Executable file
0
images/throbber.gif
Normal file → Executable file
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
0
tests/feedback.test
Normal file → Executable file
0
tests/feedback.test
Normal file → Executable file
@ -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"
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Installation functionality for Feedback testing module.
|
|
||||||
*/
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Testing functionality for Feedback module.
|
|
||||||
*/
|
|
||||||
|
|
0
views/feedback.views.inc
Normal file → Executable file
0
views/feedback.views.inc
Normal file → Executable file
51
views/feedback.views_default.inc
Normal file → Executable file
51
views/feedback.views_default.inc
Normal file → Executable file
@ -66,7 +66,7 @@ function feedback_views_default_views() {
|
|||||||
),
|
),
|
||||||
'message' => array(
|
'message' => array(
|
||||||
'align' => '',
|
'align' => '',
|
||||||
'separator' => '',
|
'separator' => ' ',
|
||||||
'empty_column' => 0,
|
'empty_column' => 0,
|
||||||
),
|
),
|
||||||
'useragent' => array(
|
'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']['id'] = 'area';
|
||||||
$handler->display->display_options['empty']['area']['table'] = 'views';
|
$handler->display->display_options['empty']['area']['table'] = 'views';
|
||||||
$handler->display->display_options['empty']['area']['field'] = 'area';
|
$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 */
|
/* Relationship: Feedback: User Id */
|
||||||
$handler->display->display_options['relationships']['uid']['id'] = 'uid';
|
$handler->display->display_options['relationships']['uid']['id'] = 'uid';
|
||||||
$handler->display->display_options['relationships']['uid']['table'] = 'feedback';
|
$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']['field'] = 'view_entry';
|
||||||
$handler->display->display_options['fields']['view_entry']['label'] = '';
|
$handler->display->display_options['fields']['view_entry']['label'] = '';
|
||||||
$handler->display->display_options['fields']['view_entry']['element_label_colon'] = FALSE;
|
$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 */
|
/* Field: Feedback: Edit entry */
|
||||||
$handler->display->display_options['fields']['view_entry_edit']['id'] = 'view_entry_edit';
|
$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']['table'] = 'feedback';
|
||||||
$handler->display->display_options['fields']['view_entry_edit']['field'] = 'view_entry_edit';
|
$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']['label'] = '';
|
||||||
$handler->display->display_options['fields']['view_entry_edit']['element_label_colon'] = FALSE;
|
$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 */
|
/* Sort criterion: Feedback: Timestamp */
|
||||||
$handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp';
|
$handler->display->display_options['sorts']['timestamp']['id'] = 'timestamp';
|
||||||
$handler->display->display_options['sorts']['timestamp']['table'] = 'feedback';
|
$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']['value'] = '0';
|
||||||
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
|
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
|
||||||
|
|
||||||
/* Display: Page */
|
/* Display: Open Entries */
|
||||||
$handler = $view->new_display('page', 'Page', 'page_1');
|
$handler = $view->new_display('page', 'Open Entries', 'page_1');
|
||||||
$handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
|
$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['path'] = 'admin/reports/feedback';
|
||||||
$handler->display->display_options['menu']['type'] = 'normal';
|
$handler->display->display_options['menu']['type'] = 'normal';
|
||||||
$handler->display->display_options['menu']['title'] = 'Feedback messages';
|
$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']['weight'] = '0';
|
||||||
$handler->display->display_options['menu']['name'] = 'management';
|
$handler->display->display_options['menu']['name'] = 'management';
|
||||||
|
|
||||||
/* Display: Attachment */
|
/* Display: Processed Entries */
|
||||||
$handler = $view->new_display('attachment', 'Attachment', 'attachment_1');
|
$handler = $view->new_display('attachment', 'Processed Entries', 'attachment_1');
|
||||||
$handler->display->display_options['defaults']['title'] = FALSE;
|
$handler->display->display_options['defaults']['title'] = FALSE;
|
||||||
$handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
|
$handler->display->display_options['defaults']['hide_admin_links'] = FALSE;
|
||||||
$handler->display->display_options['pager']['type'] = 'some';
|
$handler->display->display_options['pager']['type'] = 'some';
|
||||||
$handler->display->display_options['defaults']['header'] = FALSE;
|
$handler->display->display_options['defaults']['header'] = FALSE;
|
||||||
/* Header: Global: Text area */
|
/* 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']['table'] = 'views';
|
||||||
$handler->display->display_options['header']['text']['field'] = 'area';
|
$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']['filter_groups'] = FALSE;
|
||||||
$handler->display->display_options['defaults']['filters'] = FALSE;
|
$handler->display->display_options['defaults']['filters'] = FALSE;
|
||||||
/* Filter criterion: Feedback: Status */
|
/* Filter criterion: Feedback: Status */
|
||||||
@ -215,7 +235,8 @@ function feedback_views_default_views() {
|
|||||||
t('next ›'),
|
t('next ›'),
|
||||||
t('last »'),
|
t('last »'),
|
||||||
t('Open Feedback Messages'),
|
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('User'),
|
||||||
t('Location'),
|
t('Location'),
|
||||||
t('Date'),
|
t('Date'),
|
||||||
|
0
views/feedback_handler_field_feedback_link.inc
Normal file → Executable file
0
views/feedback_handler_field_feedback_link.inc
Normal file → Executable file
13
views/feedback_handler_field_feedback_link_delete.inc
Executable file
13
views/feedback_handler_field_feedback_link_delete.inc
Executable file
@ -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
views/feedback_handler_field_feedback_link_edit.inc
Executable file
13
views/feedback_handler_field_feedback_link_edit.inc
Executable file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user