ercore-8.x-1.20/modules/ercore_core/ercore_core.module

modules/ercore_core/ercore_core.module
<?php

/**
 * @file
 * Hook implementations for the ERCore module.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\user\Entity\User;

/**
 * Implements hook_form_alter().
 */
function ercore_core_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // Set current user to default value of organizer field.
  $forms = [
    'node_ercore_collaboration_form',
    'node_ercore_event_form',
    'node_ercore_j_highlight_form',
    'node_ercore_other_product_form',
    'node_ercore_j_honor_form',
    'node_ercore_patent_form',
    'node_ercore_presentation_form',
    'node_ercore_proposal_form',
    'node_ercore_publication_form',
  ];
  if (in_array($form_id, $forms)) {
    $current_user = \Drupal::currentUser();
    $user = User::load($current_user->id());
    $form['field_ercore_organizer']['widget'][0]['target_id']['#default_value'] = $user;
  }
  // User form logic.
  if ($form_id === 'user_form') {
    $form['#attached']['library'][] = 'ercore_core/ercore-core-user-form.library';
    // Post Doc.
    $form['field_ercore_user_mentor_plan']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'post-doc'],
      ],
    ];
    $form['field_ercore_user_mentor_plan_dt']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'post-doc'],
      ],
    ];

    // Graduate.
    $form['field_ercore_user_master_act']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'graduate'],
      ],
    ];
    $form['field_ercore_user_master_ant']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'graduate'],
      ],
    ];
    $form['field_ercore_user_doc_act']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'graduate'],
      ],
    ];
    $form['field_ercore_user_doc_ant']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'graduate'],
      ],
    ];
    // Undergraduate.
    $form['field_ercore_user_under_act']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'undergraduate'],
      ],
    ];
    $form['field_ercore_user_under_ant']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'undergraduate'],
      ],
    ];

    // Adviser & Mentor.
    $form['field_ercore_user_advisor_mentor']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'post-doc'],
          ['value' => 'graduate'],
          ['value' => 'undergraduate'],
        ],
      ],
    ];

    // Adviser.
    $form['field_ercore_academic_advisor']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'post-doc'],
          ['value' => 'graduate'],
          ['value' => 'undergraduate'],
        ],
      ],
    ];

   $form['field_ercore_other_academic_rank']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_academic_rank"]' => [
          ['value' => 'other'],
        ],
      ],
    ];

	

    // First generation.
    // Remove n/a option from field_ercore_user_first_gen.
    unset($form['field_ercore_user_first_gen']['widget']['#options']['_none']);
    $form['field_ercore_user_first_gen']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'post-doc'],
          ['value' => 'graduate'],
          ['value' => 'undergraduate'],
        ],
      ],
    ];

// First generation grad
// Remove n/a option from field_first_gen_grad_student.
    unset($form['field_first_gen_grad_student']['widget']['#options']['_none']);
    $form['field_first_gen_grad_student']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          
          ['value' => 'graduate'],
          
        ],
      ],
    ];

    //field_graduate_from_local_high
    unset($form['field_graduate_from_local_high']['widget']['#options']['_none']);
    $form['field_graduate_from_local_high']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_first_gen"]' => [
          
          ['value' => 1],
          
        ],
      ],
    ];

    // Faculty / Non-Technical.
    // Boards and Committees.
    $form['field_ercore_user_boards']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'faculty'],
          ['value' => 'non-technical'],
        ],
      ],
    ];

    // Management team.
    $form['field_ercore_user_lead_team']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'faculty'],
          ['value' => 'technical'],
          ['value' => 'non-technical'],
          ['value' => 'evaluation'],
          ['value' => 'other'],
          ['value' => 'post-doc'],

        ],
      ],
      'required' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'faculty'],
          ['value' => 'technical'],
          ['value' => 'non-technical'],
          ['value' => 'evaluation'],
          ['value' => 'other'],
          ['value' => 'post-doc'],
        ],
      ],
    ];
    // Demographics.
    $form['field_ercore_user_gender']['#states'] = [
      'disabled' => [
        ':input[name="field_ercore_prefer_no_answer[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_ethnicity']['#states'] = [
      'disabled' => [
        ':input[name="field_ercore_prefer_no_answer[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_race']['#states'] = [
      'disabled' => [
        ':input[name="field_ercore_prefer_no_answer[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_disabilities']['#states'] = [
      'disabled' => [
        ':input[name="field_ercore_prefer_no_answer[value]"]' => ['checked' => TRUE],
      ],
    ];
    // RCR.
    // Remove n/a option from field_ercore_user_rcr_status.
    unset($form['field_ercore_user_rcr_status']['widget']['#options']['_none']);
    $form['field_ercore_user_rcr_status']['#states'] = [
      //make field visible to all.
      //'visible' => [
      //  ':input[name="field_ercore_senior_role"]' => [
      //    ['value' => 'undergraduate'],
      //    ['value' => 'graduate'],
      //  ],
      //],
      'required' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'undergraduate'],
          ['value' => 'graduate'],
        ],
      ],
    ];
    $form['field_ercore_user_rcr_per']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_rcr_status"]' => ['value' => 1],
      ],
    ];
    $form['field_ercore_user_rcr_per_up']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_rcr_status"]' => ['value' => 1],
      ],
    ];
    $form['field_ercore_user_rcr_on']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_rcr_status"]' => ['value' => 1],
      ],
    ];
    $form['field_ercore_user_rcr_on_up']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_rcr_status"]' => ['value' => 1],
      ],
    ];
    $form['field_ercore_user_funding_src']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_epscor_paid"]' => ['value' => 1],
      ],
    ];
    // Salary support.
    // Remove n/a option from field_ercore_us_fac_support.
    unset($form['field_ercore_user_fac_support']['widget']['#options']['_none']);

    // Faculty.
    $form['field_ercore_user_fac_support']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'faculty'],
      ],
      'required' => [
        ':input[name="field_ercore_senior_role"]' => ['value' => 'faculty'],
      ],
    ];

    // Data collection.
    $form['field_ercore_user_data_desc']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
      'required' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_data_ongoing']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_data_date']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_data_mgr']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
    ];
    $form['field_ercore_user_data_url']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_user_collecting[value]"]' => ['checked' => TRUE],
      ],
    ];
    // Primary email.
    $mail = $form['account']['mail']['#default_value'];
    $primary = '<div class="form-wrapper"><div class="form-item"><div class="label">Primary Email</div> ' . $mail . '</div><div class="description">Primary Drupal email, editable on Account Information tab.</div></div>';
    $form['field_ercore_user_second_email']['#prefix'] = $primary;
    $form['#validate'][] = 'ercore_core_form_validate';
  }
  if ($form_id === 'user_register_form') {
    $form['account']['pass']['#access'] = FALSE;
    $form['account']['pass']['#value']['pass1'] = user_password();
    $form['account']['pass']['#value']['pass2'] = $form['account']['pass']['#value']['pass1'];
    $form['account']['notify']['#default_value'] = TRUE;
  }
  if ($form['#id'] === 'views-exposed-form-ercore-participant-search-page-1') {
    $options = ercore_get_institutions();
    // Start building out our new form element.
    $form['field_ercore_user_partic_inst_target_id']['#type'] = 'select';
    $form['field_ercore_user_partic_inst_target_id']['#multiple'] = FALSE;

    // Specify the empty option for our select list.
    $form['field_ercore_user_partic_inst_target_id']['#empty_option'] = t('Institution');

    // Add the $options from above to our select list.
    $form['field_ercore_user_partic_inst_target_id']['#options'] = $options;
    unset($form['field_ercore_user_partic_inst_target_id']['#size']);
  }
}

/**
 * Implements hook_field_group_build_pre_render_alter().
 */
function ercore_core_field_group_build_pre_render_alter(&$element) {
  if (isset($element['#form_id']) && $element['#form_id'] === 'user_form' && isset($element['group_ercore_us_profile'])) {
    $element['group_ercore_us_profile']['group_ercore_us_epscor']['group_ercore_us_education']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'post-doc'],
          ['value' => 'graduate'],
          ['value' => 'undergraduate'],
        ],
      ],
    ];
    $element['group_ercore_us_profile']['group_ercore_us_epscor']['group_ercore_us_certification']['#states'] = [
      'visible' => [
        ':input[name="field_ercore_senior_role"]' => [
          ['value' => 'graduate'],
          ['value' => 'undergraduate'],
        ],
      ],
    ];
  }
}

/**
 * Validates submission values in the FORM_ID() form.
 */
function ercore_core_form_validate(array &$form, FormStateInterface $form_state) {
  $value1 = $form_state->getValue('field_ercore_user_start');
  $value2 = $form_state->getValue('field_ercore_user_end');
  if (!empty($value2['0']['value']) && $value2['0']['value'] < $value1['0']['value']) {
    $form_state->setErrorByName('field_ercore_user_end', t('End date must be after start date.'));
  }
}

