diff --git a/lib/Alchemy/Phrasea/Core/Provider/TwigServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/TwigServiceProvider.php index 4dddd878ad..9e4507ba8d 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/TwigServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/TwigServiceProvider.php @@ -130,17 +130,18 @@ class TwigServiceProvider implements ServiceProviderInterface $twig->addFilter(new \Twig_SimpleFilter('parseColor', function (\Twig_Environment $twig, $string) use ($app) { $re = '/^(.*)\[#([0-9a-fA-F]{6})]$/m'; $stringArr = explode(';', $string); + foreach ($stringArr as $key => $value) { preg_match_all($re, trim($value), $matches); if ($matches && $matches[1] != null && $matches[2] != null) { $colorCode = '#' . $matches[2][0]; $colorName = $matches[1][0]; - $stringArr[$key] = '' . $colorName . '
'; + $stringArr[$key] = '' . $colorName . ''; } } - return implode('', $stringArr); + return implode('; ', $stringArr); }, ['needs_environment' => true, 'is_safe' => ['html']])); $twig->addFilter(new \Twig_SimpleFilter('bounce', diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index b9c92f5015..ffc872ec95 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -47,12 +47,36 @@ class PhraseanetExtension extends \Twig_Extension new \Twig_SimpleFunction('record_flags', array($this, 'getRecordFlags')), new \Twig_SimpleFunction('border_checker_from_fqcn', array($this, 'getCheckerFromFQCN')), new \Twig_SimpleFunction('caption_field', array($this, 'getCaptionField')), + new \Twig_SimpleFunction('caption_field_label', array($this, 'getCaptionFieldLabel')), new \Twig_SimpleFunction('caption_field_order', array($this, 'getCaptionFieldOrder')), new \Twig_SimpleFunction('flag_slugify', array(Flag::class, 'normalizeName')), ); } + /** + * get localized field's label + * @param RecordInterface $record + * @param $fieldName + * @return string - the name label + */ + public function getCaptionFieldLabel(RecordInterface $record, $fieldName) + { + if ($record) { + /** @var \appbox $appbox */ + $appbox = $this->app['phraseanet.appbox']; + $databox = $appbox->get_databox($record->getDataboxId()); + foreach ($databox->get_meta_structure() as $meta) { + /** @var \databox_field $meta */ + if ($meta->get_name() === $fieldName) { + return $meta->get_label($this->app['locale']); + } + } + } + + return ''; + } + public function getCaptionField(RecordInterface $record, $field, $value) { if ($record instanceof ElasticsearchRecord) { @@ -99,6 +123,31 @@ class PhraseanetExtension extends \Twig_Extension return $orders[$databoxId][$orderKey]; } + /** + * @param \databox $databox + * @return array + */ + private function retrieveDataboxFieldOrderings(\databox $databox) + { + $publicOrder = []; + $businessOrder = []; + + foreach ($databox->get_meta_structure() as $field) { + $fieldName = $field->get_name(); + + if (!$field->isBusiness()) { + $publicOrder[] = $fieldName; + } + + $businessOrder[] = $fieldName; + }; + + return [ + 'public' => $publicOrder, + 'business' => $businessOrder, + ]; + } + public function getRecordFlags(RecordInterface $record) { $recordStatuses = []; @@ -132,24 +181,6 @@ class PhraseanetExtension extends \Twig_Extension return $recordStatuses; } - public function isGrantedOnDatabox($databoxId, $rights) - { - if (false === ($this->app->getAuthenticatedUser() instanceof User)) { - - return false; - } - - $rights = (array) $rights; - foreach ($rights as $right) { - if (false === $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_sbas($databoxId, $right)) { - - return false; - } - } - - return true; - } - /** * returns true if user is authenticated and has all the passed rights on the base * todo : wtf $rights is an array since it's never called with more than 1 right in it ? @@ -177,6 +208,24 @@ class PhraseanetExtension extends \Twig_Extension return true; } + public function isGrantedOnDatabox($databoxId, $rights) + { + if (false === ($this->app->getAuthenticatedUser() instanceof User)) { + + return false; + } + + $rights = (array)$rights; + foreach ($rights as $right) { + if (false === $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_sbas($databoxId, $right)) { + + return false; + } + } + + return true; + } + public function getCollectionLogo($baseId) { if (false === $this->app['filesystem']->exists(sprintf('%s/config/minilogos/%s', $this->app['root.path'], $baseId))) { @@ -242,11 +291,6 @@ class PhraseanetExtension extends \Twig_Extension return $this->getSubdefUrl($record, 'thumbnail'); } - public function getThumbnailGifUrl(RecordInterface $record) - { - return $this->getSubdefUrl($record, 'thumbnailgif'); - } - public function getSubdefUrl(RecordInterface $record, $subdefName) { /** @var StaticMode $staticMode */ @@ -279,6 +323,11 @@ class PhraseanetExtension extends \Twig_Extension return $path; } + public function getThumbnailGifUrl(RecordInterface $record) + { + return $this->getSubdefUrl($record, 'thumbnailgif'); + } + public function getSubdefSize(RecordInterface $record, $subdefName) { $ret = null; @@ -325,29 +374,4 @@ class PhraseanetExtension extends \Twig_Extension { return 'phraseanet'; } - - /** - * @param \databox $databox - * @return array - */ - private function retrieveDataboxFieldOrderings(\databox $databox) - { - $publicOrder = []; - $businessOrder = []; - - foreach ($databox->get_meta_structure() as $field) { - $fieldName = $field->get_name(); - - if (!$field->isBusiness()) { - $publicOrder[] = $fieldName; - } - - $businessOrder[] = $fieldName; - }; - - return [ - 'public' => $publicOrder, - 'business' => $businessOrder, - ]; - } } diff --git a/templates/web/common/macros.html.twig b/templates/web/common/macros.html.twig index 1683aa98c3..9d5ed046bc 100644 --- a/templates/web/common/macros.html.twig +++ b/templates/web/common/macros.html.twig @@ -93,9 +93,9 @@ {% set terms = [] %} {% for data in field.values %} {% if data.from_thesaurus and bounceable %} - {% set value = data.value|e|bounce(field.name, data.qjs, field.sbas_id) %} + {% set value = data.value|e|bounce(field.name, data.qjs, field.sbas_id)|parseColor %} {% else %} - {% set value = data.value|e %} + {% set value = data.value|e|parseColor %} {% endif %} {% set terms = [value]|merge(terms) %} {% endfor %} @@ -126,9 +126,9 @@ {% macro caption(record, can_see_business, display_exif, limitedWidth = false) %}
- {% for field in record.get_caption().get_highlight_fields(null, can_see_business) %} -
{{ field.label_name }}
-
{{ _self.caption_value(field, bounceable|default(true))|highlight|linkify|parseColor }}
+ {% for name, value in record.getCaption(caption_field_order(record, can_see_business)) %} +
{{ caption_field_label(record, name) }}
+
{{ caption_field(record, name, value)|e|highlight|linkify }}
{% endfor %}
{% if display_exif|default(true) and app.getAuthenticator().user is not none and user_setting('technical_display') == 'group' %} diff --git a/templates/web/prod/results/record.html.twig b/templates/web/prod/results/record.html.twig index 8f8dccbe1e..6b99d304c7 100644 --- a/templates/web/prod/results/record.html.twig +++ b/templates/web/prod/results/record.html.twig @@ -24,7 +24,8 @@ {% set can_see_business = granted_on_collection(record.baseId, [constant('\\ACL::CANMODIFRECORD')]) %}