Framework  3.9
table_select_field_renderer.inc
Go to the documentation of this file.
1 <?php
6 Fakoli::usingFeature("field_renderers");
7 
9 {
10  var $table = null;
11 
12  var $field;
13  var $label;
14 
15  var $colspan = 2;
16 
17  var $mode = "single";
18 
19  var $handler = null;
20  var $processor = null;
21  var $data = null;
22 
23  function __construct($form, $field, $label, $handler, $processor = null, $mode = "single", $data = null )
24  {
25  $this->FieldRenderer($form);
26 
27  $this->field = $field;
28  $this->label = $label;
29  $this->handler = $handler;
30  $this->processor = $processor;
31  $this->mode = $mode;
32  $this->data = $data;
33 
34  if ($form->data->hasField($field))
35  {
36  $form->override($field, $label, $this);
37  }
38  else
39  {
40  $form->add($this, $field);
41  // JDG 8/14/2011 - allow "additional" fields to override label
42  $form->overrides[$field]['label'] = $label;
43  }
44 
45  }
46 
47  function buildTable($field)
48  {
49  $this->table = new DataListView($this->data, "{$field}_table");
50  $this->table->rowId = true;
51 
52  $this->table->pageSize = 5;
53  $this->table->filter = true;
54  $this->table->emptyMessage = $this->emptyMessage;
55 
56  $this->table->selectable = true;
57  $this->table->selector(array($this, 'formatSelector'));
58 
59  call_user_func_array($this->handler, array($this->table));
60  }
61 
62  function formatSelector($item)
63  {
64  $pk = $item->getPrimaryKey();
65  $pkval = $item->get($pk);
66 
67  switch($this->mode)
68  {
69  case "multi":
70  $control = "checkbox";
71  $name = "{$this->field}[]";
72  break;
73 
74  case "single":
75  default:
76  $control = "radio";
77  $name = $this->field;
78  break;
79  }
80 
81  $checked = array_key_exists($pkval, $this->related) ? " checked='checked'" : "";
82 
83  return $item->format("<input type='{$control}' class='{$control}' name='{$name}' id='{$this->field}_{{$pk}}' value='{{$pk}}'{$checked}/>");
84  }
85 
86  function renderScript($field)
87  {
88  if (!$field) $field = $this->field;
89 
90  if (!$this->table)
91  {
92  $this->buildTable($field);
93  }
94 
95  echo $this->table->writeScript();
96  }
97 
98  function renderField($field)
99  {
100  if (!$field) $field = $this->field;
101 
102  if (!$this->table)
103  {
104  $this->buildTable($field);
105  }
106 
107  $this->_startField($field);
108 
109  echo $this->table->drawView();
110 
111  $this->_endField($field);
112  }
113 
114  function postProcess($field = "")
115  {
116  if (!$field) $field = $this->field;
117 
118  if ($this->processor)
119  {
120  call_user_func_array($this->processor, array($field));
121  }
122 
123  return true;
124  }
125 }
126 
DataListView displays a list of DataItems (or InnerJoinResults) in tabular format.
Definition: data_view.inc:56
FieldRenderer is the abstract base class for all FieldRenderers.
_startField($field, $styles="")
Internal method to generate the starting HTML for the field (including the label)
_endField($field)
Internal method to generate the closing HTML for the field.
FieldRenderer($parent)
Constructor.
__construct($form, $field, $label, $handler, $processor=null, $mode="single", $data=null)
renderScript($field)
FieldRenderers can override this method to provide any Javascript that their control requires for an ...
postProcess($field="")
FieldRenderers can override this method to provide behavior that occurs after the parent form's targe...
renderField($field)
FieldRenderers must override this method to provide the HTML implementation of the control used to ed...
$mode
"single" or "multi" selection