CMS  Version 3.9
BindingTargetFieldRenderer Class Reference

Field renderer for handling taxonomy term relationships. More...

Inherits FieldRenderer.

Public Member Functions

 BindingTargetFieldRenderer (&$form, $bindingTarget)
 
 setSize ($width, $height)
 
 renderScript ($field)
 
 getMatchingPK ($xref, $obj)
 
 renderField ($field="")
 
 renderCheckboxes ($field, $items, $selected)
 
 renderReadOnly ($field="")
 
 postProcess ($field="")
 

Public Attributes

 $field
 
 $label
 
 $bindingTarget
 
 $dropdown
 
 $dropdownMaxWidth = "340px"
 
 $dropdownMessage = "Click to Select Terms"
 
 $options
 
 $showSelectAll
 
 $resizable = true
 

Static Public Attributes

static $readOnlyTermSeparator = "<br>"
 

Detailed Description

Field renderer for handling taxonomy term relationships.

Definition at line 357 of file taxonomy_term_field_renderer.inc.

Member Function Documentation

◆ BindingTargetFieldRenderer()

BindingTargetFieldRenderer::BindingTargetFieldRenderer ( $form,
  $bindingTarget 
)

Definition at line 371 of file taxonomy_term_field_renderer.inc.

372  {
373  trace("## Creating BindingTargetFieldRenderer for {$bindingTarget->target_class}", 3);
374 
375  $this->bindingTarget = $bindingTarget;
376  $this->field = $bindingTarget->target_class;
377  $proto = new $bindingTarget->target_class;
378  $this->label = $proto->prettifyClassName(true);
379 
380  $this->options = TaxonomyManager::getBindingOptions($bindingTarget->target_class);
381  $this->format = TaxonomyManager::$bindableClasses[$bindingTarget->target_class]["format"];
382 
383  trace("## Found ".count($this->options)," options");
384 
385  $this->dropdown = true;
386 
387  $this->showSelectAll = true;
388 
389  $this->FieldRenderer($form);
390 
393 
394  // JDG 7/31/2011 - allow override
395  if ($form->data->hasField($field))
396  {
397  $form->override($field, $label, $this);
398  }
399  else
400  {
401  $form->add($this, $field);
402  $form->overrides[$field]['label'] = $label;
403  }
404  }
$form
$columnSelect dropdown
static getBindingOptions($bindingTarget)
$openData field

◆ getMatchingPK()

BindingTargetFieldRenderer::getMatchingPK (   $xref,
  $obj 
)

Definition at line 454 of file taxonomy_term_field_renderer.inc.

455  {
456  $pks = $obj->getPrimaryKeyList();
457  foreach($pks as $pk)
458  {
459  if ($xref->hasField($pk)) return $pk;
460  }
461 
462  throw new DataItemException("No matching foreign key in xref table");
463  }

◆ postProcess()

BindingTargetFieldRenderer::postProcess (   $field = "")

Definition at line 564 of file taxonomy_term_field_renderer.inc.

565  {
566  if (count($this->options) == 0) return;
567 
568  $obj = $this->parent->data;
569  $class = get_class($obj);
570  $pk = $obj->get($obj->getPrimaryKey());
571 
572  $assoc = new BindingRecord();
573  $assoc->delete("WHERE target_class='{$this->bindingTarget->target_class}' AND class='$class' AND id=$pk");
574 
575  if (isset($_POST[$this->field]))
576  {
577  foreach($_POST[$this->field] as $target_id => $dummy)
578  {
579  $assoc = new BindingRecord();
580  $assoc->class = $class;
581  $assoc->target_class = $this->bindingTarget->target_class;
582  $assoc->id = $pk;
583  $assoc->target_id = $target_id;
584  $assoc->save();
585  }
586  }
587  }
$_POST["owner_id"]
Definition: blog_form.inc:54
$dummy
Definition: data_import.inc:7

◆ renderCheckboxes()

BindingTargetFieldRenderer::renderCheckboxes (   $field,
  $items,
  $selected 
)

Definition at line 512 of file taxonomy_term_field_renderer.inc.

513  {
514  foreach($items as $item)
515  {
516  $p = $item->get($item->getPrimaryKey());
517 
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))
520  {
521  echo " checked";
522  }
523  echo ">";
524  echo $item->format($this->format)."</label>";
525  }
526  }

◆ renderField()

BindingTargetFieldRenderer::renderField (   $field = "")

Definition at line 465 of file taxonomy_term_field_renderer.inc.

