-// {{{ class UFC_AddressText
-/** Select users based on their address, using full text search
- * @param $text Text for filter in fulltext search
- * @param $textSearchMode Mode for search (one of XDB::WILDCARD_*)
- * @param $type Filter on address type
- * @param $flags Filter on address flags
- * @param $country Filter on address country
- * @param $locality Filter on address locality
- */
-class UFC_AddressText extends UFC_Address
-{
-
- private $text;
- private $textSearchMode;
-
- public function __construct($text = null, $textSearchMode = XDB::WILDCARD_CONTAINS,
- $type = null, $flags = self::FLAG_ANY, $country = null, $locality = null)
- {
- parent::__construct($type, $flags);
- $this->text = $text;
- $this->textSearchMode = $textSearchMode;
- $this->country = $country;
- $this->locality = $locality;
- }
-
- private function mkMatch($txt)
- {
- return XDB::formatWildcards($this->textSearchMode, $txt);
- }
-
- public function buildCondition(PlFilter $uf)
- {
- $sub = $uf->addAddressFilter();
- $conds = $this->initConds($sub, $uf->getVisibilityCondition($sub . '.pub'));
- if ($this->text != null) {
- $conds[] = $sub . '.text' . $this->mkMatch($this->text);
- }
-
- if ($this->country != null) {
- $subc = $uf->addAddressCountryFilter();
- $subconds = array();
- $subconds[] = $subc . '.country' . $this->mkMatch($this->country);
- $subconds[] = $subc . '.countryFR' . $this->mkMatch($this->country);
- $conds[] = implode(' OR ', $subconds);
- }
-
- if ($this->locality != null) {
- $subl = $uf->addAddressLocalityFilter();
- $conds[] = $subl . '.name' . $this->mkMatch($this->locality);
- }
-
- return implode(' AND ', $conds);
- }
-}
-// }}}