<?php /** * @file * Contains cfp_payment_request.module. */ use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Render\Element; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\cfp_payment_request\Entity\PaymentRequestType; use Drupal\pos_entity_cfp\Entity\CfpType; use Drupal\Core\Entity\EntityTypeInterface; module_load_include('inc', 'cfp_payment_request', 'cfp_payment_request.extra_fields'); module_load_include('inc', 'cfp_payment_request', 'cfp_payment_request.tokens'); \Drupal::moduleHandler()->loadInclude('cfp_payment_request', 'inc', 'cfp_payment_request.validation'); require_once realpath(__DIR__) . '/cfp_payment_request.currency_conv.inc'; /** * Implements hook_help(). */ function cfp_payment_request_help($route_name, RouteMatchInterface $route_match) { switch ($route_name) { // Main module help for the cfp_payment_request module. case 'help.page.cfp_payment_request': $output = ''; $output .= '<h3>' . t('About') . '</h3>'; $output .= '<p>' . t('Payment Request for CFP') . '</p>'; return $output; default: } } /** * Implements hook_mail(). */ function cfp_payment_request_mail($key, &$message, $params) { switch ($key) { case 'pos_payment_request_mail': $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; /** @var \Drupal\Core\Utility\Token $token */ $token = \Drupal::service('token'); $token_data = [ 'cfp_payment_request' => $params['entity'], ]; $message['subject'] = $token->replace($params['title'], $token_data); $message['body'][] = $token->replace($params['message'], $token_data); $email_log = \Drupal::entityTypeManager() ->getStorage('pos_entity_email_logs') ->create([ 'title' => $message['subject'], 'body' => isset($message['body'][0]) ? $message['body'][0] : '', 'cfp' => $params['entity']->get('parent')->target_id, ]); $email_log->save(); break; } } /** * Implements hook_theme(). */ function cfp_payment_request_theme() { $theme = []; $theme['cfp_payment_request'] = [ 'render element' => 'elements', 'file' => 'cfp_payment_request.page.inc', 'template' => 'cfp_payment_request', ]; $theme['cfp_payment_request_content_add_list'] = [ 'render element' => 'content', 'variables' => ['content' => NULL], 'file' => 'cfp_payment_request.page.inc', ]; $theme['cfp_payment_request_item'] = [ 'render element' => 'elements', 'file' => 'cfp_payment_request_item.page.inc', 'template' => 'cfp_payment_request_item', ]; $theme['cfp_payment_request_item_content_add_list'] = [ 'render element' => 'content', 'variables' => ['content' => NULL], 'file' => 'cfp_payment_request_item.page.inc', ]; $theme['cfp_payment_request_checklist'] = [ 'render element' => 'elements', 'file' => 'cfp_payment_request_checklist.page.inc', ]; $theme['pr_invoice'] = [ 'render element' => 'elements', ]; return $theme; } /** * Prepares variables for invoice templates. * * Default template: pr-invoice.html.twig. * * @param array $variables * An associative array containing: * - elements: An associative array containing the invoice information and any * fields attached to the entity. * - attributes: HTML attributes for the containing element. */ function template_preprocess_pr_invoice(array &$variables) { foreach (Element::children($variables['elements']) as $key) { $variables['content'][$key] = $variables['elements'][$key]; } } /** * Implements hook_entity_bundle_field_info_alter(). */ function cfp_payment_request_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) { if ($entity_type->id() === 'cfp_payment_request') { $pr_type = \Drupal::entityTypeManager()->getStorage('cfp_payment_request_type')->load($bundle); if ($pr_type) { if (isset($fields['items'])) { $settings = $fields['items']->getSettings(); $settings['handler_settings']['target_bundles'] = [$pr_type->get('payment_request_item_type') => $pr_type->get('payment_request_item_type')]; $fields['items']->setSettings($settings); } if (isset($fields['invoices'])) { $settings = $fields['invoices']->getSettings(); $settings['handler_settings']['target_bundles'] = [$pr_type->get('payment_request_invoice_type') => $pr_type->get('payment_request_invoice_type')]; $fields['invoices']->setSettings($settings); } } } } /** * Implements hook_theme_suggestions_HOOK(). */ function cfp_payment_request_theme_suggestions_cfp_payment_request(array $variables) { $entity = $variables['elements']['#cfp_payment_request']; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); return build_template_suggestions($entity, $sanitized_view_mode); } /** * Implements hook_theme_suggestions_HOOK(). */ function cfp_payment_request_theme_suggestions_cfp_payment_request_item(array $variables) { $entity = $variables['elements']['#cfp_payment_request_item']; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); return build_template_suggestions($entity, $sanitized_view_mode); } /** * Implements hook_theme_suggestions_HOOK(). */ function cfp_payment_request_theme_suggestions_cfp_payment_request_checklist(array $variables) { $entity = $variables['elements']['#cfp_payment_request_checklist']; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); return build_template_suggestions($entity, $sanitized_view_mode); } /** * Implements hook_theme_suggestions_HOOK(). */ function cfp_payment_request_theme_suggestions_pr_invoice(array $variables) { $entity = $variables['elements']['#pr_invoice']; $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_'); return build_template_suggestions($entity, $sanitized_view_mode); } /** * Adds template suggestions. */ function build_template_suggestions($entity, $sanitized_view_mode) { $suggestions = []; $suggestions[] = $entity->getEntityTypeId() . '__' . $sanitized_view_mode; $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->bundle(); $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->bundle() . '__' . $sanitized_view_mode; $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->id(); $suggestions[] = $entity->getEntityTypeId() . '__' . $entity->id() . '__' . $sanitized_view_mode; return $suggestions; } /** * Implements hook_file_download(). */ function cfp_payment_request_file_download($uri) { if (str_starts_with($uri, 'temporary://temporary_excel_exports/')) { return [ 'Content-disposition' => 'attachment; filename="' . basename($uri) . '"', ]; } } /** * Implements hook_add_more_entities_to_field_access_alter(). */ function cfp_payment_request_add_more_entities_to_field_access_alter(&$access, FieldItemListInterface $items, FieldDefinitionInterface $field_definition) { // @todo review this logic? $target_type = $field_definition->getSetting('target_type'); if ($target_type === 'cfp_payment_request') { // TODO: Delete comment. /** @var \Drupal\pos_entity_cfp\Entity\Cfp $parent_entity */ // $parent_entity = $items->getEntity(); // if ($parent_entity->getState()->getId() != 'project_implementation') { // return FALSE; // } // $current_user = \Drupal::currentUser(); // $access = $access ?: $current_user->id() == $parent_entity->getOwnerId(); // if ($access) { // /** @var \Drupal\pos_entity_cfp\Entity\CfpType $cfp_type */ // $cfp_type = CfpType::load($parent_entity->bundle()); // /** @var \Drupal\cfp_payment_request\Entity\PaymentRequestType $payment_request_type */ // $payment_request_type = PaymentRequestType::load($cfp_type->getPaymentRequestBundle()); // if (!$payment_request_type) { // $access = FALSE; // return; // } // if ($current_user->hasPermission('administer payment request')) { // $entity_limit = $payment_request_type->get('entity_limit_for_admin'); // } else { // $entity_limit = $payment_request_type->get('entity_limit_for_applicant'); // } // if ($entity_limit !== -1 && $items->count() >= $entity_limit) { // $access = FALSE; // } // } } } /** * Implements hook_add_more_entity_alter(). */ function cfp_payment_request_add_more_entity_alter(FieldableEntityInterface $entity, FieldableEntityInterface $parent, FieldDefinitionInterface $field_definition) { if ($entity->getEntityTypeId() === 'cfp_payment_request') { // @todo Probably move this logic to presave. $entity->set('parent', $parent); $entity->setOwnerId($parent->getOwnerId()); } } /** * Implements hook_options_list_alter(). */ function cfp_payment_request_options_list_alter(array &$options, array $context) { if ($context['fieldDefinition']->getName() === 'pr_type' && $context['fieldDefinition']->getTargetEntityTypeId() === 'cfp_payment_request') { /** @var \Drupal\cfp_payment_request\Entity\PaymentRequestType $pr_type */ $pr_type = $context['entity']->get('type')->entity; $allowed_options = $pr_type->get('allowed_pr_types') + ['_none' => '_none']; if (!empty($allowed_options)) { foreach ($options as $option_key => $option) { if (!in_array($option_key, $allowed_options)) { unset($options[$option_key]); } } } } } /** * Implements hook_preprocess_HOOK(). */ function cfp_payment_request_preprocess_field__entity_reference(&$variables) { if ($variables['field_name'] === 'payment_request' && $variables['entity_type'] === 'cfp') { foreach ($variables['items'] as $item) { $pr = $item['content']['#cfp_payment_request']; if ($pr->getState() === 'reopened') { $item['attributes']->setAttribute('style', 'border: 3px solid #ff0000'); } } } } /** * Implements hook_form_FORM_ID_alter(). */ function cfp_payment_request_form_views_exposed_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { if ($form['#id'] === 'views-exposed-form-payment-requests-page-1') { $workflow_manager = \Drupal::service('plugin.manager.workflow'); $workflow = $workflow_manager->createInstance('payment_request'); $states = $workflow->getStates(); $states = array_map(function ($state) { return $state->getLabel(); }, $states); $form['state'] = [ '#type' => 'select', '#options' => [ '' => t('- Any -'), ] + $states, ]; } } /** * Implements hook_form_FORM_ID_alter(). */ function cfp_payment_request_form_cfp_payment_request_pr_2022_01_edit_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { $form['cf_customs_documents']['#states'] = [ 'visible' => [ ':input[name="pr_type"]' => ['value' => 'closing'] ] ]; $form['cf_eur1_form']['#states'] = [ 'visible' => [ ':input[name="pr_type"]' => ['value' => 'closing'] ] ]; // @TODO: Ovo treba ispraviti. Ne verujem da ovo može tu da bude. // Payment request item conditional fields. $conditional_fields = [ 'cf_final_account', 'cf_confirm_final_payment', 'cf_purchase_contract', 'cf_protocol_record', 'cf_driving_license', 'cf_pictures', ]; foreach ($conditional_fields as $conditional_field) { if (isset($form[$conditional_field])) { $form[$conditional_field]['#states'] = [ 'visible' => [ ':input[name="pr_type"]' => ['value' => 'closing'] ] ]; } } }
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