link_orcid-1.0.0-rc1/link_orcid.module

link_orcid.module
<?php

/**
 * @file
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\user\UserInterface;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function link_orcid_form_user_form_alter(array &$form, FormStateInterface $form_state, $form_id) {
  /** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
  $form_object = $form_state->getFormObject();
  $account = $form_object->getEntity();
  $config = \Drupal::config('link_orcid.settings');
  $field_name = $config->get('user_field');

  if ($field_name && isset($form[$field_name])) {
    // Disable access for the ORCID field.
    $form[$field_name]['#attributes']['readonly'] = 'readonly';
    $form[$field_name]['#disabled'] = TRUE;
  }

  if (
    $account instanceof UserInterface &&
    \Drupal::currentUser()->id() == $account->id() &&
    \Drupal::currentUser()->hasPermission('link own orcid')
  ) {
    if ($field_name && isset($form[$field_name])) {
      // Show Unlink or Link button depending on field value.
      $orcid_value = $account->get($field_name)->value;
      if (!empty($orcid_value)) {
        $form[$field_name]['#suffix'] = (
          $form[$field_name]['#suffix'] ?? ''
        ) . '<a class="button button--danger" style="margin-left:10px;" href="/link-orcid/unlink">' . t('Unlink ORCID') . '</a>';
      }
      else {
        $form[$field_name]['#suffix'] = (
          $form[$field_name]['#suffix'] ?? ''
              ) . '<a class="button button--primary" style="margin-left:10px;" href="/link-orcid/start">' . t('Link ORCID') . '</a>';
      }
    }
    else {
      // Fallback: show in a details element if field not found.
      $form['link_orcid'] = [
        '#type' => 'details',
        '#title' => t('ORCID'),
        '#open' => TRUE,
        '#weight' => -50,
      ];
      $orcid_value = $account->get($field_name)->value ?? '';
      if (!empty($orcid_value)) {
        $form['link_orcid']['link_button'] = [
          '#type' => 'markup',
          '#markup' => '<a class="button button--danger" href="/link-orcid/unlink">' . t('Unlink ORCID') . '</a>',
        ];
      }
      else {
        $form['link_orcid']['link_button'] = [
          '#type' => 'markup',
          '#markup' => '<a class="button button--primary" href="/link-orcid/start">' . t('Link ORCID') . '</a>',
        ];
      }
    }
  }
}

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

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