webform_handler_field_submission_link.inc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * @file
  4. * Views handler to display links to a submission.
  5. */
  6. /**
  7. * Field handler to present a link to the user.
  8. */
  9. class webform_handler_field_submission_link extends views_handler_field {
  10. var $link_type;
  11. function construct() {
  12. // We need to set this property before calling the construct() chain
  13. // as we use it in the option_definintion() call.
  14. $this->link_type = $this->definition['link_type'];
  15. parent::construct();
  16. $this->additional_fields['sid'] = 'sid';
  17. $this->additional_fields['nid'] = 'nid';
  18. $this->additional_fields['uid'] = 'uid';
  19. $this->additional_fields['node_uid'] = array(
  20. 'table' => 'node',
  21. 'field' => 'uid',
  22. );
  23. }
  24. function allow_advanced_render() {
  25. return FALSE;
  26. }
  27. function option_definition() {
  28. $options = parent::option_definition();
  29. $options['label'] = array('default' => '', 'translatable' => TRUE);
  30. $options['text'] = array('default' => $this->link_type, 'translatable' => TRUE);
  31. return $options;
  32. }
  33. function options_form(&$form, &$form_state) {
  34. parent::options_form($form, $form_state);
  35. $form['text'] = array(
  36. '#type' => 'textfield',
  37. '#title' => t('Text to display'),
  38. '#default_value' => $this->options['text'],
  39. );
  40. }
  41. function query() {
  42. $this->ensure_my_table();
  43. // Join to the node table to retrieve the node UID.
  44. $join = new views_join();
  45. $join->construct('node', $this->table_alias, 'nid', 'nid');
  46. $this->query->ensure_table('node', $this->relationship, $join);
  47. $this->add_additional_fields();
  48. }
  49. function render($values) {
  50. $submission = new stdClass();
  51. $submission->sid = $values->{$this->aliases['sid']};
  52. $submission->nid = $values->{$this->aliases['nid']};
  53. $submission->uid = $values->{$this->aliases['uid']};
  54. $node = (object) array(
  55. 'nid' => $submission->nid,
  56. 'uid' => $values->{$this->aliases['node_uid']},
  57. );
  58. switch ($this->link_type) {
  59. case 'view':
  60. $text = !empty($this->options['text']) ? $this->options['text'] : t('view');
  61. $link = l($text, "node/$submission->nid/submission/$submission->sid");
  62. $access = webform_submission_access($node, $submission, 'view');
  63. break;
  64. case 'edit':
  65. $text = !empty($this->options['text']) ? $this->options['text'] : t('edit');
  66. $link = l($text, "node/$submission->nid/submission/$submission->sid/edit");
  67. $access = webform_submission_access($node, $submission, 'edit');
  68. break;
  69. case 'delete':
  70. $text = !empty($this->options['text']) ? $this->options['text'] : t('delete');
  71. $path = drupal_get_path_alias($_GET['q']);
  72. $link = l($text, "node/$submission->nid/submission/$submission->sid/delete", array('query' => array('destination' => $path)));
  73. $access = webform_submission_access($node, $submission, 'delete');
  74. break;
  75. default:
  76. $text = '';
  77. $link = NULL;
  78. $access = FALSE;
  79. }
  80. if (!$access) {
  81. return;
  82. }
  83. return $link;
  84. }
  85. }