From 4ad2bbddc786930bae19f4d537ac7bf0d3de3c13 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Tue, 26 Aug 2014 17:10:46 +0200 Subject: [PATCH 01/12] If a post is a pure reshare, then show the profile of the original author on the display page. --- include/bbcode.php | 30 ++++++--- mod/display.php | 153 +++++++++++++++++++++++++++++++-------------- 2 files changed, 128 insertions(+), 55 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index 75aa4fd89..88cfe0cb7 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -586,11 +586,13 @@ function bb_ShareAttributes($share, $simplehtml) { return($text); } -function GetProfileUsername($profile, $username, $compact = false) { +function GetProfileUsername($profile, $username, $compact = false, $getnetwork = false) { $twitter = preg_replace("=https?://twitter.com/(.*)=ism", "$1@twitter.com", $profile); if ($twitter != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_TWITTER); + elseif ($compact) return($twitter); else return($username." (".$twitter.")"); @@ -598,7 +600,9 @@ function GetProfileUsername($profile, $username, $compact = false) { $appnet = preg_replace("=https?://alpha.app.net/(.*)=ism", "$1@alpha.app.net", $profile); if ($appnet != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_APPNET); + elseif ($compact) return($appnet); else return($username." (".$appnet.")"); @@ -606,7 +610,9 @@ function GetProfileUsername($profile, $username, $compact = false) { $gplus = preg_replace("=https?://plus.google.com/(.*)=ism", "$1@plus.google.com", $profile); if ($gplus != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_GPLUS); + elseif ($compact) return($gplususername." (".$username.")"); else return($username." (".$gplus.")"); @@ -614,7 +620,9 @@ function GetProfileUsername($profile, $username, $compact = false) { $friendica = preg_replace("=https?://(.*)/profile/(.*)=ism", "$2@$1", $profile); if ($friendica != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_DFRN); + elseif ($compact) return($friendica); else return($username." (".$friendica.")"); @@ -622,7 +630,9 @@ function GetProfileUsername($profile, $username, $compact = false) { $diaspora = preg_replace("=https?://(.*)/u/(.*)=ism", "$2@$1", $profile); if ($diaspora != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_DIASPORA); + elseif ($compact) return($diaspora); else return($username." (".$diaspora.")"); @@ -635,7 +645,9 @@ function GetProfileUsername($profile, $username, $compact = false) { $UserData = fetch_url("http://".$StatusnetHost."/api/users/show.json?user_id=".$StatusnetUser); $user = json_decode($UserData); if ($user) { - if ($compact) + if ($getnetwork) + return(NETWORK_STATUSNET); + elseif ($compact) return($user->screen_name."@".$StatusnetHost); else return($username." (".$user->screen_name."@".$StatusnetHost.")"); @@ -648,7 +660,9 @@ function GetProfileUsername($profile, $username, $compact = false) { if ($rest == "") { $pumpio = preg_replace("=https?://([\.\w]+)/([\.\w]+)(.*)=ism", "$2@$1", $profile); if ($pumpio != $profile) { - if ($compact) + if ($getnetwork) + return(NETWORK_PUMPIO); + elseif ($compact) return($pumpio); else return($username." (".$pumpio.")"); diff --git a/mod/display.php b/mod/display.php index e3c8f85cf..c6d33ce05 100644 --- a/mod/display.php +++ b/mod/display.php @@ -16,7 +16,7 @@ function display_init(&$a) { // Does the local user have this item? if (local_user()) { - $r = q("SELECT `id`, `parent`, `author-name`, `author-link`, `author-avatar`, `network` FROM `item` + $r = q("SELECT `id`, `parent`, `author-name`, `author-link`, `author-avatar`, `network`, `body` FROM `item` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `guid` = '%s' AND `uid` = %d", $a->argv[1], local_user()); if (count($r)) { @@ -28,7 +28,7 @@ function display_init(&$a) { // Or is it anywhere on the server? if ($nick == "") { $r = q("SELECT `user`.`nickname`, `item`.`id`, `item`.`parent`, `item`.`author-name`, - `item`.`author-link`, `item`.`author-avatar`, `item`.`network`, `item`.`uid` + `item`.`author-link`, `item`.`author-avatar`, `item`.`network`, `item`.`uid`, `item`.`body` FROM `item` INNER JOIN `user` ON `user`.`uid` = `item`.`uid` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' @@ -43,56 +43,16 @@ function display_init(&$a) { } if (count($r)) { if ($r[0]["id"] != $r[0]["parent"]) - $r = q("SELECT `id`, `author-name`, `author-link`, `author-avatar`, `network` FROM `item` + $r = q("SELECT `id`, `author-name`, `author-link`, `author-avatar`, `network`, `body` FROM `item` WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `id` = %d", $r[0]["parent"]); - if (!strstr(normalise_link($r[0]["author-link"]), normalise_link($a->get_baseurl()))) { - require_once("mod/proxy.php"); - require_once("include/bbcode.php"); - $profiledata["uid"] = -1; - $profiledata["nickname"] = $r[0]["author-name"]; - $profiledata["name"] = $r[0]["author-name"]; - $profiledata["picdate"] = ""; - $profiledata["photo"] = proxy_url($r[0]["author-avatar"]); - $profiledata["url"] = $r[0]["author-link"]; - $profiledata["network"] = $r[0]["network"]; + $profiledata = display_fetchauthor($a, $r[0]); - // Fetching profile data from unique contacts - // To-do: Extend "unique contacts" table for further contact data like location, ... - $r = q("SELECT `avatar`, `nick` FROM `unique_contacts` WHERE `url` = '%s'", normalise_link($profiledata["url"])); - if (count($r)) { - $profiledata["photo"] = proxy_url($r[0]["avatar"]); - if ($r[0]["nick"] != "") - $profiledata["nickname"] = $r[0]["nick"]; - } else { - // Is this case possible? - // Fetching further contact data from the contact table, when it isn't available in the "unique contacts" - $r = q("SELECT `photo`, `nick` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", - normalise_link($profiledata["url"]), $itemuid); - if (count($r)) { - $profiledata["photo"] = proxy_url($r[0]["photo"]); - if ($r[0]["nick"] != "") - $profiledata["nickname"] = $r[0]["nick"]; - } - } - - if (local_user()) { - if ($profiledata["network"] == NETWORK_DFRN) { - $connect = str_replace("/profile/", "/dfrn_request/", $profiledata["url"])."&addr=".bin2hex($a->get_baseurl()."/profile/".$a->user["nickname"]); - $profiledata["remoteconnect"] = $connect; - } elseif ($profiledata["network"] == NETWORK_DIASPORA) - $profiledata["remoteconnect"] = $a->get_baseurl()."/contacts?add=".GetProfileUsername($profiledata["url"], "", true); - } elseif ($profiledata["network"] == NETWORK_DFRN) { - $connect = str_replace("/profile/", "/dfrn_request/", $profiledata["url"]); - $profiledata["remoteconnect"] = $connect; - } - } else { - $nickname = str_replace(normalise_link($a->get_baseurl())."/profile/", "", normalise_link($r[0]["author-link"])); + if (strstr(normalise_link($profiledata["url"]), normalise_link($a->get_baseurl()))) { + $nickname = str_replace(normalise_link($a->get_baseurl())."/profile/", "", normalise_link($profiledata["url"])); if (($nickname != $a->user["nickname"])) { - $profiledata["url"] = $r[0]["author-link"]; - $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `user`.* FROM `profile` INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 and `contact`.`self` = 1 LIMIT 1", @@ -100,8 +60,10 @@ function display_init(&$a) { ); if (count($r)) $profiledata = $r[0]; + $profiledata["network"] = NETWORK_DFRN; - } + } else + $profiledata = array(); } } } @@ -110,6 +72,103 @@ function display_init(&$a) { } +function display_fetchauthor($a, $item) { + require_once("mod/proxy.php"); + require_once("include/bbcode.php"); + + $profiledata = array(); + $profiledata["uid"] = -1; + $profiledata["nickname"] = $item["author-name"]; + $profiledata["name"] = $item["author-name"]; + $profiledata["picdate"] = ""; + $profiledata["photo"] = proxy_url($item["author-avatar"]); + $profiledata["url"] = $item["author-link"]; + $profiledata["network"] = $item["network"]; + + // Fetching profile data from unique contacts + // To-do: Extend "unique contacts" table for further contact data like location, ... + $r = q("SELECT `avatar`, `nick` FROM `unique_contacts` WHERE `url` = '%s'", normalise_link($profiledata["url"])); + if (count($r)) { + $profiledata["photo"] = proxy_url($r[0]["avatar"]); + if ($r[0]["nick"] != "") + $profiledata["nickname"] = $r[0]["nick"]; + } else { + // Is this case possible? + // Fetching further contact data from the contact table, when it isn't available in the "unique contacts" + $r = q("SELECT `photo`, `nick` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d", + normalise_link($profiledata["url"]), $itemuid); + if (count($r)) { + $profiledata["photo"] = proxy_url($r[0]["photo"]); + if ($r[0]["nick"] != "") + $profiledata["nickname"] = $r[0]["nick"]; + } + } + + // Check for a repeated message + $skip = false; + $body = trim($item["body"]); + + // Skip if it isn't a pure repeated messages + // Does it start with a share? + if (!$skip AND strpos($body, "[share") > 0) + $skip = true; + + // Does it end with a share? + if (!$skip AND (strlen($body) > (strrpos($body, "[/share]") + 8))) + $skip = true; + + if (!$skip) { + $attributes = preg_replace("/\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","$1",$body); + // Skip if there is no shared message in there + if ($body == $attributes) + $skip = true; + } + + if (!$skip) { + $author = ""; + preg_match("/author='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profiledata["name"] = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + + preg_match('/author="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profiledata["name"] = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); + + $profile = ""; + preg_match("/profile='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profiledata["url"] = $matches[1]; + + preg_match('/profile="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profiledata["url"] = $matches[1]; + + $avatar = ""; + preg_match("/avatar='(.*?)'/ism", $attributes, $matches); + if ($matches[1] != "") + $profiledata["photo"] = $matches[1]; + + preg_match('/avatar="(.*?)"/ism', $attributes, $matches); + if ($matches[1] != "") + $profiledata["photo"] = $matches[1]; + + $profiledata["nickname"] = $profiledata["name"]; + $profiledata["network"] = GetProfileUsername($profiledata["url"], "", false, true); + } + + if (local_user()) { + if ($profiledata["network"] == NETWORK_DFRN) { + $connect = str_replace("/profile/", "/dfrn_request/", $profiledata["url"])."&addr=".bin2hex($a->get_baseurl()."/profile/".$a->user["nickname"]); + $profiledata["remoteconnect"] = $connect; + } elseif ($profiledata["network"] == NETWORK_DIASPORA) + $profiledata["remoteconnect"] = $a->get_baseurl()."/contacts?add=".GetProfileUsername($profiledata["url"], "", true); + } elseif ($profiledata["network"] == NETWORK_DFRN) { + $connect = str_replace("/profile/", "/dfrn_request/", $profiledata["url"]); + $profiledata["remoteconnect"] = $connect; + } + + return($profiledata); +} function display_content(&$a, $update = 0) { From 4bdd905b3ecf8f0f29f7b4b85bc5a0f5c7899d5d Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 28 Aug 2014 01:06:41 +0200 Subject: [PATCH 02/12] Only show foreign items if the profile of the user isn't hidden. Show the user's theme - not the theme of the viewed profile. --- boot.php | 4 +++- include/nav.php | 6 +++--- mod/display.php | 8 ++++++-- mod/item.php | 38 +++++++++++++++++++------------------- 4 files changed, 31 insertions(+), 25 deletions(-) diff --git a/boot.php b/boot.php index f4468bee9..122201839 100644 --- a/boot.php +++ b/boot.php @@ -1414,7 +1414,9 @@ if(! function_exists('profile_load')) { $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename']; - $_SESSION['theme'] = $a->profile['theme']; + if (!$profiledata) + $_SESSION['theme'] = $a->profile['theme']; + $_SESSION['mobile-theme'] = $a->profile['mobile-theme']; /** diff --git a/include/nav.php b/include/nav.php index f838830a8..7708f09e6 100644 --- a/include/nav.php +++ b/include/nav.php @@ -55,7 +55,7 @@ function nav_info(&$a) { */ $myident = ((is_array($a->user) && isset($a->user['nickname'])) ? $a->user['nickname'] . '@' : ''); - + $sitelocation = $myident . substr($a->get_baseurl($ssl_state),strpos($a->get_baseurl($ssl_state),'//') + 2 ); @@ -86,7 +86,7 @@ function nav_info(&$a) { 'icon' => (count($r) ? $a->get_cached_avatar_image($r[0]['micro']) : $a->get_baseurl($ssl_state)."/images/person-48.jpg"), 'name' => $a->user['username'], ); - + } else { $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'selected':''), t('Sign in')); @@ -101,7 +101,7 @@ function nav_info(&$a) { if(! $homelink) $homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : ''); - if(($a->module != 'home') && (! (local_user()))) + if(($a->module != 'home') && (! (local_user()))) $nav['home'] = array($homelink, t('Home'), "", t('Home Page')); diff --git a/mod/display.php b/mod/display.php index c6d33ce05..abb03b6d5 100644 --- a/mod/display.php +++ b/mod/display.php @@ -33,7 +33,7 @@ function display_init(&$a) { WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' - AND `item`.`private` = 0 + AND `item`.`private` = 0 AND NOT `user`.`hidewall` AND `item`.`guid` = '%s'", $a->argv[1]); // AND `item`.`private` = 0 AND `item`.`wall` = 1 if (count($r)) { @@ -65,6 +65,10 @@ function display_init(&$a) { } else $profiledata = array(); } + } else { + $a->error = 404; + notice( t('Item not found.') . EOL); + return; } } @@ -220,7 +224,7 @@ function display_content(&$a, $update = 0) { WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `item`.`allow_cid` = '' AND `item`.`allow_gid` = '' AND `item`.`deny_cid` = '' AND `item`.`deny_gid` = '' - AND `item`.`private` = 0 + AND `item`.`private` = 0 AND NOT `user`.`hidewall` AND `item`.`guid` = '%s'", $a->argv[1]); // AND `item`.`private` = 0 AND `item`.`wall` = 1 if (count($r)) { diff --git a/mod/item.php b/mod/item.php index a08d0e02b..0e2fce7bf 100644 --- a/mod/item.php +++ b/mod/item.php @@ -736,7 +736,7 @@ function item_post(&$a) { update_thread($post_id); // update filetags in pconfig - file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); + file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); proc_run('php', "include/notifier.php", 'edit_post', "$post_id"); if((x($_REQUEST,'return')) && strlen($return_path)) { @@ -792,8 +792,8 @@ function item_post(&$a) { dbesc($datarray['attach']), intval($datarray['bookmark']), intval($datarray['origin']), - intval($datarray['moderated']), - dbesc($datarray['file']) + intval($datarray['moderated']), + dbesc($datarray['file']) ); $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", @@ -804,7 +804,7 @@ function item_post(&$a) { add_thread($post_id); // update filetags in pconfig - file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); + file_tag_update_pconfig($uid,$categories_old,$categories_new,'category'); // Store the fresh generated item into the cache $cachefile = get_cachefile($datarray["guid"]."-".hash("md5", $datarray['body'])); @@ -942,25 +942,25 @@ function item_post(&$a) { . '
'; $disclaimer .= sprintf( t('You may visit them online at %s'), $a->get_baseurl() . '/profile/' . $a->user['nickname']) . EOL; $disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL; - if (!$datarray['title']=='') { - $subject = email_header_encode($datarray['title'],'UTF-8'); - } else { + if (!$datarray['title']=='') { + $subject = email_header_encode($datarray['title'],'UTF-8'); + } else { $subject = email_header_encode('[Friendica]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']),'UTF-8'); - } + } $link = '' . $a->user['username'] . '

'; $html = prepare_body($datarray); $message = '' . $link . $html . $disclaimer . ''; - include_once('include/html2plain.php'); - $params = array ( - 'fromName' => $a->user['username'], - 'fromEmail' => $a->user['email'], - 'toEmail' => $addr, - 'replyTo' => $a->user['email'], - 'messageSubject' => $subject, - 'htmlVersion' => $message, - 'textVersion' => html2plain($html.$disclaimer), - ); - enotify::send($params); + include_once('include/html2plain.php'); + $params = array ( + 'fromName' => $a->user['username'], + 'fromEmail' => $a->user['email'], + 'toEmail' => $addr, + 'replyTo' => $a->user['email'], + 'messageSubject' => $subject, + 'htmlVersion' => $message, + 'textVersion' => html2plain($html.$disclaimer), + ); + enotify::send($params); } } } From b4e8ec2806e41dff138d4f28d2c13ee9d08807cc Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 28 Aug 2014 01:11:43 +0200 Subject: [PATCH 03/12] bbcode: mask "[" and "]" for attachments. --- include/bbcode.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/include/bbcode.php b/include/bbcode.php index 88cfe0cb7..017673423 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -152,9 +152,9 @@ function bb_rearrange_share($shared) { if ($matches) $description = trim($matches[1]); - $url = htmlentities($url, ENT_QUOTES, 'UTF-8', false); - $title = htmlentities($title, ENT_QUOTES, 'UTF-8', false); - $preview = htmlentities($preview, ENT_QUOTES, 'UTF-8', false); + $url = str_replace(array("[", "]"), array("[", "]"), htmlentities($url, ENT_QUOTES, 'UTF-8', false)); + $title = str_replace(array("[", "]"), array("[", "]"), htmlentities($title, ENT_QUOTES, 'UTF-8', false)); + $preview = str_replace(array("[", "]"), array("[", "]"), htmlentities($preview, ENT_QUOTES, 'UTF-8', false)); $Text = trim($shared[1])."\n[attachment type='".$type."'"; @@ -165,7 +165,7 @@ function bb_rearrange_share($shared) { if ($preview != "") { require_once("include/Photo.php"); $picturedata = get_photo_info($preview); -// echo $preview."*".print_r($picturedata, true)."*"; + if (count($picturedata) > 0) { // if the preview picture is larger than 500 pixels then show it in a larger mode // But only, if the picture isn't higher than large (To prevent huge posts) @@ -281,8 +281,6 @@ function tryoembed($match){ if (isset($match[2])) $o->title = $match[2]; - //echo "
"; var_dump($match, $url, $o); killme();
-
 	if ($o->type=="error") return $match[0];
 
 	$html = oembed_format_object($o);

From 5468b9b2a52f75f98905ca08d80559460807df39 Mon Sep 17 00:00:00 2001
From: Michael Vogel 
Date: Thu, 28 Aug 2014 01:14:46 +0200
Subject: [PATCH 04/12] oembed: Prevent empty links

---
 include/oembed.php | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/include/oembed.php b/include/oembed.php
index 4a95bd8a4..2ecb11e1f 100755
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -175,13 +175,16 @@ function oembed_format_object($j){
 
 				$embedlink .= $j->author_name;
 			}
+			if (trim($embedlink) == "")
+				$embedlink = $embedurl;
+
 			$ret .= "$embedlink";
 		}
 		//if (isset($j->author_name)) $ret.=" by ".$j->author_name;
 		//if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;
 	} else {
 		// add  for html2bbcode conversion
-		$ret .= "";
+		$ret .= "$embedurl";
 	}
 	$ret.="
"; return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret)); From 4d3e3eb4d129cfe4f65fec03598c64c989d4cb47 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 28 Aug 2014 01:15:40 +0200 Subject: [PATCH 05/12] Bugfix: connecting with other users now works again. --- view/templates/dfrn_request.tpl | 1 + 1 file changed, 1 insertion(+) diff --git a/view/templates/dfrn_request.tpl b/view/templates/dfrn_request.tpl index dbd2e543d..82d5f67e9 100644 --- a/view/templates/dfrn_request.tpl +++ b/view/templates/dfrn_request.tpl @@ -29,6 +29,7 @@ {{if $myaddr}} {{$myaddr}} + {{else}} {{/if}} From ea0f75a3150a045b807c04ad5b11592fb799c597 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 30 Aug 2014 02:08:33 +0200 Subject: [PATCH 06/12] Bugfix: It was impossible to add groups. --- view/templates/auto_request.tpl | 1 + 1 file changed, 1 insertion(+) diff --git a/view/templates/auto_request.tpl b/view/templates/auto_request.tpl index 61a772cba..e8ea75946 100644 --- a/view/templates/auto_request.tpl +++ b/view/templates/auto_request.tpl @@ -30,6 +30,7 @@ {{if $myaddr}} {{$myaddr}} + {{else}} {{/if}} From c81df2c005f8b93016fa2fd2f3532a6a0260f2e5 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 31 Aug 2014 23:52:25 +0200 Subject: [PATCH 07/12] Remote-self is now working immediately --- include/items.php | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/include/items.php b/include/items.php index d929278e2..73b0af7d2 100644 --- a/include/items.php +++ b/include/items.php @@ -983,7 +983,7 @@ function encode_rel_links($links) { -function item_store($arr,$force_parent = false) { +function item_store($arr,$force_parent = false, $notify = false) { // If a Diaspora signature structure was passed in, pull it out of the // item array and set it aside for later storage. @@ -1144,6 +1144,7 @@ function item_store($arr,$force_parent = false) { $allow_gid = $arr['allow_gid']; $deny_cid = $arr['deny_cid']; $deny_gid = $arr['deny_gid']; + $notify_type = 'wall-new'; } else { @@ -1180,6 +1181,7 @@ function item_store($arr,$force_parent = false) { $deny_cid = $r[0]['deny_cid']; $deny_gid = $r[0]['deny_gid']; $arr['wall'] = $r[0]['wall']; + $notify_type = 'comment-new'; // if the parent is private, force privacy for the entire conversation // This differs from the above settings as it subtly allows comments from @@ -1417,6 +1419,9 @@ function item_store($arr,$force_parent = false) { create_tags_from_item($current_post); create_files_from_item($current_post); + if ($notify) + proc_run('php', "include/notifier.php", $notify_type, $current_post); + return $current_post; } @@ -2532,16 +2537,6 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if($contact['network'] === NETWORK_FEED) $datarray['private'] = 2; - // This is my contact on another system, but it's really me. - // Turn this into a wall post. - - if($contact['remote_self']) { - $datarray['wall'] = 1; - if($contact['network'] === NETWORK_FEED) { - $datarray['private'] = 0; - } - } - $datarray['parent-uri'] = $item_id; $datarray['uid'] = $importer['uid']; $datarray['contact-id'] = $contact['id']; @@ -2557,6 +2552,24 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $datarray['owner-avatar'] = $contact['thumb']; } + // This is my contact on another system, but it's really me. + // Turn this into a wall post. + + if($contact['remote_self']) { + $datarray['wall'] = 1; + + // Test + $datarray['author-name'] = $datarray['owner-name']; + $datarray['author-link'] = $datarray['owner-link']; + $datarray['author-avatar'] = $datarray['owner-avatar']; + + $notify = true; + if($contact['network'] === NETWORK_FEED) { + $datarray['private'] = 0; + } + } else + $notify = false; + // We've allowed "followers" to reach this point so we can decide if they are // posting an @-tag delivery, which followers are allowed to do for certain // page types. Now that we've parsed the post, let's check if it is legit. Otherwise ignore it. @@ -2565,7 +2578,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) continue; - $r = item_store($datarray); + $r = item_store($datarray, false, $notify); continue; } @@ -3636,8 +3649,12 @@ function local_delivery($importer,$data) { // This is my contact on another system, but it's really me. // Turn this into a wall post. - if($importer['remote_self']) + if($importer['remote_self']) { $datarray['wall'] = 1; + $notify = true; + } else + $notify = false; + $datarray['parent-uri'] = $item_id; $datarray['uid'] = $importer['importer_uid']; @@ -3658,7 +3675,7 @@ function local_delivery($importer,$data) { if(($importer['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['importer_uid'],$datarray))) continue; - $posted_id = item_store($datarray); + $posted_id = item_store($datarray, false, $notify); if(stristr($datarray['verb'],ACTIVITY_POKE)) { $verb = urldecode(substr($datarray['verb'],strpos($datarray['verb'],'#')+1)); From 522b9edffe15ef76b471cefda6d029e3aafa1bfe Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 1 Sep 2014 09:59:58 +0200 Subject: [PATCH 08/12] remote-self: Seting the author name to the owner name --- include/items.php | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/include/items.php b/include/items.php index 73b0af7d2..c3deed35d 100644 --- a/include/items.php +++ b/include/items.php @@ -2552,6 +2552,13 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $datarray['owner-avatar'] = $contact['thumb']; } + // We've allowed "followers" to reach this point so we can decide if they are + // posting an @-tag delivery, which followers are allowed to do for certain + // page types. Now that we've parsed the post, let's check if it is legit. Otherwise ignore it. + + if(($contact['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['uid'],$datarray))) + continue; + // This is my contact on another system, but it's really me. // Turn this into a wall post. @@ -2570,14 +2577,6 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) } else $notify = false; - // We've allowed "followers" to reach this point so we can decide if they are - // posting an @-tag delivery, which followers are allowed to do for certain - // page types. Now that we've parsed the post, let's check if it is legit. Otherwise ignore it. - - if(($contact['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['uid'],$datarray))) - continue; - - $r = item_store($datarray, false, $notify); continue; @@ -3646,16 +3645,6 @@ function local_delivery($importer,$data) { continue; } - // This is my contact on another system, but it's really me. - // Turn this into a wall post. - - if($importer['remote_self']) { - $datarray['wall'] = 1; - $notify = true; - } else - $notify = false; - - $datarray['parent-uri'] = $item_id; $datarray['uid'] = $importer['importer_uid']; $datarray['contact-id'] = $importer['id']; @@ -3675,6 +3664,21 @@ function local_delivery($importer,$data) { if(($importer['rel'] == CONTACT_IS_FOLLOWER) && (! tgroup_check($importer['importer_uid'],$datarray))) continue; + // This is my contact on another system, but it's really me. + // Turn this into a wall post. + + if($importer['remote_self']) { + $datarray['wall'] = 1; + + // Test + $datarray['author-name'] = $datarray['owner-name']; + $datarray['author-link'] = $datarray['owner-link']; + $datarray['author-avatar'] = $datarray['owner-avatar']; + + $notify = true; + } else + $notify = false; + $posted_id = item_store($datarray, false, $notify); if(stristr($datarray['verb'],ACTIVITY_POKE)) { From e35c55dd3bd5de9cd39abaeb2d7d0867f681886d Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 1 Sep 2014 14:00:21 +0200 Subject: [PATCH 09/12] Remote-self: It is now possible to chose between two different modes of mirroring. --- include/items.php | 39 ++++++++++++++++++++++++++++++-------- mod/crepair.php | 2 +- view/templates/crepair.tpl | 2 +- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/include/items.php b/include/items.php index c3deed35d..0df200aeb 100644 --- a/include/items.php +++ b/include/items.php @@ -2565,10 +2565,21 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if($contact['remote_self']) { $datarray['wall'] = 1; - // Test - $datarray['author-name'] = $datarray['owner-name']; - $datarray['author-link'] = $datarray['owner-link']; - $datarray['author-avatar'] = $datarray['owner-avatar']; + if ($contact['remote_self'] == 2) { + $r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['uid'])); + if (count($r)) { + $datarray['contact-id'] = $r[0]["id"]; + $datarray['network'] = $r[0]["network"]; + + $datarray['owner-name'] = $r[0]["name"]; + $datarray['owner-link'] = $r[0]["url"]; + $datarray['owner-avatar'] = $r[0]["photo"]; + + $datarray['author-name'] = $datarray['owner-name']; + $datarray['author-link'] = $datarray['owner-link']; + $datarray['author-avatar'] = $datarray['owner-avatar']; + } + } $notify = true; if($contact['network'] === NETWORK_FEED) { @@ -3670,10 +3681,22 @@ function local_delivery($importer,$data) { if($importer['remote_self']) { $datarray['wall'] = 1; - // Test - $datarray['author-name'] = $datarray['owner-name']; - $datarray['author-link'] = $datarray['owner-link']; - $datarray['author-avatar'] = $datarray['owner-avatar']; + if ($importer['remote_self'] == 2) { + $r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", + intval($importer['importer_uid'])); + if (count($r)) { + $datarray['contact-id'] = $r[0]["id"]; + $datarray['network'] = $r[0]["network"]; + + $datarray['owner-name'] = $r[0]["name"]; + $datarray['owner-link'] = $r[0]["url"]; + $datarray['owner-avatar'] = $r[0]["photo"]; + + $datarray['author-name'] = $datarray['owner-name']; + $datarray['author-link'] = $datarray['owner-link']; + $datarray['author-avatar'] = $datarray['owner-avatar']; + } + } $notify = true; } else diff --git a/mod/crepair.php b/mod/crepair.php index ef5f36130..0706a102d 100644 --- a/mod/crepair.php +++ b/mod/crepair.php @@ -158,7 +158,7 @@ function crepair_content(&$a) { '$label_photo' => t('New photo from this URL'), '$label_remote_self' => t('Remote Self'), '$allow_remote_self' => get_config('system','allow_users_remote_self'), - '$remote_self' => array('remote_self', t('Mirror postings from this contact'), $contact['remote_self'], t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.')), + '$remote_self' => array('remote_self', t('Mirror postings from this contact'), $contact['remote_self'], t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'), array('0'=>t('No mirroring'), '1'=>t('Mirror as forwarded posting'), '2'=>t('Mirror as my own posting'))), '$contact_name' => $contact['name'], '$contact_nick' => $contact['nick'], '$contact_id' => $contact['id'], diff --git a/view/templates/crepair.tpl b/view/templates/crepair.tpl index d53af5dad..37e2ef417 100644 --- a/view/templates/crepair.tpl +++ b/view/templates/crepair.tpl @@ -39,7 +39,7 @@
{{if $allow_remote_self eq 1}}

{{$label_remote_self}}

-{{include file="field_checkbox.tpl" field=$remote_self}} +{{include file="field_select.tpl" field=$remote_self}} {{/if}} From 3e9e682723d2391e4200570ebae155655e4d19d5 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 1 Sep 2014 14:40:29 +0200 Subject: [PATCH 10/12] remote-self: Moved some functionality from other place into the "item_store" function --- include/items.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/items.php b/include/items.php index 0df200aeb..5a238d4fd 100644 --- a/include/items.php +++ b/include/items.php @@ -985,6 +985,13 @@ function encode_rel_links($links) { function item_store($arr,$force_parent = false, $notify = false) { + // If it is a posting where users should get notifications, then define it as wall posting + if ($notify) { + $arr['wall'] = 1; + $arr['type'] = 'wall'; + $arr['network'] = NETWORK_DFRN; + } + // If a Diaspora signature structure was passed in, pull it out of the // item array and set it aside for later storage. @@ -2563,13 +2570,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) // Turn this into a wall post. if($contact['remote_self']) { - $datarray['wall'] = 1; - if ($contact['remote_self'] == 2) { $r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['uid'])); if (count($r)) { $datarray['contact-id'] = $r[0]["id"]; - $datarray['network'] = $r[0]["network"]; $datarray['owner-name'] = $r[0]["name"]; $datarray['owner-link'] = $r[0]["url"]; @@ -3679,14 +3683,11 @@ function local_delivery($importer,$data) { // Turn this into a wall post. if($importer['remote_self']) { - $datarray['wall'] = 1; - if ($importer['remote_self'] == 2) { $r = q("SELECT `id`,`url`,`name`,`photo`,`network` FROM `contact` WHERE `uid` = %d AND `self`", intval($importer['importer_uid'])); if (count($r)) { $datarray['contact-id'] = $r[0]["id"]; - $datarray['network'] = $r[0]["network"]; $datarray['owner-name'] = $r[0]["name"]; $datarray['owner-link'] = $r[0]["url"]; From 23c4c39a1ff7a35abc4314eded7ad5d1ab5e5867 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 1 Sep 2014 15:28:31 +0200 Subject: [PATCH 11/12] remote-self: "origin" and "last-child" need to be set as well. --- include/items.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/items.php b/include/items.php index 5a238d4fd..93bdcb4c3 100644 --- a/include/items.php +++ b/include/items.php @@ -989,6 +989,8 @@ function item_store($arr,$force_parent = false, $notify = false) { if ($notify) { $arr['wall'] = 1; $arr['type'] = 'wall'; + $arr['origin'] = 1; + $arr['last-child'] = 1; $arr['network'] = NETWORK_DFRN; } From 2b182b2dcfd299a28a5ef020ad539eeef226e519 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 1 Sep 2014 16:55:16 +0200 Subject: [PATCH 12/12] After a new friendica contact is added, the user is directed to the contact page of the new contact. (Instead of the remote profile) --- mod/dfrn_request.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index 6f6ce61a9..7440c8ab4 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -183,7 +183,9 @@ function dfrn_request_post(&$a) { require_once('include/group.php'); group_add_member(local_user(),'',$r[0]['id'],$g[0]['def_gid']); } - } + $forwardurl = $a->get_baseurl()."/contacts/".$r[0]['id']; + } else + $forwardurl = $a->get_baseurl()."/contacts"; /** * Allow the blocked remote notification to complete @@ -197,7 +199,8 @@ function dfrn_request_post(&$a) { // (ignore reply, nothing we can do it failed) - goaway(zrl($dfrn_url)); + // Old: goaway(zrl($dfrn_url)); + goaway($forwardurl); return; // NOTREACHED }