From 5554448162a9b97de6ddcbfe9718b81f36b693b7 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Mon, 14 Jan 2019 06:36:08 +0000
Subject: [PATCH] Now storing the "manually approve" data / fix update routine

---
 config/dbstructure.config.php |  3 ++-
 database.sql                  | 13 +++++++++----
 src/Database/DBA.php          |  2 +-
 src/Model/APContact.php       |  6 +++---
 4 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/config/dbstructure.config.php b/config/dbstructure.config.php
index 61f0780dc4..e90a35f38a 100644
--- a/config/dbstructure.config.php
+++ b/config/dbstructure.config.php
@@ -34,7 +34,7 @@
 use Friendica\Database\DBA;
 
 if (!defined('DB_UPDATE_VERSION')) {
-	define('DB_UPDATE_VERSION', 1292);
+	define('DB_UPDATE_VERSION', 1293);
 }
 
 return [
@@ -65,6 +65,7 @@ return [
 			"inbox" => ["type" => "varchar(255)", "not null" => "1", "comment" => ""],
 			"outbox" => ["type" => "varchar(255)", "comment" => ""],
 			"sharedinbox" => ["type" => "varchar(255)", "comment" => ""],
+			"manually-approve" => ["type" => "boolean", "comment" => ""],
 			"nick" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
 			"name" => ["type" => "varchar(255)", "comment" => ""],
 			"about" => ["type" => "text", "comment" => ""],
diff --git a/database.sql b/database.sql
index 9bbc056d62..5a3f84d179 100644
--- a/database.sql
+++ b/database.sql
@@ -1,6 +1,6 @@
 -- ------------------------------------------
--- Friendica 2018.12-dev (The Tazmans Flax-lily)
--- DB_UPDATE_VERSION 1290
+-- Friendica 2019.01-rc (The Tazmans Flax-lily)
+-- DB_UPDATE_VERSION 1293
 -- ------------------------------------------
 
 
@@ -31,6 +31,7 @@ CREATE TABLE IF NOT EXISTS `apcontact` (
 	`inbox` varchar(255) NOT NULL COMMENT '',
 	`outbox` varchar(255) COMMENT '',
 	`sharedinbox` varchar(255) COMMENT '',
+	`manually-approve` boolean COMMENT '',
 	`nick` varchar(255) NOT NULL DEFAULT '' COMMENT '',
 	`name` varchar(255) COMMENT '',
 	`about` text COMMENT '',
@@ -578,6 +579,7 @@ CREATE TABLE IF NOT EXISTS `item` (
 	 INDEX `uid_contactid_created` (`uid`,`contact-id`,`created`),
 	 INDEX `authorid_created` (`author-id`,`created`),
 	 INDEX `ownerid` (`owner-id`),
+	 INDEX `contact-id` (`contact-id`),
 	 INDEX `uid_uri` (`uid`,`uri`(190)),
 	 INDEX `resource-id` (`resource-id`),
 	 INDEX `deleted_changed` (`deleted`,`changed`),
@@ -813,7 +815,9 @@ CREATE TABLE IF NOT EXISTS `participation` (
 	`server` varchar(60) NOT NULL COMMENT '',
 	`cid` int unsigned NOT NULL COMMENT '',
 	`fid` int unsigned NOT NULL COMMENT '',
-	 PRIMARY KEY(`iid`,`server`)
+	 PRIMARY KEY(`iid`,`server`),
+	 INDEX `cid` (`cid`),
+	 INDEX `fid` (`fid`)
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Storage for participation messages from Diaspora';
 
 --
@@ -967,7 +971,8 @@ CREATE TABLE IF NOT EXISTS `profile` (
 	`publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish default profile in local directory',
 	`net-publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish profile in global directory',
 	 PRIMARY KEY(`id`),
-	 INDEX `uid_is-default` (`uid`,`is-default`)
+	 INDEX `uid_is-default` (`uid`,`is-default`),
+	 FULLTEXT INDEX `pub_keywords` (`pub_keywords`)
 ) DEFAULT COLLATE utf8mb4_general_ci COMMENT='user profiles data';
 
 --
diff --git a/src/Database/DBA.php b/src/Database/DBA.php
index 15a6e4dbab..6064e587a6 100644
--- a/src/Database/DBA.php
+++ b/src/Database/DBA.php
@@ -1239,7 +1239,7 @@ class DBA
 
 		foreach ($old_fields AS $fieldname => $content) {
 			if (isset($fields[$fieldname])) {
-				if ($fields[$fieldname] == $content) {
+				if (($fields[$fieldname] == $content) && !is_null($content)) {
 					unset($fields[$fieldname]);
 				} else {
 					$do_update = true;
diff --git a/src/Model/APContact.php b/src/Model/APContact.php
index 3a9f42fdd7..71f3cfae47 100644
--- a/src/Model/APContact.php
+++ b/src/Model/APContact.php
@@ -157,7 +157,7 @@ class APContact extends BaseObject
 
 		$apcontact['pubkey'] = trim(JsonLD::fetchElement($compacted, 'w3id:publicKey', 'w3id:publicKeyPem'));
 
-		$manually_approve = JsonLD::fetchElement($compacted, 'as:manuallyApprovesFollowers');
+		$apcontact['manually-approve'] = (int)JsonLD::fetchElement($compacted, 'as:manuallyApprovesFollowers');
 
 		// To-Do
 
@@ -204,8 +204,8 @@ class APContact extends BaseObject
 					$contact_fields['prv'] = false;
 				} else {
 					// Otherwise set the corresponding forum type
-					$contact_fields['forum'] = !$manually_approve;
-					$contact_fields['prv'] = $manually_approve;
+					$contact_fields['forum'] = !$apcontact['manually-approve'];
+					$contact_fields['prv'] = $apcontact['manually-approve'];
 				}
 			}
 		}
-- 
2.39.5