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
<?php
namespace Tev\Term\Repository;
use Tev\Taxonomy\Model\Taxonomy,
Tev\Taxonomy\Factory as TaxonomyFactory,
Tev\Term\Factory as TermFactory;
/**
* Term repository class.
*
* Provides methods for retrieving terms from the database.
*/
class TermRepository
{
/**
* Taxonomy factory.
*
* @var \Tev\Taxonomy\Factory
*/
private $taxonomyFactory;
/**
* Term factory.
*
* @var \Tev\Term\Factory
*/
private $termFactory;
/**
* Constructor.
*
* Inject dependencies.
*
* @param \Tev\Taxonomy\Factory $taxonomyFactory Taxonomy factory
* @param \Tev\Term\Factory $termFactory Term factory
* @return void
*/
public function __construct(TaxonomyFactory $taxonomyFactory,
TermFactory $termFactory)
{
$this->taxonomyFactory = $taxonomyFactory;
$this->termFactory = $termFactory;
}
/**
* Get all terms in the given taxonomy.
*
* @param string|\Tev\Taxonomy\Model\Taxonomy $taxonomy Taxonomy object or name
* @return \Tev\Term\Model\Term[]
*/
public function getByTaxonomy($taxonomy)
{
if (!($taxonomy instanceof Taxonomy)) {
$taxonomy = $this->taxonomyFactory->create($taxonomy);
}
return $this->convertTermsArray(get_terms($taxonomy->getName(), array(
'hide_empty' => false
)), $taxonomy);
}
/**
* Convert an array of Wordpress term objects to array of Term objects.
*
* @param \stdClass[] $terms Wordpress term objects
* @param \Tev\Taxonomy\Model\Taxonomy $taxonomy Parent taxonomy
* @return \Tev\Term\Model\Term[] Term objects
*/
private function convertTermsArray($terms, Taxonomy $taxonomy)
{
$res = array();
foreach ($terms as $t) {
$res[] = $this->termFactory->create($t, $taxonomy);
}
return $res;
}
}