X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fufbuilder.inc.php;h=d46d0af7a4f146764937128ccb38f14d9fed08ea;hb=30e6bbe345c7eafc85a7896ad82c15b88aa6ddec;hp=0acb095f4da45b15701c4d6f70b089289e0a3f75;hpb=e637cb6988e6f40b189226a69d7ebc2868952b17;p=platal.git diff --git a/include/ufbuilder.inc.php b/include/ufbuilder.inc.php index 0acb095..d46d0af 100644 --- a/include/ufbuilder.inc.php +++ b/include/ufbuilder.inc.php @@ -1,6 +1,6 @@ ufb = $ufb; + $this->ufc = $ufc; + $this->env = $env; + } + + public function export() + { + $export = new PlDict(); + $export->set('type', self::TYPE_UFB); + $export->set('condition', $this->ufc->export()); + $export->set('env', $this->env); + return $export; + } + + public function getEnv() + { + return $this->env; + } + + public function fillFromExport($export) + { + $export = new PlDict($export); + if (!$export->has('type')) { + throw new Exception("Missing 'type' field in export."); + } + if ($export->s('type') != self::TYPE_UFB) { + throw new Exception("Unknown type '$type' in export."); + } + $this->ufc = UserFilterCondition::fromExport($export->v('condition')); + $this->env = $export->v('env', array()); + } + + public function updateFromEnv($env) + { + $this->ufb->setFakeEnv($env); + if ($this->ufb->isValid()) { + $this->env = $env; + $this->ufc = $this->ufb->getUFC(); + return true; + } else { + $this->ufb->clearFakeEnv(); + return false; + } + } + + public function refresh() + { + if ($this->isValid()) { + $this->ufc = $this->ufb->getUFC(); + } + } + + public function getUFC() + { + return $this->ufc; + } + + public function isValid() + { + $this->ufb->setFakeEnv($this->env); + return $this->ufb->isValid(); + } + + public function isEmpty() + { + $this->ufb->setFakeEnv($this->env); + return $this->ufb->isEmpty(); + } +} +// }}} + // {{{ class UserFilterBuilder class UserFilterBuilder { @@ -27,6 +110,7 @@ class UserFilterBuilder private $valid = true; private $ufc = null; private $orders = array(); + private $fake_env = null; /** Constructor * @param $fields An array of UFB_Field objects @@ -38,6 +122,16 @@ class UserFilterBuilder $this->envprefix = $envprefix; } + public function setFakeEnv($env) + { + $this->fake_env = new PlDict($env); + } + + public function clearFakeEnv() + { + $this->fake_env = null; + } + /** Builds the UFC; returns as soon as a field says it is invalid */ private function buildUFC() @@ -48,19 +142,19 @@ class UserFilterBuilder $this->ufc = new PFC_And(); foreach ($this->fields as $field) { - $this->valid = $field->apply(&$this); + $this->valid = $field->apply($this); if (!$this->valid) { return; } } } - public function addCond(PlFilterCondition &$cond) + public function addCond(PlFilterCondition $cond) { $this->ufc->addChild($cond); } - public function addOrder(PlFilterOrder &$order) + public function addOrder(PlFilterOrder $order) { $this->order[] = $order; } @@ -89,7 +183,11 @@ class UserFilterBuilder { $this->buildUFC(); if ($this->valid) { - return $this->ufc; + if ($this->isEmpty()) { + return new PFC_True(); + } else { + return $this->ufc; + } } else { return new PFC_False(); } @@ -103,41 +201,110 @@ class UserFilterBuilder return $this->orders; } + public function getEnvFieldNames() + { + $fields = array(); + foreach ($this->fields as $ufbf) { + $fields = array_merge($fields, $ufbf->getEnvFieldNames()); + } + return array_unique($fields); + } + + public function getEnv() + { + $values = array(); + foreach ($this->getEnvFieldNames() as $field) { + if ($this->has($field)) { + $values[$field] = $this->v($field); + } + } + return $values; + } + + public function setEnv($values) + { + foreach ($this->getEnvFieldNames() as $field) { + if (array_key_exists($field, $values)) { + Env::set($this->envprefix . $field, $values[$field]); + } + } + } + /** Wrappers around Env::i/s/..., to add envprefix */ public function s($key, $def = '') { - return Env::s($this->envprefix . $key, $def); + if ($this->fake_env) { + return $this->fake_env->s($key, $def); + } else { + return Env::s($this->envprefix . $key, $def); + } } public function t($key, $def = '') { - return Env::t($this->envprefix . $key, $def); + if ($this->fake_env) { + return $this->fake_env->t($key, $def); + } else { + return Env::t($this->envprefix . $key, $def); + } } public function i($key, $def = 0) { - return Env::i($this->envprefix . $key, $def); + if ($this->fake_env) { + return $this->fake_env->i($key, $def); + } else { + return Env::i($this->envprefix . $key, $def); + } } public function v($key, $def = null) { - return Env::v($this->envprefix . $key, $def); + if ($this->fake_env) { + return $this->fake_env->v($key, $def); + } else { + return Env::v($this->envprefix . $key, $def); + } } public function b($key, $def = false) { - return Env::b($this->envprefix . $key, $def); + if ($this->fake_env) { + return $this->fake_env->b($key, $def); + } else { + return Env::b($this->envprefix . $key, $def); + } } public function has($key) { - return Env::has($this->envprefix . $key); + if ($this->fake_env) { + return $this->fake_env->has($key); + } else { + return Env::has($this->envprefix . $key); + } } public function blank($key, $strict = false) { - return Env::blank($key, $strict); + if ($this->fake_env) { + return $this->fake_env->blank($key, $strict); + } else { + return Env::blank($key, $strict); + } + } + + public function hasAlnum($key) + { + $str = $this->s($key); + return preg_match('/[a-z0-9]/i', $str); + } + + public function hasAlpha($key) + { + $str = $this->s($key); + return preg_match('/[a-z]/i', $str); } public function isOn($key) @@ -154,6 +321,7 @@ class UFB_QuickSearch extends UserFilterBuilder { $fields = array( new UFBF_Quick('quick', 'Recherche rapide'), + new UFBF_NotRegistered('nonins', 'Non inscrits'), ); parent::__construct($fields, $envprefix); } @@ -163,7 +331,12 @@ class UFB_QuickSearch extends UserFilterBuilder // {{{ class UFB_AdvancedSearch class UFB_AdvancedSearch extends UserFilterBuilder { - public function __construct($envprefix = '') + /** Create a UFB_AdvancedSearch. + * @param $include_admin Whether to include 'admin-only' fields + * @param $include_ax Whether to include 'ax-only' fields + * @param $envprefix Optional prefix for form field names. + */ + public function __construct($include_admin = false, $include_ax = false, $envprefix = '') { $fields = array( new UFBF_Name('name', 'Nom'), @@ -175,12 +348,13 @@ 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_JobSector('sector', 'Poste'), new UFBF_JobDescription('jobdescription', 'Fonction'), new UFBF_JobCv('cv', 'CV'), + new UFBF_JobTerms('jobterm', 'Mots-clefs'), new UFBF_Nationality('nationaliteTxt', 'nationalite', 'Nationalité'), new UFBF_Binet('binetTxt', 'binet', 'Binet'), @@ -194,7 +368,14 @@ class UFB_AdvancedSearch extends UserFilterBuilder new UFBF_Comment('free', 'Commentaire'), new UFBF_Phone('phone_number', 'Téléphone'), new UFBF_Networking('networking_address', 'networking_type', 'Networking et sites webs'), + + new UFBF_Mentor('only_referent', 'Référent'), ); + + if ($include_admin || $include_ax) { + $fields[] = new UFBF_SchoolIds('schoolid_ax', 'Matricule AX', UFC_SchoolId::AX); + } + parent::__construct($fields, $envprefix); } } @@ -206,9 +387,8 @@ class UFB_MentorSearch extends UserFilterBuilder public function __construct($envprefix = '') { $fields = array( - new UFBF_MentorCountry('pays_sel'), - new UFBF_MentorSectorization('sector', '', UFC_Mentor_Sectorization::SECTOR), - new UFBF_MentorSectorization('subSector', '', UFC_Mentor_Sectorization::SUBSECTOR), + new UFBF_MentorCountry('country'), + new UFBF_MentorTerm('jobterm', 'jobtermText'), new UFBF_MentorExpertise('expertise'), ); parent::__construct($fields, $envprefix); @@ -216,6 +396,28 @@ class UFB_MentorSearch extends UserFilterBuilder } // }}} +// {{{ class UFB_NewsLetter +class UFB_NewsLetter extends UserFilterBuilder +{ + const FIELDS_PROMO = 'promo'; + const FIELDS_AXID = 'axid'; + const FIELDS_GEO = 'geo'; + + public function __construct($flags, $envprefix = '') + { + $fields = array(); + if ($flags->hasFlag(self::FIELDS_PROMO)) { + $fields[] = new UFBF_Promo('promo1', 'Promotion', 'egal1'); + $fields[] = new UFBF_Promo('promo2', 'Promotion', 'egal2'); + } + if ($flags->hasFlag(self::FIELDS_AXID)) { + $fields[] = new UFBF_SchoolIds('axid', 'Matricule AX', UFC_SchoolId::AX); + } + parent::__construct($fields, $envprefix); + } +} +// }}} + // {{{ class UFB_Field abstract class UFB_Field { @@ -250,12 +452,12 @@ abstract class UFB_Field return false; } - public function apply(UserFilterBuilder &$ufb) { + public function apply(UserFilterBuilder $ufb) { if (!$this->check($ufb)) { return false; } - if (!$this->empty) { + if (!$this->isEmpty()) { $ufc = $this->buildUFC($ufb); if ($ufc != null) { $ufb->addCond($ufc); @@ -271,15 +473,26 @@ abstract class UFB_Field /** Create the UFC associated to the field; won't be called * if the field is "empty" - * @param &$ufb UFB to which fields must be added + * @param $ufb UFB to which fields must be added * @return UFC */ - abstract protected function buildUFC(UserFilterBuilder &$ufb); + abstract protected function buildUFC(UserFilterBuilder $ufb); /** This function is intended to run consistency checks on the value * @return boolean Whether the input is valid */ - abstract protected function check(UserFilterBuilder &$ufb); + abstract protected function check(UserFilterBuilder $ufb); + + // Simple form interface + + /** Retrieve a list of env field names used by that field + * their values will be recorded when saving the 'search' and used to prefill the form + * when needed. + */ + public function getEnvFieldNames() + { + return array($this->envfield); + } } // }}} @@ -296,7 +509,7 @@ abstract class UFBF_Text extends UFB_Field $this->maxlength = $maxlength; } - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -308,7 +521,7 @@ abstract class UFBF_Text extends UFB_Field return $this->raise("Le champ %s est trop court (minimum {$this->minlength})."); } else if (strlen($this->val) > $this->maxlength) { return $this->raise("Le champ %s est trop long (maximum {$this->maxlength})."); - } else if (preg_match(":[\]\[<>{}~/§_`|%$^=+]|\*\*:u", $this->val)) { + } else if (preg_match(":[\]\[<>{}~§_`|%$^=]|\*\*:u", $this->val)) { return $this->raise('Le champ %s contient un caractère interdit rendant la recherche impossible.'); } @@ -333,7 +546,7 @@ abstract class UFBF_Range extends UFB_Field $this->max = $max; } - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -356,7 +569,7 @@ abstract class UFBF_Range extends UFB_Field */ abstract class UFBF_Index extends UFB_Field { - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -381,7 +594,7 @@ abstract class UFBF_Enum extends UFB_Field $this->strict = $strict; } - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -404,7 +617,7 @@ abstract class UFBF_Enum extends UFB_Field // {{{ class UFBF_Bool abstract class UFBF_Bool extends UFB_Field { - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -434,9 +647,9 @@ abstract class UFBF_Mixed extends UFB_Field $this->envfieldindex = $envfieldindex; } - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { - if ($ufb->blank($this->envfieldindex) && $ufb->blank($this->envfield)) { + if ($ufb->blank($this->envfieldindex) && !$ufb->hasAlnum($this->envfield)) { $this->empty = true; return true; } @@ -450,7 +663,7 @@ abstract class UFBF_Mixed extends UFB_Field } $this->val = array($index); } else { - $indexes = DirEnum::getIDs($this->direnum, $ufb->t($this->envfield), + $indexes = DirEnum::getIDs($this->direnum, $ufb->t($this->envfield), $ufb->b('exact') ? XDB::WILDCARD_EXACT : XDB::WILDCARD_CONTAINS); if (count($indexes) == 0) { return false; @@ -459,13 +672,18 @@ abstract class UFBF_Mixed extends UFB_Field } return true; } + + public function getEnvFieldNames() + { + return array($this->envfieldindex, $this->envfield); + } } // }}} // {{{ class UFBF_Quick class UFBF_Quick extends UFB_Field { - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield)) { $this->empty = true; @@ -477,7 +695,7 @@ class UFBF_Quick extends UFB_Field return true; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { $r = $s = $this->val; @@ -502,23 +720,13 @@ class UFBF_Quick extends UFB_Field } if (count($strings)) { - if (S::logged()) { + if (S::user() != null && S::user()->checkPerms('directory_private')) { $flags = array(); } else { $flags = array('public'); } - if ($ufb->b('with_soundex')) { - $soundex = true; - $st = array(); - foreach ($strings as $string) { - $st[] = soundex_fr($string); - } - } else { - $soundex = false; - $st = $strings; - } $exact =$ufb->b('exact'); - $conds->addChild(new UFC_NameTokens($st, $flags, $soundex, $exact)); + $conds->addChild(new UFC_NameTokens($strings, $flags, $ufb->b('with_soundex'), $exact)); $ufb->addOrder(new UFO_Score()); } @@ -560,10 +768,64 @@ class UFBF_Quick extends UFB_Field } // }}} +// {{{ class UFBF_SchoolIds +class UFBF_SchoolIds extends UFB_Field +{ + // One of UFC_SchoolId types + protected $type; + protected $reversed_envfield; + protected $reversed = false; + + public function __construct($envfield, $formtext, $type = UFC_SchoolId::AX, $reversed_envfield = '') + { + parent::__construct($envfield, $formtext); + $this->type = $type; + if ($reversed_envfield == '') { + $reversed_envfield = $envfield . '_reversed'; + } + $this->reversed_envfield = $reversed_envfield; + } + + protected function check(UserFilterBuilder $ufb) + { + if ($ufb->blank($this->envfield)) { + $this->empty = true; + return true; + } + + $value = $ufb->t($this->envfield); + $values = explode("\r\n", $value); + $ids = array(); + foreach ($values as $val) { + if (preg_match('/^[0-9A-Z]{0,8}$/', $val)) { + $ids[] = $val; + } + } + if (count($ids) == 0) { + return $this->raise("Le champ %s ne contient aucune valeur valide."); + } + + $this->reversed = $ufb->b($this->reversed_envfield); + $this->val = $ids; + return true; + } + + protected function buildUFC(UserFilterBuilder $ufb) + { + $ufc = new UFC_SchoolId($this->type, $this->val); + if ($this->reversed) { + return new PFC_Not($ufc); + } else { + return $ufc; + } + } +} +// }}} + // {{{ class UFBF_Name class UFBF_Name extends UFBF_Text { - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if (!parent::check($ufb)) { return false; @@ -576,7 +838,7 @@ class UFBF_Name extends UFBF_Text return true; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_NameTokens($this->val, array(), $ufb->b('with_soundex'), $ufb->b('exact')); } @@ -590,13 +852,13 @@ class UFBF_Promo extends UFB_Field private $comp; private $envfieldcomp; - public function __construct($envfield, $fromtext = '', $envfieldcomp) + public function __construct($envfield, $formtext = '', $envfieldcomp) { - parent::__construct($envfield, $fromtext); + parent::__construct($envfield, $formtext); $this->envfieldcomp = $envfieldcomp; } - protected function check(UserFilterBuilder &$ufb) + protected function check(UserFilterBuilder $ufb) { if ($ufb->blank($this->envfield) || $ufb->blank($this->envfieldcomp)) { $this->empty = true; @@ -619,9 +881,14 @@ class UFBF_Promo extends UFB_Field return true; } - protected function buildUFC(UserFilterBuilder &$ufb) { + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Promo($this->comp, UserFilter::GRADE_ING, $this->val); } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->envfieldcomp); + } } // }}} @@ -645,13 +912,29 @@ class UFBF_Sex extends UFBF_Enum } } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Sex(self::getVal($this->val)); } } // }}} +// {{{ class UFBF_NotRegistered +// Simple field for selecting only alive, not registered users (for quick search) +class UFBF_NotRegistered extends UFBF_Bool +{ + protected function buildUFC(UserFilterBuilder $ufb) + { + if ($this->val) { + return new PFC_And( + new PFC_Not(new UFC_Dead()), + new PFC_Not(new UFC_Registered()) + ); + } + } +} +// }}} + // {{{ class UFBF_Registered class UFBF_Registered extends UFBF_Enum { @@ -660,7 +943,7 @@ class UFBF_Registered extends UFBF_Enum parent::__construct($envfield, $formtext, array(1, 2)); } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($this->val == 1) { return new UFC_Registered(); @@ -679,7 +962,7 @@ class UFBF_Dead extends UFBF_Enum parent::__construct($envfield, $formtext, array(1, 2)); } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($this->val == 1) { return new PFC_Not(new UFC_Dead()); @@ -709,7 +992,7 @@ class UFBF_Town extends UFBF_Text parent::__construct($envfield, $formtext, 2, 30); } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($ufb->isOn($this->onlycurrentfield)) { $flags = UFC_Address::FLAG_CURRENT; @@ -735,6 +1018,11 @@ class UFBF_Town extends UFBF_Text } } } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlycurrentfield); + } } // }}} @@ -750,7 +1038,7 @@ class UFBF_Country extends UFBF_Mixed $this->onlycurrentfield = $onlycurrentfield; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($ufb->isOn($this->onlycurrentfield)) { $flags = UFC_Address::FLAG_CURRENT; @@ -760,23 +1048,28 @@ class UFBF_Country extends UFBF_Mixed return new UFC_AddressField($this->val, UFC_AddressField::FIELD_COUNTRY, UFC_Address::TYPE_ANY, $flags); } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->envfieldindex, $this->onlycurrentfield); + } } // }}} // {{{ class UFBF_AdminArea -class UFBF_AdminArea extends UFBF_Mixed +class UFBF_AdminArea extends UFBF_Index { protected $direnum = DirEnum::ADMINAREAS; protected $onlycurrentfield; - public function __construct($envfieldtext, $envfieldindex, $formtext = '', $onlycurrentfield = 'only_current') + public function __construct($envfield, $formtext = '', $onlycurrentfield = 'only_current') { - parent::__construct($envfieldtext, $envfieldindex, $formtext); + parent::__construct($envfield, $formtext); $this->onlycurrentfield = $onlycurrentfield; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($ufb->isOn($this->onlycurrentfield)) { $flags = UFC_Address::FLAG_CURRENT; @@ -786,6 +1079,42 @@ class UFBF_AdminArea extends UFBF_Mixed return new UFC_AddressField($this->val, UFC_AddressField::FIELD_ADMAREA, UFC_Address::TYPE_ANY, $flags); } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlycurrentfield); + } +} +// }}} + +// {{{ 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); + } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlycurrentfield); + } } // }}} @@ -800,7 +1129,7 @@ class UFBF_JobCompany extends UFBF_Text $this->onlymentorfield = $onlymentorfield; } - public function check(UserFilterBuilder &$ufb) { + public function check(UserFilterBuilder $ufb) { if (parent::check($ufb)) { # No company check for mentors if ($ufb->isOn($this->onlymentorfield)) { @@ -812,32 +1141,24 @@ class UFBF_JobCompany extends UFBF_Text } } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Job_Company(UFC_Job_Company::JOBNAME, $this->val); } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlymentorfield); + } } // }}} -// {{{ class UFBF_JobSector -class UFBF_JobSector extends UFBF_Mixed +// {{{ class UFBF_JobTerms +class UFBF_JobTerms extends UFBF_Index { - protected $direnum = DirEnum::SECTORS; - private $onlymentorfield; - - public function __construct($envfieldtext, $envfieldindex, $formtext = '', $onlymentorfield = 'only_referent') + protected function buildUFC(UserFilterBuilder $ufb) { - parent::__construct($envfieldtext, $envfieldindex, $formtext); - $this->onlymentorfield = $onlymentorfield; - } - - protected function buildUFC(UserFilterBuilder &$ufb) - { - if ($ufb->isOn($this->onlymentorfield)) { - return new UFC_Mentor_Sectorization($this->val, UserFilter::JOB_SUBSECTOR); - } else { - return new UFC_Job_Sectorization($this->val, UserFilter::JOB_SUBSUBSECTOR); - } + return new UFC_Job_Terms($this->val); } } // }}} @@ -853,7 +1174,7 @@ class UFBF_JobDescription extends UFBF_Text $this->onlymentorfield = $onlymentorfield; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($ufb->isOn($this->onlymentorfield)) { return new UFC_Mentor_Expertise($this->val); @@ -861,6 +1182,11 @@ class UFBF_JobDescription extends UFBF_Text return new UFC_Job_Description($this->val, UserFilter::JOB_USERDEFINED); } } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlymentorfield); + } } // }}} @@ -875,7 +1201,7 @@ class UFBF_JobCv extends UFBF_Text $this->onlymentorfield = $onlymentorfield; } - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if ($ufb->isOn($this->onlymentorfield)) { return new UFC_Mentor_Expertise($this->val); @@ -883,6 +1209,11 @@ class UFBF_JobCv extends UFBF_Text return new UFC_Job_Description($this->val, UserFilter::JOB_CV); } } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->onlymentorfield); + } } // }}} @@ -891,7 +1222,7 @@ class UFBF_Nationality extends UFBF_Mixed { protected $direnum = DirEnum::NATIONALITIES; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Nationality($this->val); } @@ -903,7 +1234,7 @@ class UFBF_Binet extends UFBF_Mixed { protected $direnum = DirEnum::BINETS; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Binet($this->val); } @@ -915,7 +1246,7 @@ class UFBF_Group extends UFBF_Mixed { protected $direnum = DirEnum::GROUPESX; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { if (count($this->val) == 1) { return new UFC_Group($this->val[0]); @@ -931,11 +1262,11 @@ class UFBF_Group extends UFBF_Mixed // }}} // {{{ class UFBF_Section -class UFBF_Section extends UFBF_Index +class UFBF_Section extends UFBF_Mixed { protected $direnum = DirEnum::SECTIONS; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Section($this->val); } @@ -947,7 +1278,7 @@ class UFBF_EducationSchool extends UFBF_Mixed { protected $direnum = DirEnum::EDUSCHOOLS; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_EducationSchool($this->val); } @@ -959,7 +1290,7 @@ class UFBF_EducationDegree extends UFBF_Mixed { protected $direnum = DirEnum::EDUDEGREES; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_EducationDegree($this->val); } @@ -971,7 +1302,7 @@ class UFBF_EducationField extends UFBF_Mixed { protected $direnum = DirEnum::EDUFIELDS; - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_EducationField($this->val); } @@ -981,7 +1312,7 @@ class UFBF_EducationField extends UFBF_Mixed // {{{ class UFBF_Comment class UFBF_Comment extends UFBF_Text { - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Comment($this->val); } @@ -991,7 +1322,7 @@ class UFBF_Comment extends UFBF_Text // {{{ class UFBF_Phone class UFBF_Phone extends UFBF_Text { - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Phone($this->val); } @@ -1010,7 +1341,7 @@ class UFBF_Networking extends UFBF_Text $this->networktypefield = $networktypefield; } - public function check(UserFilterBuilder &$ufb) + public function check(UserFilterBuilder $ufb) { if (parent::check($ufb)) { $this->nwtype = $ufb->i($this->networktypefield); @@ -1020,37 +1351,49 @@ class UFBF_Networking extends UFBF_Text } } - public function buildUFC(UserFilterBuilder &$ufb) + public function isEmpty() + { + return parent::isEmpty() || $this->nwtype == 0; + } + + public function buildUFC(UserFilterBuilder $ufb) { return new UFC_Networking($this->nwtype, $this->val); } + + public function getEnvFieldNames() + { + return array($this->envfield, $this->networktypefield); + } } // }}} -// {{{ class UFBF_MentorCountry -class UFBF_MentorCountry extends UFBF_Index +// {{{ class UFBF_Mentor +class UFBF_Mentor extends UFBF_Bool { - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { - return new UFC_Mentor_Country($this->val); + return new UFC_Mentor(); } } // }}} -// {{{ class UFBF_MentorSectorization -class UFBF_MentorSectorization extends UFBF_Index +// {{{ class UFBF_MentorCountry +class UFBF_MentorCountry extends UFBF_Text { - protected $type; - - public function __construct($envfield, $formtext = '', $type = UFC_Mentor_Sectorization::SECTOR) + protected function buildUFC(UserFilterBuilder $ufb) { - parent::__construct($envfield, $formtext); - $this->type = $type; + return new UFC_Mentor_Country($this->val); } +} +// }}} - protected function buildUFC(UserFilterBuilder &$ufb) +// {{{ class UFBF_Mentorterm +class UFBF_MentorTerm extends UFBF_Index +{ + protected function buildUFC(UserFilterBuilder $ufb) { - return new UFC_Mentor_Sectorization($this->val, $this->type); + return new UFC_Mentor_Terms($this->val); } } // }}} @@ -1058,7 +1401,7 @@ class UFBF_MentorSectorization extends UFBF_Index // {{{ class UFBF_MentorExpertise class UFBF_MentorExpertise extends UFBF_Text { - protected function buildUFC(UserFilterBuilder &$ufb) + protected function buildUFC(UserFilterBuilder $ufb) { return new UFC_Mentor_Expertise($this->val); }