views_rss_handler_field_user_mail.inc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. /**
  3. * @file
  4. * Field handler to provide additional control for the email field.
  5. */
  6. class views_rss_handler_field_user_mail extends views_handler_field_user_mail {
  7. function option_definition() {
  8. $options = parent::option_definition();
  9. $options['rss_format'] = array('default' => 'default');
  10. return $options;
  11. }
  12. function options_form(&$form, &$form_state) {
  13. parent::options_form($form, $form_state);
  14. $form['rss_format'] = array(
  15. '#title' => t('Display type'),
  16. '#type' => 'select',
  17. '#options' => array(
  18. 'default' => t('Generic email'),
  19. 'with_name' => t('RSS <author> element (with user name)'),
  20. ),
  21. '#default_value' => isset($this->options['rss_format']) ? $this->options['rss_format'] : 'default',
  22. '#weight' => 0,
  23. );
  24. // Hide "Link this field" radios if "RSS <author> element"
  25. // is selected as "Display type".
  26. $form['link_to_user']['#states'] = array(
  27. 'visible' => array(
  28. ':input[name="options[rss_format]"]' => array('!value' => 'with_name'),
  29. ),
  30. );
  31. }
  32. function render_link($data, $values) {
  33. if ($this->options['rss_format'] == 'with_name') {
  34. // Try to load full user object based on email address.
  35. $value = $data;
  36. if ($account = user_load_by_mail($data)) {
  37. $value = $account->mail . ' (' . $account->name . ')';
  38. }
  39. // Basic XML element details.
  40. $rss_element = array(
  41. 'key' => 'author',
  42. 'value' => $value,
  43. );
  44. // Prepare and store raw-rendered values in view results,
  45. // the same way as values from standard field formatters are added.
  46. $rendered = array(
  47. '#item' => $data,
  48. '#markup' => format_xml_elements(array($rss_element)),
  49. '#rss_element' => $rss_element,
  50. '#settings' => $this->options,
  51. );
  52. // Store raw-rendered values in view results, the same way
  53. // as values from standard field formatters are added.
  54. $row_index = $this->view->row_index;
  55. $field_name = 'field_' . $this->field;
  56. $this->view->result[$row_index]->{$field_name}[0] = array(
  57. 'rendered' => $rendered,
  58. 'raw' => $data,
  59. );
  60. // Return formatted XML element.
  61. return format_xml_elements(array($rss_element));
  62. }
  63. // Standard Views render_link().
  64. return parent::render_link($data, $values);
  65. }
  66. }