<?php /** * @file * Contains pos_entity_applicant.module. */ use Drupal\Core\Entity\Display\EntityViewDisplayInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Url; use Drupal\pos_entity_applicant\Entity\ApplicantType; use Drupal\pos_entity_applicant\Event\UserCancelEvent; module_load_include('inc', 'pos_entity_applicant', 'pos_entity_applicant.tokens'); module_load_include('inc','pos_entity_applicant', 'pos_entity_applicant.views'); module_load_include('inc', 'pos_entity_applicant', 'pos_entity_applicant.validation'); /** * Implements hook_help(). */ function pos_entity_applicant_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { // Main module help for the pos_entity_applicant module. case 'help.page.pos_entity_applicant': $output = ''; $output .= '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t('General Applicant Entity') . '</p>'; return $output; default: } } /** * Implements hook_theme(). */ function pos_entity_applicant_theme() { $theme = []; $theme['applicant'] = [ 'render element' => 'elements', 'file' => 'applicant.page.inc', 'template' => 'applicant', ]; $theme['applicant_content_add_list'] = [ 'render element' => 'content', 'variables' => ['content' => NULL], 'file' => 'applicant.page.inc', ]; return $theme; } /** * Implements hook_theme_suggestions_HOOK(). */ function pos_entity_applicant_theme_suggestions_applicant(array $variables) { $suggestions = []; $entity = $variables['elements']['#applicant']; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); $suggestions[] = 'applicant__' . $sanitized_view_mode; $suggestions[] = 'applicant__' . $entity->bundle(); $suggestions[] = 'applicant__' . $entity->bundle() . '__' . $sanitized_view_mode; $suggestions[] = 'applicant__' . $entity->id(); $suggestions[] = 'applicant__' . $entity->id() . '__' . $sanitized_view_mode; return $suggestions; } /** * Implements hook_entity_extra_field_info(). */ function pos_entity_applicant_entity_extra_field_info() { $extra = []; foreach (ApplicantType::loadMultiple() as $bundle) { $extra['applicant'][$bundle->id()]['display']['edit_link'] = [ 'label' => t('Edit link'), 'description' => 'Entity edit link', 'weight' => 20, 'visible' => TRUE, ]; $extra['applicant'][$bundle->id()]['display']['view_link'] = [ 'label' => t('View link'), 'description' => 'Entity view link', 'weight' => 20, 'visible' => TRUE, ]; $extra['applicant'][$bundle->id()]['display']['state_description'] = [ 'label' => t('State description'), 'description' => 'Shows state description defined in applicant bundle', 'weight' => 20, 'visible' => TRUE, ]; $extra['applicant'][$bundle->id()]['display']['locked_button'] = [ 'label' => t('Locked button'), 'description' => 'Locked', 'weight' => 20, 'visible' => TRUE, ]; $extra['applicant'][$bundle->id()]['display']['representative'] = [ 'label' => t('Ovlašteno lice za zastupanje'), 'description' => t('Ime i prezime predstavnika'), 'weight' => 20, 'visible' => FALSE, ]; } return $extra; } /** * Implements hook_ENTITY_TYPE_view(). */ function pos_entity_applicant_applicant_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { if ($display->getComponent('edit_link') && $entity->access('update')) { $build['edit_link'] = [ '#type' => 'link', '#title' => t('Edit'), '#url' => Url::fromRoute('entity.' . $entity->getEntityTypeId() . '.edit_form', [ $entity->getEntityTypeId() => $entity->id(), ]), '#attributes' => [ 'class' => ['button'], ], ]; } if ($display->getComponent('view_link') && $entity->access('view')) { $build['view_link'] = [ '#type' => 'link', '#title' => t('View'), '#url' => Url::fromRoute('entity.' . $entity->getEntityTypeId() . '.canonical', [ $entity->getEntityTypeId() => $entity->id(), ]), '#attributes' => [ 'class' => ['button'], ], ]; } if ($display->getComponent('state_description')) { $applicant_type = ApplicantType::load($entity->bundle()); if ($description = $applicant_type->getStateDescription($entity->getState())) { $build['state_description'] = [ '#type' => 'inline_template', '#template' => '<div class="applicant__state-description">' . $description . '</div>', ]; } } if ($display->getComponent('locked_button')) { if (!$entity->isLocked() && (bool) $entity->get('validation_passed')->value) { $build['locked_button'] = [ '#type' => 'link', '#url' => new Url('pos_entity_applicant.applicant_lock_data_confirm', [ 'applicant' => $entity->id(), ]), '#title' => t('Lock'), '#attributes' => [ 'class' => [ 'button', ], ], ]; } } if ($display->getComponent('representative') && $entity->get('company_representative')->target_id) { $representative = $entity->get('company_representative')->entity; $rep_name = $representative->get('field_firstname')->value ?? ''; $rep_lastname = $representative->get('field_lastname')->value ?? ''; if ($rep_name === '' && $rep_lastname === '') { } else { $build['representative'] = [ '#type' => 'container', 'zastupnik' => [ '#type' => 'container', 'label' => [ '#type' => 'markup', '#markup' => t('Ovlašteno lice za zastupanje'), ], '#attributes' => [ 'class' => ['current_applicant_representative-label'], ] ], 'representative' => [ '#type' => 'markup', '#markup' => '<div class="current_applicant_representative-item">' . $rep_lastname . ' ' . $rep_name . '</div>', ] ]; } } } /** * Implements hook_cron(). */ function pos_entity_applicant_cron() { $query = \Drupal::database()->query('SELECT applicant.id FROM applicant WHERE applicant.id NOT IN (SELECT applicant FROM users_field_data) '); $storage = \Drupal::entityTypeManager()->getStorage('applicant'); while ($row = $query->fetch()) { $company = $storage->load($row->id); $company->delete(); } } /** * Get applicant bundles. * * @return array * Applicant bundles. */ function get_applicant_bundles() { $applicant_types = ApplicantType::loadMultiple(); $applicant_list = []; foreach ($applicant_types as $applicant_type) { $applicant_list[$applicant_type->id()] = $applicant_type->label(); } return $applicant_list; } /** * Implements hook_form_FORM_ID_alter(). */ function pos_entity_applicant_form_applicant_company_edit_form_alter(&$form, FormStateInterface $form_state) { $form['vat_number_entitled_true']['#states'] = [ 'visible' => [ ':input[name="entitled_to_vat_refund"]' => ['value' => 'yes'] ], ]; $form['annual_income']['widget']['#description'] = 'Molimo vas da unesete najmanje podatke za 2021.godinu, ukoliko je vaše pravno lice osnovano prije 31. decembra 2021.'; } /** * Implements hook_form_FORM_ID_alter(). */ function pos_entity_applicant_form_applicant_individual_edit_form_alter(&$form, FormStateInterface $form_state) { $form['vat_number_entitled_true']['#states'] = [ 'visible' => [ ':input[name="entitled_to_vat_refund"]' => ['value' => 'yes'] ], ]; $form['annual_income']['widget']['#description'] = 'Molimo vas da unesete najmanje podatke za 2021.godinu, ukoliko je vaše gazdinstvo osnovano prije 31. decembra 2021.'; } /** * Implements hook_inline_entity_form_entity_form_alter(). */ function pos_entity_applicant_inline_entity_form_entity_form_alter(array &$entity_form, FormStateInterface &$form_state) { if ($entity_form['#entity']->getEntityTypeId() === 'basic' && $entity_form['#entity']->bundle() === 'owned_other_companies') { if (isset($entity_form['cf_vat_number_entitled_true'])) { $entity_form['cf_vat_number_entitled_true']['#states'] = [ 'visible' => [ [ ':input[name="cf_owners_companies[form][inline_entity_form][entities][0][form][cf_entitled_to_vat_refund]"]' => ['value' => 1], ], 'or', [ ':input[name="cf_owners_companies[form][0][cf_entitled_to_vat_refund]"]' => ['value' => 1], ], ], ]; } } } /** * Implements hook_views_data(). */ function pos_entity_applicant_views_data() { $data = []; $data['views']['applicant_has_cfp'] = [ 'title' => t('Did the applicant start cfp - Custom filter'), 'filter' => [ 'title' => t('Did the applicant start cfp - Custom filter'), 'field' => 'id', 'id' => 'applicant_has_cfp', ], ]; $data['views']['applicant_cfp'] = [ 'title' => t('Did the applicant start cfp - NEW Custom filter'), 'filter' => [ 'title' => t('Did the applicant start cfp - NEW Custom filter'), 'field' => 'id', 'id' => 'applicant_cfp' ], ]; return $data; } /** * Implements hook_ENTITY_TYPE_predelete(). */ function pos_entity_applicant_user_predelete(\Drupal\Core\Entity\EntityInterface $entity) { $event = new UserCancelEvent($entity); $event_dispatcher = \Drupal::service('event_dispatcher'); $event_dispatcher->dispatch($event, UserCancelEvent::EVENT_NAME); } /** * Implements hook_mail(). */ function pos_entity_applicant_mail($key, &$message, $params) { switch($key) { case 'pos_entity_applicant_mail_send': $mail_sender = \Drupal::config('system.site')->get('mail'); $message['headers']['From'] = $mail_sender; $message['headers']['Sender'] = $mail_sender; $message['headers']['Return-Path'] = $mail_sender; $message['headers']['Content-Type'] = 'text/html'; $message['from'] = $mail_sender; $message['subject'] = $params['title']; /** @var \Drupal\Core\Utility\Token $token */ $token = \Drupal::service('token'); /** @var \Drupal\pos_entity_applicant\Entity\Applicant $applicant */ $applicant = $params['entity']->get('applicant')->entity ?? NULL; // Not using this tokens currently, but maybe we will some day in the future. $token_data = [ 'applicant' => $applicant, 'user' => $params['entity'], ]; $message['subject'] = $token->replace($params['title'], $token_data, ['clear' => TRUE]); $message['body'][] = $token->replace($params['message'], $token_data, ['clear' => TRUE]); $files = []; if (isset($params['attachments'])) { $message['params']['files'] = $params['attachments']; foreach ($params['attachments'] as $file) { $files[] = $file['filename']; } } $email_log = \Drupal::entityTypeManager() ->getStorage('pos_entity_email_logs') ->create([ 'title' => $message['subject'], 'body' => isset($message['body'][0]) ? $message['body'][0] : '', ]); $email_log->save(); break; } }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter