1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
<?php
namespace Tev\Field\Model;
use Tev\Taxonomy\Factory as TaxonomyFactory,
Tev\Term\Factory as TermFactory;
class TaxonomyField extends AbstractField
{
private $taxonomyFactory;
private $termFactory;
private $_taxonomy;
public function __construct(array $base,
TaxonomyFactory $taxonomyFactory,
TermFactory $termFactory)
{
parent::__construct($base);
$this->taxonomyFactory = $taxonomyFactory;
$this->termFactory = $termFactory;
$this->_taxonomy = null;
}
public function getValue()
{
$terms = $this->base['value'];
if (is_array($terms)) {
$ret = array();
foreach ($terms as $t) {
$ret[] = $this->termFactory->create($t, $this->taxonomy());
}
return $ret;
} elseif (is_object($terms)) {
return $this->termFactory->create($terms, $this->taxonomy());
} else {
if ($this->base['multiple'] || $this->base['field_type'] === 'multi_select' || $this->base['field_type'] === 'checkbox') {
return array();
} else {
return null;
}
}
}
public function taxonomy()
{
if ($this->_taxonomy === null) {
$this->_taxonomy = $this->taxonomyFactory->create($this->base['taxonomy']);
}
return $this->_taxonomy;
}
public function __toString()
{
$terms = $this->getValue();
if (is_array($terms)) {
return array_reduce($terms, function ($string, $t) {
return $string . (strlen($string) ? ', ' : '') . $t->getName();
}, '');
} else {
return $terms->getName();
}
}
}