From beb57b3af2f6fa716e4b1b5f8be1557e0407a4e2 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Mon, 11 Nov 2019 15:47:11 +0400 Subject: [PATCH 1/2] PHRAS-2816 #comment hidden fields on roll over and detailled view depending on gui_editable attribute #time 6h --- .../Phrasea/Twig/PhraseanetExtension.php | 24 +++++++++++++++++++ templates/web/common/macro_caption.html.twig | 6 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index c39271db6a..1c48a54d52 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -48,6 +48,7 @@ class PhraseanetExtension extends \Twig_Extension 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_gui_editable', array($this, 'getCaptionFieldGuiEditable')), new \Twig_SimpleFunction('caption_field_order', array($this, 'getCaptionFieldOrder')), new \Twig_SimpleFunction('flag_slugify', array(Flag::class, 'normalizeName')), @@ -77,6 +78,29 @@ class PhraseanetExtension extends \Twig_Extension return ''; } + /** + * get localized field's gui_editable + * @param RecordInterface $record + * @param $fieldName + * @return string - the name gui_editable + */ + public function getCaptionFieldGuiEditable(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_gui_editable($this->app['locale']); + } + } + } + + return ''; + } + public function getCaptionField(RecordInterface $record, $field, $value) { if ($record instanceof ElasticsearchRecord) { diff --git a/templates/web/common/macro_caption.html.twig b/templates/web/common/macro_caption.html.twig index 21a1fab40d..78b269515f 100644 --- a/templates/web/common/macro_caption.html.twig +++ b/templates/web/common/macro_caption.html.twig @@ -1,8 +1,10 @@ {% macro caption(record, can_see_business, display_exif, limitedWidth = false) %}
{% 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|parseColor }}
+ {% if caption_field_gui_editable(record, name) == 1 %} +
{{ caption_field_label(record, name) }}
+
{{ caption_field(record, name, value)|e|highlight|linkify|parseColor }}
+ {% endif %} {% endfor %}
{% if display_exif|default(true) and app.getAuthenticator().user is not none and user_setting('technical_display') == 'group' %} From 5f2617e5f7dd1e6305f3c315ac6fdafe53144c64 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 12 Nov 2019 18:13:05 +0400 Subject: [PATCH 2/2] PHRAS-2816 #comment add attribute gui_visible to show fields on roll over and detailled view #time 2h --- .../Controller/Admin/FieldsController.php | 3 +- .../Phrasea/Controller/Api/V1Controller.php | 1 + .../Controller/Prod/EditController.php | 1 + lib/Alchemy/Phrasea/Core/Version.php | 2 +- .../Field/DbalDataboxFieldRepository.php | 1 + .../Phrasea/Twig/PhraseanetExtension.php | 10 +++---- lib/classes/databox.php | 1 + lib/classes/databox/field.php | 30 +++++++++++++++++-- lib/conf.d/bases_structure.xml | 8 +++++ .../web/admin/fields/templates.html.twig | 8 +++++ templates/web/common/macro_caption.html.twig | 2 +- .../Phrasea/Controller/Admin/FieldsTest.php | 1 + www/scripts/models/field.js | 1 + www/scripts/tests/specs/models.js | 4 +++ 14 files changed, 63 insertions(+), 10 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php b/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php index 51ac40ab51..dc81bc67c3 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php @@ -316,6 +316,7 @@ class FieldsController extends Controller ->set_tbranch($data['tbranch']) ->set_generate_cterms($data['generate_cterms']) ->set_gui_editable($data['gui_editable']) + ->set_gui_visible($data['gui_visible']) ->set_report($data['report']) ->setVocabularyControl(null) ->setVocabularyRestricted(false); @@ -351,7 +352,7 @@ class FieldsController extends Controller { return [ 'name', 'multi', 'thumbtitle', 'tag', 'business', 'indexable', 'aggregable', - 'required', 'separator', 'readonly', 'gui_editable', 'type', 'tbranch', 'generate_cterms', 'report', + 'required', 'separator', 'readonly', 'gui_editable', 'gui_visible' , 'type', 'tbranch', 'generate_cterms', 'report', 'vocabulary-type', 'vocabulary-restricted', 'dces-element', 'labels' ]; } diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 0c3bffb63e..9b8f4ed04d 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -596,6 +596,7 @@ class V1Controller extends Controller 'thesaurus_branch' => $databox_field->get_tbranch(), 'generate_cterms' => $databox_field->get_generate_cterms(), 'gui_editable' => $databox_field->get_gui_editable(), + 'gui_visible' => $databox_field->get_gui_visible(), 'type' => $databox_field->get_type(), 'indexable' => $databox_field->is_indexable(), 'multivalue' => $databox_field->is_multi(), diff --git a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php index e164221a51..29ef942919 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php @@ -77,6 +77,7 @@ class EditController extends Controller 'tbranch' => $meta->get_tbranch(), 'generate_cterms' => $meta->get_generate_cterms(), 'gui_editable' => $meta->get_gui_editable(), + 'gui_visible' => $meta->get_gui_visible(), 'maxLength' => $meta->get_tag() ->getMaxLength(), 'minLength' => $meta->get_tag() diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php index c525bf815c..19011867d9 100644 --- a/lib/Alchemy/Phrasea/Core/Version.php +++ b/lib/Alchemy/Phrasea/Core/Version.php @@ -16,7 +16,7 @@ class Version /** * @var string */ - private $number = '4.1.0-alpha.17a'; + private $number = '4.1.0-alpha.18a'; /** * @var string diff --git a/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php b/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php index 5f7e210a76..3e247d99c9 100644 --- a/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php +++ b/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php @@ -38,6 +38,7 @@ final class DbalDataboxFieldRepository implements DataboxFieldRepository 'label_nl', 'generate_cterms', 'gui_editable', + 'gui_visible', ]; /** @var DataboxFieldFactory */ diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index 1c48a54d52..efbf36fe81 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -48,7 +48,7 @@ class PhraseanetExtension extends \Twig_Extension 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_gui_editable', array($this, 'getCaptionFieldGuiEditable')), + new \Twig_SimpleFunction('caption_field_gui_visible', array($this, 'getCaptionFieldGuiVisible')), new \Twig_SimpleFunction('caption_field_order', array($this, 'getCaptionFieldOrder')), new \Twig_SimpleFunction('flag_slugify', array(Flag::class, 'normalizeName')), @@ -79,12 +79,12 @@ class PhraseanetExtension extends \Twig_Extension } /** - * get localized field's gui_editable + * get localized field's gui_visible * @param RecordInterface $record * @param $fieldName - * @return string - the name gui_editable + * @return string - the name gui_visible */ - public function getCaptionFieldGuiEditable(RecordInterface $record, $fieldName) + public function getCaptionFieldGuiVisible(RecordInterface $record, $fieldName) { if ($record) { /** @var \appbox $appbox */ @@ -93,7 +93,7 @@ class PhraseanetExtension extends \Twig_Extension foreach ($databox->get_meta_structure() as $meta) { /** @var \databox_field $meta */ if ($meta->get_name() === $fieldName) { - return $meta->get_gui_editable($this->app['locale']); + return $meta->get_gui_visible($this->app['locale']); } } } diff --git a/lib/classes/databox.php b/lib/classes/databox.php index 01aa2eea31..c961f1e58c 100644 --- a/lib/classes/databox.php +++ b/lib/classes/databox.php @@ -464,6 +464,7 @@ class databox extends base implements ThumbnailedElement ->set_tbranch(isset($field['tbranch']) ? (string) $field['tbranch'] : '') ->set_generate_cterms((isset($field['generate_cterms']) && (string) $field['generate_cterms'] == 1)) ->set_gui_editable((isset($field['gui_editable']) && (string) $field['gui_editable'] == 1)) + ->set_gui_visible((isset($field['gui_editable']) && (string) $field['gui_visible'] == 1)) ->set_thumbtitle(isset($field['thumbtitle']) ? (string) $field['thumbtitle'] : (isset($field['thumbTitle']) ? $field['thumbTitle'] : '0')) ->set_report(isset($field['report']) ? (string) $field['report'] : '1') ->save(); diff --git a/lib/classes/databox/field.php b/lib/classes/databox/field.php index 09dab67d46..85e9089cad 100644 --- a/lib/classes/databox/field.php +++ b/lib/classes/databox/field.php @@ -45,6 +45,7 @@ class databox_field implements cache_cacheableInterface protected $tbranch; protected $generate_cterms; protected $gui_editable; + protected $gui_visible; protected $separator; protected $thumbtitle; @@ -170,6 +171,7 @@ class databox_field implements cache_cacheableInterface $this->tbranch = $row['tbranch']; $this->generate_cterms = (bool)$row['generate_cterms']; $this->gui_editable = (bool)$row['gui_editable']; + $this->gui_visible = (bool)$row['gui_visible']; $this->VocabularyType = $row['VocabularyControlType']; $this->VocabularyRestriction = (bool)$row['RestrictToVocabularyControl']; @@ -312,6 +314,7 @@ class databox_field implements cache_cacheableInterface `tbranch` = :tbranch, `generate_cterms` = :generate_cterms, `gui_editable` = :gui_editable, + `gui_visible` = :gui_visible, `sorter` = :position, `thumbtitle` = :thumbtitle, `VocabularyControlType` = :VocabularyControlType, @@ -337,6 +340,7 @@ class databox_field implements cache_cacheableInterface ':tbranch' => $this->tbranch, ':generate_cterms' => $this->generate_cterms ? '1' : '0', ':gui_editable' => $this->gui_editable ? '1' : '0', + ':gui_visible' => $this->gui_visible ? '1' : '0', ':position' => $this->position, ':thumbtitle' => $this->thumbtitle, ':VocabularyControlType' => $this->getVocabularyControl() ? $this->getVocabularyControl()->getType() : null, @@ -390,6 +394,7 @@ class databox_field implements cache_cacheableInterface $meta->setAttribute('tbranch', $this->tbranch); $meta->setAttribute('generate_cterms', $this->generate_cterms ? '1' : '0'); $meta->setAttribute('gui_editable', $this->gui_editable ? '1' : '0'); + $meta->setAttribute('gui_visible', $this->gui_visible ? '1' : '0'); if ($this->multi) { $meta->setAttribute('separator', $this->separator); } @@ -743,6 +748,17 @@ class databox_field implements cache_cacheableInterface return $this; } + /** + * @param boolean $gui_visible + * @return databox_field + */ + public function set_gui_visible($gui_visible) + { + $this->gui_visible = $gui_visible; + + return $this; + } + /** * * @param string $separator @@ -845,6 +861,15 @@ class databox_field implements cache_cacheableInterface return $this->gui_editable; } + /** + * + * @return boolean + */ + public function get_gui_visible() + { + return $this->gui_visible; + } + /** * @param Boolean $all If set to false, returns a one-char separator to use for serialiation * @@ -957,6 +982,7 @@ class databox_field implements cache_cacheableInterface 'tbranch' => $this->tbranch, 'generate_cterms' => $this->generate_cterms, 'gui_editable' => $this->gui_editable, + 'gui_visible' => $this->gui_visible, 'separator' => $this->separator, 'required' => $this->required, 'report' => $this->report, @@ -995,10 +1021,10 @@ class databox_field implements cache_cacheableInterface } $sql = "INSERT INTO metadatas_structure - (`id`, `name`, `src`, `readonly`, `gui_editable`, `required`, `indexable`, `type`, `tbranch`, `generate_cterms`, + (`id`, `name`, `src`, `readonly`, `gui_editable`,`gui_visible`, `required`, `indexable`, `type`, `tbranch`, `generate_cterms`, `thumbtitle`, `multi`, `business`, `aggregable`, `report`, `sorter`, `separator`) - VALUES (null, :name, '', 0, 1, 0, 1, 'string', '', 1, + VALUES (null, :name, '', 0, 1, 1, 0, 1, 'string', '', 1, null, 0, 0, 0, 1, :sorter, '')"; diff --git a/lib/conf.d/bases_structure.xml b/lib/conf.d/bases_structure.xml index b989e2f9d6..8cfcd692fd 100644 --- a/lib/conf.d/bases_structure.xml +++ b/lib/conf.d/bases_structure.xml @@ -2049,6 +2049,14 @@ 1 + + gui_visible + int(1) unsigned + + + 1 + + diff --git a/templates/web/admin/fields/templates.html.twig b/templates/web/admin/fields/templates.html.twig index 191f3f18b8..f0757d3d37 100644 --- a/templates/web/admin/fields/templates.html.twig +++ b/templates/web/admin/fields/templates.html.twig @@ -197,6 +197,14 @@ + + + + +