From a94673ccb477aab7d49aa5bb22ef74897a16ec5a Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 1 Jan 2015 18:31:50 +0100 Subject: [PATCH] API: Support for attachments --- include/api.php | 116 ++++++++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 54 deletions(-) diff --git a/include/api.php b/include/api.php index b879f8e427..fd306e6c29 100644 --- a/include/api.php +++ b/include/api.php @@ -872,8 +872,10 @@ $in_reply_to_screen_name = NULL; } + $converted = api_convert_item($item); + $status_info = array( - 'text' => trim(html2plain(bbcode(api_clean_plain_items($lastwall['body']), false, false, 2, true), 0)), + 'text' => $converted["text"], 'truncated' => false, 'created_at' => api_date($lastwall['created']), 'in_reply_to_status_id' => $in_reply_to_status_id, @@ -886,21 +888,16 @@ 'in_reply_to_screen_name' => $in_reply_to_screen_name, 'geo' => NULL, 'favorited' => $lastwall['starred'] ? true : false, - 'attachments' => api_get_attachments($lastwall['body']), 'user' => $user_info, - 'statusnet_html' => trim(bbcode($lastwall['body'], false, false)), + 'statusnet_html' => $converted["html"], 'statusnet_conversation_id' => $lastwall['parent'], ); - if (!$status_info["attachments"]) - unset($status_info["attachments"]); + if (count($converted["attachments"]) > 0) + $status_info["attachments"] = $converted["attachments"]; - if ($lastwall['title'] != "") - $status_info['statusnet_html'] = "

".bbcode($lastwall['title'])."

\n".$status_info['statusnet_html']; - - $entities = api_get_entitities($status_info['text'], $lastwall['body']); - if (count($entities) > 0) - $status_info['entities'] = $entities; + if (count($converted["entities"]) > 0) + $status_info["entities"] = $converted["entities"]; if (($lastwall['item_network'] != "") AND ($status["source"] == 'web')) $status_info["source"] = network_to_name($lastwall['item_network']); @@ -974,8 +971,11 @@ } } } + + $converted = api_convert_item($item); + $user_info['status'] = array( - 'text' => trim(html2plain(bbcode(api_clean_plain_items($lastwall['body']), false, false, 2, true), 0)), + 'text' => $converted["text"], 'truncated' => false, 'created_at' => api_date($lastwall['created']), 'in_reply_to_status_id' => $in_reply_to_status_id, @@ -988,20 +988,15 @@ 'in_reply_to_screen_name' => $in_reply_to_screen_name, 'geo' => NULL, 'favorited' => $lastwall['starred'] ? true : false, - 'attachments' => api_get_attachments($lastwall['body']), - 'statusnet_html' => trim(bbcode($lastwall['body'], false, false)), + 'statusnet_html' => $converted["html"], 'statusnet_conversation_id' => $lastwall['parent'], ); - if (!$user_info["attachments"]) - unset($user_info["attachments"]); + if (count($converted["attachments"]) > 0) + $user_info["status"]["attachments"] = $converted["attachments"]; - if ($lastwall['title'] != "") - $user_info['statusnet_html'] = "

".bbcode($lastwall['title'])."

\n".$user_info['statusnet_html']; - - $entities = api_get_entitities($user_info['text'], $lastwall['body']); - if (count($entities) > 0) - $user_info['entities'] = $entities; + if (count($converted["entities"]) > 0) + $user_info["status"]["entities"] = $converted["entities"]; if (($lastwall['item_network'] != "") AND ($user_info["status"]["source"] == 'web')) $user_info["status"]["source"] = network_to_name($lastwall['item_network']); @@ -1810,8 +1805,41 @@ return $ret; } - function api_get_attachments($text) { + function api_convert_item($item) { + $body = $item['body']; + $attachments = api_get_attachments($body); + + // Workaround for ostatus messages where the title is identically to the body + $html = bbcode(api_clean_plain_items($body), false, false, 2, true); + $statusbody = trim(html2plain($html, 0)); + + // handle data: images + $statusbody = api_format_items_embeded_images($item,$statusbody); + + $statustitle = trim($item['title']); + + if (($statustitle != '') and (strpos($statusbody, $statustitle) !== false)) + $statustext = trim($statusbody); + else + $statustext = trim($statustitle."\n\n".$statusbody); + + if (($item["network"] == NETWORK_FEED) and (strlen($statustext)> 1000)) + $statustext = substr($statustext, 0, 1000)."... \n".$item["plink"]; + + $statushtml = trim(bbcode($body, false, false)); + + if ($item['title'] != "") + $statushtml = "

".bbcode($item['title'])."

\n".$statushtml; + + $entities = api_get_entitities($statustext, $body); + + return(array("text" => $statustext, "html" => $statushtml, "attachments" => $attachments, "entities" => $entities)); + } + + function api_get_attachments(&$body) { + + $text = $body; $text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $text); $URLSearchString = "^\[\]"; @@ -1831,6 +1859,10 @@ $attachments[] = array("url" => $image, "mimetype" => $imagedata["mime"], "size" => $imagedata["size"]); } + if (strstr($_SERVER['HTTP_USER_AGENT'], "AndStatus")) + foreach ($images[0] AS $orig) + $body = str_replace($orig, "", $body); + return $attachments; } @@ -2055,29 +2087,10 @@ $in_reply_to_status_id_str = NULL; } - // Workaround for ostatus messages where the title is identically to the body - //$statusbody = trim(html2plain(bbcode(api_clean_plain_items($item['body']), false, false, 5, true), 0)); - $html = bbcode(api_clean_plain_items($item['body']), false, false, 2, true); - $statusbody = trim(html2plain($html, 0)); - - // handle data: images - $statusbody = api_format_items_embeded_images($item,$statusbody); - - $statustitle = trim($item['title']); - - if (($statustitle != '') and (strpos($statusbody, $statustitle) !== false)) - $statustext = trim($statusbody); - else - $statustext = trim($statustitle."\n\n".$statusbody); - - if (($item["network"] == NETWORK_FEED) and (strlen($statustext)> 1000)) - $statustext = substr($statustext, 0, 1000)."... \n".$item["plink"]; - - $statushtml = trim(bbcode($item['body'], false, false)); - + $converted = api_convert_item($item); $status = array( - 'text' => $statustext, + 'text' => $converted["text"], 'truncated' => False, 'created_at'=> api_date($item['created']), 'in_reply_to_status_id' => $in_reply_to_status_id, @@ -2090,22 +2103,17 @@ 'in_reply_to_screen_name' => $in_reply_to_screen_name, 'geo' => NULL, 'favorited' => $item['starred'] ? true : false, - 'attachments' => api_get_attachments($item["body"]), 'user' => $status_user , //'entities' => NULL, - 'statusnet_html' => $statushtml, + 'statusnet_html' => $converted["html"], 'statusnet_conversation_id' => $item['parent'], ); - if (!$status["attachments"]) - unset($status["attachments"]); + if (count($converted["attachments"]) > 0) + $status["attachments"] = $converted["attachments"]; - if ($item['title'] != "") - $status['statusnet_html'] = "

".bbcode($item['title'])."

\n".$status['statusnet_html']; - - $entities = api_get_entitities($status['text'], $item['body']); - if (count($entities) > 0) - $status['entities'] = $entities; + if (count($converted["entities"]) > 0) + $status["entities"] = $converted["entities"]; if (($item['item_network'] != "") AND ($status["source"] == 'web')) $status["source"] = network_to_name($item['item_network']);