workflowfield.widget.inc 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * @file
  4. * Defines a Workflow Field, Widget and Formatter for Workflow.
  5. *
  6. * All hooks are wrapper functions for a D8-style WorkflowDefaultWidget object.
  7. * The Widget is copied from options.module); the Formatter from list field.
  8. */
  9. /**
  10. * Implements hook_field_widget_info().
  11. */
  12. function workflowfield_field_widget_info() {
  13. return WorkflowDefaultWidget::settings();
  14. }
  15. /**
  16. * Implements hook_field_widget_settings_form().
  17. */
  18. function workflowfield_field_widget_settings_form($field, $instance) {
  19. $form = array();
  20. $form_state = array();
  21. // The form element is created by a D8-like object.
  22. $widget = new WorkflowDefaultWidget($field, $instance);
  23. return $widget->settingsForm($form, $form_state, $has_data = 0);
  24. }
  25. /**
  26. * Implements hook_field_widget_form().
  27. *
  28. * param $langcode
  29. * obsolete. Removed from formElement() parameter list.
  30. *
  31. * This is a wrapper function for the 'workflow form' Widget. $form is modified by reference.
  32. */
  33. function workflowfield_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
  34. if (!isset($element['#entity'])) {
  35. // We are now on the 'Manage Fields | Edit' settings page, so do nothing.
  36. return $element;
  37. }
  38. elseif (!isset($element['#entity_type'])) {
  39. // Not used: On an Entity View page, the widget is shown via
  40. // workflowfield_field_formatter_view() and workflow_transition_form().
  41. return $element;
  42. }
  43. else {
  44. // We are on an Entity add/edit page.
  45. if (!empty($field['settings']['widget']['hide'])) {
  46. // We want the widget to be hidden, when states are only to be
  47. // changed via Workflow History tab.
  48. // This setting is needed, because D7 core does't have a <hidden> widget.
  49. // @todo D8: remove this, since hidden widgets are available.
  50. return $element;
  51. }
  52. else {
  53. // Show the widget.
  54. $entity_type = $element['#entity_type'];
  55. $entity = $element['#entity'];
  56. if ($entity_type == 'comment') {
  57. // On a comment form, get the referenced entity.
  58. $entity_type = 'node'; // Comments are only possible on nodes.
  59. $entity = $form['#node'];
  60. // Make sure no action buttons are added.
  61. $instance['widget']['settings']['submit_function'] = array();
  62. }
  63. // Build a new $element.
  64. // Do not use drupal_get_form() or you'll have a form in a form.
  65. $element = array();
  66. $widget = new WorkflowTransitionForm($field, $instance, $entity_type, $entity);
  67. $element = $widget->buildForm($element, $form_state);
  68. return $element;
  69. }
  70. }
  71. return $element;
  72. }