diff --git a/lib/Alchemy/Phrasea/Application/RouteLoader.php b/lib/Alchemy/Phrasea/Application/RouteLoader.php
index 6616c87cca..ded294547a 100644
--- a/lib/Alchemy/Phrasea/Application/RouteLoader.php
+++ b/lib/Alchemy/Phrasea/Application/RouteLoader.php
@@ -55,6 +55,7 @@ class RouteLoader
'/prod/records/property' => Providers\Prod\Property::class,
'/prod/share/' => Providers\Prod\Share::class,
'/prod/story' => Providers\Prod\Story::class,
+ '/prod/subdefs' => Providers\Prod\Subdefs::class,
'/prod/tools/' => Providers\Prod\Tools::class,
'/prod/tooltip' => Providers\Prod\Tooltip::class,
'/prod/TOU/' => Providers\Prod\TOU::class,
diff --git a/lib/Alchemy/Phrasea/Controller/Prod/SubdefsController.php b/lib/Alchemy/Phrasea/Controller/Prod/SubdefsController.php
new file mode 100644
index 0000000000..ffbc0b6d8e
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Controller/Prod/SubdefsController.php
@@ -0,0 +1,61 @@
+app, (int) $databox_id, (int) $record_id);
+
+ try {
+ $metadataBag = new MetadataBag();
+ $fileEntity = $this->getExifToolReader()
+ ->files($record->get_subdef($subdef_name)->getRealPath())
+ ->first();
+ $metadatas = $fileEntity->getMetadatas();
+ foreach($metadatas as $metadata){
+ $valuedata = $fileEntity->executeQuery($metadata->getTag()->getTagname()."[not(@rdf:datatype = 'http://www.w3.org/2001/XMLSchema#base64Binary')]");
+ if(empty($valuedata)){
+ $valuedata = new Mono($this->app->trans('Binary data'));
+ $tag = TagFactory::getFromRDFTagname($metadata->getTag()->getTagname());
+ $metadataBagElement = new Metadata($tag, $valuedata);
+ $metadataBag->set($metadata->getTag()->getTagname(), $metadataBagElement);
+ }else{
+ $metadataBag->set($metadata->getTag()->getTagname(), $metadata);
+ }
+ }
+ } catch (PHPExiftoolException $e) {
+ // ignore
+ } catch (\Exception_Media_SubdefNotFound $e) {
+ // ignore
+ }
+
+ return $this->render('prod/actions/Tools/metadata.html.twig', [
+ 'record' => $record,
+ 'metadatas' => $metadataBag,
+ ]);
+ }
+ /**
+ * @return Reader
+ */
+ private function getExifToolReader()
+ {
+ return $this->app['exiftool.reader'];
+ }
+}
\ No newline at end of file
diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php
index 603c403e83..0139be9586 100644
--- a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php
+++ b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php
@@ -23,11 +23,6 @@ use Alchemy\Phrasea\Record\RecordWasRotated;
use DataURI\Parser;
use MediaAlchemyst\Alchemyst;
use MediaVorus\MediaVorus;
-use PHPExiftool\Driver\Metadata\Metadata;
-use PHPExiftool\Driver\Metadata\MetadataBag;
-use PHPExiftool\Driver\TagFactory;
-use PHPExiftool\Driver\Value\Mono;
-use PHPExiftool\Exception\ExceptionInterface as PHPExiftoolException;
use PHPExiftool\Reader;
use Symfony\Component\HttpFoundation\Request;
@@ -87,13 +82,7 @@ class ToolsController extends Controller
}
}
if (!$record->isStory()) {
- try {
- $metadatas = $this->getMetadatas($record);
- } catch (PHPExiftoolException $e) {
- // ignore
- } catch (\Exception_Media_SubdefNotFound $e) {
- // ignore
- }
+ $metadatas = true;
}
}
$conf = $this->getConf();
@@ -434,30 +423,4 @@ class ToolsController extends Controller
unset($media);
$this->getFilesystem()->remove($fileName);
}
-
- /**
- * @param $record
- * @return MetadataBag
- */
- private function getMetadatas($record)
- {
- $metadataBag = new MetadataBag();
- $fileEntity = $this->getExifToolReader()
- ->files($record->get_subdef('document')->getRealPath())
- ->first();
- $metadatas = $fileEntity->getMetadatas();
- foreach($metadatas as $metadata){
- $valuedata = $fileEntity->executeQuery($metadata->getTag()->getTagname()."[not(@rdf:datatype = 'http://www.w3.org/2001/XMLSchema#base64Binary')]");
- if(empty($valuedata)){
- $valuedata = new Mono($this->app->trans('Binary data'));
- $tag = TagFactory::getFromRDFTagname($metadata->getTag()->getTagname());
- $metadataBagElement = new Metadata($tag, $valuedata);
- $metadataBag->set($metadata->getTag()->getTagname(), $metadataBagElement);
- }else{
- $metadataBag->set($metadata->getTag()->getTagname(), $metadata);
- }
- }
-
- return $metadataBag;
- }
}
diff --git a/lib/Alchemy/Phrasea/ControllerProvider/ControllerProviderServiceProvider.php b/lib/Alchemy/Phrasea/ControllerProvider/ControllerProviderServiceProvider.php
index 92e35853ab..46dcbe6ff1 100644
--- a/lib/Alchemy/Phrasea/ControllerProvider/ControllerProviderServiceProvider.php
+++ b/lib/Alchemy/Phrasea/ControllerProvider/ControllerProviderServiceProvider.php
@@ -80,6 +80,7 @@ class ControllerProviderServiceProvider implements ServiceProviderInterface
Prod\Root::class => [],
Prod\Share::class => [],
Prod\Story::class => [],
+ Prod\Subdefs::class => [],
Prod\Tools::class => [],
Prod\Tooltip::class => [],
Prod\TOU::class => [],
diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Subdefs.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Subdefs.php
new file mode 100644
index 0000000000..97f5144c19
--- /dev/null
+++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Subdefs.php
@@ -0,0 +1,45 @@
+share(function (PhraseaApplication $app) {
+ return (new SubdefsController($app));
+ });
+ }
+
+ public function boot(Application $app)
+ {
+ // no-op
+ }
+
+ public function connect(Application $app)
+ {
+ $controllers = $this->createAuthenticatedCollection($app);
+
+ $controllers->get('/{databox_id}/{record_id}/metadatas/{subdef_name}/', 'controller.prod.subdefs:metadataAction')
+ ->bind('prod_subdefs_metadata');
+
+ return $controllers;
+ }
+}
\ No newline at end of file
diff --git a/templates/web/prod/actions/Tools/index.html.twig b/templates/web/prod/actions/Tools/index.html.twig
index e1f19508b9..e380dc77d0 100644
--- a/templates/web/prod/actions/Tools/index.html.twig
+++ b/templates/web/prod/actions/Tools/index.html.twig
@@ -59,7 +59,7 @@
{% endif %}
{% if metadatas %}
-
+
{{ "meta-datas" | trans }}
@@ -311,52 +311,10 @@
{# exiftool section #}
{% if metadatas %}
- {% for record in records %}
- {% endfor %}
{% endif %}
{% if selectionLength == 1 and recordSubdefs is not empty %}