]> git.mxchange.org Git - friendica.git/blobdiff - mod/dfrn_request.php
statusnet improvements
[friendica.git] / mod / dfrn_request.php
index 6cefdd28e60c3e844a47f2c3631b01fee3338a7c..c9811fa60c46c28d5fd51da27e0ec725954fedea 100644 (file)
 if(! function_exists('dfrn_request_init')) {
 function dfrn_request_init(&$a) {
 
+       if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+               return;
+       }
+
        if($a->argc > 1)
                $which = $a->argv[1];
 
@@ -123,9 +127,9 @@ function dfrn_request_post(&$a) {
                                                        notice( t('Warning: profile location has no profile photo.') . EOL );
                                                $invalid = validate_dfrn($parms);               
                                                if($invalid) {
-                                                       notice( $invalid . t(' required parameter') 
-                                                               . (($invalid == 1) ? t(" was ") : t("s were ") )
-                                                               . t("not found at the given location.") . EOL ) ;
+                                                       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 );
                                                        return;
                                                }
                                        }
@@ -161,7 +165,7 @@ function dfrn_request_post(&$a) {
                                }
 
                                if($r) {
-                                       notice( t("Introduction complete.") . EOL);
+                                       info( t("Introduction complete.") . EOL);
                                }
 
                                /**
@@ -238,13 +242,36 @@ function dfrn_request_post(&$a) {
                                intval($uid)
                        );
                        if(count($r) > $maxreq) {
-                               notice( $a->profile['name'] . t(' has received too many connection requests today.') . EOL);
+                               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);
                                return;
                        } 
                }
 
+               /**
+                *
+                * Cleanup old introductions that remain blocked. 
+                * Also remove the contact record, but only if there is no existing relationship
+                *
+                */
+
+               $r = q("SELECT `intro`.*, `intro`.`id` AS `iid`, `contact`.`id` AS `cid`, `contact`.`rel` 
+                       FROM `intro` LEFT JOIN `contact` on `intro`.`contact-id` = `contact`.`id`
+                       WHERE `intro`.`blocked` = 1 AND `contact`.`self` = 0 AND `intro`.`datetime` < UTC_TIMESTAMP() - INTERVAL 30 MINUTE ");
+               if(count($r)) {
+                       foreach($r as $rr) {
+                               if(! $rr['rel']) {
+                                       q("DELETE FROM `contact` WHERE `id` = %d LIMIT 1",
+                                               intval($rr['cid'])
+                                       );
+                               }
+                               q("DELETE FROM `intro` WHERE `id` = %d LIMIT 1",
+                                       intval($rr['iid'])
+                               );
+                       }
+               }
+
                $url = trim($_POST['dfrn_url']);
                if(! strlen($url)) {
                        notice( t("Invalid locator") . EOL );
@@ -283,7 +310,7 @@ function dfrn_request_post(&$a) {
                                        return;
                                }
                                elseif($ret[0]['rel'] == REL_BUD) {
-                                       notice( t('Apparently you are already friends with .') . $a->profile['name'] . EOL);
+                                       notice( sprintf( t('Apparently you are already friends with %s.'), $a->profile['name']) . EOL);
                                        return;
                                }
                                else {
@@ -331,9 +358,9 @@ function dfrn_request_post(&$a) {
                                                notice( t('Warning: profile location has no profile photo.') . EOL );
                                        $invalid = validate_dfrn($parms);               
                                        if($invalid) {
-                                               notice( $invalid . t(' required parameter') 
-                                                       . (($invalid == 1) ? t(" was ") : t("s were ") )
-                                                       . t("not found at the given location.") . EOL ) ;
+                                               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 );
        
                                                return;
                                        }
@@ -397,7 +424,7 @@ 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) 
-                               notice( t('Your introduction has been sent.') . EOL );
+                               info( t('Your introduction has been sent.') . EOL );
 
                        // "Homecoming" - send the requestor back to their site to record the introduction.
 
@@ -444,7 +471,6 @@ function dfrn_request_content(&$a) {
        if(($a->argc != 2) || (! count($a->profile)))
                return "";
 
-       $a->page['template'] = 'profile';
 
        // "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.
@@ -452,7 +478,13 @@ function dfrn_request_content(&$a) {
        if(x($_GET,'dfrn_url')) {
 
                if(! local_user()) {
-                       notice( t("Please login to confirm introduction.") . EOL );
+                       info( t("Please login to confirm introduction.") . EOL );
+
+                       /* setup the return URL to come back to this page if they use openid */
+
+                       $stripped = str_replace('q=','',$a->query_string);
+                       $_SESSION['return_url'] = trim($stripped,'/');
+
                        return login();
                }
 
@@ -467,12 +499,14 @@ 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'] : "");
-               $o .= load_view_file("view/dfrn_req_confirm.tpl");
-               $o  = replace_macros($o,array(
+               $tpl = get_markup_template("dfrn_req_confirm.tpl");
+               $o  = replace_macros($tpl,array(
                        '$dfrn_url' => $dfrn_url,
                        '$aes_allow' => (($aes_allow) ? '<input type="hidden" name="aes_allow" value="1" />' : "" ),
                        '$confirm_key' => $confirm_key,
-                       '$username' => $a->user['username'], 
+                       '$welcome' => sprintf( t('Welcome home %s.'), $a->user['username']),
+                       '$please' => sprintf( t('Please confirm your introduction/connection request to %s.'), $dfrn_url),
+                       '$submit' => t('Confirm'),
                        '$uid' => $_SESSION['uid'],
                        '$nickname' => $a->user['nickname'],
                        'dfrn_rawurl' => $_GET['dfrn_url']
@@ -503,7 +537,7 @@ function dfrn_request_content(&$a) {
                                if($r[0]['page-flags'] != PAGE_NORMAL)
                                        $auto_confirm = true;                           
                                if(($r[0]['notify-flags'] & NOTIFY_INTRO) && (! $auto_confirm)) {
-                                       $email_tpl = load_view_file('view/request_notify_eml.tpl');
+                                       $email_tpl = get_intltext_template('request_notify_eml.tpl');
                                        $email = replace_macros($email_tpl, array(
                                                '$requestor' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')),
                                                '$url' => stripslashes($r[0]['url']),
@@ -512,9 +546,12 @@ function dfrn_request_content(&$a) {
                                                '$sitename' => $a->config['sitename']
                                        ));
                                        $res = mail($r[0]['email'], 
-                                               t("Introduction received at ") . $a->config['sitename'],
+                                           t("Introduction received at ") . $a->config['sitename'],
                                                $email,
-                                               'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
+                                               'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+                                               . 'Content-type: text/plain; charset=UTF-8' . "\n"
+                                               . 'Content-transfer-encoding: 8bit' );
+
                                        // This is a redundant notification - no point throwing errors if it fails.
                                }
                                if($auto_confirm) {
@@ -545,25 +582,64 @@ function dfrn_request_content(&$a) {
                return; // NOTREACHED
        }
        else {
-               $myaddr = ((x($_GET,'address')) ? urldecode($_GET['address']) : '');
-               // Normal web request. Display our user's introduction form. 
+
+               /**
+                * Normal web request. Display our user's introduction form.
+                */
+               if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+                       notice( t('Public access denied.') . EOL);
+                       return;
+               }
+
+
+               /**
+                * Try to auto-fill the profile address
+                */
+
+               if(local_user()) {
+                       if(strlen($a->path)) {
+                               $myaddr = $a->get_baseurl() . '/profile/' . $a->user['nickname'];
+                       }
+                       else {
+                               $myaddr = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3 );
+                       }
+               }
+               elseif(x($_GET,'addr')) {
+                       $myaddr = hex2bin($_GET['addr']);
+               }
+               else {
+                       /* $_GET variables are already urldecoded */ 
+                       $myaddr = ((x($_GET,'address')) ? $_GET['address'] : '');
+               }
+
+               /**
+                *
+                * The auto_request form only has the profile address
+                * because nobody is going to read the comments and 
+                * it doesn't matter if they know you or not.
+                *
+                */
+
                if($a->profile['page-flags'] == PAGE_NORMAL)
-                       $tpl = load_view_file('view/dfrn_request.tpl');
+                       $tpl = get_markup_template('dfrn_request.tpl');
                else
-                       $tpl = load_view_file('view/auto_request.tpl');
+                       $tpl = get_markup_template('auto_request.tpl');
+
                $o .= replace_macros($tpl,array(
                        '$header' => t('Friend/Connection Request'),
+                       '$desc' => t('Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'),
                        '$pls_answer' => t('Please answer the following:'),
-                       '$does_know' => t('Does $name know you?'),
+                       '$does_know' => sprintf( t('Does %s know you?'),$a->profile['name']),
                        '$yes' => t('Yes'),
                        '$no' => t('No'),
                        '$add_note' => t('Add a personal note:'),
-                       '$page_desc' => t('Please enter your profile address from one of the following supported social networks:'),
+                       '$page_desc' => t("Please enter your 'Identity Address' from one of the following supported social networks:"),
                        '$friendika' => t('Friendika'),
                        '$statusnet' => t('StatusNet/Federated Social Web'),
                        '$private_net' => t("Private \x28secure\x29 network"),
                        '$public_net' => t("Public \x28insecure\x29 network"),
-                       '$your_address' => t('Your profile address:'),
+                       '$your_address' => t('Your Identity Address:'),
                        '$submit' => t('Submit Request'),
                        '$cancel' => t('Cancel'),
                        '$nickname' => $a->argv[1],
@@ -574,4 +650,4 @@ function dfrn_request_content(&$a) {
        }
 
        return; // Somebody is fishing.
-}}
\ No newline at end of file
+}}