{
$address = $this->text;
if ($this->type == self::LINK_PROFILE || $this->type == self::LINK_JOB) {
- static $pubs = array('public' => 'publique', 'ax' => 'annuaire AX', 'private' => 'privé');
+ static $pubs = array('public' => 'publique', 'ax' => 'annuaire papier', 'private' => 'privé', 'hidden' => 'administrateurs');
$address .= ' (affichage ' . $pubs[$this->pub];
}
if ($this->type == self::LINK_PROFILE) {
$this->types, $this->formatted_address, $this->location_type, $this->partial_match, $this->latitude, $this->longitude,
$this->southwest_latitude, $this->southwest_longitude, $this->northeast_latitude, $this->northeast_longitude, $this->geocoding_calls, $this->postal_code_fr);
+ // In an ideal world there would not be any components to clean up before insertion.
+ // In real world, it happens that some addresses are badly removed and this query removes the leaked trash.
+ XDB::execute('DELETE FROM profile_addresses_components
+ WHERE pid = {?} AND jobid = {?} AND groupid = {?} AND type = {?} AND id = {?}',
+ $this->pid, $this->jobid, $this->groupid, $this->type, $this->id);
if ($this->componentsIds) {
foreach (explode(',', $this->componentsIds) as $component_id) {
XDB::execute('INSERT IGNORE INTO profile_addresses_components (pid, jobid, groupid, type, id, component_id)
}
if ($this->pid != 0) {
- $this->updateBestMail();
+ self::updateBestMail($this->pid);
}
}
}
/**
* 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
*/
- private function updateBestMail()
+ static public function updateBestMail($pid, $fake=false)
{
- XDB::execute("UPDATE profile_addresses
- SET flags = REPLACE(flags, 'dn_best_mail', '')
- WHERE pid = {?}",
- $this->pid);
+ if (!$fake) {
+ XDB::execute("UPDATE profile_addresses
+ SET flags = REPLACE(flags, 'dn_best_mail', '')
+ WHERE pid = {?}",
+ $pid);
+ }
/* Following order is selected to find the best mail:
* * Use addresses without the deliveryIssue flag if possible.
* * 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
+ $best_mail = XDB::fetchOneAssoc("SELECT pid, jobid, groupid, type, id, flags
FROM profile_addresses
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",
- $this->pid);
+ $pid);
- if ($best_mail) {
+ if (!$fake && $best_mail) {
XDB::execute("UPDATE profile_addresses
SET flags = CONCAT(flags, ',dn_best_mail')
WHERE pid = {?} AND jobid = {?} AND groupid = {?} AND type = {?} AND id = {?}",
$best_mail['pid'], $best_mail['jobid'], $best_mail['groupid'], $best_mail['type'], $best_mail['id']);
}
+ return $best_mail;
}
- public function updateGeocoding($text)
+ public function updateGeocoding()
{
XDB::execute('UPDATE profile_addresses
SET text = {?}, postalText = {?}, types = {?}, formatted_address = {?},