From 3ca5018e45535df7704908d146d46c8f982c9284 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 25 Mar 2021 21:51:22 +0100 Subject: [PATCH 01/28] fix import of dropzone in uploader --- .../Resources/public/module/async_upload/uploader.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js b/src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js index 9e96070bb..3fcfb0a42 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js +++ b/src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/uploader.js @@ -1,5 +1,5 @@ var algo = 'AES-CBC'; -var Dropzone = require('dropzone'); +import Dropzone from 'dropzone'; var initializeDownload = require('./downloader.js'); @@ -121,7 +121,7 @@ var createZone = (zone, zoneData) => { created.classList.add('dropzone'); initMessage.classList.add('dz-message'); initMessage.appendChild(document.createTextNode(initContent)); - + console.log(Dropzone); dropzoneI = new Dropzone(created, { url: function(files) { return getUploadUrl(zoneData, files); From 66e590972a0dd11ad1c9381a504a73bc8c6e8cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 25 Mar 2021 21:57:48 +0100 Subject: [PATCH 02/28] Improve Embeddable Comment Render * render embeddable comment into twig template; * add some style --- .../ChillMainBundle/Resources/public/main.js | 1 + .../modules/entity/comment_embeddable.scss | 6 ++ .../Resources/public/modules/entity/index.js | 2 + .../views/Entity/CommentEmbeddable.html.twig | 36 +++++++++++ .../Templating/Entity/CommentRender.php | 60 ++++++++++--------- .../config/services/templating.yaml | 1 + .../translations/messages.fr.yml | 3 + 7 files changed, 81 insertions(+), 28 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss create mode 100644 src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js create mode 100644 src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig diff --git a/src/Bundle/ChillMainBundle/Resources/public/main.js b/src/Bundle/ChillMainBundle/Resources/public/main.js index 1e03bc527..1e8573f2f 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/main.js +++ b/src/Bundle/ChillMainBundle/Resources/public/main.js @@ -36,6 +36,7 @@ require('./modules/breadcrumb/index.js'); require('./modules/download-report/index.js'); require('./modules/select_interactive_loading/index.js'); require('./modules/export-list/export-list.scss'); +require('./modules/entity/index.js'); /* * load img diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss new file mode 100644 index 000000000..e45173e56 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/comment_embeddable.scss @@ -0,0 +1,6 @@ +.chill-entity__comment-embeddable { + .chill-entity__comment-embeddable__metadata { + font-size: smaller; + color: var(--chill-light-gray); + } +} \ No newline at end of file diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js new file mode 100644 index 000000000..c739899a5 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/entity/index.js @@ -0,0 +1,2 @@ +// css classes to render entities +require('./comment_embeddable.scss'); diff --git a/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig b/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig new file mode 100644 index 000000000..c9b76451c --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/views/Entity/CommentEmbeddable.html.twig @@ -0,0 +1,36 @@ +{{ opening_box|raw }} +
+
+ + {%- if options['limit_lines'] is not null -%} + {% set content = comment.comment|split('\n')|slice(0, options['limit_lines'])|join('\n') %} + {%- else -%} + {% set content = comment.comment %} + {%- endif -%} + +
+ {% if options['disable_markdown'] %} + {{ content|nl2br }} + {% else %} + {{ content|chill_markdown_to_html }} + {% endif %} +
+
+
+{% if options['metadata'] %} + +{% endif %} +{{ closing_box|raw }} \ No newline at end of file diff --git a/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php b/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php index d5fce5749..50fb2d35a 100644 --- a/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php +++ b/src/Bundle/ChillMainBundle/Templating/Entity/CommentRender.php @@ -24,6 +24,7 @@ use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; use Chill\MainBundle\Entity\User; use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Templating\Entity\AbstractChillEntityRender; +use Symfony\Component\Templating\EngineInterface; class CommentRender extends AbstractChillEntityRender { @@ -31,10 +32,19 @@ class CommentRender extends AbstractChillEntityRender * @var \Chill\MainBundle\Repository\UserRepository */ private $userRepository; + + /** + * + * @var EngineInterface + */ + private $engine; - public function __construct(UserRepository $userRepository) - { + public function __construct( + UserRepository $userRepository, + EngineInterface $engine + ) { $this->userRepository = $userRepository; + $this->engine = $engine; } /** @@ -45,35 +55,29 @@ class CommentRender extends AbstractChillEntityRender */ public function renderBox($entity, array $options): string { - $username = ''; - + // default options + $options = \array_merge([ + 'user' => [], + 'disable_markdown' => false, + 'limit_lines' => null, + 'metadata' => true + ], $options); + if ($entity->getUserId()) { $user = $this->userRepository->find($entity->getUserId()); - if ($user instanceof User) { - $username = $user->getUsername(); - } } - - $str = $this->getDefaultOpeningBox('comment-embeddable'). - ''. - nl2br($entity->getComment()). - ''; - - if ($entity->getDate() instanceof \DateTime) { - $str .= ''. - $entity->getDate()->format('d/m/Y H:i'); - ''; - } - - if (strlen($username) > 0) { - $str .= ''. - $username. - ''; - } - - $str .= $this->getDefaultClosingBox(); - - return $str; + + return $this->engine + ->render( + '@ChillMain/Entity/CommentEmbeddable.html.twig', + [ + 'opening_box' => $this->getDefaultOpeningBox('comment-embeddable'), + 'closing_box' => $this->getDefaultClosingBox(), + 'user' => $user ?? NULL, + 'comment' => $entity, + 'options' => $options + ] + ); } /** diff --git a/src/Bundle/ChillMainBundle/config/services/templating.yaml b/src/Bundle/ChillMainBundle/config/services/templating.yaml index f9bd8d7fb..29dc676d1 100644 --- a/src/Bundle/ChillMainBundle/config/services/templating.yaml +++ b/src/Bundle/ChillMainBundle/config/services/templating.yaml @@ -34,6 +34,7 @@ services: Chill\MainBundle\Templating\Entity\CommentRender: arguments: - '@chill.main.user_repository' + - '@Symfony\Component\Templating\EngineInterface' tags: - { name: 'chill.render_entity' } diff --git a/src/Bundle/ChillMainBundle/translations/messages.fr.yml b/src/Bundle/ChillMainBundle/translations/messages.fr.yml index b19feb69c..a7b71a072 100644 --- a/src/Bundle/ChillMainBundle/translations/messages.fr.yml +++ b/src/Bundle/ChillMainBundle/translations/messages.fr.yml @@ -35,6 +35,9 @@ This form contains errors: Ce formulaire contient des erreurs Choose an user: Choisir un utilisateur 'You are going to leave a page with unsubmitted data. Are you sure you want to leave ?': "Vous allez quitter la page alors que des données n'ont pas été enregistrées. Êtes vous sûr de vouloir partir ?" No value: Aucune information +Last updated by: Dernière mise à jour par +Last updated on: Dernière mise à jour le +on: le Edit: Modifier Update: Mettre à jour From b79ec18a38961636c560aadf2bfc5ff49fb744c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Thu, 25 Mar 2021 21:59:48 +0100 Subject: [PATCH 03/28] apply ckeditor on multiple entities Apply ckeditor into: * activity; * task; * document; * accompanying periods --- .../ChillActivityBundle/Form/ActivityType.php | 1 - .../Resources/views/Activity/list.html.twig | 7 +------ .../Timeline/activity_person_context.html.twig | 2 +- .../Form/PersonDocumentType.php | 7 ++----- .../views/PersonDocument/show.html.twig | 2 +- .../ChillMainBundle/Form/Type/CommentType.php | 16 ++++++++++------ .../public/modules/ckeditor5/index.scss | 4 ++++ .../Form/AccompanyingPeriodType.php | 7 +++---- .../views/AccompanyingPeriod/list.html.twig | 9 +++++++-- .../ChillTaskBundle/Form/SingleTaskType.php | 7 ++----- .../Resources/views/SingleTask/show.html.twig | 2 +- ...ngle_task_transition_person_context.html.twig | 2 +- 12 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/Bundle/ChillActivityBundle/Form/ActivityType.php b/src/Bundle/ChillActivityBundle/Form/ActivityType.php index ad0e55aa7..3a9a307fd 100644 --- a/src/Bundle/ChillActivityBundle/Form/ActivityType.php +++ b/src/Bundle/ChillActivityBundle/Form/ActivityType.php @@ -15,7 +15,6 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTra use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; -use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Chill\ActivityBundle\Form\Type\TranslatableActivityType; use Chill\ActivityBundle\Form\Type\TranslatableActivityReason; use Chill\MainBundle\Form\Type\UserPickerType; diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Activity/list.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Activity/list.html.twig index fa20d33fc..94a9d9a82 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Activity/list.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Activity/list.html.twig @@ -46,12 +46,7 @@ {{ activity.durationTime|date('H:i') }} {% if activity.comment.comment is not empty %} -
- {{ activity.comment.comment|slice(0, 250) }} {# - sf4 check: if 'slice' could replace 'truncate' filter ? - truncate come with twig-extensions, in conflict with twig 3 - #} -
+ {{ activity.comment|chill_entity_render_box( { 'limit_lines': 3, 'metadata': false } ) }} {% endif %} {%- if activity.reasons is empty -%} {{ 'No reason associated'|trans }} diff --git a/src/Bundle/ChillActivityBundle/Resources/views/Timeline/activity_person_context.html.twig b/src/Bundle/ChillActivityBundle/Resources/views/Timeline/activity_person_context.html.twig index d788c1cf3..dddd05cf7 100644 --- a/src/Bundle/ChillActivityBundle/Resources/views/Timeline/activity_person_context.html.twig +++ b/src/Bundle/ChillActivityBundle/Resources/views/Timeline/activity_person_context.html.twig @@ -13,7 +13,7 @@ {% if is_granted(constant('Chill\\ActivityBundle\\Security\\Authorization\\ActivityVoter::SEE_DETAILS'), activity) %}
-
{% if activity.comment.comment is empty %}{{ 'No comments'|trans }}{% else %}
{{ activity.comment.comment|nl2br }}
{% endif %}
+
{% if activity.comment.comment is empty %}{{ 'No comments'|trans }}{% else %}{{ activity.comment|chill_entity_render_box({'metadata': false}) }}{% endif %}
{{ 'Reasons'|trans }}
{%- if activity.reasons is empty -%} diff --git a/src/Bundle/ChillDocStoreBundle/Form/PersonDocumentType.php b/src/Bundle/ChillDocStoreBundle/Form/PersonDocumentType.php index 184bbbe33..1629410af 100644 --- a/src/Bundle/ChillDocStoreBundle/Form/PersonDocumentType.php +++ b/src/Bundle/ChillDocStoreBundle/Form/PersonDocumentType.php @@ -4,7 +4,6 @@ namespace Chill\DocStoreBundle\Form; use Chill\DocStoreBundle\Entity\Document; -use Chill\DocStoreBundle\Entity\DocumentCategory; use Chill\DocStoreBundle\Entity\PersonDocument; use Chill\MainBundle\Entity\User; use Symfony\Component\Form\AbstractType; @@ -12,15 +11,13 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Doctrine\ORM\EntityRepository; -use Chill\MainBundle\Form\Type\AppendScopeChoiceTypeTrait; -use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; use Chill\MainBundle\Security\Authorization\AuthorizationHelper; use Doctrine\Persistence\ObjectManager; use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ScopePickerType; use Symfony\Component\Form\Extension\Core\Type\TextType; -use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Chill\MainBundle\Form\Type\ChillTextareaType; class PersonDocumentType extends AbstractType @@ -62,7 +59,7 @@ class PersonDocumentType extends AbstractType { $builder ->add('title', TextType::class) - ->add('description', TextareaType::class, [ + ->add('description', ChillTextareaType::class, [ 'required' => false ]) ->add('object', StoredObjectType::class, [ diff --git a/src/Bundle/ChillDocStoreBundle/Resources/views/PersonDocument/show.html.twig b/src/Bundle/ChillDocStoreBundle/Resources/views/PersonDocument/show.html.twig index ac1b18601..1761b4db7 100644 --- a/src/Bundle/ChillDocStoreBundle/Resources/views/PersonDocument/show.html.twig +++ b/src/Bundle/ChillDocStoreBundle/Resources/views/PersonDocument/show.html.twig @@ -45,7 +45,7 @@ {{ 'Any description'|trans }} {% else %}
- {{ document.description }} + {{ document.description|chill_markdown_to_html }}
{% endif %} diff --git a/src/Bundle/ChillMainBundle/Form/Type/CommentType.php b/src/Bundle/ChillMainBundle/Form/Type/CommentType.php index a088af573..a6e664769 100644 --- a/src/Bundle/ChillMainBundle/Form/Type/CommentType.php +++ b/src/Bundle/ChillMainBundle/Form/Type/CommentType.php @@ -20,7 +20,7 @@ namespace Chill\MainBundle\Form\Type; use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; -use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Chill\MainBundle\Form\Type\ChillTextareaType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; @@ -44,8 +44,8 @@ class CommentType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options) { $builder - ->add('comment', TextareaType::class, [ - + ->add('comment', ChillTextareaType::class, [ + 'disable_editor' => $options['disable_editor'] ]) ; @@ -72,8 +72,12 @@ class CommentType extends AbstractType public function configureOptions(OptionsResolver $resolver) { - $resolver->setDefaults([ - 'data_class' => CommentEmbeddable::class, - ]); + $resolver + ->setDefined('disable_editor') + ->setAllowedTypes('disable_editor', 'bool') + ->setDefaults([ + 'data_class' => CommentEmbeddable::class, + 'disable_editor' => false + ]); } } diff --git a/src/Bundle/ChillMainBundle/Resources/public/modules/ckeditor5/index.scss b/src/Bundle/ChillMainBundle/Resources/public/modules/ckeditor5/index.scss index 3e5259af4..5fceab7bc 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/modules/ckeditor5/index.scss +++ b/src/Bundle/ChillMainBundle/Resources/public/modules/ckeditor5/index.scss @@ -1,4 +1,8 @@ // set min height for ckeditor .ck-editor__editable { min-height: 150px; +} + +.ck-editor.ck-reset { + margin-bottom: 1.5em; } \ No newline at end of file diff --git a/src/Bundle/ChillPersonBundle/Form/AccompanyingPeriodType.php b/src/Bundle/ChillPersonBundle/Form/AccompanyingPeriodType.php index 2de2011a1..b4c146960 100644 --- a/src/Bundle/ChillPersonBundle/Form/AccompanyingPeriodType.php +++ b/src/Bundle/ChillPersonBundle/Form/AccompanyingPeriodType.php @@ -6,17 +6,16 @@ use Chill\MainBundle\Entity\Center; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Form\FormEvents; -use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormView; use Symfony\Component\Form\FormInterface; -use Symfony\Component\Form\Extension\Core\Type\TextareaType; +use Chill\MainBundle\Form\Type\ChillTextareaType; use Symfony\Component\Form\Extension\Core\Type\DateType; use Chill\PersonBundle\Security\Authorization\PersonVoter; use Chill\MainBundle\Form\Type\UserPickerType; use Symfony\Component\Security\Core\Role\Role; use Chill\PersonBundle\Form\Type\ClosingMotivePickerType; + /** * Class AccompanyingPeriodType * @@ -89,7 +88,7 @@ class AccompanyingPeriodType extends AbstractType ]); } - $builder->add('remark', TextareaType::class, [ + $builder->add('remark', ChillTextareaType::class, [ 'required' => false ]); } diff --git a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/list.html.twig b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/list.html.twig index 4d82813d0..54908b7cc 100644 --- a/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/list.html.twig +++ b/src/Bundle/ChillPersonBundle/Resources/views/AccompanyingPeriod/list.html.twig @@ -48,8 +48,13 @@ {% endif %} - - {{ accompanying_period.remark|chill_print_or_message('No remark', 'blockquote') }} + {% if accompanying_period is not empty %} +
+ {{ accompanying_period.remark|chill_markdown_to_html }} +
+ {% else %} + {{ null|chill_print_or_message('No remark', 'blockquote') }} + {% endif %}