]> git.mxchange.org Git - friendica.git/blobdiff - include/items.php
CS, ZH-CN: update to the strings
[friendica.git] / include / items.php
index c1352cebbea41260dfbac3897be4f453e3e2f12f..e8fc739cd0852839c5011cb4ec7a34de2ea25824 100644 (file)
@@ -882,6 +882,7 @@ function get_atom_elements($feed, $item, $contact = array()) {
                                        $preview = $attachment->link;
 
                $res["body"] = $res["title"].add_page_info($res['plink'], false, $preview, ($contact['fetch_further_information'] == 2), $contact['ffi_keyword_blacklist']);
+               $res["tag"] = add_page_keywords($res['plink'], false, $preview, ($contact['fetch_further_information'] == 2), $contact['ffi_keyword_blacklist']);
                $res["title"] = "";
                $res["object-type"] = ACTIVITY_OBJ_BOOKMARK;
                unset($res["attach"]);
@@ -946,7 +947,7 @@ function add_page_info_data($data) {
        return("\n[class=type-".$data["type"]."]".$text."[/class]".$hashtags);
 }
 
-function add_page_info($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
+function query_page_info($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
        require_once("mod/parse_url.php");
 
        $data = Cache::get("parse_url:".$url);
@@ -959,7 +960,7 @@ function add_page_info($url, $no_photos = false, $photo = "", $keywords = false,
        if ($photo != "")
                $data["images"][0]["src"] = $photo;
 
-       logger('add_page_info: fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG);
+       logger('fetch page info for '.$url.' '.print_r($data, true), LOGGER_DEBUG);
 
        if (!$keywords AND isset($data["keywords"]))
                unset($data["keywords"]);
@@ -974,6 +975,32 @@ function add_page_info($url, $no_photos = false, $photo = "", $keywords = false,
                }
        }
 
+       return($data);
+}
+
+function add_page_keywords($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
+       $data = query_page_info($url, $no_photos, $photo, $keywords, $keyword_blacklist);
+
+       $tags = "";
+       if (isset($data["keywords"]) AND count($data["keywords"])) {
+               $a = get_app();
+               foreach ($data["keywords"] AS $keyword) {
+                       $hashtag = str_replace(array(" ", "+", "/", ".", "#", "'"),
+                                               array("","", "", "", "", ""), $keyword);
+
+                       if ($tags != "")
+                               $tags .= ",";
+
+                       $tags .= "#[url=".$a->get_baseurl()."/search?tag=".rawurlencode($hashtag)."]".$hashtag."[/url]";
+               }
+       }
+
+       return($tags);
+}
+
+function add_page_info($url, $no_photos = false, $photo = "", $keywords = false, $keyword_blacklist = "") {
+       $data = query_page_info($url, $no_photos, $photo, $keywords, $keyword_blacklist);
+
        $text = add_page_info_data($data);
 
        return($text);
@@ -1323,6 +1350,9 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                return 0;
        }
 
+       // Store the unescaped version
+       $unescaped = $arr;
+
        dbesc_array($arr);
 
        logger('item_store: ' . print_r($arr,true), LOGGER_DATA);
@@ -1333,10 +1363,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                        . implode("', '", array_values($arr))
                        . "')" );
 
-       // find the item we just created
+       // And restore it
+       $arr = $unescaped;
 
+       // find the item we just created
        $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ",
-               $arr['uri'],           // already dbesc'd
+               dbesc($arr['uri']),
                intval($arr['uid'])
        );
 
@@ -1347,8 +1379,12 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
                // Add every contact to the global contact table
                // Contacts from the statusnet connector are also added since you could add them in OStatus as well.
                if (!$arr['private'] AND in_array($arr["network"],
-                       array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, "")))
-                       poco_check($arr["author-link"], $arr["author-name"], $arr["author-avatar"], "", $arr["received"], $arr['contact-id'], $arr['uid']);
+                       array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, NETWORK_STATUSNET, ""))) {
+                       poco_check($arr["author-link"], $arr["author-name"], $arr["network"], $arr["author-avatar"], "", "", "", "", "", $arr["received"], $arr["contact-id"], $arr["uid"]);
+
+                       // Maybe its a body with a shared item? Then extract a global contact from it.
+                       poco_contact_from_body($arr["body"], $arr["received"], $arr["contact-id"], $arr["uid"]);
+               }
 
                // Set "success_update" to the date of the last time we heard from this contact
                // This can be used to filter for inactive contacts and poco.
