61 $this->
field = $taxonomy->identifier;
63 $this->options =
$taxonomy->Terms(
"ORDER BY sort_order, term");
66 $this->showSelectAll =
true;
68 $this->FieldRenderer(
$form);
71 if (
$form->data->hasField($this->field))
96 if ($this->showSelectAll)
99 <script type=
"text/javascript">
101 function <?echo $this->parent->id?>_<?echo $this->
field ?>_toggleSelectAll(link)
103 link = document.id(link);
105 var value = (link.innerHTML ==
"Select All");
107 var container = document.id(
'<?echo $this->parent->id?>_<?echo $this->field?>_container');
109 container.getElements(
"input[type=checkbox]").each(
function(cbox)
111 cbox.set(
'checked', value);
114 link.innerHTML = (value) ?
"Deselect All" :
"Select All";
115 if (container.multiSelect) container.multiSelect.selectionChanged();
126 <script type=
'text/javascript'>
127 window.addEvent(
'domready',
function()
129 new MultiSelect(
'<?echo $this->parent->id?>_<?echo $this->field?>_container', {maxWidth:
'<?echo $this->dropdownMaxWidth?>',
message:
'<?echo jsSafe($this->dropdownMessage)?>'});
142 <script type=
'text/javascript'>
143 window.addEvent(
'domready',
function()
145 new MultiSelect(
'<?echo $this->parent->id?>_<?echo $this->field?>_container', {maxWidth:
'<?echo $this->dropdownMaxWidth?>',
message:
'<?echo jsSafe($this->dropdownMessage)?>'});
153 $pks =
$obj->getPrimaryKeyList();
156 if ($xref->hasField(
$pk))
return $pk;
159 throw new DataItemException(
"No matching foreign key in xref table");
164 if (count($this->options) == 0)
return;
168 $this->_startField(
$field);
170 $obj = $this->parent->data;
172 if ($this->showSelectAll)
174 echo
"<a href='#' onclick='return {$this->parent->id}_{$field}_toggleSelectAll(this);'>Select All</a><br/>";
180 $padding = (
$width ==
"auto") ?
"padding-right: 20px; overflow-x: hidden" :
"";
184 echo
"<div id='{$this->parent->id}_{$field}_container' class='scrollbox{$resizable}{$dropdown}' style='width: {$width}; height: {$height};overflow: auto; $padding'>\n";
187 $countOptions = count($this->options);
192 $selected = IndexedQuery::create(
TaxonomyTermAssociation,
"WHERE taxonomy_id=:id AND class=:class AND id=:pk",
"term_id")
193 ->bind(
":id", $this->taxonomy->taxonomy_id,
":class",
$class,
":pk",
$pk)
196 $this->renderCheckBoxes(
$field, $this->options, $selected);
204 echo
"<input type=\"hidden\" name=\"count_{$field}\" value=\"$countOptions\">";
216 $val =
$mode ? $p :
"1";
218 echo
"<label for='checkbox_{$field}_$p'><input type='checkbox' class='checkbox' name='{$name}[$p]' id='checkbox_{$field}_$p' value='{$val}'";
219 if (array_key_exists($p, $selected))
224 echo $item->term.
"</label>";
230 if (count($this->options) == 0)
return;
234 $obj = $this->parent->data;
239 $selected = IndexedQuery::create(
TaxonomyTermAssociation,
"WHERE taxonomy_id=:id AND class=:class AND id=:pk",
"term_id")
240 ->bind(
":id", $this->taxonomy->taxonomy_id,
":class",
$class,
":pk",
$pk)
243 foreach($this->options as $option)
245 $p = $option->term_id;
247 if (array_key_exists($p, $selected))
258 $this->_startField(
$field);
267 $this->_startField(
$field);
270 $obj = $this->parent->data;
276 $padding = (
$width ==
"auto") ?
"padding-right: 20px; overflow-x: hidden" :
"";
280 echo
"<div id='{$this->parent->id}_{$field}_container' class='scrollbox{$resizable}{$dropdown}' style='width: {$width}; height: {$height};overflow: auto; $padding'>\n";
283 $countOptions = count($this->options);
288 $selected = IndexedQuery::create(
TaxonomyTermAssociation,
"WHERE taxonomy_id=:id AND class=:class AND id=:pk",
"term_id")
289 ->bind(
":id", $this->taxonomy->taxonomy_id,
":class",
$class,
":pk",
$pk)
292 $this->renderCheckBoxes(
$field, $this->options, $selected,
$mode);
300 echo
"<input type=\"hidden\" name=\"count_{$field}\" value=\"$countOptions\">";
307 if (count($this->options) == 0)
return;
309 $obj = $this->parent->data;
319 $obj->set($this->field, formatItems(
$terms,
"{term}",
","));
327 if (count($this->options) == 0)
return;
329 $obj = $this->parent->data;
334 $assoc->delete(
"WHERE class='$class' AND taxonomy_id={$this->taxonomy->taxonomy_id} AND id=$pk");
342 $assoc->taxonomy_id = $this->taxonomy->taxonomy_id;
373 trace(
"## Creating BindingTargetFieldRenderer for {$bindingTarget->target_class}", 3);
376 $this->
field = $bindingTarget->target_class;
378 $this->label = $proto->prettifyClassName(
true);
383 trace(
"## Found ".count($this->options),
" options");
387 $this->showSelectAll =
true;
389 $this->FieldRenderer(
$form);
414 if ($this->showSelectAll)
417 <script type=
"text/javascript">
419 function <?echo $this->parent->id?>_<?echo $this->
field ?>_toggleSelectAll(link)
421 link = document.id(link);
423 var value = (link.innerHTML ==
"Select All");
425 var container = document.id(
'<?echo $this->parent->id?>_<?echo $this->field?>_container');
427 container.getElements(
"input[type=checkbox]").each(
function(cbox)
429 cbox.set(
'checked', value);
432 link.innerHTML = (value) ?
"Deselect All" :
"Select All";
433 if (container.multiSelect) container.multiSelect.selectionChanged();
444 <script type=
'text/javascript'>
445 window.addEvent(
'domready',
function()
447 new MultiSelect(
'<?echo $this->parent->id?>_<?echo $this->field?>_container', {maxWidth:
'<?echo $this->dropdownMaxWidth?>',
message:
'<?echo jsSafe($this->dropdownMessage)?>'});
456 $pks =
$obj->getPrimaryKeyList();
459 if ($xref->hasField(
$pk))
return $pk;
462 throw new DataItemException(
"No matching foreign key in xref table");
467 if (count($this->options) == 0)
return;
471 $this->_startField(
$field);
473 $obj = $this->parent->data;
475 if ($this->showSelectAll)
477 echo
"<a href='#' onclick='return {$this->parent->id}_{$field}_toggleSelectAll(this);'>Select All</a><br/>";
483 $padding = (
$width ==
"auto") ?
"padding-right: 20px; overflow-x: hidden" :
"";
487 echo
"<div id='{$this->parent->id}_{$field}_container' class='scrollbox{$resizable}{$dropdown}' style='width: {$width}; height: {$height};overflow: auto; $padding'>\n";
490 $countOptions = count($this->options);
495 $selected = IndexedQuery::create(
BindingRecord,
"WHERE target_class=:tc AND class=:class AND id=:pk",
"target_id")
496 ->bind(
":tc", $this->bindingTarget->target_class,
":class",
$class,
":pk",
$pk)
499 $this->renderCheckBoxes(
$field, $this->options, $selected);
507 echo
"<input type=\"hidden\" name=\"count_{$field}\" value=\"$countOptions\">";
516 $p = $item->get($item->getPrimaryKey());
518 echo
"<label for='checkbox_{$field}_$p'><input type='checkbox' class='checkbox' name='{$field}[$p]' id='checkbox_{$field}_$p' value='1'";
519 if (array_key_exists($p, $selected))
524 echo $item->format($this->format).
"</label>";
530 if (count($this->options) == 0)
return;
534 $obj = $this->parent->data;
539 $selected = IndexedQuery::create(
BindingRecord,
"WHERE target_class=:tc AND class=:class AND id=:pk",
"target_id")
540 ->bind(
":tc", $this->bindingTarget->target_class,
":class",
$class,
":pk",
$pk)
543 foreach($this->options as $option)
545 $p = $option->get($option->getPrimaryKey());
547 if (array_key_exists($p, $selected))
549 $answers[] = $option->format($this->format);
558 $this->_startField(
$field);
566 if (count($this->options) == 0)
return;
568 $obj = $this->parent->data;
573 $assoc->delete(
"WHERE target_class='{$this->bindingTarget->target_class}' AND class='$class' AND id=$pk");
581 $assoc->target_class = $this->bindingTarget->target_class;
583 $assoc->target_id = $target_id;
Field renderer for handling taxonomy term relationships.
static $readOnlyTermSeparator
BindingTargetFieldRenderer(&$form, $bindingTarget)
getMatchingPK($xref, $obj)
renderReadOnly($field="")
renderCheckboxes($field, $items, $selected)
static usingFeature()
Uses the specified framework feature(s).
static getBindingOptions($bindingTarget)
Field renderer for handling taxonomy term relationships.
renderSearchScript($field, $mode)
renderReadOnly($field="")
TaxonomyTermFieldRenderer(&$form, $taxonomy)
groupBy($groupBy, $format="")
renderSearchField($field, $mode)
static $readOnlyTermSeparator
getMatchingPK($xref, $obj)
renderCheckboxes($field, $items, $selected, $mode=null)