diff --git a/database.sql b/database.sql
index afd5ad4d1..b55353994 100644
--- a/database.sql
+++ b/database.sql
@@ -499,7 +499,6 @@ CREATE TABLE IF NOT EXISTS `item` (
`deleted` boolean NOT NULL DEFAULT '0' COMMENT '',
`origin` boolean NOT NULL DEFAULT '0' COMMENT '',
`forum_mode` tinyint NOT NULL DEFAULT 0 COMMENT '',
- `last-child` boolean NOT NULL DEFAULT '1' COMMENT '',
`mention` boolean NOT NULL DEFAULT '0' COMMENT '',
`network` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '',
diff --git a/include/api.php b/include/api.php
index d4007564f..b4fdb646f 100644
--- a/include/api.php
+++ b/include/api.php
@@ -4713,7 +4713,6 @@ function post_photo_item($hash, $allow_cid, $deny_cid, $allow_gid, $deny_gid, $f
$arr['allow_gid'] = $allow_gid;
$arr['deny_cid'] = $deny_cid;
$arr['deny_gid'] = $deny_gid;
- $arr['last-child'] = 1;
$arr['visible'] = $visibility;
$arr['origin'] = 1;
diff --git a/include/conversation.php b/include/conversation.php
index d93b744d9..a6edf0d57 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -430,7 +430,6 @@ These Fields are not added below (yet). They are here to for bug search.
`item`.`deleted`,
`item`.`origin`,
`item`.`forum_mode`,
-`item`.`last-child`,
`item`.`mention`,
`item`.`global`,
`item`.`gcontact-id`,
diff --git a/include/event.php b/include/event.php
index 76044cf98..d4c97c750 100644
--- a/include/event.php
+++ b/include/event.php
@@ -386,7 +386,6 @@ function event_store($arr) {
$item_arr['deny_cid'] = $arr['deny_cid'];
$item_arr['deny_gid'] = $arr['deny_gid'];
$item_arr['private'] = $arr['private'];
- $item_arr['last-child'] = 1;
$item_arr['visible'] = 1;
$item_arr['verb'] = ACTIVITY_POST;
$item_arr['object-type'] = ACTIVITY_OBJ_EVENT;
diff --git a/include/items.php b/include/items.php
index 6f93f78b3..e99799ad6 100644
--- a/include/items.php
+++ b/include/items.php
@@ -487,7 +487,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['wall'] = 1;
$arr['type'] = 'wall';
$arr['origin'] = 1;
- $arr['last-child'] = 1;
$arr['network'] = NETWORK_DFRN;
$arr['protocol'] = PROTOCOL_DFRN;
@@ -624,7 +623,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['title'] = ((x($arr, 'title')) ? trim($arr['title']) : '');
$arr['location'] = ((x($arr, 'location')) ? trim($arr['location']) : '');
$arr['coord'] = ((x($arr, 'coord')) ? notags(trim($arr['coord'])) : '');
- $arr['last-child'] = ((x($arr, 'last-child')) ? intval($arr['last-child']) : 0 );
$arr['visible'] = ((x($arr, 'visible') !== false) ? intval($arr['visible']) : 1 );
$arr['deleted'] = 0;
$arr['parent-uri'] = ((x($arr, 'parent-uri')) ? notags(trim($arr['parent-uri'])) : $arr['uri']);
@@ -1112,18 +1110,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
create_tags_from_item($current_post);
Term::createFromItem($current_post);
- /*
- * If this is now the last-child, force all _other_ children of this parent to *not* be last-child
- * It is done after the transaction to avoid dead locks.
- */
- if ($arr['last-child']) {
- q("UPDATE `item` SET `last-child` = 0 WHERE `parent-uri` = '%s' AND `uid` = %d AND `id` != %d",
- dbesc($arr['uri']),
- intval($arr['uid']),
- intval($current_post)
- );
- }
-
if ($arr['parent-uri'] === $arr['uri']) {
Item::addShadow($current_post);
} else {
diff --git a/include/like.php b/include/like.php
index 27832896a..f89b7a82e 100644
--- a/include/like.php
+++ b/include/like.php
@@ -238,7 +238,6 @@ EOT;
'deny_gid' => $item['deny_gid'],
'visible' => 1,
'unseen' => 1,
- 'last-child' => 0
];
$new_item_id = item_store($new_item);
diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php
index 8baacf093..eca16a9e6 100644
--- a/mod/dfrn_confirm.php
+++ b/mod/dfrn_confirm.php
@@ -432,8 +432,6 @@ function dfrn_confirm_post(App $a, $handsfree = null)
$arr['object'] .= xmlify('' . "\n");
$arr['object'] .= '' . "\n";
- $arr['last-child'] = 1;
-
$arr['allow_cid'] = $user['allow_cid'];
$arr['allow_gid'] = $user['allow_gid'];
$arr['deny_cid'] = $user['deny_cid'];
@@ -696,8 +694,6 @@ function dfrn_confirm_post(App $a, $handsfree = null)
$arr['object'] .= xmlify('' . "\n");
$arr['object'] .= '' . "\n";
- $arr['last-child'] = 1;
-
$arr['allow_cid'] = $user['allow_cid'];
$arr['allow_gid'] = $user['allow_gid'];
$arr['deny_cid'] = $user['deny_cid'];
diff --git a/mod/item.php b/mod/item.php
index 19d56638c..96e289a84 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -738,7 +738,6 @@ function item_post(App $a) {
$datarray['gcontact-id'] = GContact::getId(["url" => $datarray['author-link'], "network" => $datarray['network'],
"photo" => $datarray['author-avatar'], "name" => $datarray['author-name']]);
$datarray['object'] = $object;
- $datarray['last-child'] = 1;
/*
* These fields are for the convenience of plugins...
diff --git a/mod/photos.php b/mod/photos.php
index f399c3ae8..6183ed60b 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -510,7 +510,6 @@ function photos_post(App $a)
$arr['allow_gid'] = $p[0]['allow_gid'];
$arr['deny_cid'] = $p[0]['deny_cid'];
$arr['deny_gid'] = $p[0]['deny_gid'];
- $arr['last-child'] = 1;
$arr['visible'] = $visibility;
$arr['origin'] = 1;
@@ -687,7 +686,6 @@ function photos_post(App $a)
$arr['allow_gid'] = $p[0]['allow_gid'];
$arr['deny_cid'] = $p[0]['deny_cid'];
$arr['deny_gid'] = $p[0]['deny_gid'];
- $arr['last-child'] = 1;
$arr['visible'] = 1;
$arr['verb'] = ACTIVITY_TAG;
$arr['object-type'] = ACTIVITY_OBJ_PERSON;
@@ -924,7 +922,6 @@ function photos_post(App $a)
$arr['allow_gid'] = $str_group_allow;
$arr['deny_cid'] = $str_contact_deny;
$arr['deny_gid'] = $str_group_deny;
- $arr['last-child'] = 1;
$arr['visible'] = $visible;
$arr['origin'] = 1;
@@ -1513,7 +1510,7 @@ function photos_content(App $a)
}
if (!DBM::is_result($r)) {
- if (($can_post || can_write_wall($owner_uid)) && $link_item['last-child']) {
+ if (($can_post || can_write_wall($owner_uid))) {
$comments .= replace_macros($cmnt_tpl, [
'$return_path' => '',
'$jsreload' => $return_url,
@@ -1552,7 +1549,7 @@ function photos_content(App $a)
$dislike = format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike', $link_item['id']);
}
- if (($can_post || can_write_wall($owner_uid)) && $link_item['last-child']) {
+ if (($can_post || can_write_wall($owner_uid))) {
$comments .= replace_macros($cmnt_tpl,[
'$return_path' => '',
'$jsreload' => $return_url,
@@ -1625,7 +1622,7 @@ function photos_content(App $a)
'$comment' => $comment
]);
- if (($can_post || can_write_wall($owner_uid)) && $item['last-child']) {
+ if (($can_post || can_write_wall($owner_uid))) {
$comments .= replace_macros($cmnt_tpl, [
'$return_path' => '',
'$jsreload' => $return_url,
diff --git a/mod/poke.php b/mod/poke.php
index 8b36b17dc..a8410b17d 100644
--- a/mod/poke.php
+++ b/mod/poke.php
@@ -117,7 +117,6 @@ function poke_init(App $a) {
$arr['allow_gid'] = $allow_gid;
$arr['deny_cid'] = $deny_cid;
$arr['deny_gid'] = $deny_gid;
- $arr['last-child'] = 1;
$arr['visible'] = 1;
$arr['verb'] = $activity;
$arr['private'] = $private;
diff --git a/mod/profiles.php b/mod/profiles.php
index f8d77e27d..32ed24346 100644
--- a/mod/profiles.php
+++ b/mod/profiles.php
@@ -593,7 +593,6 @@ function profile_activity($changed, $value) {
$arr['object'] .= '' . xmlify('' . "\n");
$arr['object'] .= xmlify('' . "\n");
$arr['object'] .= '' . "\n";
- $arr['last-child'] = 1;
$arr['allow_cid'] = $a->user['allow_cid'];
$arr['allow_gid'] = $a->user['allow_gid'];
diff --git a/mod/subthread.php b/mod/subthread.php
index 20405ba2d..037e2982e 100644
--- a/mod/subthread.php
+++ b/mod/subthread.php
@@ -144,7 +144,6 @@ EOT;
$arr['deny_gid'] = $item['deny_gid'];
$arr['visible'] = 1;
$arr['unseen'] = 1;
- $arr['last-child'] = 0;
$post_id = item_store($arr);
diff --git a/mod/tagger.php b/mod/tagger.php
index 90fd2414b..60eafa865 100644
--- a/mod/tagger.php
+++ b/mod/tagger.php
@@ -139,7 +139,6 @@ EOT;
$arr['deny_gid'] = $item['deny_gid'];
$arr['visible'] = 1;
$arr['unseen'] = 1;
- $arr['last-child'] = 1;
$arr['origin'] = 1;
$post_id = item_store($arr);
diff --git a/src/Database/DBStructure.php b/src/Database/DBStructure.php
index 91a8ffdaf..973098d46 100644
--- a/src/Database/DBStructure.php
+++ b/src/Database/DBStructure.php
@@ -1175,7 +1175,6 @@ class DBStructure {
"deleted" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"origin" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"forum_mode" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => ""],
- "last-child" => ["type" => "boolean", "not null" => "1", "default" => "1", "comment" => ""],
"mention" => ["type" => "boolean", "not null" => "1", "default" => "0", "comment" => ""],
"network" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
"rendered-hash" => ["type" => "varchar(32)", "not null" => "1", "default" => "", "comment" => ""],
diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php
index ab1074ac1..c05b5b3d6 100644
--- a/src/Protocol/DFRN.php
+++ b/src/Protocol/DFRN.php
@@ -997,7 +997,7 @@ class DFRN
// "comment-allow" is some old fashioned stuff for old Friendica versions.
// It is included in the rewritten code for completeness
if ($comment) {
- XML::addElement($doc, $entry, "dfrn:comment-allow", intval($item['last-child']));
+ XML::addElement($doc, $entry, "dfrn:comment-allow", 1);
}
if ($item['location']) {
@@ -2117,23 +2117,6 @@ class DFRN
Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $current["id"]);
}
}
-
- // update last-child if it changes
- if ($item["last-child"] && ($item["last-child"] != $current["last-child"])) {
- $r = q(
- "UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` IN (0, %d)",
- dbesc(datetime_convert()),
- dbesc($item["parent-uri"]),
- intval($importer["importer_uid"])
- );
- $r = q(
- "UPDATE `item` SET `last-child` = %d , `changed` = '%s' WHERE `uri` = '%s' AND `uid` IN (0, %d)",
- intval($item["last-child"]),
- dbesc(datetime_convert()),
- dbesc($item["uri"]),
- intval($importer["importer_uid"])
- );
- }
return $changed;
}
@@ -2459,7 +2442,7 @@ class DFRN
$item["edited"] = $xpath->query("atom:updated/text()", $entry)->item(0)->nodeValue;
$current = q(
- "SELECT `id`, `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
+ "SELECT `id`, `uid`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($item["uri"]),
intval($importer["importer_uid"])
);
@@ -2523,7 +2506,6 @@ class DFRN
// We don't need the content element since "dfrn:env" is always present
//$item["body"] = $xpath->query("atom:content/text()", $entry)->item(0)->nodeValue;
- $item["last-child"] = $xpath->query("dfrn:comment-allow/text()", $entry)->item(0)->nodeValue;
$item["location"] = $xpath->query("dfrn:location/text()", $entry)->item(0)->nodeValue;
$georsspoint = $xpath->query("georss:point", $entry);
@@ -2747,22 +2729,6 @@ class DFRN
$parent_uri = $r[0]["parent-uri"];
}
- if (!$is_like) {
- $r1 = q(
- "UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d",
- dbesc(datetime_convert()),
- intval($importer["importer_uid"]),
- intval($r[0]["parent"])
- );
-
- $r2 = q(
- "UPDATE `item` SET `last-child` = 1, `changed` = '%s' WHERE `uid` = %d AND `id` = %d",
- dbesc(datetime_convert()),
- intval($importer["importer_uid"]),
- intval($posted_id)
- );
- }
-
if ($posted_id && $parent && ($entrytype == DFRN_REPLY_RC)) {
logger("Notifying followers about comment ".$posted_id, LOGGER_DEBUG);
Worker::add(PRIORITY_HIGH, "Notifier", "comment-import", $posted_id);
@@ -2928,28 +2894,7 @@ class DFRN
create_tags_from_itemuri($uri, $importer["uid"]);
Term::createFromItemURI($uri, $importer["uid"]);
update_thread_uri($uri, $importer["importer_uid"]);
- if ($item["last-child"]) {
- // ensure that last-child is set in case the comment that had it just got wiped.
- q(
- "UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` IN (0, %d)",
- dbesc(datetime_convert()),
- dbesc($item["parent-uri"]),
- intval($item["uid"])
- );
- // who is the last child now?
- $r = q(
- "SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `moderated` = 0 AND `uid` = %d
- ORDER BY `created` DESC LIMIT 1",
- dbesc($item["parent-uri"]),
- intval($importer["uid"])
- );
- if (DBM::is_result($r)) {
- q(
- "UPDATE `item` SET `last-child` = 1 WHERE `id` = %d",
- intval($r[0]["id"])
- );
- }
- }
+
// if this is a relayed delete, propagate it to other recipients
if ($entrytype == DFRN_REPLY_RC) {
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index 350fd4eb5..9d42d3212 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -2409,8 +2409,6 @@ class Diaspora
$arr["object"] = self::constructNewFriendObject($contact);
- $arr["last-child"] = 1;
-
$user = dba::selectFirst('user', ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid'], ['uid' => $importer["uid"]]);
$arr["allow_cid"] = $user["allow_cid"];
diff --git a/src/Protocol/Feed.php b/src/Protocol/Feed.php
index b629c4ecb..dc4548b3e 100644
--- a/src/Protocol/Feed.php
+++ b/src/Protocol/Feed.php
@@ -198,11 +198,6 @@ class Feed {
$header["contact-id"] = $contact["id"];
- if (!strlen($contact["notify"])) {
- // one way feed - no remote comment ability
- $header["last-child"] = 0;
- }
-
if (!is_object($entries)) {
logger("There are no entries in this feed.", LOGGER_DEBUG);
return;
diff --git a/src/Worker/OnePoll.php b/src/Worker/OnePoll.php
index 3c7df172a..293cd265e 100644
--- a/src/Worker/OnePoll.php
+++ b/src/Worker/OnePoll.php
@@ -531,11 +531,6 @@ class OnePoll
$stored_item = item_store($datarray);
- $condition = ['parent-uri' => $datarray['parent-uri'], 'uid' => $importer_uid];
- dba::update('item', ['last-child' => false], $condition);
-
- dba::update('item', ['last-child' => true], ['id' => $stored_item]);
-
switch ($mailconf['action']) {
case 0:
logger("Mail: Seen before ".$msg_uid." for ".$mailconf['user'].". Doing nothing.", LOGGER_DEBUG);