elevenlabs_field-1.0.0-beta7/modules/elevenlabs_bytescale/elevenlabs_bytescale.module

modules/elevenlabs_bytescale/elevenlabs_bytescale.module
<?php

/**
 * @file
 * Makes concanating with Bytescale possible.
 */

use Drupal\Core\Entity\ContentEntityFormInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Field\Entity\BaseFieldOverride;
use Drupal\Core\Form\FormStateInterface;
use Drupal\field\Entity\FieldConfig;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function elevenlabs_bytescale_form_field_config_edit_form_alter(&$form, FormStateInterface $formState) {
  $fieldConfig = $formState->getFormObject()->getEntity();
  $entity = $form['#entity'];
  if ($fieldConfig->getType() == 'elevenlabs') {
    $form['concatenate_bytescale'] = [
      '#type' => 'checkbox',
      '#title' => t('Concatenate File in Bytescale'),
      '#description' => t('Concatenate a long discussion into one file.'),
      '#weight' => 10,
      '#default_value' => $fieldConfig->getConfig($entity->bundle())->getThirdPartySetting('elevenlabs_bytescale', 'concatenate_bytescale', FALSE),
      '#states' => [
        'visible' => [
          ':input[name="settings[save_audio]"]' => [
            "!value" => "",
          ],
        ],
      ],
    ];

    $form['concatenate_bytescale_autosave'] = [
      '#type' => 'checkbox',
      '#title' => t('Autosave Bytescale'),
      '#description' => t('If you check this the file will be remade for every little change. This can be costly. If its unchecked you will have a manual button when saving the field.'),
      '#weight' => 11,
      '#default_value' => $fieldConfig->getConfig($entity->bundle())->getThirdPartySetting('elevenlabs_bytescale', 'concatenate_bytescale_autosave', FALSE),
      '#states' => [
        'visible' => [
          ':input[name="concatenate_bytescale"]' => [
            'checked' => TRUE,
          ],
        ],
      ],
    ];
    // Validate callback.
    $form['#validate'][] = '_elevenlabs_bytescale_validate_config_values';

    // Save value callback.
    $form['#entity_builders'][] = '_elevenlabs_bytescale_save_config_values';
  }
}

/**
 * Implements hook_form_alter().
 */
function elevenlabs_bytescale_form_alter(&$form, FormStateInterface $formState, $form_id) {
  // Only check on content entity forms.
  if ($formState->getFormObject() instanceof ContentEntityFormInterface) {
    // Get entity.
    $entity = $formState->getFormObject()->getEntity();

    // Look for elevenlabs fields.
    foreach ($entity->getFields() as $field) {
      if ($field->getFieldDefinition()->getType() == 'elevenlabs') {
        // Check if there is a bytescale field connection.
        $settings = $field->getFieldDefinition()->getThirdPartySettings('elevenlabs_bytescale');
        if (!empty($settings['concatenate_bytescale']) && empty($settings['concatenate_bytescale_autosave'])) {
          $form['actions']['submit_bytescale'] = [
            '#type' => 'submit',
            '#value' => t('Save and Generate Mp3'),
            '#weight' => 20,
            '#submit' => ['_elevenlabs_bytescale_submit'] + $form['actions']['submit']['#submit'],
          ];
        }
      }
    }
  }
}

/**
 * Implements hook_entity_presave().
 */
function elevenlabs_bytescale_entity_presave(EntityInterface $entity) {
  // Get queue and see if it's there.
  $entities = _elevenlabs_field_needs_copying();
  if (isset($entities[$entity->getEntityTypeId() . $entity->id()])) {
    // Check if enabled.
    $rules = $entities[$entity->getEntityTypeId() . $entity->id()];
    $fieldConfig = FieldConfig::loadByName($entity->getEntityTypeId(), $entity->bundle(), $rules['original_field']);
    $settings = $fieldConfig->getThirdPartySettings('elevenlabs_bytescale');

    if (!empty($settings['concatenate_bytescale']) && (!empty($settings['concatenate_bytescale_autosave']) || _elevenlabs_bytescale_can_save())) {
      $values = $entity->get($rules['original_field'])->getValue();
      // Only change if something changed or field is empty.
      if (empty($entity->get($rules['field'])->getValue()) || (isset($entity->original) &&
        json_encode($entity->get($rules['original_field'])->getValue()) != json_encode($entity->original->get($rules['original_field'])->getValue()))) {
        $entity->set($rules['field'], \Drupal::service('elevenlabs_bytescale.api')->concatenateAudios($values, $rules['original_field'], $rules['field'], $entity));
      }
    }
  }
}

/**
 * Validates the concate values.
 *
 * @param array $form
 *   The form passed by reference.
 * @param \Drupal\Core\Form\FormStateInterface $formState
 *   The form state interface.
 */
function _elevenlabs_bytescale_validate_config_values(&$form, FormStateInterface $formState) {
  // Validate the configuration.
  if (!empty($formState->getValue('settings')['concatenate']) && !empty($formState->getValue('concatenate_bytescale'))) {
    $formState->setErrorByName('concatenate_bytescale', t('You can not set it to concatenate in both FFmpeg and Bytescale, choose one.'));
  }

}

/**
 * Saves the concat value.
 *
 * @param string $entity_type
 *   The entity type being used.
 * @param \Drupal\field\Entity\FieldConfig|\Drupal\Core\Field\Entity\BaseFieldOverride $fieldConfig
 *   The field config.
 * @param array $form
 *   The form passed by reference.
 * @param \Drupal\Core\Form\FormStateInterface $formState
 *   The form state interface.
 */
function _elevenlabs_bytescale_save_config_values($entity_type, FieldConfig|BaseFieldOverride $fieldConfig, &$form, FormStateInterface $formState) {
  // Save the configuration.
  $fieldConfig->setThirdPartySetting('elevenlabs_bytescale', 'concatenate_bytescale', $formState->getValue('concatenate_bytescale'));
  $fieldConfig->setThirdPartySetting('elevenlabs_bytescale', 'concatenate_bytescale_autosave', $formState->getValue('concatenate_bytescale_autosave'));
}

/**
 * Submit handler for the bytescale submit button.
 *
 * @param array $form
 *   The form passed by reference.
 * @param \Drupal\Core\Form\FormStateInterface $formState
 *   The form state interface.
 */
function _elevenlabs_bytescale_submit(&$form, FormStateInterface $formState) {
  $trigger = $formState->getTriggeringElement();
  $button = isset($trigger['#parents']) ? end($trigger['#parents']) : '';
  if ($button == 'submit_bytescale') {
    _elevenlabs_bytescale_can_save(TRUE);
  }
}

/**
 * Global state function to toggle if Bytescale should be saved.
 *
 * @param bool $newToggle
 *   The new toggle if you want to save it.
 *
 * @return bool
 *   If it is possible to save or not.
 */
function _elevenlabs_bytescale_can_save($newToggle = NULL) {
  static $toggle;
  // Set default to FALSE.
  // @codingStandardsIgnoreLine
  $toggle = $toggle === NULL ? FALSE : $toggle;
  if (isset($newToggle)) {
    $toggle = $newToggle;
  }
  return $toggle;
}

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

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