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

134 lines
4.4 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') {
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
// Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
// Dodaj avtorja spremembe med urednike, če še ni
if ($user = $entity->uid->entity) {
if (!$user->status->value) {
$user->set('status', 1);
$user->addRole('editor');
$user->save();
}
}
}
}
}
// Dodaj oz. posodobi manjkajoce prevode navadnih strani
function yufu_concept_node_insert(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'page') {
uskladi_prevode($entity);
}
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
// Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
/* Posodobi strojne prevode */
uskladi_prevode($entity);
}
}
}
function yufu_concept_node_update(EntityInterface $entity) {
if ($entity instanceOf NodeInterface && $entity->bundle() == 'page') {
uskladi_prevode($entity);
}
if ($entity instanceOf NodeInterface && $entity->bundle() == 'concept') {
$transition = \Drupal::service('content_moderation_notifications.notification_information')->getTransition($entity);
//var_dump($entity->status);die;
// Ko je sprememba koncepta potrjena
if ($transition->id() == 'publish' && !$entity->field_strojni_prevod->value) {
/* Posodobi strojne prevode */
//var_dump('uskladi prevode!');die;
uskladi_prevode($entity);
}
}
}
function prevedi_koncept(EntityInterface $entity, EntityInterface $prevod) {
$libretranslate = \Drupal::service('yufu_concept.translate');
$izvorniJezik = $entity->language()->getId();
$ciljniJezik = $prevod->language()->getId();
//var_dump('prevajam koncept!', $izvorniJezik, $ciljniJezik);
// 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);
$prevod->setNewRevision();
$prevod->moderation_state = 'published';
}
function uskladi_prevode(EntityInterface $entity) {
if ($entity instanceOf NodeInterface
&& !$entity->field_strojni_prevod->value
&& ($entity->bundle() == 'concept' || $entity->bundle() == 'page')) {
$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->setNewRevision();
$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);
$strojniPrevod = $prevod->field_strojni_prevod->value;
if ($strojniPrevod) {
prevedi_koncept($entity, $prevod);
$prevod->save();
}
}
}
}