From 43adabcd20ebd7b1792a4207913f426a9311c7bc Mon Sep 17 00:00:00 2001
From: Mike Macgirvin <mike@macgirvin.com>
Date: Thu, 19 Aug 2010 17:23:13 -0700
Subject: [PATCH] multi-user fixes

---
 mod/photos.php         |  2 +-
 mod/profile.php        | 62 ++++++++++++++++++++++--------------------
 mod/update_profile.php |  1 -
 3 files changed, 34 insertions(+), 31 deletions(-)

diff --git a/mod/photos.php b/mod/photos.php
index 81f3614b33..bbc9c2df5c 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -664,7 +664,7 @@ function photos_content(&$a) {
 			dbesc($datum)
 		);
 		if(count($i1)) {
-//dbg(2);
+
 			$r = q("SELECT COUNT(*) AS `total`
 				FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
 				WHERE `parent-uri` = '%s' AND `uri` != '%s' AND `item`.`deleted` = 0
diff --git a/mod/profile.php b/mod/profile.php
index 808ceedb8e..44f7181020 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -51,12 +51,12 @@ function profile_init(&$a) {
 
 	if((remote_user()) && ($a->argc > 2) && ($a->argv[2] == 'visit'))
 		$_SESSION['is_visitor'] = 1;
-	else {
-		unset($_SESSION['is_visitor']);
-		unset($_SESSION['visitor_id']);
-		if(! $_SESSION['uid'])
-			unset($_SESSION['authenticated']);
-	}
+//	else {
+//		unset($_SESSION['is_visitor']);
+//		unset($_SESSION['visitor_id']);
+//		if(! $_SESSION['uid'])
+//			unset($_SESSION['authenticated']);
+//	}
 
 	$profile = 0;
 	if((local_user()) && ($a->argc > 2) && ($a->argv[2] == 'view')) {
@@ -87,33 +87,39 @@ function profile_content(&$a, $update = false) {
 	$tab = 'posts';
 
 
-	if(! $update) {
+	if($update) {
+		// Ensure we've got a profile owner if updating.
+		$a->profile['profile_uid'] = $_SESSION['profile_uid'];
+	}
+	else {
+		// set the uid so we can pick it up during update
 		$_SESSION['profile_uid'] = $a->profile['uid'];
 	}
 
+	$contact = null;
+	$remote_contact = false;
+
 	if(remote_user()) {
 		$contact_id = $_SESSION['visitor_id'];
 		$groups = init_groups_visitor($contact_id);
 		$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
 			intval($contact_id),
-			intval($a->profile['uid'])
+			intval($a->profile['profile_uid'])
 		);
-		if(count($r))
+		if(count($r)) {
 			$contact = $r[0];
+			$remote_contact = true;
+		}
 	}
-	else {
+
+	if(! $remote_contact) {
 		if(local_user()) {
 			$contact_id = $_SESSION['cid'];
 			$contact = $a->contact;
 		}
 	}
 
-	if($update) {
-		// Ensure we've got a profile owner if updating.
-		$a->profile['profile_uid'] = $_SESSION['profile_uid'];
-	}
-
-	else {
+	if(! $update) {
 		if(x($_GET,'tab'))
 			$tab = notags(trim($_GET['tab']));
 
@@ -161,6 +167,9 @@ function profile_content(&$a, $update = false) {
 
 	$sql_extra = " AND `allow_cid` = '' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = '' ";
 
+
+
+
 	// Profile owner - everything is visible
 
 	if(local_user() && ($_SESSION['uid'] == $a->profile['uid'])) {
@@ -176,7 +185,10 @@ function profile_content(&$a, $update = false) {
 	}
 
 	// authenticated visitor - here lie dragons
-	elseif(remote_user()) {
+	// If $remotecontact is true, we know that not only is this a remotely authenticated
+	// person, but that it is *our* contact, which is important in multi-user mode.
+
+	elseif($remote_contact) {
 		$gs = '<<>>'; // should be impossible to match
 		if(count($groups)) {
 			foreach($groups as $g)
@@ -201,7 +213,7 @@ function profile_content(&$a, $update = false) {
 		AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 
 		AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `type` != 'remote')
 		$sql_extra ",
-		intval($a->profile['uid'])
+		intval($a->profile['profile_uid'])
 
 	);
 
@@ -218,7 +230,7 @@ function profile_content(&$a, $update = false) {
 		AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `type` != 'remote')
 		$sql_extra
 		ORDER BY `parent` DESC, `id` ASC LIMIT %d ,%d ",
-		intval($a->profile['uid']),
+		intval($a->profile['profile_uid']),
 		intval($a->pager['start']),
 		intval($a->pager['itemspage'])
 
@@ -242,15 +254,14 @@ function profile_content(&$a, $update = false) {
 			$redirect_url = $a->get_baseurl() . '/redir/' . $item['cid'] ;
 			
 
-
-			if(can_write_wall($a,$a->profile['uid'])) {
+			if(can_write_wall($a,$a->profile['profile_uid'])) {
 				if($item['last-child']) {
 					$comment = replace_macros($cmnt_tpl,array(
 						'$return_path' => $_SESSION['return_url'],
 						'$type' => 'wall-comment',
 						'$id' => $item['item_id'],
 						'$parent' => $item['parent'],
-						'$profile_uid' =>  $a->profile['uid'],
+						'$profile_uid' =>  $a->profile['profile_uid'],
 						'$mylink' => $contact['url'],
 						'$mytitle' => t('Me'),
 						'$myphoto' => $contact['thumb'],
@@ -268,11 +279,6 @@ function profile_content(&$a, $update = false) {
 			if(local_user() && ($item['contact-uid'] == $_SESSION['uid']) 
 				&& ($item['rel'] == DIRECTION_IN || $item['rel'] == DIRECTION_BOTH) && (! $item['self'] ))
 				$profile_url = $redirect_url;
-
-			// FIXME tryng to solve the mishmash of profile photos. 
-
-		//	$photo = (($item['self']) ? $a->profile['photo'] : $item['photo']);
-		//	$thumb = (($item['self']) ? $a->profile['thumb'] : $item['thumb']);
 	
 
 			// We received this post via a remote feed. It's either a wall-to-wall or a remote comment. The author is
@@ -289,8 +295,6 @@ function profile_content(&$a, $update = false) {
 				$drop = replace_macros(file_get_contents('view/wall_item_drop.tpl'), array('$id' => $item['id']));
 
 
-
-
 			$o .= replace_macros($template,array(
 				'$id' => $item['item_id'],
 				'$profile_url' => $profile_link,
diff --git a/mod/update_profile.php b/mod/update_profile.php
index 96d8376dc0..e5085f6ec0 100644
--- a/mod/update_profile.php
+++ b/mod/update_profile.php
@@ -16,7 +16,6 @@ function update_profile_content(&$a) {
         // The only ones we need to fetch are those for new page additions, which we'll discover
         // on the client side and then swap the image back.
 
-
         $text = profile_content($a,true);
         $pattern = "/<img([^>]*) src=\"([^\"]*)\"/";
         $replace = "<img\${1} dst=\"\${2}\"";