@@ -1410,7 +1446,7 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa
        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'],
+                       dbesc($arr['uri']),
                        intval($arr['uid']),
                        intval($current_post)
                );
@@ -2057,9 +2093,16 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
                if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) {
                        $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated'];
                        $new_name = $elems['name'][0]['data'];
+
+                       // Manually checking for changed contact names
+                       if (($new_name != $contact['name']) AND ($new_name != "") AND ($name_updated <= $contact['name-date'])) {
+                               $name_updated = date("c");
+                               $photo_timestamp = date("c");
+                       }
                }
                if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) {
-                       $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
+                       if ($photo_timestamp == "")
+                               $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
                        $photo_url = $elems['link'][0]['attribs']['']['href'];
                }
 
@@ -2679,6 +2722,10 @@ function item_is_remote_self($contact, &$datarray) {
        if ($datarray["app"] == $a->get_hostname())
                return false;
 
+       // Only forward posts
+       if ($datarray["verb"] != ACTIVITY_POST)
+               return false;
+
        if (($contact['network'] != NETWORK_FEED) AND $datarray['private'])
                return false;
 
@@ -2772,9 +2819,16 @@ function local_delivery($importer,$data) {
                if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) {
                        $name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated'];
                        $new_name = $elems['name'][0]['data'];
+
+                       // Manually checking for changed contact names
+                       if (($new_name != $importer['name']) AND ($new_name != "") AND ($name_updated <= $importer['name-date'])) {
+                               $name_updated = date("c");
+                               $photo_timestamp = date("c");
+                       }
                }
                if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) {
-                       $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
+                       if ($photo_timestamp == "")
+                               $photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
                        $photo_url = $elems['link'][0]['attribs']['']['href'];
                }
        }
@@ -2901,6 +2955,7 @@ function local_delivery($importer,$data) {
                                        thumb = '%s',
                                        micro = '%s',
                                        url = '%s',
+                                       nurl = '%s',
                                        request = '%s',
                                        confirm = '%s',
                                        notify = '%s',
@@ -2912,6 +2967,7 @@ function local_delivery($importer,$data) {
                                        dbesc($newloc['thumb']),
                                        dbesc($newloc['micro']),
                                        dbesc($newloc['url']),
+                                       dbesc(normalise_link($newloc['url'])),
                                        dbesc($newloc['request']),
                                        dbesc($newloc['confirm']),
                                        dbesc($newloc['notify']),
@@ -4071,6 +4127,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
        else
                $body = $item['body'];
 
+
        $o = "\r\n\r\n<entry>\r\n";
 
        if(is_array($author))
@@ -4085,13 +4142,22 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) {
                $o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' .  xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n";
        }
 
+       $htmlbody = $body;
+
+       if ($item['title'] != "")
+               $htmlbody = "[b]".$item['title']."[/b]\n\n".$htmlbody;
+
+       $htmlbody = bbcode(bb_remove_share_information($htmlbody), false, false, 7);
+
        $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 .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n";
-       $o .= '<content type="' . $type . '" >' . xmlify((($type === 'html') ? bbcode($body) : $body)) . '</content>' . "\r\n";
+       $o .= '<content type="' . $type . '" >' . xmlify((($type === 'html') ? $htmlbody : $body)) . '</content>' . "\r\n";
        $o .= '<link rel="alternate" type="text/html" 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";
 
@@ -4509,7 +4575,7 @@ function drop_item($id,$interactive = true) {
                );
                create_tags_from_item($item['id']);
                create_files_from_item($item['id']);
-               delete_thread($item['id']);
+               delete_thread($item['id'], $item['parent-uri']);
 
                // clean up categories and tags so they don't end up as orphans