X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fnotifier.php;h=3ad433afd8645822d9e831cc69b70a19de148f97;hb=f6320f3319a8009c7bdf51035b226f0ea688d8bd;hp=d12119b05ffa35a87889d3da74217a701717144f;hpb=a06c9768be418dc473f492c043ab6dfd1ae46f47;p=friendica.git diff --git a/include/notifier.php b/include/notifier.php old mode 100644 new mode 100755 index d12119b05f..3ad433afd8 --- a/include/notifier.php +++ b/include/notifier.php @@ -2,6 +2,7 @@ require_once("boot.php"); require_once('include/queue_fn.php'); +require_once('include/html2plain.php'); /* * This file was at one time responsible for doing all deliveries, but this caused @@ -35,7 +36,7 @@ function notifier_run($argv, $argc){ require_once("datetime.php"); require_once('include/items.php'); require_once('include/bbcode.php'); - + require_once('include/email.php'); load_config('config'); load_config('system'); @@ -111,7 +112,7 @@ function notifier_run($argv, $argc){ else { // find ancestors - $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", + $r = q("SELECT * FROM `item` WHERE `id` = %d and visible = 1 and moderated = 0 LIMIT 1", intval($item_id) ); @@ -128,7 +129,7 @@ function notifier_run($argv, $argc){ return; $items = q("SELECT `item`.*, `sign`.`signed_text`,`sign`.`signature`,`sign`.`signer` - FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d ORDER BY `id` ASC", + FROM `item` LEFT JOIN `sign` ON `sign`.`iid` = `item`.`id` WHERE `parent` = %d and visible = 1 and moderated = 0 ORDER BY `id` ASC", intval($parent_id) ); @@ -206,7 +207,7 @@ function notifier_run($argv, $argc){ /** * - * Be VERY CAREFUL if you make any changes to the following lines. Seemingly innocuous changes + * Be VERY CAREFUL if you make any changes to the following several lines. Seemingly innocuous changes * have been known to cause runaway conditions which affected several servers, along with * permissions issues. * @@ -219,6 +220,22 @@ function notifier_run($argv, $argc){ } + if(($cmd === 'uplink') && (intval($parent['forum_mode'])) && (! $top_level)) { + $relay_to_owner = true; + } + + // until the 'origin' flag has been in use for several months + // we will just use it as a fallback test + // later we will be able to use it as the primary test of whether or not to relay. + + if(! $target_item['origin']) + $relay_to_owner = false; + + if($parent['origin']) + $relay_to_owner = false; + + + if($relay_to_owner) { logger('notifier: followup', LOGGER_DEBUG); // local followup to remote post @@ -248,6 +265,13 @@ function notifier_run($argv, $argc){ $deny_people = expand_acl($parent['deny_cid']); $deny_groups = expand_groups(expand_acl($parent['deny_gid'])); + // if our parent is a forum, uplink to the origional author causing + // a delivery fork + + if(intval($parent['forum_mode']) && (! $top_level) && ($cmd !== 'uplink')) { + proc_run('php','include/notifier','uplink',$item_id); + } + $conversants = array(); foreach($items as $item) { @@ -300,7 +324,7 @@ function notifier_run($argv, $argc){ $birthday = '' . xmlify($birthday) . ''; $atom .= replace_macros($feed_template, array( - '$version' => xmlify(FRIENDIKA_VERSION), + '$version' => xmlify(FRIENDICA_VERSION), '$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ), '$feed_title' => xmlify($owner['name']), '$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) , @@ -503,6 +527,14 @@ function notifier_run($argv, $argc){ ); if(count($x)) { + + if($owner['page-flags'] == PAGE_COMMUNITY && ! $x[0]['writable']) { + q("update contact set writable = 1 where id = %d limit 1", + intval($x[0]['id']) + ); + $x[0]['writable'] = 1; + } + require_once('library/simplepie/simplepie.inc'); logger('mod-delivery: local delivery'); local_delivery($x[0],$atom); @@ -561,6 +593,7 @@ function notifier_run($argv, $argc){ break; case NETWORK_MAIL: + case NETWORK_MAIL2: if(get_config('system','dfrn_only')) break; @@ -601,17 +634,27 @@ function notifier_run($argv, $argc){ ); if($r1 && $r1[0]['reply_to']) $reply_to = $r1[0]['reply_to']; - - $subject = (($it['title']) ? $it['title'] : t("\x28no subject\x29")) ; - $headers = 'From: ' . $local_user[0]['username'] . ' <' . $local_user[0]['email'] . '>' . "\n"; + + $subject = (($it['title']) ? email_header_encode($it['title'],'UTF-8') : t("\x28no subject\x29")) ; + + // 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 + $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"; - $headers .= 'Message-id: <' . $it['uri'] . '>' . "\n"; + // for testing purposes: Collect exported mails + $file = tempnam("/tmp/friendica/", "mail-out2-"); + file_put_contents($file, json_encode($it)); + + $headers .= 'Message-Id: <' . cleanupmessageid($it['uri']) . '>' . "\n"; if($it['uri'] !== $it['parent-uri']) { - $header .= 'References: <' . $it['parent-uri'] . '>' . "\n"; + $headers .= 'References: <' . cleanupmessageid($it['parent-uri']) . '>' . "\n"; if(! strlen($it['title'])) { $r = q("SELECT `title` FROM `item` WHERE `parent-uri` = '%s' LIMIT 1", dbesc($it['parent-uri']) @@ -629,10 +672,12 @@ function notifier_run($argv, $argc){ } $headers .= 'MIME-Version: 1.0' . "\n"; - $headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; + //$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n"; + $headers .= 'Content-Type: text/plain; charset=UTF-8' . "\n"; $headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n"; $html = prepare_body($it); - $message = '' . $html . ''; + //$message = '' . $html . ''; + $message = html2plain($html); logger('notifier: email delivery to ' . $addr); mail($addr, $subject, $message, $headers); } @@ -640,7 +685,15 @@ function notifier_run($argv, $argc){ case NETWORK_DIASPORA: require_once('include/diaspora.php'); - if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled')) || (! $normal_mode)) + if(get_config('system','dfrn_only') || (! get_config('system','diaspora_enabled'))) + break; + + if($mail) { + diaspora_send_mail($item,$owner,$contact); + break; + } + + if(! $normal_mode) break; // special handling for followup to public post @@ -710,16 +763,17 @@ function notifier_run($argv, $argc){ if($public_message) { $r1 = q("SELECT DISTINCT(`batch`), `id`, `name`,`network` FROM `contact` WHERE `network` = '%s' - AND `uid` = %d AND `rel` != %d ORDER BY rand() ", + AND `uid` = %d AND `rel` != %d group by `batch` ORDER BY rand() ", dbesc(NETWORK_DIASPORA), intval($owner['uid']), intval(CONTACT_IS_SHARING) ); $r2 = q("SELECT `id`, `name`,`network` FROM `contact` - WHERE `network` = '%s' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 + WHERE `network` in ( '%s', '%s') AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `rel` != %d order by rand() ", dbesc(NETWORK_DFRN), + dbesc(NETWORK_MAIL2), intval($owner['uid']), intval(CONTACT_IS_SHARING) ); @@ -784,10 +838,18 @@ function notifier_run($argv, $argc){ call_hooks('notifier_end',$target_item); - return; } +function cleanupmessageid($messageid) { + global $a; + + if (!strpos($messageid, '@')) + $messageid = str_replace(":", ".", $messageid).'@'.$a->get_hostname(); + + return($messageid); +} + if (array_search(__file__,get_included_files())===0){ notifier_run($argv,$argc); killme();