Skip to content

Commit

Permalink
Merge branch 'release-54.31.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions committed Feb 7, 2025
2 parents cc6d840 + fc299a3 commit 08e3bc5
Show file tree
Hide file tree
Showing 9 changed files with 262 additions and 15 deletions.
73 changes: 73 additions & 0 deletions models/classes/Translation/Event/TranslationActionEvent.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?php

/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2025 (original work) Open Assessment Technologies SA.
*/

declare(strict_types=1);

namespace oat\tao\model\Translation\Event;

use JsonSerializable;
use oat\oatbox\event\Event;

class TranslationActionEvent implements Event, JsonSerializable
{
public const ACTION_CREATED = 'translation.created';
public const ACTION_UPDATED = 'translation.updated';
public const ACTION_DELETED = 'translation.deleted';

private string $action;
private string $type;
private string $originalResourceId;
private string $translationResourceId;
private string $locale;
private array $data;

public function __construct(
string $action,
string $type,
string $originalResourceId,
string $translationResourceId,
string $locale,
array $data = []
) {
$this->action = $action;
$this->type = $type;
$this->originalResourceId = $originalResourceId;
$this->translationResourceId = $translationResourceId;
$this->locale = $locale;
$this->data = $data;
}

public function getName(): string
{
return __CLASS__;
}

public function jsonSerialize(): array
{
return [
'action' => $this->action,
'type' => $this->type,
'originalResourceId' => $this->originalResourceId,
'translationResourceId' => $this->translationResourceId,
'locale' => $this->locale,
'data' => $this->data,
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,15 @@

use core_kernel_classes_Resource;
use oat\generis\model\data\Ontology;
use oat\oatbox\event\EventManager;
use oat\tao\model\Language\Business\Contract\LanguageRepositoryInterface;
use oat\tao\model\Language\Language;
use oat\tao\model\resources\Command\ResourceTransferCommand;
use oat\tao\model\resources\Contract\ResourceTransferInterface;
use oat\tao\model\TaoOntology;
use oat\tao\model\Translation\Command\CreateTranslationCommand;
use oat\tao\model\Translation\Entity\ResourceTranslatable;
use oat\tao\model\Translation\Event\TranslationActionEvent;
use oat\tao\model\Translation\Exception\ResourceTranslationException;
use oat\tao\model\Translation\Query\ResourceTranslatableQuery;
use oat\tao\model\Translation\Query\ResourceTranslationQuery;
Expand All @@ -48,6 +50,7 @@ class TranslationCreationService
private LanguageRepositoryInterface $languageRepository;
private LoggerInterface $logger;
private TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer;
private EventManager $eventManager;

private array $resourceTransferServices;
private array $callables;
Expand All @@ -58,14 +61,16 @@ public function __construct(
ResourceTranslationRepository $resourceTranslationRepository,
LanguageRepositoryInterface $languageRepository,
LoggerInterface $logger,
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer,
EventManager $eventManager
) {
$this->ontology = $ontology;
$this->resourceTranslatableRepository = $resourceTranslatableRepository;
$this->resourceTranslationRepository = $resourceTranslationRepository;
$this->languageRepository = $languageRepository;
$this->logger = $logger;
$this->translatedIntoLanguagesSynchronizer = $translatedIntoLanguagesSynchronizer;
$this->eventManager = $eventManager;
}

public function setResourceTransfer(string $resourceType, ResourceTransferInterface $resourceTransfer): void
Expand Down Expand Up @@ -194,6 +199,14 @@ public function create(CreateTranslationCommand $command): core_kernel_classes_R

$this->translatedIntoLanguagesSynchronizer->sync($instance);

$this->eventManager->trigger(new TranslationActionEvent(
TranslationActionEvent::ACTION_CREATED,
$rootId,
$resourceUri,
$clonedInstanceUri,
$language->getCode()
));

return $clonedInstance;
} catch (Throwable $exception) {
$this->logger->error(
Expand Down
24 changes: 20 additions & 4 deletions models/classes/Translation/Service/TranslationDeletionService.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
use core_kernel_classes_Resource;
use oat\generis\model\data\Ontology;
use oat\generis\model\resource\Contract\ResourceDeleterInterface;
use oat\oatbox\event\EventManager;
use oat\tao\model\Translation\Entity\AbstractResource;
use oat\tao\model\Translation\Event\TranslationActionEvent;
use oat\tao\model\Translation\Exception\ResourceTranslationException;
use oat\tao\model\Translation\Query\ResourceTranslationQuery;
use oat\tao\model\Translation\Repository\ResourceTranslationRepository;
Expand All @@ -40,19 +42,22 @@ class TranslationDeletionService
private ResourceTranslationRepository $resourceTranslationRepository;
private LoggerInterface $logger;
private TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer;
private EventManager $eventManager;

public function __construct(
Ontology $ontology,
ResourceDeleterInterface $resourceDeleter,
ResourceTranslationRepository $resourceTranslationRepository,
LoggerInterface $logger,
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer,
EventManager $eventManager
) {
$this->ontology = $ontology;
$this->resourceDeleter = $resourceDeleter;
$this->resourceTranslationRepository = $resourceTranslationRepository;
$this->logger = $logger;
$this->translatedIntoLanguagesSynchronizer = $translatedIntoLanguagesSynchronizer;
$this->eventManager = $eventManager;
}

public function deleteByRequest(ServerRequestInterface $request): core_kernel_classes_Resource
Expand All @@ -70,6 +75,9 @@ public function deleteByRequest(ServerRequestInterface $request): core_kernel_cl
}

try {
$resource = $this->ontology->getResource($resourceUri);
$rootId = $resource->getRootId();

$translations = $this->resourceTranslationRepository
->find(new ResourceTranslationQuery([$resourceUri], $languageUri));

Expand All @@ -85,12 +93,20 @@ public function deleteByRequest(ServerRequestInterface $request): core_kernel_cl

/** @var AbstractResource $translation */
foreach ($translations as $translation) {
$resource = $this->ontology->getResource($translation->getResourceUri());
$translationResource = $this->ontology->getResource($translation->getResourceUri());

$this->resourceDeleter->delete($translationResource);

$this->resourceDeleter->delete($resource);
$this->eventManager->trigger(new TranslationActionEvent(
TranslationActionEvent::ACTION_DELETED,
$rootId,
$resourceUri,
$translation->getResourceUri(),
$translation->getLanguageCode()
));
}

$this->translatedIntoLanguagesSynchronizer->sync($this->ontology->getResource($resourceUri));
$this->translatedIntoLanguagesSynchronizer->sync($resource);

return $resource;
} catch (Throwable $exception) {
Expand Down
51 changes: 46 additions & 5 deletions models/classes/Translation/Service/TranslationUpdateService.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@

use core_kernel_classes_Resource;
use oat\generis\model\data\Ontology;
use oat\oatbox\event\EventManager;
use oat\tao\model\TaoOntology;
use oat\tao\model\Translation\Command\UpdateTranslationCommand;
use oat\tao\model\Translation\Event\TranslationActionEvent;
use oat\tao\model\Translation\Exception\ResourceTranslationException;
use Psr\Log\LoggerInterface;
use Throwable;
Expand All @@ -35,15 +37,18 @@ class TranslationUpdateService
private Ontology $ontology;
private LoggerInterface $logger;
private TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer;
private EventManager $eventManager;

public function __construct(
Ontology $ontology,
LoggerInterface $logger,
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer
TranslatedIntoLanguagesSynchronizer $translatedIntoLanguagesSynchronizer,
EventManager $eventManager
) {
$this->ontology = $ontology;
$this->logger = $logger;
$this->translatedIntoLanguagesSynchronizer = $translatedIntoLanguagesSynchronizer;
$this->eventManager = $eventManager;
}

public function update(UpdateTranslationCommand $command): core_kernel_classes_Resource
Expand Down Expand Up @@ -73,13 +78,31 @@ public function update(UpdateTranslationCommand $command): core_kernel_classes_R
);
}

$instance->editPropertyValues(
$this->ontology->getProperty(TaoOntology::PROPERTY_TRANSLATION_PROGRESS),
$command->getProgressUri()
);
$translationProgressProperty = $this->ontology->getProperty(TaoOntology::PROPERTY_TRANSLATION_PROGRESS);
$oldProgressUri = $instance->getOnePropertyValue($translationProgressProperty)->getUri();

if ($oldProgressUri === $command->getProgressUri()) {
return $instance;
}

$instance->editPropertyValues($translationProgressProperty, $command->getProgressUri());

$this->translatedIntoLanguagesSynchronizer->sync($instance);

$this->eventManager->trigger(new TranslationActionEvent(
TranslationActionEvent::ACTION_UPDATED,
$instance->getRootId(),
$this->getOriginalResourceUri($instance),
$instance->getUri(),
$this->getLocaleCode($instance),
[
$translationProgressProperty->getUri() => [
'old' => $oldProgressUri,
'new' => $command->getProgressUri(),
],
]
));

return $instance;
} catch (Throwable $exception) {
$this->logger->error(
Expand All @@ -94,4 +117,22 @@ public function update(UpdateTranslationCommand $command): core_kernel_classes_R
throw $exception;
}
}

private function getOriginalResourceUri(core_kernel_classes_Resource $translation): string
{
$originalResourceUri = $translation->getOnePropertyValue(
$this->ontology->getProperty(TaoOntology::PROPERTY_TRANSLATION_ORIGINAL_RESOURCE_URI)
);

return $originalResourceUri->getUri();
}

private function getLocaleCode(core_kernel_classes_Resource $translation): string
{
$language = $translation->getOnePropertyValue(
$this->ontology->getProperty(TaoOntology::PROPERTY_LANGUAGE)
);

return str_replace(TaoOntology::LANGUAGE_PREFIX, '', $language->getUri());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
use oat\generis\model\DependencyInjection\ContainerServiceProviderInterface;
use oat\generis\model\kernel\persistence\smoothsql\search\ComplexSearchService;
use oat\generis\model\resource\Service\ResourceDeleter;
use oat\oatbox\event\EventManager;
use oat\oatbox\log\LoggerService;
use oat\oatbox\user\UserLanguageServiceInterface;
use oat\tao\model\featureFlag\FeatureFlagChecker;
Expand Down Expand Up @@ -140,6 +141,7 @@ public function __invoke(ContainerConfigurator $configurator): void
service(LanguageRepositoryInterface::class),
service(LoggerService::SERVICE_ID),
service(TranslatedIntoLanguagesSynchronizer::class),
service(EventManager::SERVICE_ID),
]
)
->public();
Expand All @@ -153,6 +155,7 @@ public function __invoke(ContainerConfigurator $configurator): void
service(ResourceTranslationRepository::class),
service(LoggerService::SERVICE_ID),
service(TranslatedIntoLanguagesSynchronizer::class),
service(EventManager::SERVICE_ID),
]
)
->public();
Expand All @@ -164,6 +167,7 @@ public function __invoke(ContainerConfigurator $configurator): void
service(Ontology::SERVICE_ID),
service(LoggerService::SERVICE_ID),
service(TranslatedIntoLanguagesSynchronizer::class),
service(EventManager::SERVICE_ID),
]
)
->public();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

/**
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; under version 2
* of the License (non-upgradable).
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2025 (original work) Open Assessment Technologies SA.
*/

declare(strict_types=1);

namespace oat\tao\test\unit\models\classes\Translation\Event;

use JsonSerializable;
use oat\oatbox\event\Event;
use oat\tao\model\Translation\Event\TranslationActionEvent;
use PHPUnit\Framework\TestCase;

class TranslationActionEventTest extends TestCase
{
public function testEvent(): void
{
$sut = new TranslationActionEvent(
'someAction',
'item',
'originalResourceId',
'translationResourceId',
'locale'
);

$this->assertInstanceOf(Event::class, $sut);
$this->assertInstanceOf(JsonSerializable::class, $sut);
$this->assertEquals(
[
'action' => 'someAction',
'type' => 'item',
'originalResourceId' => 'originalResourceId',
'translationResourceId' => 'translationResourceId',
'locale' => 'locale',
'data' => []
],
$sut->jsonSerialize()
);
}
}
Loading

0 comments on commit 08e3bc5

Please sign in to comment.