X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fdfrn_request.php;h=52b5eb9f90f076a7fb1508e4393d7fe783e3405b;hb=da30538a980264da72a7c370013e60b2cb55aafa;hp=62b6f4bd700f80aaea4dc69729e57eeb238d2f1e;hpb=178b7eba1b6fea46b73ddc25dac9e669b8446a7a;p=friendica.git diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php index 62b6f4bd70..52b5eb9f90 100644 --- a/mod/dfrn_request.php +++ b/mod/dfrn_request.php @@ -1,25 +1,30 @@ argc > 1) $which = $a->argv[1]; profile_load($a,$which); return; -}} +} /** @@ -37,12 +42,12 @@ function dfrn_request_init(&$a) { * After logging in, we click 'submit' to approve the linkage. * */ +function dfrn_request_post(App $a) { -if(! function_exists('dfrn_request_post')) { -function dfrn_request_post(&$a) { - - if(($a->argc != 2) || (! count($a->profile))) + if(($a->argc != 2) || (! count($a->profile))) { + logger('Wrong count of argc or profiles: argc=' . $a->argc . ',profile()=' . count($a->profile)); return; + } if(x($_POST, 'cancel')) { @@ -50,7 +55,7 @@ function dfrn_request_post(&$a) { } - /** + /* * * Scenario 2: We've introduced ourself to another cell, then have been returned to our own cell * to confirm the request, and then we've clicked submit (perhaps after logging in). @@ -60,7 +65,7 @@ function dfrn_request_post(&$a) { if((x($_POST,'localconfirm')) && ($_POST['localconfirm'] == 1)) { - /** + /* * Ensure this is a valid request */ @@ -72,23 +77,24 @@ function dfrn_request_post(&$a) { $confirm_key = ((x($_POST,'confirm_key')) ? $_POST['confirm_key'] : ""); $hidden = ((x($_POST,'hidden-contact')) ? intval($_POST['hidden-contact']) : 0); $contact_record = null; + $blocked = 1; + $pending = 1; if(x($dfrn_url)) { - /** + /* * Lookup the contact based on their URL (which is the only unique thing we have at the moment) */ - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND (`url` = '%s' OR `nurl` = '%s') AND `self` = 0 LIMIT 1", + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `nurl` = '%s' AND NOT `self` LIMIT 1", intval(local_user()), - dbesc($dfrn_url), dbesc(normalise_link($dfrn_url)) ); - if(count($r)) { + if (dbm::is_result($r)) { if(strlen($r[0]['dfrn-id'])) { - /** + /* * We don't need to be here. It has already happened. */ @@ -108,25 +114,25 @@ function dfrn_request_post(&$a) { } else { - /** + /* * Scrape the other site's profile page to pick up the dfrn links, key, fn, and photo */ - require_once('include/Scrape.php'); + $parms = Probe::profile($dfrn_url); - $parms = scrape_dfrn($dfrn_url); - - if(! count($parms)) { + if (! count($parms)) { notice( t('Profile location is not valid or does not contain profile information.') . EOL ); return; } else { - if(! x($parms,'fn')) + if (! x($parms,'fn')) { notice( t('Warning: profile location has no identifiable owner name.') . EOL ); - if(! x($parms,'photo')) + } + if (! x($parms,'photo')) { notice( t('Warning: profile location has no profile photo.') . EOL ); - $invalid = validate_dfrn($parms); - if($invalid) { + } + $invalid = Probe::valid_dfrn($parms); + if ($invalid) { notice( sprintf( tt("%d required parameter was not found at the given location", "%d required parameters were not found at the given location", $invalid), $invalid) . EOL ); @@ -136,23 +142,23 @@ function dfrn_request_post(&$a) { $dfrn_request = $parms['dfrn-request']; - /********* Escape the entire array ********/ - - dbesc_array($parms); + $photo = $parms["photo"]; - /******************************************/ + // Escape the entire array + dbm::esc_array($parms); - /** + /* * Create a contact record on our site for the other person */ - $r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `nurl`, `name`, `nick`, `photo`, `site-pubkey`, - `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`) - VALUES ( %d, '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)", + $r = q("INSERT INTO `contact` ( `uid`, `created`,`url`, `nurl`, `addr`, `name`, `nick`, `photo`, `site-pubkey`, + `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `aes_allow`, `hidden`, `blocked`, `pending`) + VALUES ( %d, '%s', '%s', '%s', '%s', '%s' , '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d)", intval(local_user()), datetime_convert(), dbesc($dfrn_url), dbesc(normalise_link($dfrn_url)), + $parms['addr'], $parms['fn'], $parms['nick'], $parms['photo'], @@ -164,40 +170,45 @@ function dfrn_request_post(&$a) { $parms['dfrn-poco'], dbesc(NETWORK_DFRN), intval($aes_allow), - intval($hidden) + intval($hidden), + intval($blocked), + intval($pending) ); } - if($r) { + if ($r) { info( t("Introduction complete.") . EOL); } - $r = q("select id from contact where uid = %d and url = '%s' and `site-pubkey` = '%s' limit 1", + $r = q("SELECT `id`, `network` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `site-pubkey` = '%s' LIMIT 1", intval(local_user()), dbesc($dfrn_url), $parms['key'] // this was already escaped ); - if(count($r)) { - $g = q("select def_gid from user where uid = %d limit 1", - intval(local_user()) - ); - if($g && intval($g[0]['def_gid'])) { - 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"; + if (dbm::is_result($r)) { + $def_gid = get_default_group(local_user(), $r[0]["network"]); + if(intval($def_gid)) + group_add_member(local_user(), '', $r[0]['id'], $def_gid); + + if (isset($photo)) + update_contact_avatar($photo, local_user(), $r[0]["id"], true); - /** + $forwardurl = App::get_baseurl()."/contacts/".$r[0]['id']; + } else { + $forwardurl = App::get_baseurl()."/contacts"; + } + + /* * Allow the blocked remote notification to complete */ - if(is_array($contact_record)) + if (is_array($contact_record)) { $dfrn_request = $contact_record['request']; + } - if(strlen($dfrn_request) && strlen($confirm_key)) + if (strlen($dfrn_request) && strlen($confirm_key)) { $s = fetch_url($dfrn_request . '?confirm_key=' . $confirm_key); + } // (ignore reply, nothing we can do it failed) @@ -216,7 +227,7 @@ function dfrn_request_post(&$a) { return; // NOTREACHED } - /** + /* * Otherwise: * * Scenario 1: @@ -250,11 +261,13 @@ function dfrn_request_post(&$a) { $contact_record = null; $failed = false; $parms = null; + $blocked = 1; + $pending = 1; if( x($_POST,'dfrn_url')) { - /** + /* * Block friend request spam */ @@ -263,7 +276,7 @@ function dfrn_request_post(&$a) { dbesc(datetime_convert('UTC','UTC','now - 24 hours')), intval($uid) ); - if(count($r) > $maxreq) { + if (dbm::is_result($r) && count($r) > $maxreq) { notice( sprintf( t('%s has received too many connection requests today.'), $a->profile['name']) . EOL); notice( t('Spam protection measures have been invoked.') . EOL); notice( t('Friends are advised to please try again in 24 hours.') . EOL); @@ -271,7 +284,7 @@ function dfrn_request_post(&$a) { } } - /** + /* * * Cleanup old introductions that remain blocked. * Also remove the contact record, but only if there is no existing relationship @@ -285,10 +298,10 @@ function dfrn_request_post(&$a) { AND `intro`.`datetime` < UTC_TIMESTAMP() - INTERVAL 30 MINUTE ", dbesc(NETWORK_MAIL2) ); - if(count($r)) { - foreach($r as $rr) { + if (dbm::is_result($r)) { + foreach ($r as $rr) { if(! $rr['rel']) { - q("DELETE FROM `contact` WHERE `id` = %d", + q("DELETE FROM `contact` WHERE `id` = %d AND NOT `self`", intval($rr['cid']) ); } @@ -298,7 +311,7 @@ function dfrn_request_post(&$a) { } } - /** + /* * * Cleanup any old email intros - which will have a greater lifetime */ @@ -310,10 +323,10 @@ function dfrn_request_post(&$a) { AND `intro`.`datetime` < UTC_TIMESTAMP() - INTERVAL 3 DAY ", dbesc(NETWORK_MAIL2) ); - if(count($r)) { - foreach($r as $rr) { + if (dbm::is_result($r)) { + foreach ($r as $rr) { if(! $rr['rel']) { - q("DELETE FROM `contact` WHERE `id` = %d", + q("DELETE FROM `contact` WHERE `id` = %d AND NOT `self`", intval($rr['cid']) ); } @@ -348,8 +361,6 @@ function dfrn_request_post(&$a) { $nurl = normalise_url($host); $poll = 'email ' . random_string(); $notify = 'smtp ' . random_string(); - $blocked = 1; - $pending = 1; $network = NETWORK_MAIL2; $rel = CONTACT_IS_FOLLOWER; @@ -362,8 +373,8 @@ function dfrn_request_post(&$a) { $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", intval($uid) ); - if(! count($r)) { + if (! dbm::is_result($r)) { notice( t('This account has not been configured for email. Request failed.') . EOL); return; } @@ -386,20 +397,16 @@ function dfrn_request_post(&$a) { intval($rel) ); - $r = q("select id from contact where poll = '%s' and uid = %d limit 1", + $r = q("SELECT `id`, `network` FROM `contact` WHERE `poll` = '%s' AND `uid` = %d LIMIT 1", dbesc($poll), intval($uid) ); - if(count($r)) { + if (dbm::is_result($r)) { $contact_id = $r[0]['id']; - $g = q("select def_gid from user where uid = %d limit 1", - intval($uid) - ); - if($g && intval($g[0]['def_gid'])) { - require_once('include/group.php'); - group_add_member($uid,'',$contact_id,$g[0]['def_gid']); - } + $def_gid = get_default_group($uid, $r[0]["network"]); + if (intval($def_gid)) + group_add_member($uid, '', $contact_id, $def_gid); $photo = avatar_img($addr); @@ -427,8 +434,8 @@ function dfrn_request_post(&$a) { $hash = random_string(); - $r = q("insert into intro ( uid, `contact-id`, knowyou, note, hash, datetime, blocked ) - values( %d , %d, %d, '%s', '%s', '%s', %d ) ", + $r = q("INSERT INTO `intro` ( `uid`, `contact-id`, knowyou, note, hash, datetime, blocked ) + VALUES( %d , %d, %d, '%s', '%s', '%s', %d ) ", intval($uid), intval($contact_id), ((x($_POST,'knowyou') && ($_POST['knowyou'] == 1)) ? 1 : 0), @@ -440,30 +447,28 @@ function dfrn_request_post(&$a) { // Next send an email verify form to the requestor. - } - - else { + } else { + // Detect the network + $data = probe_url($url); + $network = $data["network"]; // Canonicalise email-style profile locator + $url = Probe::webfinger_dfrn($url,$hcard); + + if (substr($url,0,5) === 'stat:') { - $url = webfinger_dfrn($url,$hcard); + // Every time we detect the remote subscription we define this as OStatus. + // We do this even if it is not OStatus. + // we only need to pass this through another section of the code. + if ($network != NETWORK_DIASPORA) + $network = NETWORK_OSTATUS; - if(substr($url,0,5) === 'stat:') { - $network = NETWORK_OSTATUS; $url = substr($url,5); - } - else { + } else $network = NETWORK_DFRN; - } - } - - logger('dfrn_request: url: ' . $url); - - if(! strlen($url)) { - notice( t("Unable to resolve your name at the provided location.") . EOL); - return; } + logger('dfrn_request: url: ' . $url . ',network=' . $network, LOGGER_DEBUG); if($network === NETWORK_DFRN) { $ret = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `self` = 0 LIMIT 1", @@ -471,7 +476,7 @@ function dfrn_request_post(&$a) { dbesc($url) ); - if(count($ret)) { + if (dbm::is_result($ret)) { if(strlen($ret[0]['issued-id'])) { notice( t('You have already introduced yourself here.') . EOL ); return; @@ -497,34 +502,36 @@ function dfrn_request_post(&$a) { ); } else { - if(! validate_url($url)) { + if (! validate_url($url)) { notice( t('Invalid profile URL.') . EOL); - goaway($a->get_baseurl() . '/' . $a->cmd); + goaway(App::get_baseurl() . '/' . $a->cmd); return; // NOTREACHED } - if(! allowed_url($url)) { + if (! allowed_url($url)) { notice( t('Disallowed profile URL.') . EOL); - goaway($a->get_baseurl() . '/' . $a->cmd); + goaway(App::get_baseurl() . '/' . $a->cmd); return; // NOTREACHED } require_once('include/Scrape.php'); - $parms = scrape_dfrn(($hcard) ? $hcard : $url); + $parms = Probe::profile(($hcard) ? $hcard : $url); - if(! count($parms)) { + if (! count($parms)) { notice( t('Profile location is not valid or does not contain profile information.') . EOL ); - goaway($a->get_baseurl() . '/' . $a->cmd); + goaway(App::get_baseurl() . '/' . $a->cmd); } else { - if(! x($parms,'fn')) + if (! x($parms,'fn')) { notice( t('Warning: profile location has no identifiable owner name.') . EOL ); - if(! x($parms,'photo')) + } + if (! x($parms,'photo')) { notice( t('Warning: profile location has no profile photo.') . EOL ); - $invalid = validate_dfrn($parms); - if($invalid) { + } + $invalid = Probe::valid_dfrn($parms); + if ($invalid) { notice( sprintf( tt("%d required parameter was not found at the given location", "%d required parameters were not found at the given location", $invalid), $invalid) . EOL ); @@ -536,16 +543,17 @@ function dfrn_request_post(&$a) { $parms['url'] = $url; $parms['issued-id'] = $issued_id; + $photo = $parms["photo"]; - - dbesc_array($parms); - $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`,`name`, `nick`, `issued-id`, `photo`, `site-pubkey`, - `request`, `confirm`, `notify`, `poll`, `poco`, `network` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' )", + dbm::esc_array($parms); + $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `name`, `nick`, `issued-id`, `photo`, `site-pubkey`, + `request`, `confirm`, `notify`, `poll`, `poco`, `network`, `blocked`, `pending` ) + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )", intval($uid), dbesc(datetime_convert()), $parms['url'], - dbesc(normalise_link($parms['url'])), + dbesc(normalise_link($url)), + $parms['addr'], $parms['fn'], $parms['nick'], $parms['issued-id'], @@ -556,30 +564,34 @@ function dfrn_request_post(&$a) { $parms['dfrn-notify'], $parms['dfrn-poll'], $parms['dfrn-poco'], - dbesc(NETWORK_DFRN) + dbesc(NETWORK_DFRN), + intval($blocked), + intval($pending) ); // find the contact record we just created - if($r) { + if ($r) { $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `url` = '%s' AND `issued-id` = '%s' LIMIT 1", intval($uid), $parms['url'], $parms['issued-id'] ); - if(count($r)) + if (dbm::is_result($r)) { $contact_record = $r[0]; + update_contact_avatar($photo, $uid, $contact_record["id"], true); + } } } - if($r === false) { + if ($r === false) { notice( t('Failed to update contact record.') . EOL ); return; } $hash = random_string() . (string) time(); // Generate a confirm_key - if(is_array($contact_record)) { + if (is_array($contact_record)) { $ret = q("INSERT INTO `intro` ( `uid`, `contact-id`, `blocked`, `knowyou`, `note`, `hash`, `datetime`) VALUES ( %d, %d, 1, %d, '%s', '%s', '%s' )", intval($uid), @@ -593,12 +605,13 @@ function dfrn_request_post(&$a) { // This notice will only be seen by the requestor if the requestor and requestee are on the same server. - if(! $failed) + if (! $failed) { info( t('Your introduction has been sent.') . EOL ); + } // "Homecoming" - send the requestor back to their site to record the introduction. - $dfrn_url = bin2hex($a->get_baseurl() . '/profile/' . $nickname); + $dfrn_url = bin2hex(App::get_baseurl() . '/profile/' . $nickname); $aes_allow = ((function_exists('openssl_encrypt')) ? 1 : 0); goaway($parms['dfrn-request'] . "?dfrn_url=$dfrn_url" @@ -608,45 +621,54 @@ function dfrn_request_post(&$a) { ); // NOTREACHED // END $network === NETWORK_DFRN - } - elseif($network === NETWORK_OSTATUS) { + } elseif (($network != NETWORK_PHANTOM) AND ($url != "")) { - /** + /* * - * OStatus network - * Check contact existence - * Try and scrape together enough information to create a contact record, - * with us as CONTACT_IS_FOLLOWER * Substitute our user's feed URL into $url template * Send the subscriber home to subscribe * */ - $url = str_replace('{uri}', $a->get_baseurl() . '/profile/' . $nickname, $url); + // Diaspora needs the uri in the format user@domain.tld + // Diaspora will support the remote subscription in a future version + if ($network == NETWORK_DIASPORA) { + $uri = $nickname.'@'.$a->get_hostname(); + + if ($a->get_path()) + $uri .= '/'.$a->get_path(); + + $uri = urlencode($uri); + } else { + $uri = App::get_baseurl().'/profile/'.$nickname; + } + + $url = str_replace('{uri}', $uri, $url); goaway($url); // NOTREACHED - // END $network === NETWORK_OSTATUS + // END $network != NETWORK_PHANTOM + } else { + notice(t("Remote subscription can't be done for your network. Please subscribe directly on your system.").EOL); + return; } } return; -}} - +} +function dfrn_request_content(App $a) { -if(! function_exists('dfrn_request_content')) { -function dfrn_request_content(&$a) { - - if(($a->argc != 2) || (! count($a->profile))) + if (($a->argc != 2) || (! count($a->profile))) { return ""; + } // "Homecoming". Make sure we're logged in to this site as the correct user. Then offer a confirm button // to send us to the post section to record the introduction. - if(x($_GET,'dfrn_url')) { + if (x($_GET,'dfrn_url')) { - if(! local_user()) { + if (! local_user()) { info( t("Please login to confirm introduction.") . EOL ); /* setup the return URL to come back to this page if they use openid */ $_SESSION['return_url'] = $a->query_string; @@ -706,7 +728,7 @@ function dfrn_request_content(&$a) { dbesc($_GET['confirm_key']) ); - if(count($intro)) { + if (dbm::is_result($intro)) { $r = q("SELECT `contact`.*, `user`.* FROM `contact` LEFT JOIN `user` ON `contact`.`uid` = `user`.`uid` WHERE `contact`.`id` = %d LIMIT 1", @@ -715,7 +737,7 @@ function dfrn_request_content(&$a) { $auto_confirm = false; - if(count($r)) { + if (dbm::is_result($r)) { if(($r[0]['page-flags'] != PAGE_NORMAL) && ($r[0]['page-flags'] != PAGE_PRVGROUP)) $auto_confirm = true; @@ -728,7 +750,7 @@ function dfrn_request_content(&$a) { 'to_name' => $r[0]['username'], 'to_email' => $r[0]['email'], 'uid' => $r[0]['uid'], - 'link' => $a->get_baseurl() . '/notifications/intros', + 'link' => App::get_baseurl() . '/notifications/intros', 'source_name' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')), 'source_link' => $r[0]['url'], 'source_photo' => $r[0]['photo'], @@ -740,11 +762,11 @@ function dfrn_request_content(&$a) { if($auto_confirm) { require_once('mod/dfrn_confirm.php'); $handsfree = array( - 'uid' => $r[0]['uid'], - 'node' => $r[0]['nickname'], - 'dfrn_id' => $r[0]['issued-id'], + 'uid' => $r[0]['uid'], + 'node' => $r[0]['nickname'], + 'dfrn_id' => $r[0]['issued-id'], 'intro_id' => $intro[0]['id'], - 'duplex' => (($r[0]['page-flags'] == PAGE_FREELOVE) ? 1 : 0), + 'duplex' => (($r[0]['page-flags'] == PAGE_FREELOVE) ? 1 : 0), 'activity' => intval(get_pconfig($r[0]['uid'],'system','post_newfriend')) ); dfrn_confirm_post($a,$handsfree); @@ -768,7 +790,7 @@ function dfrn_request_content(&$a) { } else { - /** + /* * Normal web request. Display our user's introduction form. */ @@ -780,30 +802,31 @@ function dfrn_request_content(&$a) { } - /** + /* * Try to auto-fill the profile address */ // At first look if an address was provided // Otherwise take the local address - if (x($_GET,'addr') AND ($_GET['addr'] != "")) + if (x($_GET,'addr') AND ($_GET['addr'] != "")) { $myaddr = hex2bin($_GET['addr']); - elseif (x($_GET,'address') AND ($_GET['address'] != "")) + } elseif (x($_GET,'address') AND ($_GET['address'] != "")) { $myaddr = $_GET['address']; - elseif(local_user()) { - if(strlen($a->path)) { - $myaddr = $a->get_baseurl() . '/profile/' . $a->user['nickname']; - } - else { + } elseif (local_user()) { + if (strlen($a->path)) { + $myaddr = App::get_baseurl() . '/profile/' . $a->user['nickname']; + } else { $myaddr = $a->user['nickname'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3 ); } - } else // last, try a zrl + } else { + // last, try a zrl $myaddr = get_my_url(); + } $target_addr = $a->profile['nickname'] . '@' . substr(z_root(), strpos(z_root(),'://') + 3 ); - /** + /* * * The auto_request form only has the profile address * because nobody is going to read the comments and @@ -811,34 +834,41 @@ function dfrn_request_content(&$a) { * */ - if($a->profile['page-flags'] == PAGE_NORMAL) + if ($a->profile['page-flags'] == PAGE_NORMAL) { $tpl = get_markup_template('dfrn_request.tpl'); - else + } else { $tpl = get_markup_template('auto_request.tpl'); + } - $page_desc .= t("Please enter your 'Identity Address' from one of the following supported communications networks:"); + $page_desc = t("Please enter your 'Identity Address' from one of the following supported communications networks:"); // see if we are allowed to have NETWORK_MAIL2 contacts $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); - if(get_config('system','dfrn_only')) + + if (get_config('system','dfrn_only')) { $mail_disabled = 1; + } - if(! $mail_disabled) { + if (! $mail_disabled) { $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", intval($a->profile['uid']) ); - if(! count($r)) + if (! dbm::is_result($r)) { $mail_disabled = 1; + } } // "coming soon" is disabled for now //$emailnet = (($mail_disabled) ? '' : t("Connect as an email follower \x28Coming soon\x29")); $emailnet = ""; - $invite_desc = t('If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today.'); + $invite_desc = sprintf( + t('If you are not yet a member of the free social web, follow this link to find a public Friendica site and join us today.'), + get_server() + ); - $o .= replace_macros($tpl,array( + $o = replace_macros($tpl,array( '$header' => t('Friend/Connection Request'), '$desc' => t('Examples: jojo@demo.friendica.com, http://demo.friendica.com/profile/jojo, testuser@identi.ca'), '$pls_answer' => t('Please answer the following:'), @@ -865,4 +895,4 @@ function dfrn_request_content(&$a) { } return; // Somebody is fishing. -}} +}