/*
* The notifier is typically called with:
*
- * proc_run('php', "include/notifier.php", COMMAND, ITEM_ID);
+ * proc_run(PRIORITY_HIGH, "include/notifier.php", COMMAND, ITEM_ID);
*
* where COMMAND is one of the following:
*
$recipients[] = $suggest[0]['cid'];
$item = $suggest[0];
} elseif($cmd === 'removeme') {
- $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($item_id));
- if (! $r)
+ $r = q("SELECT `contact`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey`,
+ `user`.`timezone`, `user`.`nickname`, `user`.`sprvkey`, `user`.`spubkey`,
+ `user`.`page-flags`, `user`.`prvnets`, `user`.`guid`
+ FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
+ WHERE `contact`.`uid` = %d AND `contact`.`self` LIMIT 1",
+ intval($item_id));
+ if (!$r)
return;
$user = $r[0];
- $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($item_id));
- if (! $r)
+
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", intval($item_id));
+ if (!$r)
return;
$self = $r[0];
- $r = q("SELECT * FROM `contact` WHERE `self` = 0 AND `uid` = %d", intval($item_id));
- if(! $r)
+
+ $r = q("SELECT * FROM `contact` WHERE NOT `self` AND `uid` = %d", intval($item_id));
+ if(!$r)
return;
require_once('include/Contact.php');
intval($uid),
dbesc(NETWORK_DFRN)
);
- if(dba::is_result($r))
+ if(dbm::is_result($r))
foreach($r as $rr)
$recipients_followup[] = $rr['id'];
}
// a delivery fork. private groups (forum_mode == 2) do not uplink
if((intval($parent['forum_mode']) == 1) && (! $top_level) && ($cmd !== 'uplink')) {
- proc_run('php','include/notifier.php','uplink',$item_id);
+ proc_run(PRIORITY_HIGH,'include/notifier.php','uplink',$item_id);
}
$conversants = array();
// We have not only to look at the parent, since it could be a Friendica thread.
if (($thr_parent AND ($thr_parent[0]['network'] == NETWORK_OSTATUS)) OR ($parent['network'] == NETWORK_OSTATUS)) {
- logger('Some parent is OStatus for '.$target_item["guid"], LOGGER_DEBUG);
+ logger('Some parent is OStatus for '.$target_item["guid"]." - Author: ".$thr_parent[0]['author-link']." - Owner: ".$thr_parent[0]['owner-link'], LOGGER_DEBUG);
+
+ // Send a salmon to the parent author
+ $r = q("SELECT `notify` FROM `contact` WHERE `nurl`='%s' AND `uid` IN (0, %d) AND `notify` != ''",
+ dbesc(normalise_link($thr_parent[0]['author-link'])),
+ intval($uid));
+ if ($r)
+ $probed_contact = $r[0];
+ else
+ $probed_contact = probe_url($thr_parent[0]['author-link']);
+
+ if ($probed_contact["notify"] != "") {
+ logger('Notify parent author '.$probed_contact["url"].': '.$probed_contact["notify"]);
+ $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
+ }
+
+ // Send a salmon to the parent owner
+ $r = q("SELECT `notify` FROM `contact` WHERE `nurl`='%s' AND `uid` IN (0, %d) AND `notify` != ''",
+ dbesc(normalise_link($thr_parent[0]['owner-link'])),
+ intval($uid));
+ if ($r)
+ $probed_contact = $r[0];
+ else
+ $probed_contact = probe_url($thr_parent[0]['owner-link']);
+ if ($probed_contact["notify"] != "") {
+ logger('Notify parent owner '.$probed_contact["url"].': '.$probed_contact["notify"]);
+ $url_recipients[$probed_contact["notify"]] = $probed_contact["notify"];
+ }
// Send a salmon to the parent author
$probed_contact = probe_url($thr_parent[0]['author-link']);
$r = q("SELECT * FROM `contact` WHERE `id` IN ($conversant_str) AND NOT `blocked` AND NOT `pending` AND NOT `archive`".$sql_extra);
- if(dba::is_result($r))
+ if(dbm::is_result($r))
$contacts = $r;
} else
intval($uid),
dbesc(NETWORK_MAIL)
);
- if(dba::is_result($r)) {
+ if(dbm::is_result($r)) {
foreach($r as $rr)
$recipients[] = $rr['id'];
}
// delivery loop
- if(dba::is_result($r)) {
+ if(dbm::is_result($r)) {
foreach($r as $contact) {
if(!$contact['self']) {
$this_batch[] = $contact['id'];
if(count($this_batch) >= $deliveries_per_process) {
- proc_run('php','include/delivery.php',$cmd,$item_id,$this_batch);
+ proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$this_batch);
$this_batch = array();
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
// be sure to pick up any stragglers
if(count($this_batch))
- proc_run('php','include/delivery.php',$cmd,$item_id,$this_batch);
+ proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$this_batch);
}
// send salmon slaps to mentioned remote tags (@foo@example.com) in OStatus posts
if($public_message) {
- if (!$followup AND $top_level)
+ if (!$followup)
$r0 = diaspora::relay_list();
else
$r0 = array();
$r = array_merge($r2,$r1,$r0);
- if(dba::is_result($r)) {
+ if(dbm::is_result($r)) {
logger('pubdeliver '.$target_item["guid"].': '.print_r($r,true), LOGGER_DEBUG);
// throw everything into the queue in case we get killed
if((! $mail) && (! $fsuggest) && (! $followup)) {
logger('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]);
- proc_run('php','include/delivery.php',$cmd,$item_id,$rr['id']);
+ proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$rr['id']);
if($interval)
@time_sleep_until(microtime(true) + (float) $interval);
}
if ($h === '[internal]') {
// Set push flag for PuSH subscribers to this topic,
// they will be notified in queue.php
- q("UPDATE `push_subscriber` SET `push` = 1 " .
- "WHERE `nickname` = '%s'", dbesc($owner['nickname']));
+ q("UPDATE `push_subscriber` SET `push` = 1 ".
+ "WHERE `nickname` = '%s' AND `push` = 0", dbesc($owner['nickname']));
logger('Activating internal PuSH for item '.$item_id, LOGGER_DEBUG);
}
// Handling the pubsubhubbub requests
- proc_run('php','include/pubsubpublish.php');
+ proc_run(PRIORITY_HIGH,'include/pubsubpublish.php');
}
logger('notifier: calling hooks', LOGGER_DEBUG);