1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| function getFilteredAddresses(int $userId, string $language, array $toFilter): false|array
{
$db = dbConnect();
$wheres = [];
$params = [':id_user'=>$userId];
if( ! empty($toFilter['from']) )
{
$wheres[] = "m.familyname>:from";
$params[':from'] = $toFilter['from'];
}
if( !empty($toFilter['to']) )
{
$wheres[] = "m.familyname<:to";
$params[':to'] = $toFilter['to'];
}
if( !empty($toFilter['country']) )
{
$wheres[] = "country=:country";
$params[':country'] = $toFilter['country'];
}
if( !empty($toFilter['zipcode']) )
{
$wheres[] = "a.zipcode=:zipcode";
$params[':zipcode'] = $toFilter['zipcode'];
}
if( !empty($toFilter['locality']) )
{
$wheres[] = "a.locality=:locality";
$params[':locality']= $toFilter['locality'];
}
if( !empty($toFilter['groups']) )
{
$in = implode(',', $toFilter['groups']);
$wheres[] = "g.id_group IN ($in)";
/*
$in = implode(',', $toFilter['groups']);
$wheres[] = "g.id_group IN (:in)";
$params[':in'] = $in;
*/
}
var_dump($wheres);
var_dump($params);
$clause = implode(' AND ', $wheres);
if($clause)
$clause = " AND " . $clause;
$sql = <<<SQL
SELECT DISTINCT a.id, m.familyname, m.firstname, %s_name AS country, a.zipcode, a.locality, m.email, a.homephone, m.GSM
FROM dat_addresses a
LEFT JOIN lst_countries c
ON a.country=c.id
LEFT JOIN dat_members m
ON a.id=m.id_address
LEFT JOIN dat_groups g
ON a.id=g.id_address
WHERE id_user=:id_user AND m.relation=0%s
ORDER BY m.familyname, m.firstname
SQL;
$sql = sprintf($sql, $language, $clause);
$stmt = $db->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
} |
Partager