From b36b90a403d9a06f622af3fd9a0f71e16a648bea Mon Sep 17 00:00:00 2001 From: aina-esokia Date: Mon, 19 Feb 2018 14:51:30 +0400 Subject: [PATCH] Load metadata tab content when tab activate --- .../Phrasea/Application/RouteLoader.php | 1 + .../Controller/Prod/SubdefsController.php | 61 +++++++++++++++++ .../Controller/Prod/ToolsController.php | 39 +---------- .../ControllerProviderServiceProvider.php | 1 + .../ControllerProvider/Prod/Subdefs.php | 45 +++++++++++++ .../web/prod/actions/Tools/index.html.twig | 65 ++++++------------- .../web/prod/actions/Tools/metadata.html.twig | 49 ++++++++++++++ 7 files changed, 178 insertions(+), 83 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Controller/Prod/SubdefsController.php create mode 100644 lib/Alchemy/Phrasea/ControllerProvider/Prod/Subdefs.php create mode 100644 templates/web/prod/actions/Tools/metadata.html.twig 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 %}
  • - +
  • @@ -311,52 +311,10 @@ {# exiftool section #} {% if metadatas %} - {% for record in records %}
    - {% set thumbnail = record.get_thumbnail() %} - - - -
    -

    Metadatas

    -
    - - - - - - - {% if app.getAclForUser(app.getAuthenticatedUser()).is_admin() %} - {% for metadata in metadatas %} - - - - - {% endfor %} - {% else %} - {% for metadata in metadatas if 'System' not in metadata.getTag().getTagname() %} - - - - - {% endfor %} - {% endif %} - -
    - {{ metadata.getTag().getTagname() }} - - {{ metadata.getValue().asString() }} -
    - {{ metadata.getTag().getTagname() }} - - {{ metadata.getValue().asString() }} -
    -
    +
    +
    - {% endfor %} {% endif %} {% if selectionLength == 1 and recordSubdefs is not empty %}
    @@ -448,4 +406,21 @@ ] }; + + $(document).ready(function(){ + $('.tool-metadata').click(function(e){ + $.ajax({ + "url": "{{ path('prod_subdefs_metadata', {'databox_id': record.get_sbas_id(), 'record_id': record.get_record_id, 'subdef_name': 'document'}) }}", + "type": "GET", + beforeSend: function(){ + $('#metadata-content').empty(); + $('#metadata-load').removeClass('hidden').addClass('loading'); + }, + success: function (data) { + $('#metadata-load').removeClass('loading').addClass('hidden'); + $('#metadata-content').append(data); + } + }); + }); + }); diff --git a/templates/web/prod/actions/Tools/metadata.html.twig b/templates/web/prod/actions/Tools/metadata.html.twig new file mode 100644 index 0000000000..97f3a29a85 --- /dev/null +++ b/templates/web/prod/actions/Tools/metadata.html.twig @@ -0,0 +1,49 @@ +{% set thumbnail = record.get_thumbnail() %} + + + +
    +

    Metadatas

    +
    + + + {% if metadatas|length %} + + + + + {% if app.getAclForUser(app.getAuthenticatedUser()).is_admin() %} + {% for metadata in metadatas %} + + + + + {% endfor %} + {% else %} + {% for metadata in metadatas if 'System' not in metadata.getTag().getTagname() %} + + + + + {% endfor %} + {% endif %} + {% else %} + + + + {% endif %} + + +
    + {{ metadata.getTag().getTagname() }} + + {{ metadata.getValue().asString() }} +
    + {{ metadata.getTag().getTagname() }} + + {{ metadata.getValue().asString() }} +
    {{- "No metadata available"|trans -}}
    +
    \ No newline at end of file