You are here

user_relationships_rules.rules.inc in User Relationships 7

Same filename and directory in other branches
  1. 6 user_relationships_rules/user_relationships_rules.rules.inc

Rules integration for the system module

File

user_relationships_rules/user_relationships_rules.rules.inc
View source
<?php

/**
 * @file
 * Rules integration for the system module
 */

/**
 * Implements hook_rules_action_info().
 *
 * @ingroup rules
 */
function user_relationships_rules_rules_action_info() {
  return array(
    'user_relationships_rules_action_create_relationship' => array(
      'label' => t('Request, create or approve relationships between users'),
      'group' => t('Relationships'),
      'named parameter' => TRUE,
      'parameter' => array(
        'relationship_type' => array(
          'type' => 'integer',
          'label' => t('Relationship type'),
          'options list' => 'user_relationships_rules_types_list',
        ),
        'requester' => array(
          'type' => 'user',
          'label' => t('Requester'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('Requestee'),
        ),
        'approve' => array(
          'type' => 'boolean',
          'label' => t('Approve relationship'),
        ),
      ),
    ),
    'user_relationships_rules_action_delete_relationship' => array(
      'label' => t('Delete, cancel or disapprove relationships between users'),
      'group' => t('Relationships'),
      'named parameter' => TRUE,
      'parameter' => array(
        'relationship_type' => array(
          'type' => 'integer',
          'label' => t('Relationship type'),
          'options list' => 'user_relationships_rules_types_list',
        ),
        'requester' => array(
          'type' => 'user',
          'label' => t('Requester'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('Requestee'),
        ),
      ),
    ),
  );
}

/**
 * Implements hook_rules_condition_info().
 *
 * @ingroup rules
 */
function user_relationships_rules_rules_condition_info() {
  return array(
    'user_relationships_rules_condition_relationship_has_type' => array(
      'label' => t('Relationship has type'),
      'named parameter' => TRUE,
      'parameter' => array(
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('Relationship'),
        ),
        'relationship_type' => array(
          'type' => 'list<integer>',
          'label' => t('Relationship type'),
          'options list' => 'user_relationships_rules_types_list',
        ),
      ),
      'group' => t('Relationships'),
    ),
    'user_relationships_rules_condition_users_are_related' => array(
      'label' => t('Check if two users are related'),
      'named parameter' => TRUE,
      'parameter' => array(
        'user1' => array(
          'type' => 'user',
          'label' => t('User A'),
        ),
        'user2' => array(
          'type' => 'user',
          'label' => t('User B'),
        ),
      ),
      'group' => t('Relationships'),
    ),
  );
}

/**
 * Implements hook_rules_event_info().
 */
function user_relationships_rules_rules_event_info() {
  return array(
    'user_relationships_request' => array(
      'label' => t('A user relationship has been requested'),
      'group' => t('Relationships'),
      'variables' => array(
        'requester' => array(
          'type' => 'user',
          'label' => t('User who initiated the request'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('User whose relationship is requested'),
        ),
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('The relationship object'),
        ),
      ),
    ),
    'user_relationships_cancel' => array(
      'label' => t('A user relationship has been cancelled'),
      'group' => t('Relationships'),
      'variables' => array(
        'requester' => array(
          'type' => 'user',
          'label' => t('User who initiated the request'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('User whose relationship is requested'),
        ),
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('The relationship object'),
        ),
      ),
    ),
    'user_relationships_approve' => array(
      'label' => t('A user relationship has been approved'),
      'group' => t('Relationships'),
      'variables' => array(
        'requester' => array(
          'type' => 'user',
          'label' => t('User who initiated the request'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('User whose relationship is requested'),
        ),
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('The relationship object'),
        ),
      ),
    ),
    'user_relationships_disapprove' => array(
      'label' => t('A user relationship has been disapproved'),
      'group' => t('Relationships'),
      'arguments' => array(
        'requester' => array(
          'type' => 'user',
          'label' => t('User who initiated the request'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('User whose relationship is requested'),
        ),
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('The relationship object'),
        ),
      ),
    ),
    'user_relationships_remove' => array(
      'label' => t('A user relationship has been removed'),
      'group' => t('Relationships'),
      'arguments' => array(
        'requester' => array(
          'type' => 'user',
          'label' => t('User who initiated the request'),
        ),
        'requestee' => array(
          'type' => 'user',
          'label' => t('User whose relationship is requested'),
        ),
        'relationship' => array(
          'type' => 'relationship',
          'label' => t('The relationship object'),
        ),
      ),
    ),
  );
}

/**
 * Returns a list of relationships that can be used in a options list callback.
 */
function user_relationships_rules_types_list() {
  $options = array();
  $relationship_types = user_relationships_types_load();
  foreach ($relationship_types as $relationship_type) {
    $options[$relationship_type->rtid] = $relationship_type->name;
  }
  return $options;
}

/**
 * Action Implementation: Create relationship.
 */
function user_relationships_rules_action_create_relationship($settings) {
  $args = array(
    'requester_id' => $settings['requester'] instanceof EntityDrupalWrapper ? $settings['requester']
      ->getIdentifier() : $settings['requester']->uid,
    'requestee_id' => $settings['requestee'] instanceof EntityDrupalWrapper ? $settings['requestee']
      ->getIdentifier() : $settings['requestee']->uid,
    'rtid' => $settings['relationship_type'],
  );
  $existing = user_relationships_load($args);
  if (empty($existing)) {
    user_relationships_request_relationship($args['requester_id'], $args['requestee_id'], $args['rtid'], $settings['approve']);
  }
  elseif ($settings['approve']) {
    $relationship = reset($existing);
    user_relationships_save_relationship($relationship, 'approve');
  }
}

/**
 * Action Implementation: Delete relationship.
 */
function user_relationships_rules_action_delete_relationship($settings) {
  $args = array(
    'requester_id' => $settings['requester'] instanceof EntityDrupalWrapper ? $settings['requester']
      ->getIdentifier() : $settings['requester']->uid,
    'requestee_id' => $settings['requestee'] instanceof EntityDrupalWrapper ? $settings['requestee']
      ->getIdentifier() : $settings['requestee']->uid,
    'rtid' => $settings['relationship_type'],
  );

  // Finding rid - this method can probably be made better.
  $existing = user_relationships_load($args);
  if ($relationship = reset($existing)) {
    $deleted_by = $settings['requester'] instanceof EntityDrupalWrapper ? user_load($settings['requester']
      ->getIdentifier()) : $settings['requester'];
    user_relationships_delete_relationship($relationship, $deleted_by, 'remove');
  }
}

/**
 * Condition Implementation: Relationship has type.
 */
function user_relationships_rules_condition_relationship_has_type($settings) {
  return in_array($settings['relationship']->rtid, $settings['relationship_type']);
}

/**
 * Condition Implementation: Users are related.
 */
function user_relationships_rules_condition_users_are_related($user1, $user2, $relationship_types) {

  // Get the approved relationships between the two users and the specified
  // relationship types.
  $relationships = user_relationships_load(array(
    'approved' => 1,
    'rtid' => $relationship_types,
    'between' => array(
      $user1 instanceof EntityDrupalWrapper ? $user1
        ->getIdentifier() : $user1->uid,
      $user2 instanceof EntityDrupalWrapper ? $user2
        ->getIdentifier() : $user2->uid,
    ),
  ));
  return !empty($relationships);
}

Functions

Namesort descending Description
user_relationships_rules_action_create_relationship Action Implementation: Create relationship.
user_relationships_rules_action_delete_relationship Action Implementation: Delete relationship.
user_relationships_rules_condition_relationship_has_type Condition Implementation: Relationship has type.
user_relationships_rules_condition_users_are_related Condition Implementation: Users are related.
user_relationships_rules_rules_action_info Implements hook_rules_action_info().
user_relationships_rules_rules_condition_info Implements hook_rules_condition_info().
user_relationships_rules_rules_event_info Implements hook_rules_event_info().
user_relationships_rules_types_list Returns a list of relationships that can be used in a options list callback.