/** @brief Constructs new instance of facet helper. * * @param $facet [in] root facet element. * @param $query [in] @a AfsQuery which has produced current reply. * @param $config [in] helper configuration object. */ public function __construct($facet, AfsQuery $query, AfsHelperConfiguration $config, $feed = null) { $this->id = $facet->id; if (property_exists($facet, 'labels') && !empty($facet->labels)) { $this->labels = $facet->labels; } if (property_exists($facet, 'tags')) { $this->tags = $facet->tags; } $this->layout = $facet->layout; $this->type = $facet->type; if (property_exists($facet, 'sticky') && 0 == strcmp('true', $facet->sticky)) { $this->sticky = true; } else { $this->sticky = false; } $facet_manager = $query->get_facet_manager(); $facet_manager->check_or_add_facet(new AfsFacet($this->id, $this->type, $this->layout)); $builder = new AfsFacetElementBuilder($facet_manager, $query); $this->elements = $builder->create_elements($this->id, $facet, $config, $feed); }
public function testFacetElementBuilderAddFilter() { $input = json_decode('{ "afs:t": "FacetTree", "node": [ { "key": "false", "labels": [ { "label": "BAD" } ], "items": 67 }, { "key": "true", "labels": [ { "label": "GOOD" } ], "items": 133 } ], "layout": "TREE", "type": "BOOL", "id": "BOOL", "labels": [ { "label": "Boolean facet" } ] }'); $query = new AfsQuery(); $query = $query->add_filter('BOOL', 'false'); $config = new AfsHelperConfiguration(); $config->set_helper_format(AfsHelperFormat::HELPERS); $facet_mgr = $query->get_facet_manager(); $facet_mgr->add_facet(new AfsFacet('BOOL', AfsFacetType::BOOL_TYPE, AfsFacetLayout::TREE, AfsFacetMode::OR_MODE)); $builder = new AfsFacetElementBuilder($facet_mgr, $query); $elems = $builder->create_elements('BOOL', $input, $config); $this->assertEquals(count($elems), 2); $elem = reset($elems); $this->assertEquals($elem->label, 'BAD'); $this->assertEquals($elem->count, 67); $this->assertTrue($elem->active); $this->assertFalse($elem->query->has_filter('BOOL', 'false')); $this->assertEquals(count($elem->values), 0); next($elems); $elem = current($elems); $this->assertEquals($elem->label, 'GOOD'); $this->assertEquals($elem->count, 133); $this->assertFalse($elem->active); $this->assertTrue($elem->query->has_filter('BOOL', 'true')); $this->assertTrue($elem->query->has_filter('BOOL', 'false')); $this->assertEquals(count($elem->values), 0); }