]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
Merge branch 'opensearch' of https://github.com/fabrixxm/friendika into fabrixxm...
[friendica.git] / include / items.php
index a9ac859694277b0b2819804b72704ddb3b050a10..5969466813a0d1b406a8319c3802abfc4ef6a007 100644 (file)
@@ -456,7 +456,45 @@ function get_atom_elements($feed,$item) {
        if((x($res,'verb')) && ($res['verb'] === 'http://ostatus.org/schema/1.0/unfollow'))
                $res['verb'] = ACTIVITY_UNFOLLOW;
 
-               
+
+       $cats = $item->get_categories();
+       if($cats) {
+               $tag_arr = array();
+               foreach($cats as $cat) {
+                       $term = $cat->get_term();
+                       if(! $term)
+                               $term = $cat->get_label();
+                       $scheme = $cat->get_scheme();
+                       if($scheme && $term && stristr($scheme,'X-DFRN:'))
+                               $tag_arr[] = substr($scheme,7,1) . '[url=' . unxmlify(substr($scheme,9)) . ']' . unxmlify($term) . '[/url]';
+                       elseif($term)
+                               $tag_arr[] = notags(trim($term));
+               }
+               $res['tag'] =  implode(',', $tag_arr);
+       }
+
+       $attach = $item->get_enclosures();
+       if($attach) {
+               $att_arr = array();
+               foreach($attach as $att) {
+                       $len = intval($att->get_length());
+                       $link = str_replace(',','%2D', notags(trim($att->get_link())));
+                       $title = str_replace(',','%2D',notags(trim($att->get_title())));
+                       $type = notags(trim($att->get_type()));
+                       if((! $link) || (strpos($link,'http') !== 0))
+                               continue;
+
+                       if(! $title)
+                               $title = ' ';
+                       if(! $type)
+                               $type = 'application/octet-stream';
+
+                       // this isn't legal html - there is no size in an 'a' tag, remember to strip it before display
+
+                       $att_arr[] = '<a href="' . $link . '" size="' . $len . '" type="' . $type . '">' . $title . '</a>'; 
+               }
+               $res['attach'] = implode(',', $att_arr);
+       }
 
        $rawobj = $item->get_item_tags(NAMESPACE_ACTIVITY, 'object');
 
@@ -614,6 +652,8 @@ function item_store($arr,$force_parent = false) {
        $arr['deny_gid']      = ((x($arr,'deny_gid'))      ? trim($arr['deny_gid'])              : '');
        $arr['private']       = ((x($arr,'private'))       ? intval($arr['private'])             : 0 );
        $arr['body']          = ((x($arr,'body'))          ? trim($arr['body'])                  : '');
+       $arr['tag']           = ((x($arr,'tag'))           ? notags(trim($arr['tag']))           : '');
+       $arr['attach']        = ((x($arr,'attach'))        ? notags(trim($arr['attach']))        : '');
 
        if($arr['parent-uri'] === $arr['uri']) {
                $parent_id = 0;
@@ -1503,6 +1543,15 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
        if(strlen($actarg))
                $o .= $actarg;
 
+       $tags = item_getfeedtags($item);
+       if(count($tags)) {
+               foreach($tags as $t) {
+                       $o .= '<category scheme="X-DFRN:' . xmlify($t[0]) . ':' . xmlify($t[1]) . '" term="' . xmlify($t[2]) . '" />' . "\r\n";
+               }
+       }
+
+       $o .= item_getfeedattach($item);
+
        $mentioned = get_mentions($item);
        if($mentioned)
                $o .= $mentioned;
@@ -1513,6 +1562,49 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
        
        return $o;
 }
+
+function item_getfeedtags($item) {
+       $ret = array();
+       $matches = false;
+       $cnt = preg_match_all('|\#\[url\=(.+?)\](.+?)\[\/url\]|',$item['tag'],$matches);
+       if($cnt) {
+               for($x = 0; $x < count($matches); $x ++) {
+                       if($matches[1][$x])
+                               $ret[] = array('#',$matches[1][$x], $matches[2][$x]);
+               }
+       }
+       $matches = false; 
+       $cnt = preg_match_all('|\@\[url\=(.+?)\](.+?)\[\/url\]|',$item['tag'],$matches);
+       if($cnt) {
+               for($x = 0; $x < count($matches); $x ++) {
+                       if($matches[1][$x])
+                               $ret[] = array('#',$matches[1][$x], $matches[2][$x]);
+               }
+       } 
+       return $ret;
+}
+
+function item_getfeedattach($item) {
+       $ret = '';
+       $arr = explode(',',$item['attach']);
+       if(count($arr)) {
+               foreach($arr as $r) {
+                       $matches = false;
+                       $cnt = preg_match('|\<a href=\"(.+?)\" size=\"(.+?)\" type=\"(.+?)\" >(.+?)</a>|',$r,$matches);
+                       if($cnt) {
+                               $ret .= '<link rel="enclosure" href="' . xmlify($matches[1]) . '" type="' . xmlify($matches[3]) . '" ';
+                               if(intval($matches[2]))
+                                       $ret .= 'size="' . intval($matches[2]) . '" ';
+                               if($matches[4] !== ' ')
+                                       $ret .= 'title="' . xmlify($matches[4]) . '" ';
+                               $ret .= ' />' . "\r\n";
+                       }
+               }
+       }
+       return $ret;
+}
+
+
        
 function item_expire($uid,$days) {