require_once('include/queue_fn.php');
require_once('include/html2plain.php');
-function delivery_run($argv, $argc){
+function delivery_run(&$argv, &$argc){
global $a, $db;
if(is_null($a)){
if(is_null($db)) {
@include(".htconfig.php");
- require_once("dba.php");
+ require_once("include/dba.php");
$db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data);
}
- require_once("session.php");
- require_once("datetime.php");
+ require_once("include/session.php");
+ require_once("include/datetime.php");
require_once('include/items.php');
require_once('include/bbcode.php');
require_once('include/diaspora.php');
);
if(! count($r)) {
continue;
- }
+ }
$maxsysload = intval(get_config('system','maxloadavg'));
if($maxsysload < 1)
if(function_exists('sys_getloadavg')) {
$load = sys_getloadavg();
if(intval($load[0]) > $maxsysload) {
- logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
+ logger('system: load ' . $load[0] . ' too high. Delivery deferred to next queue run.');
return;
}
}
// It's ours to deliver. Remove it from the queue.
- q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
+ q("delete from deliverq where cmd = '%s' and item = %d and contact = %d",
dbesc($cmd),
dbesc($item_id),
dbesc($contact_id)
$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`
- FROM `contact` LEFT JOIN `user` ON `user`.`uid` = `contact`.`uid`
+ FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`
WHERE `contact`.`uid` = %d AND `contact`.`self` = 1 LIMIT 1",
intval($uid)
);
// in the URI, AND it was a comment (not top_level) AND the parent originated elsewhere.
// if $parent['wall'] == 1 we will already have the parent message in our array
// and we will relay the whole lot.
-
+
// expire sends an entire group of expire messages and cannot be forwarded.
- // However the conversation owner will be a part of the conversation and will
+ // However the conversation owner will be a part of the conversation and will
// be notified during this run.
// Other DFRN conversation members will be alerted during polled updates.
// Diaspora members currently are not notified of expirations, and other networks have
- // either limited or no ability to process deletions. We should at least fix Diaspora
+ // either limited or no ability to process deletions. We should at least fix Diaspora
// by stringing togther an array of retractions and sending them onward.
-
-
+
+
$localhost = $a->get_hostname();
if(strpos($localhost,':'))
$localhost = substr($localhost,0,strpos($localhost,':'));
/**
*
- * Be VERY CAREFUL if you make any changes to the following line. Seemingly innocuous changes
- * have been known to cause runaway conditions which affected several servers, along with
- * permissions issues.
+ * Be VERY CAREFUL if you make any changes to the following line. Seemingly innocuous changes
+ * have been known to cause runaway conditions which affected several servers, along with
+ * permissions issues.
*
*/
-
+
if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) {
logger('relay denied for delivery agent.');
continue;
}
- if((strlen($parent['allow_cid']))
- || (strlen($parent['allow_gid']))
- || (strlen($parent['deny_cid']))
+ if((strlen($parent['allow_cid']))
+ || (strlen($parent['allow_gid']))
+ || (strlen($parent['deny_cid']))
|| (strlen($parent['deny_gid']))) {
$public_message = false; // private recipients, not public
}
if(count($r))
$contact = $r[0];
-
+
$hubxml = feed_hublinks();
logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
}
$atom .= '</feed>' . "\r\n";
-
+
logger('notifier: ' . $atom, LOGGER_DATA);
$basepath = implode('/', array_slice(explode('/',$contact['url']),0,3));
else
$sql_extra = sprintf(" AND `issued-id` = '%s' ", dbesc($contact['dfrn-id']));
- $x = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
- `contact`.`pubkey` AS `cpubkey`,
- `contact`.`prvkey` AS `cprvkey`,
- `contact`.`thumb` AS `thumb`,
+ $x = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`,
+ `contact`.`pubkey` AS `cpubkey`,
+ `contact`.`prvkey` AS `cprvkey`,
+ `contact`.`thumb` AS `thumb`,
`contact`.`url` as `url`,
`contact`.`name` as `senderName`,
- `user`.*
- FROM `contact`
- LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid`
+ `user`.*
+ FROM `contact`
+ INNER JOIN `user` ON `contact`.`uid` = `user`.`uid`
WHERE `contact`.`blocked` = 0 AND `contact`.`pending` = 0
AND `contact`.`network` = '%s' AND `user`.`nickname` = '%s'
$sql_extra
if($x && count($x)) {
$write_flag = ((($x[0]['rel']) && ($x[0]['rel'] != CONTACT_IS_SHARING)) ? true : false);
if((($owner['page-flags'] == PAGE_COMMUNITY) || ($write_flag)) && (! $x[0]['writable'])) {
- q("update contact set writable = 1 where id = %d limit 1",
+ q("update contact set writable = 1 where id = %d",
intval($x[0]['id'])
);
$x[0]['writable'] = 1;
$ssl_policy = get_config('system','ssl_policy');
fix_contact_ssl_policy($x[0],$ssl_policy);
- // If we are setup as a soapbox we aren't accepting input from this person
+ // If we are setup as a soapbox we aren't accepting top level posts from this person
- if($x[0]['page-flags'] == PAGE_SOAPBOX)
+ if (($x[0]['page-flags'] == PAGE_SOAPBOX) AND $top_level)
break;
require_once('library/simplepie/simplepie.inc');
break;
case NETWORK_OSTATUS :
-
// Do not send to otatus if we are not configured to send to public networks
if($owner['prvnets'])
break;
// private emails may be in included in public conversations. Filter them.
if(($public_message) && $item['private'] == 1)
continue;
-
+
$item_contact = get_item_contact($item,$icontacts);
if(! $item_contact)
continue;
- if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
+ if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
$slaps[] = atom_entry($item,'html',null,$owner,true);
}
if($cmd === 'wall-new' || $cmd === 'comment-new') {
$it = null;
- if($cmd === 'wall-new')
+ if($cmd === 'wall-new')
$it = $items[0];
else {
- $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($argv[2]),
intval($uid)
);
}
if(! $it)
break;
-
+
$local_user = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
intval($uid)
);
if(! count($local_user))
break;
-
+
$reply_to = '';
$r1 = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1",
intval($uid)
// only expose our real email address to true friends
- if(($contact['rel'] == CONTACT_IS_FRIEND) && (! $contact['blocked']))
- $headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . $local_user[0]['email'] . '>' . "\n";
- else
+ if(($contact['rel'] == CONTACT_IS_FRIEND) && (! $contact['blocked'])) {
+ if($reply_to) {
+ $headers = 'From: '.email_header_encode($local_user[0]['username'],'UTF-8').' <'.$reply_to.'>'."\n";
+ $headers .= 'Sender: '.$local_user[0]['email']."\n";
+ } else
+ $headers = 'From: '.email_header_encode($local_user[0]['username'],'UTF-8').' <'.$local_user[0]['email'].'>'."\n";
+ } else
$headers = 'From: ' . email_header_encode($local_user[0]['username'],'UTF-8') . ' <' . t('noreply') . '@' . $a->get_hostname() . '>' . "\n";
- if($reply_to)
- $headers .= 'Reply-to: ' . $reply_to . "\n";
+ //if($reply_to)
+ // $headers .= 'Reply-to: ' . $reply_to . "\n";
- // for testing purposes: Collect exported mails
- // $file = tempnam("/tmp/friendica/", "mail-out-");
- // file_put_contents($file, json_encode($it));
-
$headers .= 'Message-Id: <' . iri2msgid($it['uri']). '>' . "\n";
//logger("Mail: uri: ".$it['uri']." parent-uri ".$it['parent-uri'], LOGGER_DEBUG);
//logger("Mail: Data: ".print_r($it, true), LOGGER_DATA);
if($it['uri'] !== $it['parent-uri']) {
- $headers .= 'References: <' . iri2msgid($it['parent-uri']) . '>' . "\n";
- if(!strlen($it['title'])) {
- $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1",
- dbesc($it['parent-uri']));
+ $headers .= "References: <".iri2msgid($it["parent-uri"]).">";
+
+ // If Threading is enabled, write down the correct parent
+ if (($it["thr-parent"] != "") and ($it["thr-parent"] != $it["parent-uri"]))
+ $headers .= " <".iri2msgid($it["thr-parent"]).">";
+ $headers .= "\n";
+
+ if(!$it['title']) {
+ $r = q("SELECT `title` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($it['parent-uri']),
+ intval($uid));
if(count($r) AND ($r[0]['title'] != ''))
$subject = $r[0]['title'];
+ else {
+ $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($it['parent-uri']),
+ intval($uid));
+
+ if(count($r) AND ($r[0]['title'] != ''))
+ $subject = $r[0]['title'];
+ }
}
if(strncasecmp($subject,'RE:',3))
$subject = 'Re: '.$subject;
case NETWORK_DIASPORA :
if($public_message)
$loc = 'public batch ' . $contact['batch'];
- else
+ else
$loc = $contact['name'];
logger('delivery: diaspora batch deliver: ' . $loc);
if((! $contact['pubkey']) && (! $public_message))
break;
- if($target_item['verb'] === ACTIVITY_DISLIKE) {
- // unsupported
- break;
+ $unsupported_activities = array(ACTIVITY_DISLIKE, ACTIVITY_ATTEND, ACTIVITY_ATTENDNO, ACTIVITY_ATTENDMAYBE);
+
+ //don't transmit activities which are not supported by diaspora
+ foreach($unsupported_activities as $act) {
+ if(activity_match($target_item['verb'],$act)) {
+ break 2;
+ }
}
- elseif(($target_item['deleted']) && ($target_item['uri'] === $target_item['parent-uri'])) {
+
+ if(($target_item['deleted']) && ($target_item['uri'] === $target_item['parent-uri'])) {
// top-level retraction
logger('delivery: diaspora retract: ' . $loc);
diaspora_send_relay($target_item,$owner,$contact,$public_message);
break;
- }
+ }
elseif(($top_level) && (! $walltowall)) {
// currently no workable solution for sending walltowall
logger('delivery: diaspora status: ' . $loc);
case NETWORK_FACEBOOK :
if(get_config('system','dfrn_only'))
break;
+ case NETWORK_PUMPIO :
+ if(get_config('system','dfrn_only'))
+ break;
default:
break;
}
}
if (array_search(__file__,get_included_files())===0){
- delivery_run($argv,$argc);
+ delivery_run($_SERVER["argv"],$_SERVER["argc"]);
killme();
}