466  {
467  if (count($this->options) == 0) return;
468 
470 
471  $this->_startField($field);
472 
473  $obj = $this->parent->data;
474 
475  if ($this->showSelectAll)
476  {
477  echo "<a href='#' onclick='return {$this->parent->id}_{$field}_toggleSelectAll(this);'>Select All</a><br/>";
478  }
479  if ($this->width && $this->height)
480  {
481  $width = is_numeric($this->width) ? "{$this->width}px" : $this->width;
482  $height = is_numeric($this->height) ? "{$this->height}px" : $this->height;
483  $padding = ($width == "auto") ? "padding-right: 20px; overflow-x: hidden" : "";
484 
485  $resizable = ($this->resizable && !$this->dropdown) ? " resizable": "";
486  $dropdown = $this->dropdown ? " multi_select_dropdown_list" : "";
487  echo "<div id='{$this->parent->id}_{$field}_container' class='scrollbox{$resizable}{$dropdown}' style='width: {$width}; height: {$height};overflow: auto; $padding'>\n";
488  }
489 
490  $countOptions = count($this->options);
491 
492  $class = get_class($obj);
493  $pk = $obj->get($obj->getPrimaryKey());
494 
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)
497  ->execute();
498 
499  $this->renderCheckBoxes($field, $this->options, $selected);
500 
501  if ($this->width && $this->height)
502  {
503  echo "</div>\n";
504  }
505 
506  // Save this count to loop through checkboxes on required validation
507  echo "<input type=\"hidden\" name=\"count_{$field}\" value=\"$countOptions\">";
508 
509  $this->_endField($field);
510  }
$helpTree width
Definition: tree.inc:45
$height
Definition: cover.inc:38
$width
Definition: cover.inc:37
$desc height
Definition: event_edit.inc:64

◆ renderReadOnly()

BindingTargetFieldRenderer::renderReadOnly (   $field = "")

Don't display the taxonomy if nothing selected

Definition at line 528 of file taxonomy_term_field_renderer.inc.

529  {
530  if (count($this->options) == 0) return;
531 
533 
534  $obj = $this->parent->data;
535 
536  $class = get_class($obj);
537  $pk = $obj->get($obj->getPrimaryKey());
538 
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)
541  ->execute();
542 
543  foreach($this->options as $option)
544  {
545  $p = $option->get($option->getPrimaryKey());
546 
547  if (array_key_exists($p, $selected))
548  {
549  $answers[] = $option->format($this->format);
550  }
551  }
552 
556  if(count($answers))
557  {
558  $this->_startField($field);
560  $this->_endField($field);
561  }
562  }
$answers

◆ renderScript()

BindingTargetFieldRenderer::renderScript (   $field)

Definition at line 412 of file taxonomy_term_field_renderer.inc.

413  {
414  if ($this->showSelectAll)
415  {
416  ?>
417 <script type="text/javascript">
418 
419 function <?echo $this->parent->id?>_<?echo $this->field ?>_toggleSelectAll(link)
420 {
421  link = document.id(link);
422 
423  var value = (link.innerHTML == "Select All");
424 
425  var container = document.id('<?echo $this->parent->id?>_<?echo $this->field?>_container');
426 
427  container.getElements("input[type=checkbox]").each(function(cbox)
428  {
429  cbox.set('checked', value);
430  });
431 
432  link.innerHTML = (value) ? "Deselect All" : "Select All";
433  if (container.multiSelect) container.multiSelect.selectionChanged();
434  return false;
435 }
436 
437 </script>
438 <?
439  }
440 
441  if ($this->dropdown)
442  {
443 ?>
444 <script type='text/javascript'>
445 window.addEvent('domready', function()
446 {
447  new MultiSelect('<?echo $this->parent->id?>_<?echo $this->field?>_container', {maxWidth: '<?echo $this->dropdownMaxWidth?>', message: '<?echo jsSafe($this->dropdownMessage)?>'});
448 });
449 </script>
450 <?
451  }
452  }
$email message

◆ setSize()

BindingTargetFieldRenderer::setSize (   $width,
  $height 
)

Definition at line 406 of file taxonomy_term_field_renderer.inc.

407  {
408  $this->width = $width;
409  $this->height = $height;
410  }

Member Data Documentation

◆ $bindingTarget

BindingTargetFieldRenderer::$bindingTarget

Definition at line 361 of file taxonomy_term_field_renderer.inc.

◆ $dropdown

BindingTargetFieldRenderer::$dropdown

Definition at line 362 of file taxonomy_term_field_renderer.inc.

◆ $dropdownMaxWidth

BindingTargetFieldRenderer::$dropdownMaxWidth = "340px"

Definition at line 363 of file taxonomy_term_field_renderer.inc.

◆ $dropdownMessage

BindingTargetFieldRenderer::$dropdownMessage = "Click to Select Terms"

Definition at line 364 of file taxonomy_term_field_renderer.inc.

◆ $field

BindingTargetFieldRenderer::$field

Definition at line 359 of file taxonomy_term_field_renderer.inc.

◆ $label

BindingTargetFieldRenderer::$label

Definition at line 360 of file taxonomy_term_field_renderer.inc.

◆ $options

BindingTargetFieldRenderer::$options

Definition at line 365 of file taxonomy_term_field_renderer.inc.

◆ $readOnlyTermSeparator

BindingTargetFieldRenderer::$readOnlyTermSeparator = "<br>"
static

Definition at line 369 of file taxonomy_term_field_renderer.inc.

◆ $resizable

BindingTargetFieldRenderer::$resizable = true

Definition at line 367 of file taxonomy_term_field_renderer.inc.

◆ $showSelectAll

BindingTargetFieldRenderer::$showSelectAll

Definition at line 366 of file taxonomy_term_field_renderer.inc.


The documentation for this class was generated from the following file: