From e429cd03ff90d7f50f68775245df33403ddcd986 Mon Sep 17 00:00:00 2001 From: =?utf8?q?St=C3=A9phane=20Jacob?= Date: Wed, 29 Dec 2010 02:07:27 +0100 Subject: [PATCH] Adds search on subadministrativearea (Closes #1312). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Jacob --- classes/direnum.php | 14 ++++++++++++ include/ufbuilder.inc.php | 29 ++++++++++++++++++++++- modules/search.php | 10 +++++++- templates/search/adv.form.tpl | 53 ++++++++++++++++++++++++++++++++----------- 4 files changed, 91 insertions(+), 15 deletions(-) diff --git a/classes/direnum.php b/classes/direnum.php index 0268ca9..bbb2869 100644 --- a/classes/direnum.php +++ b/classes/direnum.php @@ -46,6 +46,7 @@ class DirEnum const NATIONALITIES = 'nationalities'; const COUNTRIES = 'countries'; const ADMINAREAS = 'adminareas'; + const SUBADMINAREAS = 'subadminareas'; const LOCALITIES = 'localities'; const COMPANIES = 'companies'; @@ -600,6 +601,19 @@ class DE_AdminAreas extends DE_WithSuboption } // }}} +// {{{ class DE_SubAdminAreas +class DE_SubAdminAreas extends DE_WithSuboption +{ + protected $idfield = 'geoloc_subadministrativeareas.id'; + protected $optfield = 'geoloc_subadministrativeareas.administrativearea'; + protected $valfield = 'geoloc_subadministrativeareas.name'; + protected $from = 'geoloc_subadministrativeareas'; + + protected $ac_join = 'INNER JOIN profile_addresses ON (profile_addresses.subadministrativeAreaId = geoloc_subadministrativeareas.id)'; + protected $ac_unique = 'profile_addresses.pid'; +} +// }}} + // {{{ class DE_Localities class DE_Localities extends DirEnumeration { diff --git a/include/ufbuilder.inc.php b/include/ufbuilder.inc.php index a28a10a..0e2b872 100644 --- a/include/ufbuilder.inc.php +++ b/include/ufbuilder.inc.php @@ -187,7 +187,8 @@ class UFB_AdvancedSearch extends UserFilterBuilder new UFBF_Town('city', 'Ville / Code Postal'), new UFBF_Country('countryTxt', 'country', 'Pays'), - new UFBF_AdminArea('region', 'Région'), + new UFBF_AdminArea('administrativearea', 'Région'), + new UFBF_SubAdminArea('subadministrativearea', 'Département'), new UFBF_JobCompany('entreprise', 'Entreprise'), new UFBF_JobDescription('jobdescription', 'Fonction'), @@ -792,6 +793,32 @@ class UFBF_AdminArea extends UFBF_Index } // }}} +// {{{ class UFBF_SubAdminArea +class UFBF_SubAdminArea extends UFBF_Index +{ + protected $direnum = DirEnum::SUBADMINAREAS; + protected $onlycurrentfield; + + public function __construct($envfield, $formtext = '', $onlycurrentfield = 'only_current') + { + parent::__construct($envfield, $formtext); + $this->onlycurrentfield = $onlycurrentfield; + } + + + protected function buildUFC(UserFilterBuilder &$ufb) + { + if ($ufb->isOn($this->onlycurrentfield)) { + $flags = UFC_Address::FLAG_CURRENT; + } else { + $flags = UFC_Address::FLAG_ANY; + } + + return new UFC_AddressField($this->val, UFC_AddressField::FIELD_SUBADMAREA, UFC_Address::TYPE_ANY, $flags); + } +} +// }}} + // {{{ class UFBF_JobCompany class UFBF_JobCompany extends UFBF_Text { diff --git a/modules/search.php b/modules/search.php index b76196e..6065438 100644 --- a/modules/search.php +++ b/modules/search.php @@ -310,12 +310,20 @@ class SearchModule extends PLModule case 'nationalite': $ids = DirEnum::getOptionsIter(DirEnum::NATIONALITIES); break; - case 'region': + case 'administrativearea': if (Env::has('country')) { $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS, Env::v('country')); } else { $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS); } + $page->assign('onchange', 'changeAdministrativeArea(this.value)'); + break; + case 'subadministrativearea': + if (Env::has('administrativearea')) { + $ids = DirEnum::getOptionsIter(DirEnum::SUBADMINAREAS, Env::v('administrativearea')); + } else { + $ids = DirEnum::getOptionsIter(DirEnum::SUBADMINAREAS); + } break; case 'school': $ids = DirEnum::getOptionsIter(DirEnum::EDUSCHOOLS); diff --git a/templates/search/adv.form.tpl b/templates/search/adv.form.tpl index 167f8d4..3ae3da2 100644 --- a/templates/search/adv.form.tpl +++ b/templates/search/adv.form.tpl @@ -55,30 +55,50 @@ }; } - // when changing country, open up region choice + // when changing country, open up administrativearea choice function changeCountry(a2) { $(".autocompleteTarget[name='country']").attr('value',a2); if (a2) { $(".autocomplete[name='countryTxt']").addClass('hidden_valid'); - $("[name='region']").parent().load(baseurl + 'list/region/', { country:a2 }, function() { - if ($("select[name='region']").children("option").size() > 1) { - $("select[name='region']").attr('value', '{/literal}{$smarty.request.region}{literal}'); + $("[name='administrativearea']").parent().load(baseurl + 'list/administrativearea/', { country:a2 }, function() { + if ($("select[name='administrativearea']").children("option").size() > 1) { + $("select[name='administrativearea']").attr('value', '{/literal}{$smarty.request.administrativearea}{literal}'); - $("tr#region_ln").show(); + $("tr#administrativearea_list").show(); } else { - $("select[name='region']").attr('value', ''); + $("select[name='administrativearea']").attr('value', ''); - $("tr#region_ln").hide(); + $("tr#administrativearea_list").hide(); } }); } else { $(".autocomplete[name='countryTxt']").removeClass('hidden_valid'); - $("select[name='region']").attr('value', ''); + $("select[name='administrativearea']").attr('value', ''); + $("select[name='subadministrativearea']").attr('value', ''); - $("tr#region_ln").hide(); + $("tr#administrativearea_list").hide(); + $("tr#subadministrativearea_list").hide(); + } + } + + // when changing administrativearea, open up subadministrativearea choice + function changeAdministrativeArea(id) { + if (id) { + $("[name='subadministrativearea']").parent().load(baseurl + 'list/subadministrativearea/', { administrativearea:id }, function() { + if ($("select[name='subadministrativearea']").children("option").size() > 1) { + $("select[name='subadministrativearea']").attr('value', '{/literal}{$smarty.request.subadministrativearea}{literal}'); + $("tr#subadministrativearea_list").show(); + } else { + $("select[name='subadministrativearea']").attr('value', ''); + $("tr#subadministrativearea_list").hide(); + } + }); + } else { + $("select[name='subadministrativearea']").attr('value', ''); + $("tr#subadministrativearea_list").hide(); } } @@ -120,7 +140,7 @@ if (nameRealField == name) return null; - // if changing country, might want to open region choice + // if changing country, might want to open administrativearea choice if (nameRealField == 'country') return function(i) { if (i.extra[0] < 0) { @@ -182,6 +202,7 @@ $(".autocomplete[name='countryTxt']").change(function() { changeCountry(''); }); changeCountry({/literal}'{$smarty.request.country}'{literal}); + changeAdministrativeArea({/literal}'{$smarty.request.administrativearea}'{literal}); $(".autocomplete[name='schoolTxt']").change(function() { changeSchool(''); }); @@ -354,10 +375,16 @@ function cleanForm(f) { {icon name="table" title="Tous les pays"} - - Région ou département + + Région, province, état… + + + + + + Département, comté… - + -- 2.1.4