X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Faddress.php;h=2ebe8b562f70cec3e63bf899074ca63611065b61;hb=fda78a6777a5f385537fc9f291afb310e12525e5;hp=47ce17c1f11323539a2dd1b54bee0b8b408059b7;hpb=f75a1212e621e79fd2a773e7e45d0ef4442d410a;p=platal.git diff --git a/classes/address.php b/classes/address.php index 47ce17c..2ebe8b5 100644 --- a/classes/address.php +++ b/classes/address.php @@ -1,6 +1,6 @@ pid != 0) { - $this->updateAxMail(); + self::updateBestMail($this->pid); } } } - private function updateAxMail() + /** + * Upate the denormalized flag which is used to mark the best mail to use + * when sending postal mail + * + * Call with $fake to true to only get which address would be selected, + * without updating anything in the database. + * Returns an array describing the selected profile address + */ + static public function updateBestMail($pid, $fake=false) { - XDB::execute("UPDATE profile_addresses - SET flags = REPLACE(flags, 'ax_mail', '') - WHERE pid = {?}", - $this->pid); + if (!$fake) { + XDB::execute("UPDATE profile_addresses + SET flags = REPLACE(flags, 'dn_best_mail', '') + WHERE pid = {?}", + $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, flags FROM profile_addresses - WHERE pub IN ('public', 'ax') AND FIND_IN_SET('mail', flags) AND pid = {?} - ORDER BY NOT FIND_IN_SET('current', flags), - FIND_IN_SET('secondary', flags), type = 'job'", - $this->pid); - - if ($ax_mail) { + 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' + LIMIT 1", + $pid); + + if (!$fake && $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']); } + return $best_mail; } public function updateGeocoding($text) @@ -916,12 +937,12 @@ class Address } } -/** Iterator over a set of Phones +/** Iterator over a set of Addresses * * @param $pid, $type, $jobid, $pub * - * The iterator contains the phones that correspond to the value stored in the - * parameters' arrays. + * The iterator contains the addresses that correspond to the value stored in + * the parameters' arrays. */ class AddressIterator implements PlIterator { @@ -1008,5 +1029,5 @@ class AddressIterator implements PlIterator } } -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: ?>