1<?php
2
3/**
4 * Handles INPUT type="submit" boxes generation.
5 */
6class ButtonSubmitBox extends ButtonBox {
7  /**
8   * @var String URL to post the form to; may be null if this is not a 'submit' button
9   * @access private
10   */
11  var $_action_url;
12
13  /**
14   * Note: required for interative forms only
15   *
16   * @var String textual name of the input field
17   * @access private
18   */
19  var $_field_name;
20
21  /**
22   * Note: required for interactive forms only
23   *
24   * @var String button name to display
25   * @access private
26   */
27  var $_value;
28
29  /**
30   * Constructs new (possibly interactive) button box
31   *
32   * @param String $text text to display
33   * @param String $field field name (interactive forms)
34   * @param String $value field value (interactive forms)
35   */
36  function ButtonSubmitBox($field, $value, $action) {
37    $this->ButtonBox();
38    $this->_action_url = $action;
39    $this->_field_name = $field;
40    $this->_value = $value;
41  }
42
43  /**
44   * Create input box using DOM tree data
45   *
46   * @param Object $root DOM tree node corresponding to the box being created
47   * @param Pipeline $pipeline reference to current pipeline object (unused)
48   *
49   * @return input box
50   */
51  function &create(&$root, &$pipeline) {
52    /**
53     * If no "value" attribute is specified, display the default button text.
54     * Note the difference between displayed text and actual field value!
55     */
56    if ($root->has_attribute("value")) {
57      $text = $root->get_attribute("value");
58    } else {
59      $text = DEFAULT_SUBMIT_TEXT;
60    };
61
62    $field = $root->get_attribute('name');
63    $value = $root->get_attribute('value');
64
65    $css_state =& $pipeline->get_current_css_state();
66    $box =& new ButtonSubmitBox($field, $value, $css_state->get_property(CSS_HTML2PS_FORM_ACTION));
67    $box->readCSS($css_state);
68    $box->_setup($text, $pipeline);
69
70    return $box;
71  }
72
73  /**
74   * Render interactive field using the driver-specific capabilities;
75   * button is rendered as a rectangle defined by margin and padding areas (note that unlike most other boxes,
76   * borders are _outside_ the box, so we may treat
77   *
78   * @param OutputDriver $driver reference to current output driver object
79   */
80  function _render_field(&$driver) {
81    $driver->field_pushbuttonsubmit($this->get_left_padding() - $this->get_margin_left(),
82                                    $this->get_top_padding() + $this->get_margin_top(),
83                                    $this->get_width() + $this->get_padding_left() + $this->get_padding_right() + $this->get_margin_left() + $this->get_margin_right(),
84                                    $this->get_height() + $this->get_padding_top() + $this->get_padding_bottom() + $this->get_margin_top() + $this->get_margin_bottom(),
85                                    $this->_field_name,
86                                    $this->_value,
87                                    $this->_action_url);
88  }
89}
90
91?>