]> git.mxchange.org Git - friendica.git/blobdiff - include/delivery.php
Merge pull request #2110 from annando/1511-subscribe-feed
[friendica.git] / include / delivery.php
index d89cded9eb10ed7ecf082d25f0dbef8989109e45..dc02faaba8e03d1957797861a6cd4a0ee9defa59 100644 (file)
@@ -2,6 +2,7 @@
 require_once("boot.php");
 require_once('include/queue_fn.php');
 require_once('include/html2plain.php');
+require_once("include/ostatus.php");
 
 function delivery_run(&$argv, &$argc){
        global $a, $db;
@@ -52,7 +53,7 @@ function delivery_run(&$argv, &$argc){
                );
                if(! count($r)) {
                        continue;
-               }       
+               }
 
                $maxsysload = intval(get_config('system','maxloadavg'));
                if($maxsysload < 1)
@@ -60,14 +61,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 +158,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 +187,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 +217,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 +230,7 @@ function delivery_run(&$argv, &$argc){
 
                if(count($r))
                        $contact = $r[0];
-       
+
                $hubxml = feed_hublinks();
 
                logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
@@ -297,7 +298,7 @@ function delivery_run(&$argv, &$argc){
                                }
 
                                $atom .= '</feed>' . "\r\n";
-       
+
                                logger('notifier: ' . $atom, LOGGER_DATA);
                                $basepath =  implode('/', array_slice(explode('/',$contact['url']),0,3));
 
@@ -311,15 +312,15 @@ 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
@@ -331,7 +332,7 @@ function delivery_run(&$argv, &$argc){
                                        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;
@@ -340,9 +341,9 @@ function delivery_run(&$argv, &$argc){
                                                $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');
@@ -366,7 +367,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;
@@ -386,13 +386,14 @@ function delivery_run(&$argv, &$argc){
                                                // 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)) 
-                                                       $slaps[] = atom_entry($item,'html',null,$owner,true);
+                                               if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
+                                                       $slaps[] = ostatus_salmon($item,$owner);
+                                                       //$slaps[] = atom_entry($item,'html',null,$owner,true);
                                        }
 
                                        logger('notifier: slapdelivery: ' . $contact['name']);
@@ -427,10 +428,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)
                                                );
@@ -470,10 +471,6 @@ function delivery_run(&$argv, &$argc){
                                        //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);
@@ -514,7 +511,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);
@@ -525,11 +522,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);
 
@@ -542,7 +544,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);
@@ -558,6 +560,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;
                }
@@ -567,6 +572,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();
 }