]> git.mxchange.org Git - friendica.git/commitdiff
build feeds rather than template them
authorMike Macgirvin <mike@macgirvin.com>
Tue, 2 Nov 2010 00:56:36 +0000 (17:56 -0700)
committerMike Macgirvin <mike@macgirvin.com>
Tue, 2 Nov 2010 00:56:36 +0000 (17:56 -0700)
boot.php
include/items.php
include/notifier.php
mod/pubsub.php

index 2de398cfc4377f96fee95d06494f22049000c995..5837f14d3c0e240bb53228c7ead2e9771037b32b 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -8,6 +8,14 @@ define ( 'DFRN_PROTOCOL_VERSION',  '2.0'  );
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
 
+// log levels
+
+define ( 'LOGGER_NORMAL',          0 );
+define ( 'LOGGER_TRACE',           1 );
+define ( 'LOGGER_DEBUG',           2 );
+define ( 'LOGGER_DATA',            3 );
+define ( 'LOGGER_ALL',             4 );
+
 // registration policy
 
 define ( 'REGISTER_CLOSED',        0 );
@@ -1281,12 +1289,13 @@ function attribute_contains($attr,$s) {
 }}
 
 if(! function_exists('logger')) {
-function logger($msg) {
+function logger($msg,$level = 0) {
 
        $debugging = get_config('system','debugging');
+       $loglevel  = intval(get_config('system','loglevel'));
        $logfile   = get_config('system','logfile');
 
-       if((! $debugging) || (! $logfile))
+       if((! $debugging) || (! $logfile) || ($level > $loglevel))
                return;
        
        @file_put_contents($logfile, datetime_convert() . ':' . session_id() . ' ' . $msg . "\n", FILE_APPEND);
index 7f62f6decd8b93494bb3291149741395d44867ab..62f0876ad8dbe92909edebbb2fc5375fab39f77d 100644 (file)
@@ -27,8 +27,10 @@ function get_feed_for(&$a, $dfrn_id, $owner_id, $last_update, $direction = 0) {
        $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
                intval($owner_id)
        );
-       if(count($r))
+       if(count($r)) {
                $owner = $r[0];
+               $owner['nickname'] = $owner_nick;
+       }
        else
                killme();
 
@@ -90,7 +92,7 @@ function get_feed_for(&$a, $dfrn_id, $owner_id, $last_update, $direction = 0) {
                $sort = 'ASC';
 
        if(! strlen($last_update))
-               $last_update = 'now - 30 days';
+               $last_update = 'now -30 days';
 
        $check_date = datetime_convert('UTC','UTC',$last_update,'Y-m-d H:i:s');
 
@@ -117,9 +119,6 @@ function get_feed_for(&$a, $dfrn_id, $owner_id, $last_update, $direction = 0) {
        $items = $r;
 
        $feed_template = load_view_file('view/atom_feed.tpl');
-       $tomb_template = load_view_file('view/atom_tomb.tpl');
-       $item_template = load_view_file('view/atom_item.tpl');
-       $cmnt_template = load_view_file('view/atom_cmnt.tpl');
 
        $atom = '';
 
@@ -169,69 +168,13 @@ function get_feed_for(&$a, $dfrn_id, $owner_id, $last_update, $direction = 0) {
                // public feeds get html, our own nodes use bbcode
 
                if($dfrn_id === '*') {
-                       $allow = (($item['last-child']) ? 1 : 0);
-                       $item['body'] = bbcode($item['body']);
                        $type = 'html';
                }
                else {
-                       $allow = ((($item['last-child']) && ($contact['rel']) && ($contact['rel'] != REL_FAN)) ? 1 : 0);
                        $type = 'text';
                }
 
-               if($item['deleted']) {
-                       $atom .= replace_macros($tomb_template, array(
-                               '$id'      => xmlify($item['uri']),
-                               '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME))
-                       ));
-               }
-               else {
-                       $verb = construct_verb($item);
-                       $actobj = construct_activity($item);
-                       $mentioned = get_mentions($item);
-
-                       if($item['parent'] == $item['id']) {
-                               $atom .= replace_macros($item_template, array(
-                                       '$name'               => xmlify($item['name']),
-                                       '$profile_page'       => xmlify($item['url']),
-                                       '$thumb'              => xmlify($item['thumb']),
-                                       '$owner_name'         => xmlify($item['owner-name']),
-                                       '$owner_profile_page' => xmlify($item['owner-link']),
-                                       '$owner_thumb'        => xmlify($item['owner-avatar']),
-                                       '$item_id'            => xmlify($item['uri']),
-                                       '$title'              => xmlify($item['title']),
-                                       '$published'          => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                       '$updated'            => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                       '$location'           => xmlify($item['location']),
-                                       '$coord'              => xmlify($item['coord']),
-                                       '$type'               => $type,
-                                       '$alt'                => xmlify($a->get_baseurl() . '/display/' . $owner_nick . '/' . $item['id']),
-                                       '$content'            => xmlify($item['body']),
-                                       '$verb'               => xmlify($verb),
-                                       '$actobj'             => $actobj,  // do not xmlify
-                                       '$mentioned'          => $mentioned,
-                                       '$comment_allow'      => $allow
-                               ));
-                       }
-                       else {
-                               $atom .= replace_macros($cmnt_template, array(
-                                       '$name'          => xmlify($item['name']),
-                                       '$profile_page'  => xmlify($item['url']),
-                                       '$thumb'         => xmlify($item['thumb']),
-                                       '$item_id'       => xmlify($item['uri']),
-                                       '$title'         => xmlify($item['title']),
-                                       '$published'     => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                       '$updated'       => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                       '$type'          => $type,
-                                       '$content'       => xmlify($item['body']),
-                                       '$alt'           => xmlify($a->get_baseurl() . '/display/' . $owner_nick . '/' . $item['id']),
-                                       '$verb'          => xmlify($verb),
-                                       '$actobj'        => $actobj, // do not xmlify
-                                       '$mentioned'     => $mentioned,
-                                       '$parent_id'     => xmlify($item['parent-uri']),
-                                       '$comment_allow' => $allow
-                               ));
-                       }
-               }
+               $atom .= atom_entry($item,$type,null,$owner,true);
        }
 
        $atom .= '</feed>' . "\r\n";
@@ -1050,4 +993,73 @@ function subscribe_to_hub($url,$importer,$contact) {
        post_url($url,$params);                 
        return;
 
-}
\ No newline at end of file
+}
+
+
+function atom_author($tag,$name,$uri,$h,$w,$photo) {
+       $o = '';
+       if(! $tag)
+               return $o;
+       $name = xmlify($name);
+       $uri = xmlify($uri);
+       $h = intval($h);
+       $w = intval($w);
+       $photo = xmlify($photo);
+
+
+       $o .= "<$tag>\r\n";
+       $o .= "<name>$name</name>\r\n";
+       $o .= "<uri>$uri</uri>\r\n";
+       $o .= '<link rel="photo"  type="image/jpeg" media:width="' . $w . '" media:height="' . $h . '" href="' . $photo . '" />' . "\r\n";
+       $o .= '<link rel="avatar" type="image/jpeg" media:width="' . $w . '" media:height="' . $h . '" href="' . $photo . '" />' . "\r\n";
+       $o .= "</$tag>\r\n";
+       return $o;
+}
+
+function atom_entry($item,$type,$author,$owner,$comment = false) {
+
+       if($item['deleted'])
+               return '<at:deleted-entry ref="' . xmlify($item['uri']) . '" when="' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '" />' . "\r\n";
+
+       $a = get_app();
+
+       $o = "<entry>\r\n";
+
+       if(is_array($author))
+               $o .= atom_author('author',$author['name'],$author['url'],80,80,$author['thumb']);
+       else
+               $o .= atom_author('author',$item['name'],$item['url'],80,80,$item['thumb']);
+       if(strlen($item['owner-name']))
+               $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
+
+       if($item['parent'] != $item['id'])
+               $o .= '<thr:in-reply-to ref="' . xmlify($item['parent-uri']) . '" />' . "\r\n";
+
+       $o .= '<id>' . xmlify($item['uri']) . '</id>' . "\r\n";
+       $o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
+       $o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n";
+       $o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
+       $o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($item['body']) : $item['body']) . '</content>' . "\r\n";
+       $o .= '<link rel="alternate" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
+       if($comment)
+               $o .= '<dfrn:comment-allow>' . intval($item['last-child']) . '</dfrn:comment-allow>' . "\r\n";
+       if($item['location'])
+               $o .= '<dfrn:location>' . xmlify($item['location']) . '</dfrn:location>' . "\r\n";
+       if($item['coord'])
+               $o .= '<georss:point>' . xmlify($item['coord']) . '</georss:point>' . "\r\n";
+
+       $verb = construct_verb($item);
+       $o .= '<as:verb>' . xmlify($verb) . '</as:verb>' . "\r\n";
+       $actobj = construct_activity($item);
+       if(strlen($actobj))
+               $o .= $actobj;
+
+       $mentioned = get_mentions($item);
+       if($mentioned)
+               $o .= $mentioned;
+       
+       $o .= '</entry>' . "\r\n";
+       
+       return $o;
+}
+       
\ No newline at end of file
index 1f6bfa36aa03006bce5fb01195e1de939cd89416..405688ab111c381749030de48737c51de8c49506 100644 (file)
@@ -84,7 +84,7 @@
        // If this is a public conversation, notify the feed hub
        $notify_hub = true;
 
-       // fill this in with a salmon slap if applicable
+       // fill this in with a single salmon slap if applicable
        $slap = '';
 
        if($cmd != 'mail') {
                        killme();
 
                $contacts = $r;
-
-               $tomb_template = load_view_file('view/atom_tomb.tpl');
-               $item_template = load_view_file('view/atom_item.tpl');
-               $cmnt_template = load_view_file('view/atom_cmnt.tpl');
        }
 
        $feed_template = load_view_file('view/atom_feed.tpl');
 
                if($followup) {
                        foreach($items as $item) {  // there is only one item
-
-                               $verb = construct_verb($item);
-                               $actobj = construct_activity($item);
-                               $mentioned = get_mentions($item);
-
                                if($item['id'] == $item_id) {
-                                       $slap = replace_macros($cmnt_template, array(
-                                               '$name'               => xmlify($owner['name']),
-                                               '$profile_page'       => xmlify($owner['url']),
-                                               '$thumb'              => xmlify($owner['thumb']),
-                                               '$owner_name'         => xmlify($item['owner-name']),
-                                               '$owner_profile_page' => xmlify($item['owner-link']),
-                                               '$owner_thumb'        => xmlify($item['owner-avatar']),
-                                               '$item_id'            => xmlify($item['uri']),
-                                               '$title'              => xmlify($item['title']),
-                                               '$published'          => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                               '$updated'            => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                               '$location'           => xmlify($item['location']),
-                                               '$coord'              => xmlify($item['coord']),
-                                               '$type'               => 'html',
-                                               '$verb'               => xmlify($verb),
-                                               '$actobj'             => $actobj,
-                                               '$mentioned'          => $mentioned,
-                                               '$alt'                => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                               '$content'            => xmlify(bbcode($item['body'])),
-                                               '$parent_id'          => xmlify($item['parent-uri']),
-                                               '$comment_allow'      => 0
-                                       ));
-
-                                       $atom .= replace_macros($cmnt_template, array(
-                                               '$name'               => xmlify($owner['name']),
-                                               '$profile_page'       => xmlify($owner['url']),
-                                               '$thumb'              => xmlify($owner['thumb']),
-                                               '$owner_name'         => xmlify($item['owner-name']),
-                                               '$owner_profile_page' => xmlify($item['owner-link']),
-                                               '$owner_thumb'        => xmlify($item['owner-avatar']),
-                                               '$item_id'            => xmlify($item['uri']),
-                                               '$title'              => xmlify($item['title']),
-                                               '$published'          => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                               '$updated'            => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                               '$location'           => xmlify($item['location']),
-                                               '$coord'              => xmlify($item['coord']),
-                                               '$type'               => 'text',
-                                               '$verb'               => xmlify($verb),
-                                               '$actobj'             => $actobj,
-                                               '$mentioned'          => $mentioned,
-                                               '$alt'                => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                               '$content'            => xmlify($item['body']),
-                                               '$parent_id'          => xmlify($item['parent-uri']),
-                                               '$comment_allow'      => 0
-                                       ));
-
+                                       $slap  = atom_entry($item,'html',$owner,$owner,false);
+                                       $atom .= atom_entry($item,'text',$owner,$owner,false);
                                }
-
-
                        }
                }
                else {
                        foreach($items as $item) {
-                               if($item['deleted']) {
-                                       $atom .= replace_macros($tomb_template, array(
-                                               '$id' => xmlify($item['uri']),
-                                               '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME))
-                                       ));
-                                       $slaps[] = replace_macros($tomb_template, array(
-                                               '$id' => xmlify($item['uri']),
-                                               '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME))
-                                       ));
-                               }
-                               else {
-                                       $contact = get_item_contact($item,$contacts);
-                                       if(! $contact)
-                                               continue;
-
-                                       $verb = construct_verb($item);
-                                       $actobj = construct_activity($item);
-                                       $mentioned = get_mentions($item);
-
-                                       if($item['parent'] == $item['id']) {
-                                               $atom .= replace_macros($item_template, array(
-                                                       '$name'               => xmlify($contact['name']),
-                                                       '$profile_page'       => xmlify($contact['url']),
-                                                       '$thumb'              => xmlify($contact['thumb']),
-                                                       '$owner_name'         => xmlify($item['owner-name']),
-                                                       '$owner_profile_page' => xmlify($item['owner-link']),
-                                                       '$owner_thumb'        => xmlify($item['owner-avatar']),
-                                                       '$item_id'            => xmlify($item['uri']),
-                                                       '$title'              => xmlify($item['title']),
-                                                       '$published'          => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                                       '$updated'            => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                                       '$location'           => xmlify($item['location']),
-                                                       '$coord'              => xmlify($item['coord']),
-                                                       '$type'               => 'text',
-                                                       '$verb'               => xmlify($verb),
-                                                       '$actobj'             => $actobj,
-                                                       '$mentioned'          => $mentioned,
-                                                       '$content'            => xmlify($item['body']),
-                                                       '$alt'                => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                                       '$comment_allow'      => (($item['last-child']) ? 1 : 0)
-                                               ));
-                                               $slaps[] = replace_macros($item_template, array(
-                                                       '$name'               => xmlify($contact['name']),
-                                                       '$profile_page'       => xmlify($contact['url']),
-                                                       '$thumb'              => xmlify($contact['thumb']),
-                                                       '$owner_name'         => xmlify($item['owner-name']),
-                                                       '$owner_profile_page' => xmlify($item['owner-link']),
-                                                       '$owner_thumb'        => xmlify($item['owner-avatar']),
-                                                       '$item_id'            => xmlify($item['uri']),
-                                                       '$title'              => xmlify($item['title']),
-                                                       '$published'          => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                                       '$updated'            => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                                       '$location'           => xmlify($item['location']),
-                                                       '$coord'              => xmlify($item['coord']),
-                                                       '$type'               => 'html',
-                                                       '$verb'               => xmlify($verb),
-                                                       '$actobj'             => $actobj,
-                                                       '$mentioned'          => $mentioned,
-                                                       '$content'            => xmlify(bbcode($item['body'])),
-                                                       '$alt'                => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                                       '$comment_allow'      => (($item['last-child']) ? 1 : 0)
-                                               ));
+                               $contact = get_item_contact($item,$contacts);
+                               if(! $contact)
+                                       continue;
 
-                                       }
-                                       else {
-                                               $atom .= replace_macros($cmnt_template, array(
-                                                       '$name'          => xmlify($contact['name']),
-                                                       '$profile_page'  => xmlify($contact['url']),
-                                                       '$thumb'         => xmlify($contact['thumb']),
-                                                       '$item_id'       => xmlify($item['uri']),
-                                                       '$title'         => xmlify($item['title']),
-                                                       '$published'     => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                                       '$updated'       => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                                       '$content'       => xmlify($item['body']),
-                                                       '$alt'           => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                                       '$location'      => xmlify($item['location']),
-                                                       '$coord'         => xmlify($item['coord']),
-                                                       '$type'          => 'text',
-                                                       '$verb'          => xmlify($verb),
-                                                       '$actobj'        => $actobj,
-                                                       '$mentioned'     => $mentioned,
-                                                       '$parent_id'     => xmlify($item['parent-uri']),
-                                                       '$comment_allow' => (($item['last-child']) ? 1 : 0)
-                                               ));
-                                               $slaps[] = replace_macros($cmnt_template, array(
-                                                       '$name'          => xmlify($contact['name']),
-                                                       '$profile_page'  => xmlify($contact['url']),
-                                                       '$thumb'         => xmlify($contact['thumb']),
-                                                       '$item_id'       => xmlify($item['uri']),
-                                                       '$title'         => xmlify($item['title']),
-                                                       '$published'     => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
-                                                       '$updated'       => xmlify(datetime_convert('UTC', 'UTC', $item['edited']  . '+00:00' , ATOM_TIME)),
-                                                       '$content'       => xmlify(bbcode($item['body'])),
-                                                       '$alt'           => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
-                                                       '$location'      => xmlify($item['location']),
-                                                       '$coord'         => xmlify($item['coord']),
-                                                       '$type'          => 'html',
-                                                       '$verb'          => xmlify($verb),
-                                                       '$actobj'        => $actobj,
-                                                       '$mentioned'     => $mentioned,
-                                                       '$parent_id'     => xmlify($item['parent-uri']),
-                                                       '$comment_allow' => (($item['last-child']) ? 1 : 0)
-                                               ));
-                                       }
-                               }
+                               $atom   .= atom_entry($item,'text',$contact,$owner,true);
+                               $slaps[] = atom_entry($item,'html',$contact,$owner,true);
                        }
                }
        }
        $atom .= '</feed>' . "\r\n";
 
-       logger('notifier: ' . $atom);
+       logger('notifier: ' . $atom, LOGGER_DATA);
 
-       logger('notifier: slaps: ' . print_r($slaps,true));
+       logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
 
        if($followup)
                $recip_str = $parent['contact-id'];
 
                switch($contact['network']) {
                        case 'dfrn':
+                               logger('notifier: dfrndelivery: ' . $contact['name']);
                                $deliver_status = dfrn_deliver($owner,$contact,$atom);
-                               logger('notifier: delivery: ' . $contact['name']);
                                break;
                        default:
                                if($followup) {
                                        // a public hub, it's ok to send a salmon
 
                                        if(count($slaps) && $notify_hub) {
+                                               logger('notifier: slapdelivery: ' . $contact['name']);
                                                foreach($slaps as $slappy) {
                                                        slapper($owner,$contact['notify'],$slappy);
                                                }
-                                               logger('notifier: slapdelivery: ' . $contact['name']);
                                        }
                                }
                                break;
 
        if(count($slaps) && count($url_recipients) && $notify_hub) {
                foreach($url_recipients as $url) {
+                       logger('notifier: urldelivery: ' . $url);
                        foreach($slaps as $slappy) {
                                slapper($owner,$url,$slappy);
                        }
-                       logger('notifier: urldelivery: ' . $url);
                }
        }
 
index 28e8356eb45b5ac6d37a76187c9d0466cdfc74c5..c8ff51b2e16935f072ec1320d747e3965eec9a63 100644 (file)
@@ -86,7 +86,8 @@ function pubsub_post(&$a) {
 
        $xml = file_get_contents('php://input');
 
-       logger('pubsub: feed arrived from ' . $_SERVER['REMOTE_ADDR'] . ' for ' .  $a->cmd . ':' . $xml);
+       logger('pubsub: feed arrived from ' . $_SERVER['REMOTE_ADDR'] . ' for ' .  $a->cmd );
+       logger('pubsub: data: ' . $xml, $LOGGER_DATA);
 
        $nick       = (($a->argc > 1) ? notags(trim($a->argv[1])) : '');
        $contact_id = (($a->argc > 2) ? intval($a->argv[2]) : 0);