cfp_payment_request.module
Wed Oct 12 2022 21:21:53 GMT+0000 (Coordinated Universal Time)
<?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']
]
];
}
}
}



Comments