]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Initial work adding oauth to api
[friendica.git] / include / items.php
index b32861c42821d9f5d6677635f2785011e293e456..8dc997b16c77f2c5ec8ff58440d8b52b0a1b5a24 100644 (file)
@@ -414,11 +414,7 @@ function get_atom_elements($feed,$item) {
 
        if((strpos($res['body'],'<') !== false) || (strpos($res['body'],'>') !== false)) {
 
-               $res['body'] = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
-                       '[youtube]$1[/youtube]', $res['body']);
-
-               $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
-                       '[youtube]$1[/youtube]', $res['body']);
+               $res['body'] = html2bb_video($res['body']);
 
                $res['body'] = oembed_html2bbcode($res['body']);
 
@@ -586,12 +582,7 @@ function get_atom_elements($feed,$item) {
                        $res['object'] .= '<orig>' . xmlify($body) . '</orig>' . "\n";
                        if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
 
-                               $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
-                                       '[youtube]$1[/youtube]', $body);
-
-               $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
-                       '[youtube]$1[/youtube]', $res['body']);
-
+                               $body = html2bb_video($body);
 
                                $config = HTMLPurifier_Config::createDefault();
                                $config->set('Cache.DefinitionImpl', null);
@@ -629,11 +620,7 @@ function get_atom_elements($feed,$item) {
                        $res['object'] .= '<orig>' . xmlify($body) . '</orig>' . "\n";
                        if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) {
 
-                               $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
-                                       '[youtube]$1[/youtube]', $body);
-
-               $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s',
-                       '[youtube]$1[/youtube]', $res['body']);
+                               $body = html2bb_video($body);
 
                                $config = HTMLPurifier_Config::createDefault();
                                $config->set('Cache.DefinitionImpl', null);
