From 5bd519efffa6d2c484b6c4dce8c58dcdab2cd168 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Wed, 14 Mar 2018 22:28:35 +0000
Subject: [PATCH] There is now a "content-warning" field

---
 boot.php                     |  2 +-
 database.sql                 |  5 +++--
 include/conversation.php     |  2 +-
 include/text.php             |  5 +++++
 src/Database/DBStructure.php |  1 +
 src/Protocol/OStatus.php     | 40 +++++++++++++++---------------------
 6 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/boot.php b/boot.php
index b8b9b0ec28..caf645c048 100644
--- a/boot.php
+++ b/boot.php
@@ -39,7 +39,7 @@ define('FRIENDICA_PLATFORM',     'Friendica');
 define('FRIENDICA_CODENAME',     'Asparagus');
 define('FRIENDICA_VERSION',      '3.6-rc');
 define('DFRN_PROTOCOL_VERSION',  '2.23');
-define('DB_UPDATE_VERSION',      1255);
+define('DB_UPDATE_VERSION',      1256);
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
 /**
diff --git a/database.sql b/database.sql
index 4275c38315..181e9e804a 100644
--- a/database.sql
+++ b/database.sql
@@ -1,6 +1,6 @@
 -- ------------------------------------------
--- Friendica 3.6-dev (Asparagus)
--- DB_UPDATE_VERSION 1255
+-- Friendica 3.6-rc (Asparagus)
+-- DB_UPDATE_VERSION 1256
 -- ------------------------------------------
 
 
@@ -466,6 +466,7 @@ CREATE TABLE IF NOT EXISTS `item` (
 	`author-link` varchar(255) NOT NULL DEFAULT '' COMMENT '',
 	`author-avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '',
 	`title` varchar(255) NOT NULL DEFAULT '' COMMENT '',
+	`content-warning` varchar(255) NOT NULL DEFAULT '' COMMENT '',
 	`body` mediumtext COMMENT '',
 	`app` varchar(255) NOT NULL DEFAULT '' COMMENT '',
 	`verb` varchar(100) NOT NULL DEFAULT '' COMMENT '',
diff --git a/include/conversation.php b/include/conversation.php
index dc99a83196..0fc43fb090 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -445,7 +445,7 @@ These Fields are not added below (yet). They are here to for bug search.
 	return "`item`.`author-id`, `item`.`author-link`, `item`.`author-name`, `item`.`author-avatar`,
 		`item`.`owner-id`, `item`.`owner-link`, `item`.`owner-name`, `item`.`owner-avatar`,
 		`item`.`contact-id`, `item`.`uid`, `item`.`id`, `item`.`parent`,
-		`item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`,
+		`item`.`uri`, `item`.`thr-parent`, `item`.`parent-uri`, `item`.`content-warning`,
 		`item`.`commented`, `item`.`created`, `item`.`edited`, `item`.`received`,
 		`item`.`verb`, `item`.`object-type`, `item`.`postopts`, `item`.`plink`,
 		`item`.`guid`, `item`.`wall`, `item`.`private`, `item`.`starred`,
diff --git a/include/text.php b/include/text.php
index 1474b8bf09..0aeaa7203b 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1182,6 +1182,11 @@ function put_item_in_cache(&$item, $update = false)
 		// I'm not sure if we should store it permanently, so we save the old value.
 		$body = $item["body"];
 
+		// Add the content warning
+		if (!empty($item['content-warning'])) {
+			$item["body"] = $item['content-warning'] . '[spoiler]' . $item["body"] . '[/spoiler]';
+		}
+
 		$a = get_app();
 		redir_private_images($a, $item);
 
diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php
index f4a88871d7..a1ef3374f9 100644
--- a/src/Database/DBStructure.php
+++ b/src/Database/DBStructure.php
@@ -1143,6 +1143,7 @@ class DBStructure
 						"author-link" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
 						"author-avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
 						"title" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+						"content-warning" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
 						"body" => ["type" => "mediumtext", "comment" => ""],
 						"app" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
 						"verb" => ["type" => "varchar(100)", "not null" => "1", "default" => "", "comment" => ""],
diff --git a/src/Protocol/OStatus.php b/src/Protocol/OStatus.php
index 452da7d2d8..eb8474ba2b 100644
--- a/src/Protocol/OStatus.php
+++ b/src/Protocol/OStatus.php
@@ -604,6 +604,21 @@ class OStatus
 			$item["coord"] = $georsspoint->item(0)->nodeValue;
 		}
 
+		$categories = $xpath->query('atom:category', $entry);
+		if ($categories) {
+			foreach ($categories as $category) {
+				foreach ($category->attributes as $attributes) {
+					if ($attributes->name == "term") {
+						$term = $attributes->textContent;
+						if (strlen($item["tag"])) {
+							$item["tag"] .= ',';
+						}
+						$item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
+					}
+				}
+			}
+		}
+
 		$self = '';
 		$add_body = '';
 
@@ -643,12 +658,11 @@ class OStatus
 		}
 
 		// Mastodon Content Warning
-		$content_warning = false;
 		if (($item["verb"] == ACTIVITY_POST) && $xpath->evaluate('boolean(atom:summary)', $entry)) {
 			$clear_text = $xpath->query('atom:summary/text()', $entry)->item(0)->nodeValue;
 			if (!empty($clear_text)) {
-				$item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]';
-				$content_warning = true;
+				$item['content-warning'] = html2bbcode($clear_text);
+				//$item["body"] = html2bbcode($clear_text) . '[spoiler]' . $item["body"] . '[/spoiler]';
 			}
 		}
 
@@ -673,26 +687,6 @@ class OStatus
 			$item["parent-uri"] = $item["uri"];
 		}
 
-		$categories = $xpath->query('atom:category', $entry);
-		if ($categories) {
-			foreach ($categories as $category) {
-				foreach ($category->attributes as $attributes) {
-					if ($attributes->name == "term") {
-						$term = $attributes->textContent;
-						// don't add nsfw with content warning if enabled.
-						// Background: "nsfw" is set automatically by Mastodon
-						if (!Config::get('system', 'remove_nsfw_with_cw', false) ||
-							!$content_warning || ($term != 'nsfw')) {
-							if (strlen($item["tag"])) {
-								$item["tag"] .= ',';
-							}
-							$item["tag"] .= "#[url=".System::baseUrl()."/search?tag=".$term."]".$term."[/url]";
-						}
-					}
-				}
-			}
-		}
-
 		if (($item['author-link'] != '') && !empty($item['protocol'])) {
 			$item = Conversation::insert($item);
 		}