X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fdelivery.php;h=659add2ad61af1f6b05653a04e39c1da8409074f;hb=1053fe91c8a8baf69a74ccb4394442641c7dcc0a;hp=8152876683e5eeee31dbdd873bf5aa261912876e;hpb=32f5d4e04abdb52080c6e88e29b1d6c7ce89e6b9;p=friendica.git diff --git a/include/delivery.php b/include/delivery.php index 8152876683..659add2ad6 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -3,7 +3,7 @@ require_once("boot.php"); 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)){ @@ -12,13 +12,13 @@ function delivery_run($argv, $argc){ 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'); @@ -52,7 +52,7 @@ function delivery_run($argv, $argc){ ); if(! count($r)) { continue; - } + } $maxsysload = intval(get_config('system','maxloadavg')); if($maxsysload < 1) @@ -60,14 +60,14 @@ function delivery_run($argv, $argc){ 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) @@ -157,7 +157,7 @@ function delivery_run($argv, $argc){ $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) ); @@ -186,29 +186,29 @@ function delivery_run($argv, $argc){ // 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.'); @@ -216,9 +216,9 @@ function delivery_run($argv, $argc){ 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 } @@ -229,7 +229,7 @@ function delivery_run($argv, $argc){ if(count($r)) $contact = $r[0]; - + $hubxml = feed_hublinks(); logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA); @@ -280,7 +280,7 @@ function delivery_run($argv, $argc){ continue; // private emails may be in included in public conversations. Filter them. - if(($public_message) && $item['private']) + if(($public_message) && $item['private'] == 1) continue; $item_contact = get_item_contact($item,$icontacts); @@ -297,7 +297,7 @@ function delivery_run($argv, $argc){ } $atom .= '' . "\r\n"; - + logger('notifier: ' . $atom, LOGGER_DATA); $basepath = implode('/', array_slice(explode('/',$contact['url']),0,3)); @@ -311,26 +311,27 @@ function delivery_run($argv, $argc){ 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 - AND `user`.`account_expired` = 0 LIMIT 1", + AND `user`.`account_expired` = 0 AND `user`.`account_removed` = 0 LIMIT 1", dbesc(NETWORK_DFRN), dbesc($nickname) ); - if(count($x)) { - if($owner['page-flags'] == PAGE_COMMUNITY && ! $x[0]['writable']) { - q("update contact set writable = 1 where id = %d limit 1", + 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", intval($x[0]['id']) ); $x[0]['writable'] = 1; @@ -365,7 +366,6 @@ function delivery_run($argv, $argc){ break; case NETWORK_OSTATUS : - // Do not send to otatus if we are not configured to send to public networks if($owner['prvnets']) break; @@ -383,14 +383,14 @@ function delivery_run($argv, $argc){ continue; // private emails may be in included in public conversations. Filter them. - if(($public_message) && $item['private']) + 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); } @@ -426,10 +426,10 @@ function delivery_run($argv, $argc){ 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) ); @@ -438,14 +438,14 @@ function delivery_run($argv, $argc){ } 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) @@ -457,18 +457,18 @@ function delivery_run($argv, $argc){ // 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); @@ -476,13 +476,28 @@ function delivery_run($argv, $argc){ //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; @@ -494,7 +509,7 @@ function delivery_run($argv, $argc){ case NETWORK_DIASPORA : if($public_message) $loc = 'public batch ' . $contact['batch']; - else + else $loc = $contact['name']; logger('delivery: diaspora batch deliver: ' . $loc); @@ -505,11 +520,16 @@ function delivery_run($argv, $argc){ 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); @@ -522,7 +542,7 @@ function delivery_run($argv, $argc){ 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); @@ -538,6 +558,9 @@ function delivery_run($argv, $argc){ case NETWORK_FACEBOOK : if(get_config('system','dfrn_only')) break; + case NETWORK_PUMPIO : + if(get_config('system','dfrn_only')) + break; default: break; } @@ -547,6 +570,6 @@ function delivery_run($argv, $argc){ } if (array_search(__file__,get_included_files())===0){ - delivery_run($argv,$argc); + delivery_run($_SERVER["argv"],$_SERVER["argc"]); killme(); }