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