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;
}
