]> git.mxchange.org Git - friendica.git/commitdiff
fixed a few feed problems affecting activity objects/targets
authorFriendika <info@friendika.com>
Fri, 10 Jun 2011 08:51:14 +0000 (01:51 -0700)
committerFriendika <info@friendika.com>
Fri, 10 Jun 2011 08:51:14 +0000 (01:51 -0700)
addon/facebook/facebook.php
boot.php
include/items.php
mod/events.php

index 9e41065dea72eec604fa5ec2f6e47f93eadc831c..545779cd5fc2f513bf540a8acc14b63ece13a499 100644 (file)
@@ -908,7 +908,7 @@ function fb_consume_stream($uid,$j,$wall = false) {
 
                                $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
                                $likedata['object'] = '<object><type>' . ACTIVITY_OBJ_NOTE . '</type><local>1</local>' . 
-                                       '<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . $orig_post['plink'] . '">') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';  
+                                       '<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . xmlify($orig_post['plink']) . '" />') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';  
 
                                $item = item_store($likedata);                  
                        }
index 8e8a2bc210a2a346f141d3905500d464a7a1789a..b94000b60741aa1774564b8aa461c6f62b8d206c 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -2788,16 +2788,23 @@ function lang_selector() {
 
 
 if(! function_exists('parse_xml_string')) {
-function parse_xml_string($s) {
-       if(! strstr($s,'<?xml'))
-               return false;
-       $s2 = substr($s,strpos($s,'<?xml'));
+function parse_xml_string($s,$strict = true) {
+       if($strict) {
+               if(! strstr($s,'<?xml'))
+                       return false;
+               $s2 = substr($s,strpos($s,'<?xml'));
+       }
+       else
+               $s2 = $s;
        libxml_use_internal_errors(true);
+
        $x = @simplexml_load_string($s2);
-       if(count(libxml_get_errors()))
+       if(! $x) {
+               logger('libxml: parse: error: ' . $s2, LOGGER_DATA);
                foreach(libxml_get_errors() as $err)
                        logger('libxml: parse: ' . $err->code." at ".$err->line.":".$err->column." : ".$err->message, LOGGER_DATA);
-       libxml_clear_errors();
+               libxml_clear_errors();
+       }
        return $x;
 }}
 
index dfe92378aeed3659647d9f166575a9d0b155dea2..a5d430aa22053a2a88961df0c4d2a981713c4033 100644 (file)
@@ -180,7 +180,11 @@ function construct_activity_object($item) {
 
        if($item['object']) {
                $o = '<as:object>' . "\r\n";
-               $r = parse_xml_string($item['object']);
+               $r = parse_xml_string($item['object'],false);
+
+
+               if(! $r)
+                       return '';
                if($r->type)
                        $o .= '<as:object-type>' . xmlify($r->type) . '</as:object-type>' . "\r\n";
                if($r->id)
@@ -188,8 +192,15 @@ function construct_activity_object($item) {
                if($r->title)
                        $o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n";
                if($r->link) {
-                       if(substr($r->link,0,1) === '<') 
+                       if(substr($r->link,0,1) === '<') {
+                               // patch up some facebook "like" activity objects that got stored incorrectly
+                               // for a couple of months prior to 9-Jun-2011 and generated bad XML.
+                               // we can probably remove this hack here and in the following function in a few months time.
+                               if(strstr($r->link,'&') && (! strstr($r->link,'&amp;')))
+                                       $r->link = str_replace('&','&amp;', $r->link);
+                               $r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link);
                                $o .= $r->link;
+                       }                                       
                        else
                                $o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n";
                }
@@ -206,7 +217,9 @@ function construct_activity_target($item) {
 
        if($item['target']) {
                $o = '<as:target>' . "\r\n";
-               $r = parse_xml_string($item['target']);
+               $r = parse_xml_string($item['target'],false);
+               if(! $r)
+                       return '';
                if($r->type)
                        $o .= '<as:object-type>' . xmlify($r->type) . '</as:object-type>' . "\r\n";
                if($r->id)
@@ -214,8 +227,12 @@ function construct_activity_target($item) {
                if($r->title)
                        $o .= '<title>' . xmlify($r->title) . '</title>' . "\r\n";
                if($r->link) {
-                       if(substr($r->link,0,1) === '<') 
+                       if(substr($r->link,0,1) === '<') {
+                               if(strstr($r->link,'&') && (! strstr($r->link,'&amp;')))
+                                       $r->link = str_replace('&','&amp;', $r->link);
+                               $r->link = preg_replace('/\<link(.*?)\"\>/','<link$1"/>',$r->link);
                                $o .= $r->link;
+                       }                                       
                        else
                                $o .= '<link rel="alternate" type="text/html" href="' . xmlify($r->link) . '" />' . "\r\n";
                }
index 052c0ef6038052f48e49d34160f826c555f1611e..bdc4b8d8712e2a6e88d4269322aebf311bc7ba0b 100644 (file)
@@ -159,8 +159,8 @@ function events_post(&$a) {
                $arr['body']          = format_event_bbcode($event);
 
 
-               $arr['object'] = '<object><type>' . ACTIVITY_OBJ_EVENT . '</type><title></title><id>' . $uri . '</id>';
-               $arr['object'] .= '<content>' . format_event_bbcode($event) . '</content>';
+               $arr['object'] = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($uri) . '</id>';
+               $arr['object'] .= '<content>' . xmlify(format_event_bbcode($event)) . '</content>';
                $arr['object'] .= '</object>' . "\n";
 
                $item_id = item_store($arr);