From f6ea87298643a1fb1b948ed78b059c39d1c070f2 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 9 Apr 2015 00:10:21 +0200 Subject: [PATCH 1/6] The behaviour when following a new contact is now unified. --- include/follow.php | 4 +- mod/dfrn_request.php | 15 ++++++ mod/follow.php | 84 +++++++++++++++++++++++++++++++-- view/templates/auto_request.tpl | 13 ++++- view/templates/dfrn_request.tpl | 13 ++++- view/templates/follow.tpl | 2 +- 6 files changed, 121 insertions(+), 10 deletions(-) mode change 100644 => 100755 mod/follow.php diff --git a/include/follow.php b/include/follow.php index ba036cd48d..287a38b6bf 100644 --- a/include/follow.php +++ b/include/follow.php @@ -15,7 +15,7 @@ function new_contact($uid,$url,$interactive = false) { - $result = array('success' => false,'message' => ''); + $result = array('cid' => -1, 'success' => false,'message' => ''); $a = get_app(); @@ -208,7 +208,7 @@ function new_contact($uid,$url,$interactive = false) { $contact = $r[0]; $contact_id = $r[0]['id']; - + $result['cid'] = $contact_id; $g = q("select def_gid from user where uid = %d limit 1", intval($uid) diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index aee8c0306f..62b6f4bd70 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -664,6 +664,21 @@ function dfrn_request_content(&$a) { $dfrn_url = notags(trim(hex2bin($_GET['dfrn_url']))); $aes_allow = (((x($_GET,'aes_allow')) && ($_GET['aes_allow'] == 1)) ? 1 : 0); $confirm_key = (x($_GET,'confirm_key') ? $_GET['confirm_key'] : ""); + + // Checking fastlane for validity + if (x($_SESSION, "fastlane") AND (normalise_link($_SESSION["fastlane"]) == normalise_link($dfrn_url))) { + $_POST["dfrn_url"] = $dfrn_url; + $_POST["confirm_key"] = $confirm_key; + $_POST["localconfirm"] = 1; + $_POST["hidden-contact"] = 0; + $_POST["submit"] = t('Confirm'); + + dfrn_request_post($a); + + killme(); + return; // NOTREACHED + } + $tpl = get_markup_template("dfrn_req_confirm.tpl"); $o = replace_macros($tpl,array( '$dfrn_url' => $dfrn_url, diff --git a/mod/follow.php b/mod/follow.php old mode 100644 new mode 100755 index 5c2c764c7c..b9401ee825 --- a/mod/follow.php +++ b/mod/follow.php @@ -3,7 +3,7 @@ require_once('include/Scrape.php'); require_once('include/follow.php'); -function follow_init(&$a) { +function follow_content(&$a) { if(! local_user()) { notice( t('Permission denied.') . EOL); @@ -11,10 +11,85 @@ function follow_init(&$a) { // NOTREACHED } + $uid = local_user(); + $url = notags(trim($_REQUEST['url'])); + + $r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND (`nurl` = '%s' OR `alias` = '%s' OR `alias` = '%s') LIMIT 1", + intval(local_user()), dbesc(normalise_link($url)), dbesc(normalise_link($url)), dbesc($url)); + + if ($r) { + notice(t('You already added this contact.').EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + $ret = probe_url($url); + + if($ret['network'] === NETWORK_DFRN) { + $request = $ret["request"]; + $tpl = get_markup_template('dfrn_request.tpl'); + } else { + $request = $a->get_baseurl()."/follow"; + $tpl = get_markup_template('auto_request.tpl'); + } + + $r = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", intval($uid)); + + if (!$r) { + notice( t('Permission denied.') . EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + $myaddr = $r[0]["url"]; + + // Makes the connection request for friendica contacts easier + $_SESSION["fastlane"] = $ret["url"]; + + $o = replace_macros($tpl,array( + '$header' => $ret["name"]." (".$ret["addr"].")", + '$photo' => $ret["photo"], + '$desc' => "", + '$pls_answer' => t('Please answer the following:'), + '$does_know_you' => array('knowyou', sprintf(t('Does %s know you?'),$ret["name"]), false, '', array(t('No'),t('Yes'))), + '$add_note' => t('Add a personal note:'), + '$page_desc' => "", + '$friendica' => "", + '$statusnet' => "", + '$diaspora' => "", + '$diasnote' => "", + '$your_address' => t('Your Identity Address:'), + '$invite_desc' => "", + '$emailnet' => "", + '$submit' => t('Submit Request'), + '$cancel' => t('Cancel'), + '$nickname' => "", + '$name' => $ret["name"], + '$url' => $ret["url"], + '$myaddr' => $myaddr, + '$request' => $request + )); + return $o; +} + +function follow_post(&$a) { + + if(! local_user()) { + notice( t('Permission denied.') . EOL); + goaway($_SESSION['return_url']); + // NOTREACHED + } + + if ($_REQUEST['cancel']) + goaway($_SESSION['return_url']); + $uid = local_user(); $url = notags(trim($_REQUEST['url'])); $return_url = $_SESSION['return_url']; + // Makes the connection request for friendica contacts easier + // This is just a precaution if maybe this page is called somewhere directly via POST + $_SESSION["fastlane"] = $url; $result = new_contact($uid,$url,true); @@ -22,12 +97,13 @@ function follow_init(&$a) { if($result['message']) notice($result['message']); goaway($return_url); - } + } elseif ($result['cid']) + goaway($a->get_baseurl().'/contacts/'.$result['cid']); - info( t('Contact added') . EOL); + info( t('Contact added').EOL); if(strstr($return_url,'contacts')) - goaway($a->get_baseurl() . '/contacts/' . $contact_id); + goaway($a->get_baseurl().'/contacts/'.$contact_id); goaway($return_url); // NOTREACHED diff --git a/view/templates/auto_request.tpl b/view/templates/auto_request.tpl index b987b7849c..56653c6550 100644 --- a/view/templates/auto_request.tpl +++ b/view/templates/auto_request.tpl @@ -20,16 +20,27 @@

{{/if}} +{{if $request}} +
+{{else}} +{{/if}} + +{{if $photo}} + +{{/if}}
{{if $myaddr}} {{$myaddr}} - + {{else}} {{/if}} + {{if $url}} + + {{/if}}
diff --git a/view/templates/dfrn_request.tpl b/view/templates/dfrn_request.tpl index 44c8ef1e6a..6c63c53315 100644 --- a/view/templates/dfrn_request.tpl +++ b/view/templates/dfrn_request.tpl @@ -1,5 +1,3 @@ - -

{{$header}}

{{if $myaddr}} @@ -19,7 +17,15 @@

{{/if}} +{{if $request}} + +{{else}} +{{/if}} + +{{if $photo}} + +{{/if}}
@@ -29,6 +35,9 @@ {{else}} {{/if}} + {{if $url}} + + {{/if}}
diff --git a/view/templates/follow.tpl b/view/templates/follow.tpl index c4d1887657..ece5ed17b8 100644 --- a/view/templates/follow.tpl +++ b/view/templates/follow.tpl @@ -2,7 +2,7 @@

{{$connect}}

{{$desc}}
- +
From 015ebd7d1bef1dfbda1cc62a8e846b567a0ecbb3 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 9 Apr 2015 00:33:45 +0200 Subject: [PATCH 2/6] "fastlane" should now work with remote adding as well. --- boot.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boot.php b/boot.php index 6da885117a..eb5c7e5cba 100644 --- a/boot.php +++ b/boot.php @@ -1695,6 +1695,8 @@ if(! function_exists('profile_sidebar')) { if($a->theme['template_engine'] === 'internal') $location = template_escape($location); + if ($connect) + $_SESSION["fastlane"] = $p["url"]; $tpl = get_markup_template('profile_vcard.tpl'); $o .= replace_macros($tpl, array( From ccbac6874baa8b82c2d0cede825c7f3572d3ea92 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 9 Apr 2015 07:45:48 +0200 Subject: [PATCH 3/6] The "connect" link ar the display page now directs to the new "follow" page as well. --- mod/display.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/mod/display.php b/mod/display.php index f483977cd4..02ff37bf83 100644 --- a/mod/display.php +++ b/mod/display.php @@ -193,11 +193,13 @@ function display_fetchauthor($a, $item) { } 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); + if (in_array($profiledata["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) + $profiledata["remoteconnect"] = $a->get_baseurl()."/follow?url=".urlencode($profiledata["url"]); + //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; From 98bf8d85fa81ada5096104a97ed206f86081f534 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 9 Apr 2015 19:35:17 +0200 Subject: [PATCH 4/6] The "fastlane" can be removed there. --- boot.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/boot.php b/boot.php index eb5c7e5cba..cb380ed995 100644 --- a/boot.php +++ b/boot.php @@ -1695,9 +1695,6 @@ if(! function_exists('profile_sidebar')) { if($a->theme['template_engine'] === 'internal') $location = template_escape($location); - if ($connect) - $_SESSION["fastlane"] = $p["url"]; - $tpl = get_markup_template('profile_vcard.tpl'); $o .= replace_macros($tpl, array( '$profile' => $p, From 0e895e24f7791fbbfec99fc7b911ba27613cc135 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 11 Apr 2015 22:14:56 +0200 Subject: [PATCH 5/6] Code reworks: replaced hardcoded network text with the corresponding constants. --- include/acl_selectors.php | 14 +++++++------- include/conversation.php | 2 +- include/text.php | 2 +- mod/contacts.php | 4 ++-- mod/dfrn_confirm.php | 3 ++- mod/photos.php | 2 +- mod/profperm.php | 12 +++++++----- 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 668544b0bc..1e43431612 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -78,19 +78,19 @@ function contact_selector($selname, $selclass, $preselected = false, $options) { if(x($options,'networks')) { switch($options['networks']) { case 'DFRN_ONLY': - $networks = array('dfrn'); + $networks = array(NETWORK_DFRN); break; case 'PRIVATE': if(is_array($a->user) && $a->user['prvnets']) - $networks = array('dfrn','mail','dspr'); + $networks = array(NETWORK_DFRN,NETWORK_MAIL,NETWORK_DIASPORA); else - $networks = array('dfrn','face','mail', 'dspr'); + $networks = array(NETWORK_DFRN,NETWORK_FACEBOOK,NETWORK_MAIL, NETWORK_DIASPORA); break; case 'TWO_WAY': if(is_array($a->user) && $a->user['prvnets']) - $networks = array('dfrn','mail','dspr'); + $networks = array(NETWORK_DFRN,NETWORK_MAIL,NETWORK_DIASPORA); else - $networks = array('dfrn','face','mail','dspr','stat'); + $networks = array(NETWORK_DFRN,NETWORK_FACEBOOK,NETWORK_MAIL,NETWORK_DIASPORA,NETWORK_OSTATUS); break; default: break; @@ -182,10 +182,10 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p } if($privmail) { - $sql_extra .= " AND `network` IN ( 'dfrn', 'dspr' ) "; + $sql_extra .= " AND `network` IN ( NETWORK_DFRN, NETWORK_DIASPORA ) "; } elseif($privatenet) { - $sql_extra .= " AND `network` IN ( 'dfrn', 'mail', 'face', 'dspr' ) "; + $sql_extra .= " AND `network` IN ( NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA ) "; } $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : ""); diff --git a/include/conversation.php b/include/conversation.php index 20b54728c9..a6ea4da810 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -908,7 +908,7 @@ function like_puller($a,$item,&$arr,$mode) { if((activity_match($item['verb'],$verb)) && ($item['id'] != $item['parent'])) { $url = $item['author-link']; - if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === 'dfrn') && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) { + if((local_user()) && (local_user() == $item['uid']) && ($item['network'] === NETWORK_DFRN) && (! $item['self']) && (link_compare($item['author-link'],$item['url']))) { $url = $a->get_baseurl(true) . '/redir/' . $item['contact-id']; $sparkle = ' class="sparkle" '; } diff --git a/include/text.php b/include/text.php index 8ce54b3c67..fd5ae0a2b6 100644 --- a/include/text.php +++ b/include/text.php @@ -920,7 +920,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) { if($redirect) { $a = get_app(); $redirect_url = $a->get_baseurl() . '/redir/' . $contact['id']; - if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === 'dfrn')) { + if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === NETWORK_DFRN)) { $redir = true; $url = $redirect_url; $sparkle = ' sparkle'; diff --git a/mod/contacts.php b/mod/contacts.php index 95b1944dc8..4a0d34a467 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -33,7 +33,7 @@ function contacts_init(&$a) { $vcard_widget = replace_macros(get_markup_template("vcard-widget.tpl"),array( '$name' => $a->data['contact']['name'], '$photo' => $a->data['contact']['photo'], - '$url' => ($a->data['contact']['network'] == 'dfrn') ? $a->get_baseurl()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'] + '$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? $a->get_baseurl()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'] )); $follow_widget = ''; } @@ -681,7 +681,7 @@ function contacts_content(&$a) { default: break; } - if(($rr['network'] === 'dfrn') && ($rr['rel'])) { + if(($rr['network'] === NETWORK_DFRN) && ($rr['rel'])) { $url = "redir/{$rr['id']}"; $sparkle = ' class="sparkle" '; } diff --git a/mod/dfrn_confirm.php b/mod/dfrn_confirm.php index f1ce296d90..1cc258853b 100644 --- a/mod/dfrn_confirm.php +++ b/mod/dfrn_confirm.php @@ -340,7 +340,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { `pending` = 0, `duplex` = %d, `hidden` = %d, - `network` = 'dfrn' WHERE `id` = %d + `network` = '%s' WHERE `id` = %d ", dbesc($photos[0]), dbesc($photos[1]), @@ -351,6 +351,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) { dbesc(datetime_convert()), intval($duplex), intval($hidden), + dbesc(NETWORK_DFRN), intval($contact_id) ); } diff --git a/mod/photos.php b/mod/photos.php index 003bcd9150..f8bba01b00 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1628,7 +1628,7 @@ function photos_content(&$a) { if(local_user() && ($item['contact-uid'] == local_user()) - && ($item['network'] == 'dfrn') && (! $item['self'] )) { + && ($item['network'] == NETWORK_DFRN) && (! $item['self'] )) { $profile_url = $redirect_url; $sparkle = ' sparkle'; } diff --git a/mod/profperm.php b/mod/profperm.php index 444f7a5eab..077f695bea 100644 --- a/mod/profperm.php +++ b/mod/profperm.php @@ -37,7 +37,8 @@ function profperm_content(&$a) { if(($a->argc > 2) && intval($a->argv[1]) && intval($a->argv[2])) { $r = q("SELECT `id` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `self` = 0 - AND `network` = 'dfrn' AND `id` = %d AND `uid` = %d LIMIT 1", + AND `network` = '%s' AND `id` = %d AND `uid` = %d LIMIT 1", + dbesc(NETWORK_DFRN), intval($a->argv[2]), intval(local_user()) ); @@ -130,10 +131,11 @@ function profperm_content(&$a) { $o .= '

' . t("All Contacts \x28with secure profile access\x29") . '

'; $o .= ''; $o .= '
'; - - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 - AND `network` = 'dfrn' ORDER BY `name` ASC", - intval(local_user()) + + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `blocked` = 0 and `pending` = 0 and `self` = 0 + AND `network` = '%s' ORDER BY `name` ASC", + intval(local_user()), + dbesc(NETWORK_DFRN) ); if(count($r)) { From 04d9d9863d114e14cea54517c753faf7f7d169ca Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 11 Apr 2015 23:56:53 +0200 Subject: [PATCH 6/6] Fixed "Copy and paste" bug. --- include/acl_selectors.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 1e43431612..b2c4b31c81 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -181,12 +181,12 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p $sql_extra .= sprintf(" AND `rel` = %d ", intval(CONTACT_IS_FRIEND)); } - if($privmail) { - $sql_extra .= " AND `network` IN ( NETWORK_DFRN, NETWORK_DIASPORA ) "; - } - elseif($privatenet) { - $sql_extra .= " AND `network` IN ( NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA ) "; - } + if($privmail) + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s') ", + NETWORK_DFRN, NETWORK_DIASPORA); + elseif($privatenet) + $sql_extra .= sprintf(" AND `network` IN ('%s' , '%s', '%s', '%s') ", + NETWORK_DFRN, NETWORK_MAIL, NETWORK_FACEBOOK, NETWORK_DIASPORA); $tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : "");