From: Nicolas Iooss Date: Mon, 17 Feb 2014 20:58:38 +0000 (+0100) Subject: Rename ax_mail flag to dn_best_mail for profile addresses X-Git-Tag: xorg/1.1.12~26 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=8a1f4fbfc77d96055ad3bf3e7784bd01b1bafb14;p=platal.git Rename ax_mail flag to dn_best_mail for profile addresses The name "ax_mail" is ambiguous with the visibility level "ax". In fact this is only used to speed up the advanced search when an administrator exports a list of addresses to prepare a mailing. Therefore this denormalized flag is renamed "dn_best_mail", which is the best known address to send mail. This commit adds a comment in classes/address.php to describe how this best address is chosen. --- diff --git a/classes/address.php b/classes/address.php index 0b3ae04..b3e9da9 100644 --- a/classes/address.php +++ b/classes/address.php @@ -728,31 +728,44 @@ class Address } if ($this->pid != 0) { - $this->updateAxMail(); + $this->updateBestMail(); } } } - private function updateAxMail() + /** + * Upate the denormalized flag which is used to mark the best mail to use + * when sending postal mail + */ + private function updateBestMail() { XDB::execute("UPDATE profile_addresses - SET flags = REPLACE(flags, 'ax_mail', '') + SET flags = REPLACE(flags, 'dn_best_mail', '') WHERE pid = {?}", $this->pid); - $ax_mail = XDB::fetchOneAssoc("SELECT pid, jobid, groupid, type, id + /* Following order is selected to find the best mail: + * * Use addresses without the deliveryIssue flag if possible. + * * Among these, use addresses flagged as "current". + * * If there is no such addresses or several ones, prefer those + * without "secondary" flag. + * * If there are still several addresses in the selection, try not + * to select the ones with "job" type. + */ + $best_mail = XDB::fetchOneAssoc("SELECT pid, jobid, groupid, type, id FROM profile_addresses - WHERE pub IN ('public', 'ax') AND FIND_IN_SET('mail', flags) AND pid = {?} + WHERE FIND_IN_SET('mail', flags) AND pid = {?} ORDER BY FIND_IN_SET('deliveryIssue', flags), NOT FIND_IN_SET('current', flags), - FIND_IN_SET('secondary', flags), type = 'job'", + FIND_IN_SET('secondary', flags), type = 'job' + LIMIT 1", $this->pid); - if ($ax_mail) { + if ($best_mail) { XDB::execute("UPDATE profile_addresses - SET flags = CONCAT(flags, ',ax_mail') + SET flags = CONCAT(flags, ',dn_best_mail') WHERE pid = {?} AND jobid = {?} AND groupid = {?} AND type = {?} AND id = {?}", - $ax_mail['pid'], $ax_mail['jobid'], $ax_mail['groupid'], $ax_mail['type'], $ax_mail['id']); + $best_mail['pid'], $best_mail['jobid'], $best_mail['groupid'], $best_mail['type'], $best_mail['id']); } } diff --git a/classes/userfilter/conditions.inc.php b/classes/userfilter/conditions.inc.php index f3bf5db..150e97e 100644 --- a/classes/userfilter/conditions.inc.php +++ b/classes/userfilter/conditions.inc.php @@ -1028,26 +1028,27 @@ abstract class UFC_Address extends UserFilterCondition /** Flags for addresses */ - const FLAG_NONE = 0x0000; - const FLAG_CURRENT = 0x0001; - const FLAG_TEMP = 0x0002; - const FLAG_SECOND = 0x0004; - const FLAG_MAIL = 0x0008; - const FLAG_CEDEX = 0x0010; - const FLAG_AX_MAIL = 0x0020; + const FLAG_NONE = 0x0000; + const FLAG_CURRENT = 0x0001; + const FLAG_TEMP = 0x0002; + const FLAG_SECOND = 0x0004; + const FLAG_MAIL = 0x0008; + const FLAG_CEDEX = 0x0010; + const FLAG_BEST_MAIL = 0x0020; // Binary OR of those flags const FLAG_ANY = 0x003F; /** Text of these flags + * "Best mail" is a denormalized flag, hence the dn_ prefix */ protected static $flagtexts = array( - self::FLAG_CURRENT => 'current', - self::FLAG_TEMP => 'temporary', - self::FLAG_SECOND => 'secondary', - self::FLAG_MAIL => 'mail', - self::FLAG_CEDEX => 'cedex', - self::FLAG_AX_MAIL => 'ax_mail', + self::FLAG_CURRENT => 'current', + self::FLAG_TEMP => 'temporary', + self::FLAG_SECOND => 'secondary', + self::FLAG_MAIL => 'mail', + self::FLAG_CEDEX => 'cedex', + self::FLAG_BEST_MAIL => 'dn_best_mail', ); protected $flags; diff --git a/include/ufbuilder.inc.php b/include/ufbuilder.inc.php index 361a66a..9cb95cf 100644 --- a/include/ufbuilder.inc.php +++ b/include/ufbuilder.inc.php @@ -1071,13 +1071,13 @@ class UFBF_Dead extends UFBF_Enum class UFBF_AddressMixed extends UFBF_Mixed { protected $onlycurrentfield; - protected $onlyaxmailfield; + protected $onlybestmailfield; - public function __construct($envfieldtext, $envfieldindex, $formtext = '', $addressfield, $onlycurrentfield = 'only_current', $onlyaxmailfield = 'only_ax_mail') + public function __construct($envfieldtext, $envfieldindex, $formtext = '', $addressfield, $onlycurrentfield = 'only_current', $onlybestmailfield = 'only_best_mail') { parent::__construct($envfieldtext, $envfieldindex, $formtext); $this->onlycurrentfield = $onlycurrentfield; - $this->onlyaxmailfield = $onlyaxmailfield; + $this->onlybestmailfield = $onlybestmailfield; $this->direnum = constant('DirEnum::' . $addressfield); } @@ -1087,8 +1087,8 @@ class UFBF_AddressMixed extends UFBF_Mixed if ($ufb->isOn($this->onlycurrentfield)) { $flags |= UFC_Address::FLAG_CURRENT; } - if ($ufb->isOn($this->onlyaxmailfield)) { - $flags |= UFC_Address::FLAG_AX_MAIL; + if ($ufb->isOn($this->onlybestmailfield)) { + $flags |= UFC_Address::FLAG_BEST_MAIL; } if ($flags == UFC_Address::FLAG_NONE) { $flags = UFC_Address::FLAG_ANY; @@ -1099,7 +1099,7 @@ class UFBF_AddressMixed extends UFBF_Mixed public function getEnvFieldNames() { - return array($this->envfield, $this->envfieldindex, $this->onlycurrentfield, $this->onlyaxmailfield); + return array($this->envfield, $this->envfieldindex, $this->onlycurrentfield, $this->onlybestmailfield); } } // }}} @@ -1109,13 +1109,13 @@ class UFBF_AddressIndex extends UFBF_Index { protected $direnum; protected $onlycurrentfield; - protected $onlyaxmailfield; + protected $onlybestmailfield; - public function __construct($envfield, $formtext = '', $addressfield, $onlycurrentfield = 'only_current', $onlyaxmailfield = 'only_ax_mail') + public function __construct($envfield, $formtext = '', $addressfield, $onlycurrentfield = 'only_current', $onlybestmailfield = 'only_best_mail') { parent::__construct($envfield, $formtext); $this->onlycurrentfield = $onlycurrentfield; - $this->onlyaxmailfield = $onlyaxmailfield; + $this->onlybestmailfield = $onlybestmailfield; $this->direnum = constant('DirEnum::' . $addressfield); } @@ -1126,8 +1126,8 @@ class UFBF_AddressIndex extends UFBF_Index if ($ufb->isOn($this->onlycurrentfield)) { $flags |= UFC_Address::FLAG_CURRENT; } - if ($ufb->isOn($this->onlyaxmailfield)) { - $flags |= UFC_Address::FLAG_AX_MAIL; + if ($ufb->isOn($this->onlybestmailfield)) { + $flags |= UFC_Address::FLAG_BEST_MAIL; } if ($flags == UFC_Address::FLAG_NONE) { $flags = UFC_Address::FLAG_ANY; @@ -1138,7 +1138,7 @@ class UFBF_AddressIndex extends UFBF_Index public function getEnvFieldNames() { - return array($this->envfield, $this->onlycurrentfield, $this->onlyaxmailfield); + return array($this->envfield, $this->onlycurrentfield, $this->onlybestmailfield); } } // }}} diff --git a/include/userset.inc.php b/include/userset.inc.php index d7d5542..67d8aab 100644 --- a/include/userset.inc.php +++ b/include/userset.inc.php @@ -486,7 +486,7 @@ class AddressesView implements PlView LEFT JOIN profile_job AS pj ON (pj.pid = pa.pid AND pj.id = IF(pa.type = 'job', pa.id, NULL)) LEFT JOIN profile_job_enum AS pje ON (pj.jobid = pje.id) - WHERE pa.pid IN {?} AND FIND_IN_SET('ax_mail', pa.flags)", $pids); + WHERE pa.pid IN {?} AND FIND_IN_SET('dn_best_mail', pa.flags)", $pids); foreach ($res->fetchAllRow() as $item) { list($axid, $promo, $title, $lastname, $firstname, $company, $full_address, $zipcode, $email, $delivery_issue) = array_map('utf8_decode', $item); $lines = self::split_address($full_address); diff --git a/templates/search/adv.form.tpl b/templates/search/adv.form.tpl index f681e41..f12a6e3 100644 --- a/templates/search/adv.form.tpl +++ b/templates/search/adv.form.tpl @@ -168,9 +168,9 @@ {if hasPerm('admin,edit_directory')} -