*/
public static function participantsForThread($thread, array $contacts)
{
- $r = DBA::p("SELECT `contact`.`batch`, `contact`.`id`, `contact`.`url`, `contact`.`name`, `contact`.`network`, `contact`.`protocol`,
- `fcontact`.`batch` AS `fbatch`, `fcontact`.`network` AS `fnetwork` FROM `participation`
- INNER JOIN `contact` ON `contact`.`id` = `participation`.`cid`
- INNER JOIN `fcontact` ON `fcontact`.`id` = `participation`.`fid`
- WHERE `participation`.`iid` = ? AND NOT `contact`.`archive`", $thread);
-
- while ($contact = DBA::fetch($r)) {
- if (!empty($contact['fnetwork'])) {
- $contact['network'] = $contact['fnetwork'];
- }
- unset($contact['fnetwork']);
+ $participation = DBA::select('participation-view', [], ['iid' => $thread]);
+ while ($contact = DBA::fetch($participation)) {
if (empty($contact['protocol'])) {
$contact['protocol'] = $contact['network'];
}
- if (empty($contact['batch']) && !empty($contact['fbatch'])) {
- $contact['batch'] = $contact['fbatch'];
- }
- unset($contact['fbatch']);
-
$exists = false;
foreach ($contacts as $entry) {
if ($entry['batch'] == $contact['batch']) {
$contacts[] = $contact;
}
}
- DBA::close($r);
+
+ DBA::close($participation);
return $contacts;
}
INNER JOIN `contact` ON `contact`.`uid` = `user`.`uid` AND `contact`.`self`
INNER JOIN `profile` ON `profile`.`uid` = `user`.`uid`"
],
+ "participation-view" => [
+ "fields" => [
+ "iid" => ["participation", "iid"],
+ "id" => ["contact", "id"],
+ "url" => ["contact", "url"],
+ "name" => ["contact", "name"],
+ "protocol" => ["contact", "protocol"],
+ "batch" => "CASE `contact`.`batch` WHEN '' THEN `fcontact`.`batch` ELSE `contact`.`batch` END",
+ "network" => "CASE `fcontact`.`network` WHEN '' THEN `contact`.`network` ELSE `fcontact`.`network` END",
+ ],
+ "query" => "FROM `participation`
+ INNER JOIN `contact` ON `contact`.`id` = `participation`.`cid` AND NOT `contact`.`archive`
+ INNER JOIN `fcontact` ON `fcontact`.`id` = `participation`.`fid`"
+ ],
"pending-view" => [
"fields" => [
"id" => ["register", "id"],