You are here

hybridauth.rules.inc in HybridAuth Social Login 7.2

Same filename and directory in other branches
  1. 6.2 hybridauth.rules.inc

Functions for integrating the HybridAuth module with Rules.

File

hybridauth.rules.inc
View source
<?php

/**
 * @file
 * Functions for integrating the HybridAuth module with Rules.
 */

/**
 * Implements hook_rules_action_info().
 * @ingroup rules
 */
function hybridauth_rules_action_info() {
  return array(
    'hybridauth_url_managed_file' => array(
      'label' => t('Save remote file to managed file'),
      'group' => t('HybridAuth'),
      'parameter' => array(
        'url' => array(
          'label' => t('URL'),
          'type' => 'uri',
          'description' => t('URL to the remote file.'),
        ),
        'directory' => array(
          'label' => t('File directory'),
          'type' => 'text',
          'description' => t('File directory to save remote file to.'),
        ),
      ),
      'provides' => array(
        'file' => array(
          'label' => 'Managed file entity',
          'type' => 'file',
        ),
      ),
    ),
    'hybridauth_dmy_to_date' => array(
      'label' => t('Create date from day/month/year'),
      'group' => t('HybridAuth'),
      'parameter' => array(
        'day' => array(
          'label' => t('Day'),
          'type' => 'text',
        ),
        'month' => array(
          'label' => t('Month'),
          'type' => 'text',
        ),
        'year' => array(
          'label' => t('Year'),
          'type' => 'text',
        ),
      ),
      'provides' => array(
        'date' => array(
          'label' => 'Date',
          'type' => 'date',
        ),
      ),
    ),
    'hybridauth_set_destination' => array(
      'label' => t('Set destination'),
      'group' => t('HybridAuth'),
      'parameter' => array(
        'destination' => array(
          'label' => t('Destination'),
          'type' => 'text',
        ),
      ),
    ),
    'hybridauth_session_destroy' => array(
      'label' => t('Destroy session'),
      'group' => t('HybridAuth'),
    ),
    'hybridauth_window_close' => array(
      'label' => t('Close HybridAuth window'),
      'group' => t('HybridAuth'),
    ),
  );
}

/**
 * Rules action.
 */
function hybridauth_url_managed_file($url, $directory) {
  if (valid_url($url, TRUE)) {
    $url_info = parse_url($url);

    // Prepare directory.
    $directory = file_default_scheme() . '://' . $directory . '/' . $url_info['host'] . dirname($url_info['path']);
    if (!file_prepare_directory($directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) {
      watchdog('hybridauth', 'Error accessing directory %directory.', array(
        '%directory' => $directory,
      ), WATCHDOG_ERROR);
      return array(
        'file' => '',
      );
    }

    // Make a request.
    $content = drupal_http_request($url);
    if (isset($content->error)) {
      watchdog('hybridauth', 'Error while executing drupal_http_request() to %url: %error.', array(
        '%url' => $url,
        '%error' => $content->error,
      ), WATCHDOG_ERROR);
      return array(
        'file' => '',
      );
    }
    else {
      if ($file = file_save_data($content->data, $directory . '/' . basename($url_info['path']), FILE_EXISTS_REPLACE)) {
        $path_info = pathinfo($url);
        if (empty($path_info['extension'])) {
          $info = image_get_info($file->uri);
          $file = file_move($file, $directory . '/' . basename($url_info['path']) . '.' . $info['extension'], FILE_EXISTS_REPLACE);
        }
        return array(
          'file' => $file,
        );
      }
      else {
        watchdog('hybridauth', 'Failed to save file %file.', array(
          '%file' => basename($url_info['path']),
        ), WATCHDOG_ERROR);
      }
    }
  }
  else {
    watchdog('hybridauth', 'Not valid url %url', array(
      '%url' => $url,
    ), WATCHDOG_ERROR);
  }
  return array(
    'file' => '',
  );
}

/**
 * Rules action.
 */
function hybridauth_dmy_to_date($day, $month, $year) {

  // My tests have shown there is no need for any timezone handling.
  // $timezone = date_default_timezone_get();
  // date_default_timezone_set('UTC');
  $timestamp = mktime(0, 0, 0, intval($month), intval($day), intval($year));

  // $timestamp = mktime(0, 0, 0, $month, $day, $year);
  // date_default_timezone_set($timezone);
  return array(
    'date' => $timestamp,
  );
}

/**
 * Rules action.
 */
function hybridauth_set_destination($destination) {
  drupal_static_reset('drupal_get_destination');
  $_GET['destination'] = $destination;
}

/**
 * Rules action.
 */
function hybridauth_session_destroy() {
  session_destroy();
}

/**
 * Rules action.
 */
function hybridauth_window_close() {
  _hybridauth_window_close();
}

/**
 * Implements hook_rules_data_info().
 * @ingroup rules
 */
function hybridauth_rules_data_info() {
  $types = array();
  $types['hybridauth'] = array(
    'label' => 'HybridAuth identity data',
    'wrap' => TRUE,
    'property info' => _hybridauth_rules_data_properties(),
  );
  return $types;
}

/**
 * Rules data properties for HybridAuth data type.
 */
function _hybridauth_rules_data_properties() {
  $properties = array();
  if (function_exists('hybridauth_token_info')) {
    $token_info = hybridauth_token_info();
  }
  else {
    module_load_include('inc', 'hybridauth', 'hybridauth.tokens');
    $token_info = hybridauth_token_info();
  }
  foreach ($token_info['tokens']['hybridauth'] as $key => $value) {
    $properties[$key] = array(
      'label' => $value['name'],
      'type' => 'text',
      'description' => $value['description'],
    );
  }
  return $properties;
}

/**
 * Implements hook_rules_event_info().
 * @ingroup rules
 */
function hybridauth_rules_event_info() {
  $events = array();
  $events['hybridauth_identity_added'] = array(
    'label' => t('User added HybridAuth identity'),
    'group' => t('HybridAuth'),
    'variables' => array(
      'hybridauth_user' => array(
        'label' => t('User adding the identity'),
        'type' => 'user',
      ),
      'hybridauth' => array(
        'label' => t('HybridAuth identity data'),
        'type' => 'hybridauth',
      ),
    ),
    'module' => 'hybridauth',
  );
  $events['hybridauth_identity_deleted'] = array(
    'label' => t('User deleted HybridAuth identity'),
    'group' => t('HybridAuth'),
    'variables' => array(
      'hybridauth_user' => array(
        'label' => t('User deleting the identity'),
        'type' => 'user',
      ),
      'hybridauth' => array(
        'label' => t('HybridAuth identity data'),
        'type' => 'hybridauth',
      ),
    ),
    'module' => 'hybridauth',
  );
  $events['hybridauth_user_preinsert'] = array(
    'label' => t('User is about to be created through HybridAuth'),
    'group' => t('HybridAuth'),
    'variables' => array(
      'hybridauth_user' => array(
        'label' => t('registering user'),
        'type' => 'user',
      ),
      'hybridauth' => array(
        'label' => t('HybridAuth identity data'),
        'type' => 'hybridauth',
      ),
    ),
    'module' => 'hybridauth',
  );
  $events['hybridauth_user_insert'] = array(
    'label' => t('User registered through HybridAuth'),
    'group' => t('HybridAuth'),
    'variables' => array(
      'hybridauth_user' => array(
        'label' => t('registered user'),
        'type' => 'user',
      ),
      'hybridauth' => array(
        'label' => t('HybridAuth identity data'),
        'type' => 'hybridauth',
      ),
    ),
    'module' => 'hybridauth',
  );
  $events['hybridauth_user_login'] = array(
    'label' => t('User logged in through HybridAuth'),
    'group' => t('HybridAuth'),
    'variables' => array(
      'hybridauth_user' => array(
        'label' => t('logged in user'),
        'type' => 'user',
      ),
      'hybridauth' => array(
        'label' => t('HybridAuth identity data'),
        'type' => 'hybridauth',
      ),
    ),
    'module' => 'hybridauth',
  );
  return $events;
}

/**
 * Implements hook_rules_condition_info().
 * @ingroup rules
 */
function hybridauth_rules_condition_info() {
  $conditions = array();
  $conditions['hybridauth_user_created_hybridauth'] = array(
    'label' => t('User created by HybridAuth'),
    'group' => t('HybridAuth'),
    'parameter' => array(
      'account' => array(
        'label' => t('User'),
        'type' => 'user',
      ),
    ),
  );
  return $conditions;
}

/**
 * Rules condition.
 */
function hybridauth_user_created_hybridauth($account) {
  global $_hybridauth_data;
  return !empty($_hybridauth_data) || !empty($account->data['hybridauth']);
}