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