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;
}
