diff --git a/uw_ct_service.module b/uw_ct_service.module index 07f8f40df7d176a4e7a005b80617032a290d92f6..1f2a0beef4bb48f100e7c587906fbcf033de08e3 100644 --- a/uw_ct_service.module +++ b/uw_ct_service.module @@ -5,6 +5,7 @@ * Provides configuration and settings for services. */ +use Drupal\Core\Link; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; use Drupal\views\Plugin\views\query\QueryPluginBase; @@ -121,6 +122,33 @@ function uw_ct_service_form_node_uw_ct_service_form_alter(array &$form, FormStat // ISTWCMS-5551: adding help text to office hours exception days. $form['field_uw_service_hours']['widget']['office_hours_exceptions']['#description'] = t('<p>Exceptions further in the future will display once the exception is under one week away.</p>'); + + // Get terms from uw_vocab_service_categories. + $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree('uw_vocab_service_categories'); + + // If there is not service categories taxonomy term set yet. + if (empty($terms)) { + // Set message. + \Drupal::messenger()->addMessage(t('You must create at least one service category before adding a service.'), 'error'); + + // Get the current user. + $current_user = \Drupal::currentUser(); + + // If the current user has no permission, set field description. + if (!$current_user->hasPermission('create terms in uw_vocab_service_categories')) { + $form['field_uw_service_category']['widget']['#description'] = t('Reach out to someone who has access to add a service category.'); + } + + // If the current user has permission, add a link to create a term. + else { + $form['field_uw_service_category']['widget']['#description'] = + Link::fromTextAndUrl(t('Add a service category.'), Url::fromUri('internal:/admin/structure/taxonomy/manage/uw_vocab_service_categories/add'))->toString(); + } + } + + // Add in our own validation to check if there is no service categories. + $form['#validate'][] = '_uw_ct_service_node_validate'; + } /** @@ -234,3 +262,32 @@ function uw_ct_service_views_query_alter( } } } + +/** + * Validate function for node add/edit for service content type. + * + * This will ensure that only the tabs for the specific term are saved + * when the node is saved. If for some reason a term was switched and + * the term has different tabs to be displayed, the tabs from the old + * term would still appear. This will remove any values in the tabs + * that are not listed in the term. + * + * @param array $form + * The form array. + * @param \Drupal\Core\Form\FormStateInterface $form_state + * The form state array. + */ +function _uw_ct_service_node_validate(array &$form, FormStateInterface &$form_state) { + + // Get the term id from the form state. + if (isset($form_state->getValue('field_uw_service_category')[0]['target_id'])) { + $tid = $form_state->getValue('field_uw_service_category')[0]['target_id']; + + // If the tid is NULL, that means that there is + // no catalog yet created so throw a form state + // error and add message to create one. + if (!$tid) { + $form_state->setErrorByName('service categories', 'You must create at least one service category before adding a service.'); + } + } +}