134 lines
4.4 KiB
PHP
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();
|
|
}
|
|
}
|
|
}
|
|
}
|