manifest/web/modules/custom/yufu_concept/yufu_concept.module

107 lines
3.2 KiB
PHP

<?php
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\NodeInterface;
use Drupal\Core\Site\Settings;
use Symfony\Component\HttpClient\HttpClient;
/**
* @file
* Primary module hooks for Yufu Concept module.
*/
/**
* Implements hook_entity_update().
*/
function yufu_concept_node_presave(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
// Dodaj avtorja spremembe med urednike, če še ni
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
if ($transition->id() == 'publish') {
if ($user = $entity->uid->entity) {
if (!$user->status->value) {
$user->set('status', 1);
$user->addRole('editor');
$user->save();
}
}
}
}
}
// Dodaj oz. posodobi manjkajoce prevode (ampak samo ce ne gre za
// strojni prevod!)
function yufu_concept_node_insert(EntityInterface $entity) {
uskladi_prevode($entity);
}
function yufu_concept_node_update(EntityInterface $entity) {
uskladi_prevode($entity);
}
function prevedi_koncept(EntityInterface $entity, EntityInterface $prevod) {
$libretranslate = \Drupal::service('yufu_concept.translate');
$izvorniJezik = $entity->language()->getId();
$ciljniJezik = $prevod->language()->getId();
// Hrvaščina ni podprta, zato jo zamenjamo s srbščino
if ($izvorniJezik == 'hr') {
$izvorniJezik = 'sr';
}
if ($ciljniJezik == 'hr') {
$ciljniJezik = 'sr';
}
[$naslov, $tekst] = $libretranslate->prevedi([
$entity->title->value,
$entity->body->value
], $izvorniJezik, $ciljniJezik);
// Cirilica v latinico
if ($ciljniJezik == 'sr') {
[$naslov, $tekst] = array_map(function ($tekst) {
return transliterator_transliterate('Russian-Latin/BGN', $tekst);
}, [$naslov, $tekst]);
}
$prevod->set('title', $naslov);
$prevod->set('body', $tekst);
}
function uskladi_prevode(EntityInterface $entity) {
if ($entity instanceOf NodeInterface
&& $entity->bundle() == 'concept'
&& !$entity->field_strojni_prevod->value) {
$vsiJeziki = array_keys(\Drupal::languageManager()->getLanguages());
// Katere prevode koncepta že imamo?
$izvorniJezik = $entity->language()->getId();
$jezikiKoncepta = array_keys($entity->getTranslationLanguages());
$ostaliJeziki = array_diff($vsiJeziki, [$izvorniJezik]);
// Dodamo nove prevode, če je treba
$manjkajoci = array_diff($vsiJeziki, $jezikiKoncepta);
foreach($manjkajoci as $jezik) {
$prevod = $entity->addTranslation($jezik, $entity->toArray());
prevedi_koncept($entity, $prevod);
$prevod->set('field_strojni_prevod', true);
$prevod->save();
$ostaliJeziki = array_diff($ostaliJeziki, [$jezik]);
}
// Posodobimo obstoječe prevode, če so strojni
$entityRepository = \Drupal::service('entity.repository');
foreach($ostaliJeziki as $jezik) {
$prevod = $entityRepository->getTranslationFromContext($entity, $jezik);
$strojniPrevodField = $prevod->field_strojni_prevod->first();
$strojniPrevod = $strojniPrevodField->value;
if ($strojniPrevod != '0') {
prevedi_koncept($entity, $prevod);
$prevod->save();
}
}
}
}