@@ -690,7 +677,7 @@ function item_store($arr,$force_parent = false) {
 
        if($arr['gravity'])
                $arr['gravity'] = intval($arr['gravity']);
-       elseif($arr['parent-uri'] == $arr['uri'])
+       elseif($arr['parent-uri'] === $arr['uri'])
                $arr['gravity'] = 0;
        elseif(activity_match($arr['verb'],ACTIVITY_POST))
                $arr['gravity'] = 6;
@@ -743,6 +730,7 @@ function item_store($arr,$force_parent = false) {
        $arr['tag']           = ((x($arr,'tag'))           ? notags(trim($arr['tag']))           : '');
        $arr['attach']        = ((x($arr,'attach'))        ? notags(trim($arr['attach']))        : '');
        $arr['app']           = ((x($arr,'app'))           ? notags(trim($arr['app']))           : '');
+       $arr['origin']        = ((x($arr,'origin'))        ? intval($arr['origin'])              : 0 );
        $arr['guid']          = ((x($arr,'guid'))          ? notags(trim($arr['guid']))          : get_guid());
 
        if($arr['parent-uri'] === $arr['uri']) {
@@ -757,7 +745,7 @@ function item_store($arr,$force_parent = false) {
                // find the parent and snarf the item id and ACL's
                // and anything else we need to inherit
 
-               $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+               $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1",
                        dbesc($arr['parent-uri']),
                        intval($arr['uid'])
                );
@@ -771,7 +759,8 @@ function item_store($arr,$force_parent = false) {
                        if($r[0]['uri'] != $r[0]['parent-uri']) {
                                $arr['thr-parent'] = $arr['parent-uri'];
                                $arr['parent-uri'] = $r[0]['parent-uri'];
-                               $z = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d LIMIT 1",
+                               $z = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d 
+                                       ORDER BY `id` ASC LIMIT 1",
                                        dbesc($r[0]['parent-uri']),
                                        dbesc($r[0]['parent-uri']),
                                        intval($arr['uid'])
@@ -809,7 +798,7 @@ function item_store($arr,$force_parent = false) {
 
        $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
                dbesc($arr['uri']),
-               dbesc($arr['uid'])
+               intval($arr['uid'])
        );
        if($r && count($r)) {
                logger('item-store: duplicate item ignored. ' . print_r($arr,true));
@@ -830,18 +819,10 @@ function item_store($arr,$force_parent = false) {
 
        // find the item we just created
 
-       $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+       $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ",
                $arr['uri'],           // already dbesc'd
                intval($arr['uid'])
        );
-       if(! count($r)) {
-               // This is not good, but perhaps we encountered a rare race/cache condition, so back off and try again. 
-               sleep(3);
-               $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
-                       $arr['uri'],           // already dbesc'd
-                       intval($arr['uid'])
-               );
-       }
 
        if(count($r)) {
                $current_post = $r[0]['id'];
@@ -851,6 +832,14 @@ function item_store($arr,$force_parent = false) {
                logger('item_store: could not locate created item');
                return 0;
        }
+       if(count($r) > 1) {
+               logger('item_store: duplicated post occurred. Removing duplicates.');
+               q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ",
+                       $arr['uri'],
+                       intval($arr['uid']),
+                       intval($current_post)
+               );
+       }
 
        if((! $parent_id) || ($arr['parent-uri'] === $arr['uri']))      
                $parent_id = $current_post;
@@ -1352,7 +1341,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                                $parent_uri = $rawthread[0]['attribs']['']['ref'];
                        }
 
-                       if(($is_reply) && is_array($contact) && $pass != 1) {
+                       if(($is_reply) && is_array($contact)) {
+
+                               if($pass == 1)
+                                       continue;
 
                                // Have we seen it? If not, import it.
        
@@ -1555,14 +1547,14 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
        }
 }
 
-function local_delivery($importer,$xml) {
+function local_delivery($importer,$data) {
 
        $a = get_app();
 
        if($importer['readonly']) {
                // We aren't receiving stuff from this person. But we will quietly ignore them
                // rather than a blatant "go away" message.
-               logger('dfrn_notify: ignoring');
+               logger('local_delivery: ignoring');
                return 0;
                //NOTREACHED
        }
@@ -1680,7 +1672,7 @@ function local_delivery($importer,$xml) {
        $rawmail = $feed->get_feed_tags( NAMESPACE_DFRN, 'mail' );
        if(isset($rawmail[0]['child'][NAMESPACE_DFRN])) {
 
-               logger('dfrn_notify: private message received');
+               logger('local_delivery: private message received');
 
                $ismail = true;
                $base = $rawmail[0]['child'][NAMESPACE_DFRN];
@@ -1785,7 +1777,7 @@ function local_delivery($importer,$xml) {
                // NOTREACHED
        }       
        
-       logger('dfrn_notify: feed item count = ' . $feed->get_item_quantity());
+       logger('local_delivery: feed item count = ' . $feed->get_item_quantity());
 
        // process any deleted entries
 
@@ -1815,7 +1807,7 @@ function local_delivery($importer,$xml) {
                                        $item = $r[0];
 
                                        if(! $item['deleted'])
-                                               logger('dfrn_notify: deleting item ' . $item['id'] . ' uri=' . $item['uri'], LOGGER_DEBUG);
+                                               logger('local_delivery: deleting item ' . $item['id'] . ' uri=' . $item['uri'], LOGGER_DEBUG);
 
                                        if($item['uri'] == $item['parent-uri']) {
                                                $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s'
@@ -1877,20 +1869,21 @@ function local_delivery($importer,$xml) {
 
                        $r = q("select `item`.`id`, `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` 
                                LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` 
-                               WHERE `contact`.`self` = 1 AND `item`.`wall` = 1 AND `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1",
+                               WHERE `contact`.`self` = 1 AND `item`.`wall` = 1 AND `item`.`uri` = '%s' AND `item`.`parent-uri` = '%s'
+                               AND `item`.`uid` = %d LIMIT 1",
+                               dbesc($parent_uri),
                                dbesc($parent_uri),
                                intval($importer['importer_uid'])
                        );
                        if($r && count($r)) {   
 
-
-                               logger('dfrn_notify: received remote comment');
+                               logger('local_delivery: received remote comment');
                                $is_like = false;
                                // remote reply to our post. Import and then notify everybody else.
                                $datarray = get_atom_elements($feed,$item);
 
                                if(! link_compare($datarray['author-link'],$importer['url'])) {
-                                       logger('dfrn_notify: received relay claiming to be from ' . $importer['url'] . ' however comment author url is ' . $datarray['author-link'] ); 
+                                       logger('local_delivery: received relay claiming to be from ' . $importer['url'] . ' however comment author url is ' . $datarray['author-link'] ); 
                                        // they won't know what to do so don't report an error. Just quietly die.
                                        return 0;
                                }                                       
@@ -2392,6 +2385,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
 
        $a = get_app();
 
+       if(! $item['parent'])
+               return;
+
        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";
 
@@ -2411,8 +2407,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
        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']) . '" type="text/html" href="' .  xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
+       if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']))
+               $o .= '<thr:in-reply-to ref="' . xmlify($item['parent-uri']) . '" type="text/html" href="' .  xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n";
 
        $o .= '<id>' . xmlify($item['uri']) . '</id>' . "\r\n";
        $o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";