From 577046cc4a9720686721aa2ac2355b841b8e5d14 Mon Sep 17 00:00:00 2001
From: Sascha Grossenbacher <saschagros@gmail.com>
Date: Sun, 1 May 2011 15:09:33 +0200
Subject: [PATCH] Issue #1142818 by Berdir: Fixed no available relationships errors and ported outdated D6 code to D7.

---
 .../user_relationship_invites.info                 |    3 +-
 .../user_relationship_invites.module               |   93 +++++++++++---------
 user_relationships.module                          |   12 +++
 3 files changed, 65 insertions(+), 43 deletions(-)

diff --git a/user_relationship_invites/user_relationship_invites.info b/user_relationship_invites/user_relationship_invites.info
index 6ada1cc..8b5ee57 100644
--- a/user_relationship_invites/user_relationship_invites.info
+++ b/user_relationship_invites/user_relationship_invites.info
@@ -3,6 +3,5 @@ description = "Gives users the option of specifying a relationship when inviting
 dependencies[] = user_relationships
 dependencies[] = user_relationships_ui
 dependencies[] = invite
-core = 6.x
+core = 7.x
 package = "User Relationships"
-files[]=user_relationship_invites.module
diff --git a/user_relationship_invites/user_relationship_invites.module b/user_relationship_invites/user_relationship_invites.module
index 078d8f9..c38374d 100644
--- a/user_relationship_invites/user_relationship_invites.module
+++ b/user_relationship_invites/user_relationship_invites.module
@@ -33,6 +33,9 @@ function user_relationship_invites_get_invite($code) {
 function user_relationship_invites_form_invite_form_alter(&$form, $form_state) {
   global $user;
   $new_user = drupal_anonymous_user();
+  // Allow all user relationships for this user. Permission checks will be done
+  // later.
+  $new_user->user_relationships_allow_all = TRUE;
   module_load_include('inc', 'user_relationships_ui', 'user_relationships_ui.forms');
   $form += user_relationships_ui_request_form($user, $new_user, isset($form_state['values']) ? $form_state['values'] : array());
   $form['rtid']['#weight'] = 0;
@@ -69,51 +72,59 @@ function user_relationship_invites_invite($op, $args) {
 /**
  * Implements hook_user().
 */
-function user_relationship_invites_user($op, &$edit, &$account, $category = NULL) {
-  if (!(module_exists('invite') && module_exists('user_relationships'))) {
-    return;
-  }
+function user_relationship_invites_form_user_register_form_alter(&$form, &$form_state) {
+  if (($code = $_SESSION[INVITE_SESSION]) && ($invite = user_relationship_invites_get_invite($code)) && $invite->relationship_type) {
 
-  switch ($op) {
-    case 'register':
-      if (($code = $_SESSION[INVITE_SESSION]) && ($invite = user_relationship_invites_get_invite($code)) && $invite->relationship_type) {
-        $form = array();
-        $inviter = $invite->inviter;
-        $relationship_type = $invite->relationship_type;
+    $form = array();
+    $inviter = $invite->inviter;
+    $relationship_type = $invite->relationship_type;
+
+    // Approval is required so ask for it.
+    if (!$relationship_type->is_oneway || $relationship_type->requires_approval) {
+      $form['relationship_invite_approve'] = array(
+        '#type' => 'radios',
+        '#title' => t('Please confirm the %relationship_name request from !name', array('!name' => theme('username', array('account' => $inviter)), '%relationship_name' => $relationship_type->name)),
+        '#default_value' => 'approve',
+        '#options' => array(
+          'approve' => t('Yes'),
+          'disapprove' => t('No'),
+        ),
+      );
+    }
+    // Otherwise force an approval.
+    else {
+      $form['relationship_invite_approve'] = array(
+        '#type' => 'value',
+        '#value' => 'approve',
+      );
+    }
+    $form['invite_code'] = array(
+      '#type' => 'value',
+      '#value' => $code
+    );
+    $form['relationship_invite_requester'] = array(
+      '#type' => 'value',
+      '#value' => $inviter,
+    );
+    $form['relationship_type'] = array(
+      '#type' => 'value',
+      '#value' => $relationship_type,
+    );
+    return $form;
+  }
+}
 
-        // approval is required so ask for it
-        if (!$relationship_type->is_oneway || $relationship_type->requires_approval) {
-          $form['relationship_invite_approve'] = array(
-            '#type' => 'radios',
-            '#title' => t('Please confirm the %relationship_name request from !name', array('!name' => theme('username', $inviter), '%relationship_name' => $relationship_type->name)),
-            '#default_value' => (isset($edit['relationship_invite_approve']) ? $edit['relationship_invite_approve'] : 'approve'),
-            '#options' => array('approve' => t('Yes'), 'disapprove' => t('No'))
-          );
-        }
-        // otherwise force an approval
-        else {
-          $form['relationship_invite_approve'] = array('#type' => 'value', '#value' => 'approve');
-        }
+function user_relationship_invites_user_insert(&$edit, $account, $category) {
+  if (isset($edit['relationship_invite_approve'])) {
 
-        $form['invite_code'] = array('#type' => 'value', '#value' => $code);
-        $form['relationship_invite_requester'] = array('#type' => 'value', '#value' => $inviter);
-        $form['relationship_type'] = array('#type' => 'value', '#value' => $relationship_type);
-        return $form;
-      }
-      break;
+    db_delete('user_relationship_invites')
+      ->condition('invite_code', $edit['invite_code'])
+      ->execute();
 
-    case 'insert':
-      if (isset($edit['relationship_invite_approve'])) {
-        db_query("DELETE FROM {user_relationship_invites} WHERE invite_code = '%s'", $edit['invite_code']);
-        
-        if ($edit['relationship_invite_approve'] == 'approve') {
-          user_relationships_request_relationship($edit['relationship_invite_requester'], $account, $edit['relationship_type'], TRUE);
-        }
-        $edit['invite_code'] = NULL;
-        $edit['relationship_invite_approve'] = NULL;
-        $edit['relationship_invite_requester'] = NULL;
-        $edit['relationship_type'] = NULL;
+    if (user_relationships_can_receive($account, $edit['relationship_type'])) {
+      if ($edit['relationship_invite_approve'] == 'approve') {
+        user_relationships_request_relationship($edit['relationship_invite_requester'], $account, $edit['relationship_type'], TRUE);
       }
-      break;
+    }
   }
 }
diff --git a/user_relationships.module b/user_relationships.module
index 1102b7b..8693a08 100644
--- a/user_relationships.module
+++ b/user_relationships.module
@@ -732,6 +732,12 @@ function user_relationships_translate_user_info(&$relationship) {
  *   TRUE if requester is allowed to request this type of relationship.
  */
 function user_relationships_can_request($requester, $relationship_type = NULL) {
+
+  // Allow to by-pass the permission check.
+  if (!empty($requester->user_relationships_allow_all)) {
+    return TRUE;
+  }
+
   return user_relationships_user_access('can request @relationship relationships', $relationship_type, $requester);
 }
 
@@ -747,6 +753,12 @@ function user_relationships_can_request($requester, $relationship_type = NULL) {
  *   TRUE if receiver is allowed to request this type of relationship
  */
 function user_relationships_can_receive($requestee, $relationship_type = NULL) {
+
+  // Allow to by-pass the permission check.
+  if (!empty($requestee->user_relationships_allow_all)) {
+    return TRUE;
+  }
+
   return user_relationships_user_access('can have @relationship relationships', $relationship_type, $requestee);
 }
 
-- 
1.7.4.1

