cforge-2.0.x-dev/modules/cforge_referrer/cforge_referrer.module

modules/cforge_referrer/cforge_referrer.module
<?php

use Drupal\user\Entity\User;
use Drupal\mcapi\Entity\Wallet;
use Drupal\taxonomy\Entity\Term;
use Drupal\Core\Url;

function cforge_referrer_form_cforge_settings_alter(&$form, $form_state) {
  $config = \Drupal::config('cforge_referrer.settings');
  $form['referral'] = [
    '#title' => t('Referral'),
    '#description' => t('New users have 1 month to nominate another user for a referral bonus.'),
    '#type' => 'details',
    '#open' => TRUE,
    'fee' => [
      '#title' => t('Referral fee'),
      '#type' => 'worths_form',
      '#default_value' => $config->get('fee'),
      '#config' => TRUE,
      '#required' => TRUE
    ],
    'src_wallet' => [
      '#title' => t('Referral source wallet'),
      '#description' => t(
        'Wallet from which referral payments are drawn. Ideally this wallet would be held by the account manager. <a href="">Change its ownership</a>.',
      ),
      '#type' => 'wallet_entity_auto',
      // Autocomplete field takes the whole entity
      '#default_value' => $config->get('src_wallet') ? Wallet::load($config->get('src_wallet')) : NULL,
      '#weight' => 3,
      '#id' => 'referral-src',
      '#attached' => ['library' => ['cforge_referrer/settings_page']],
      '#required' => TRUE
    ],
    'category' => [
      '#title' => t('Referral category'),
      '#description' => t('Category for referral transactions'),
      '#type' => 'entity_autocomplete',
      '#target_type' => 'taxonomy_term',
      '#selection_settings' => ['target_bundles' => ['categories']],
      '#default_value' => $config->get('category') ? Term::load($config->get('category')) : NULL,
      '#weight' => 4,
      '#required' => TRUE
    ],
    '#weight' => 3,
  ];
  $form['#submit'][] = 'cforge_referrer_settings_submit';
}

function cforge_referrer_settings_submit($form, $form_state) {
  \Drupal::configFactory()->getEditable('cforge_referrer.settings')
    ->set('fee', $form_state->getValue('fee'))
    ->set('src_wallet', $form_state->getValue('src_wallet'))
    ->set('category', $form_state->getValue('category'))
    ->save();
}

/**
 * Implements hook_ENTITY_TYPE_view_alter().
 * Replace the user view with the referrer form
 */
function cforge_referrer_user_view_alter(&$build, $account, $display) {
  if ($account->id() == \Drupal::currentUser()->id() and cforge_referrer_needed($account->id())) {
    $build = \Drupal::formBuilder()->getForm('\Drupal\cforge_referrer\ChooseReferrer', $account);
    // These are expected by the page builder.
    $build['#entity_type'] = 'user';
    $build['#user'] = $account;
  }
}

/**
 * Implements hook_user_login().
 * Redirect new users to the referral form.
 */
function cforge_referrer_user_login($account) {
  if (cforge_referrer_needed($account->id())) {
    $elapsed = \Drupal::time()->getRequestTime() - $account->getCreatedTime();
    \Drupal::messenger()->addWarning(
      t('Did another member ask you join @site? Click <a href=":url">here</a> within @num days so they can get a reward.'),
      [
        '@site' => \Drupal::config('system.site')->get('name'),
        '@num' => 30*24*3600 - $elapsed,
        ':url' => Url::fromRoute('cforge.choose_referrer', ['user' => $account->id()])
      ]
    );
  }
}

/**
 * Determine whether a user is allowed to nominate a referrer.
 */
function cforge_referrer_needed($uid) : bool {
  $config = \Drupal::config('cforge_referrer.settings');
  if (empty($config->get('fee.value'))) {
    return FALSE;
  }
  if (!empty(\Drupal::service('user.data')->get('cforge_referrer', $uid, 'referred_by'))) {
    return FALSE;
  }
  elseif (User::load($uid)->getCreatedTime() > strtotime('-1 month')) {
    return FALSE;
  }
  return TRUE;
}

/**
 * Implements hook_user_insert().
 * Mark the user as needing to state a referrer.
 */
function cforge_referrer_user_insert($user) {
  \Drupal::service('user.data')
    ->set('cforge_referrer', $user->id(), 'referred_by', 0);
}

/**
 * Implements hook_cron().
 */
function cforge_referrer_cron() {
  $config = \Drupal::config('cforge_referrer.settings');
  if (!$config->get('src_wallet') or !$config->get('category') or !$config->get('fee.value')) {
    mail(
      \Drupal::config('system.site')->get('mail'),
      t(
        '@site: Referrer reward module not yet configured.',
        ['@site' => \Drupal::config('system.site')->get('name')]
      ),
      t(
        'Configure the module at @url1 or disable the module at @url2',
        [
          '@url1' => Url::fromRoute('cforge.settings', [], ['absolute' => TRUE])->toString(),
          '@url2' => Url::fromRoute('system.modules_list', [], ['absolute' => TRUE])->toString()
        ]
      )
    );
  }
}

function cforge_referrer_empty_worth(array $referral_fee) : bool {
  foreach ($referral_fee as $worth) {
    if ($worth['value']) {
      return TRUE;
    }
  }
  return FALSE;
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc