From 807ad145218ab6d4c57b6d200f4c89f63620502f Mon Sep 17 00:00:00 2001
From: Jonny Tischbein <jonny_tischbein@systemli.org>
Date: Wed, 19 Sep 2018 23:55:29 +0200
Subject: [PATCH] calculate form return_url for post and message instead of
 using SESSION var

---
 mod/editpost.php    | 8 +++++++-
 mod/message.php     | 2 +-
 src/Object/Post.php | 2 +-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/mod/editpost.php b/mod/editpost.php
index 258585ef1c..61dfcf911d 100644
--- a/mod/editpost.php
+++ b/mod/editpost.php
@@ -21,12 +21,18 @@ function editpost_content(App $a)
 	}
 
 	$post_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
+	$return_url = (($a->argc > 1) ? base64_decode($a->argv[2]) : '');
 
 	if (!$post_id) {
 		notice(L10n::t('Item not found') . EOL);
 		return;
 	}
 
+	// Fallback to SESSION return_path
+	if (empty($return_url)) {
+		$return_url = $_SESSION['return_path'];
+	}
+
 	$fields = ['allow_cid', 'allow_gid', 'deny_cid', 'deny_gid',
 		'type', 'body', 'title', 'file', 'wall', 'post-type'];
 
@@ -95,7 +101,7 @@ function editpost_content(App $a)
 
 	$o .= replace_macros($tpl, [
 		'$is_edit' => true,
-		'$return_path' => $_SESSION['return_url'],
+		'$return_path' => $return_url,
 		'$action' => 'item',
 		'$share' => L10n::t('Save'),
 		'$upload' => L10n::t('Upload photo'),
diff --git a/mod/message.php b/mod/message.php
index 8c9aa657df..9ac0ddbc0b 100644
--- a/mod/message.php
+++ b/mod/message.php
@@ -92,7 +92,7 @@ function message_post(App $a)
 		$a->argc = 2;
 		$a->argv[1] = 'new';
 	} else {
-		goaway($_SESSION['return_url']);
+		goaway(System::baseUrl() . '/' . $a->cmd . '/' . $ret);
 	}
 }
 
diff --git a/src/Object/Post.php b/src/Object/Post.php
index 038ca270d7..c52078e521 100644
--- a/src/Object/Post.php
+++ b/src/Object/Post.php
@@ -157,7 +157,7 @@ class Post extends BaseObject
 			if ($item["event-id"] != 0) {
 				$edpost = ["events/event/" . $item['event-id'], L10n::t("Edit")];
 			} else {
-				$edpost = ["editpost/" . $item['id'], L10n::t("Edit")];
+				$edpost = ["editpost/" . $item['id'] . "/" . base64_encode($a->cmd), L10n::t("Edit")];
 			}
 			$dropping = in_array($item['uid'], [0, local_user()]);
 		} else {
-- 
2.39.5