/**
 * Get Institutions for other functions.
 *
 * @param bool $participating
 *   Limits list returned to participating.
 *
 * @return array|bool
 *   Return array of institutions or FALSE.
 */
function ercore_get_institutions($participating = FALSE) {
  // Query nodes.
  $storage = Drupal::getContainer()
    ->get('entity_type.manager')
    ->getStorage('node');
  $nids = $storage->getQuery();

  // Gather published nodes and sort by title.
  $nids = $nids->condition('type', 'ercore_institution')
    ->condition('status', 1)
    ->sort('title')
    ->execute();

  // If there are no nodes, move on.
  if (!$nids) {
    return FALSE;
  }
  // Start building out the options for our select list.
  $options = [];
  $nodes = $storage->loadMultiple($nids);

  // Push titles into select list.
  foreach ($nodes as $node) {
    if (!$participating) {
      $options[$node->id()] = $node->getTitle();
    }
    else {
      if ($node->get('field_ercore_inst_participating')->value === '1') {
        $options[$node->id()] = $node->getTitle();
      }
    }
  }
  return $options;
}

/**
 * Get Users for other functions.
 *
 * @return array|bool
 *   Return array of users or FALSE.
 */
function ercore_get_users() {
  // Query users.
  $storage = Drupal::getContainer()
    ->get('entity_type.manager')
    ->getStorage('user');
  $ids = $storage->getQuery();

  $ids = $ids->sort('name')
    ->execute();

  // If there are no nodes, move on.
  if (!$ids) {
    return FALSE;
  }
  // Start building out the options for our select list.
  $options = [];
  $users = User::loadMultiple($ids);

  // Push titles into select list.
  foreach ($users as $user) {
    $name = realname_load($user);
    if (!empty($name && $user->id() !== '0')) {
      $options[$user->id()] = realname_load($user);
    }
  }
  return $options;
}

/**
 * Implements hook_form_FORM_ID_alter().
 *
 * Alters ERCore Core views.
 */
function ercore_core_form_views_exposed_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  // Alters content search view.
  $search_form_ids = [
    'views-exposed-form-ercore-content-search-page-1',
  ];
  if (in_array($form['#id'], $search_form_ids)) {
    $options = ercore_get_users();
    if (!empty($options)) {
      // Start building out our new form element.
      $inst_field = 'field_ercore_organizer_target_id';
      $form[$inst_field]['#type'] = 'select';
      $form[$inst_field]['#multiple'] = FALSE;

      // Specify the empty option for our select list.
      $form[$inst_field]['#empty_option'] = t('Name');

      // Add the $options from above to our select list.
      $form[$inst_field]['#options'] = $options;
      unset($form[$inst_field]['#size']);
    }
  }
  // Alters data integrity users views to filter by Institution.
  $user_form_ids = [
    'views-exposed-form-ercore-never-accessed-page-1',
    'views-exposed-form-ercore-users-by-last-access-page-1',
  ];
  if (in_array($form['#id'], $user_form_ids)) {
    $options = ercore_get_institutions(TRUE);
    if (!empty($options)) {
      // Start building out our new form element.
      $inst_field = 'field_ercore_user_partic_inst_target_id';

      $form[$inst_field]['#type'] = 'select';
      $form[$inst_field]['#multiple'] = FALSE;

      // Specify the empty option for our select list.
      $form[$inst_field]['#empty_option'] = t('Institution');

      // Add the $options from above to our select list.
      $form[$inst_field]['#options'] = $options;
      unset($form[$inst_field]['#size']);
    }
  }
}

/**
 * Implements hook_token_info().
 */
function ercore_core_token_info() {
  $info = [];
  $info['tokens']['ercore_token_group']['ercore_address_token'][] = 'Formatting Addresses for view exports';
  return $info;
}

/**
 * Implements hook_tokens().
 */
function ercore_core_tokens($type, $tokens, $data, $options, $bubbleable_metadata) {
  $replacements = [];
  if ($type === 'ercore_token_group') {
    foreach ($tokens as $name => $original) {
      // Find the desired token by name.
      switch ($name) {
        case 'ercore_address_token':
          $id = $data['node']->get('field_ercore_ev_location')->getValue();
          if (!empty($id[0]['target_id'])) {
            $replacements[$original] = ercore_token_format_address($id[0]['target_id']);
          }
          break;
      }
    }
  }
  return $replacements;
}

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

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