Compare commits

..

25 Commits

Author SHA1 Message Date
146d40b779 change require with import 2025-12-31 13:47:35 +01:00
40cc0c2bff Fixes in the config for vite 2025-12-17 10:28:51 +01:00
4b27454bcb Remove webpack_encore configuration 2025-12-17 09:55:49 +01:00
27aa04e3fd Use import instead of require 2025-12-17 09:54:26 +01:00
441a9e018e Replace all encore tags with vite tags in twig templates 2025-12-17 09:48:40 +01:00
0197299c89 Setup usage of Vite instead of webpack for faster development 2025-12-17 09:46:52 +01:00
a30232d3ce Merge branch '478-admin-list-filters' into 'master'
Resolve "Add filters to admin lists"

Closes #478

See merge request Chill-Projet/chill-bundles!941
2025-12-15 16:49:39 +00:00
aae55e6f8c Merge branch '466-fix-migrations' into 'master'
Fix migration to exclude null `user_id` in `activity_user` population

Closes #466

See merge request Chill-Projet/chill-bundles!943
2025-12-15 13:43:20 +00:00
c9513f2f6c Fix migration to exclude null user_id in activity_user population 2025-12-15 13:43:20 +00:00
11d7425883 php cs fixes 2025-12-15 10:48:20 +01:00
08897e0981 Fix count of total items for correct paginator display 2025-12-15 10:48:00 +01:00
98cbfed054 Add filtering methods to controllers 2025-12-15 10:48:00 +01:00
9af4d19744 Add repository methods for filtering 2025-12-15 10:48:00 +01:00
c1cf5a8bb2 Start implementation of filter within admin index pages 2025-12-15 10:48:00 +01:00
ba4e445110 Release v4.10.1 2025-12-11 14:49:07 +01:00
0f1ff9baf4 Fix CS 2025-12-11 14:43:29 +01:00
e4365ad058 Merge branch '483-fix-ctrl-c-collabora' into 'master'
Tentatively fix CTRL+C in Collabora editor with edge and chrome browser (+ remove zimbra bundle from configuration)

Closes #483

See merge request Chill-Projet/chill-bundles!942
2025-12-11 13:26:11 +00:00
a16d659f69 Tentatively fix CTRL+C in Collabora editor with edge and chrome browser (+ remove zimbra bundle from configuration) 2025-12-11 13:26:10 +00:00
c4a069ba2e Fix display of header for ByActivityNumberAggregator 2025-12-10 05:13:24 +01:00
2600c6fa2a Fix ByActivityNumberAggregator when used on count exports within ActivityBundle 2025-12-10 05:06:03 +01:00
09ef95d13e Translate rst files to md format and add new index entries for translation directives and provider 2025-12-10 04:32:19 +01:00
c19b2e18ad Move symfony/loco-translation-provider dependency to require-dev 2025-12-10 04:26:27 +01:00
27853c594d Fix missing translation variable in NewLocation component 2025-12-10 04:17:29 +01:00
7714b07a9d Add changie for display of upcoming appointments within person context 2025-12-09 17:11:11 +01:00
6e1c9b6f29 Remove chill-project/chill-zimbra-bundle from composer dependencies
- This package provoke failures on build in the CI
2025-12-09 15:38:24 +01:00
211 changed files with 2345 additions and 1652 deletions

View File

@@ -0,0 +1,6 @@
kind: Feature
body: 'Add filtering to admin lists: social actions, social issues, goals, results, and evaluations'
time: 2025-12-10T03:20:45.135973502+01:00
custom:
Issue: "478"
SchemaChange: No schema change

View File

@@ -0,0 +1,7 @@
kind: Fixed
body: |
Fix migration query after previous fix
time: 2025-12-11T21:49:08.899926492+01:00
custom:
Issue: "466"
SchemaChange: No schema change

6
.changes/v4.10.1.md Normal file
View File

@@ -0,0 +1,6 @@
## v4.10.1 - 2025-12-11
### Fixed
* Fix missing translation variable in NewLocation component
* ([#476](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/476)) Fix display of header for ByActivityNumberAggregator
* Fix use of ByActivityNumberAggregator in combination with activity count exports
* ([#483](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/483)) Tentatively fix usage of CTRL+C in collabora editor with chrome / edge browser

13
.gitignore vendored
View File

@@ -50,15 +50,12 @@ phpstan.neon
###> symfony/phpunit-bridge ###
###< symfony/phpunit-bridge ###
###> symfony/webpack-encore-bundle ###
/node_modules/
/public/build/
npm-debug.log
yarn-error.log
###< symfony/webpack-encore-bundle ###
###> friendsofphp/php-cs-fixer ###
/.php-cs-fixer.php
/.php-cs-fixer.cache
###< friendsofphp/php-cs-fixer ###
###> pentatrion/vite-bundle ###
/node_modules/
/public/build/
###< pentatrion/vite-bundle ###

View File

@@ -6,6 +6,13 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## v4.10.1 - 2025-12-11
### Fixed
* Fix missing translation variable in NewLocation component
* ([#476](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/476)) Fix display of header for ByActivityNumberAggregator
* Fix use of ByActivityNumberAggregator in combination with activity count exports
* ([#483](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/483)) Tentatively fix usage of CTRL+C in collabora editor with chrome / edge browser
## v4.10.0 - 2025-12-09
### Feature
* [MR 928](https://gitlab.com/Chill-Projet/chill-bundles/-/merge_requests/928) [#462](https://gitlab.com/Chill-Projet/chill-bundles/-/issues/462) Add the future appointments for the person in search results

View File

@@ -21,7 +21,6 @@
"ext-openssl": "*",
"ext-redis": "*",
"ext-zlib": "*",
"chill-project/chill-zimbra-bundle": "@dev",
"champs-libres/wopi-bundle": "dev-symfony-v5@dev",
"champs-libres/wopi-lib": "dev-master@dev",
"doctrine/data-fixtures": "^1.8",
@@ -38,6 +37,7 @@
"ocramius/package-versions": "^1.10 || ^2",
"odolbeau/phone-number-bundle": "^3.6",
"ovh/ovh": "^3.0",
"pentatrion/vite-bundle": "^8.2",
"phpoffice/phpspreadsheet": "^1.16",
"ramsey/uuid-doctrine": "^1.7",
"sensio/framework-extra-bundle": "^5.5",
@@ -62,7 +62,6 @@
"symfony/http-client": "^5.4",
"symfony/http-foundation": "^5.4",
"symfony/intl": "^5.4",
"symfony/loco-translation-provider": "^6.0",
"symfony/mailer": "^5.4",
"symfony/messenger": "^5.4",
"symfony/mime": "^5.4",
@@ -86,7 +85,6 @@
"symfony/twig-bundle": "^5.4",
"symfony/ux-translator": "^2.22",
"symfony/validator": "^5.4",
"symfony/webpack-encore-bundle": "^1.11",
"symfony/workflow": "^5.4",
"symfony/yaml": "^5.4",
"thenetworg/oauth2-azure": "^2.0",
@@ -119,7 +117,8 @@
"symfony/runtime": "^5.4",
"symfony/stopwatch": "^5.4",
"symfony/var-dumper": "^5.4",
"symfony/web-profiler-bundle": "^5.4"
"symfony/web-profiler-bundle": "^5.4",
"symfony/loco-translation-provider": "^6.0"
},
"conflict": {
"symfony/symfony": "*"

View File

@@ -17,7 +17,6 @@ return [
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
Symfony\WebpackEncoreBundle\WebpackEncoreBundle::class => ['all' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
Chill\ActivityBundle\ChillActivityBundle::class => ['all' => true],
@@ -37,5 +36,5 @@ return [
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
Symfony\UX\Translator\UxTranslatorBundle::class => ['all' => true],
loophp\PsrHttpMessageBridgeBundle\PsrHttpMessageBridgeBundle::class => ['all' => true],
Chill\ZimbraBundle\ChillZimbraBundle::class => ['all' => true],
Pentatrion\ViteBundle\PentatrionViteBundle::class => ['all' => true],
];

View File

@@ -1,6 +1,8 @@
framework:
assets:
json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
# Disable Encore-style manifest for default assets package. Vite (Pentatrion) uses public/build/.vite/manifest.json
# internally for vite_entry_* helpers; Symfony's asset() should not depend on a manifest.
json_manifest_path: null
when@test:
framework:

View File

@@ -1,41 +0,0 @@
webpack_encore:
# The path where Encore is building the assets - i.e. Encore.setOutputPath()
output_path: '%kernel.project_dir%/public/build'
# If multiple builds are defined (as shown below), you can disable the default build:
# output_path: false
# Set attributes that will be rendered on all script and link tags
script_attributes:
defer: true
# Uncomment (also under link_attributes) if using Turbo Drive
# https://turbo.hotwired.dev/handbook/drive#reloading-when-assets-change
# 'data-turbo-track': reload
# link_attributes:
# Uncomment if using Turbo Drive
# 'data-turbo-track': reload
# If using Encore.enableIntegrityHashes() and need the crossorigin attribute (default: false, or use 'anonymous' or 'use-credentials')
# crossorigin: 'anonymous'
# Preload all rendered script and link tags automatically via the HTTP/2 Link header
# preload: true
# Throw an exception if the entrypoints.json file is missing or an entry is missing from the data
# strict_mode: false
# If you have multiple builds:
# builds:
# frontend: '%kernel.project_dir%/public/frontend/build'
# pass the build name as the 3rd argument to the Twig functions
# {{ encore_entry_script_tags('entry1', null, 'frontend') }}
#when@prod:
# webpack_encore:
# # Cache the entrypoints.json (rebuild Symfony's cache when entrypoints.json changes)
# # Available in version 1.2
# cache: true
when@test:
webpack_encore:
strict_mode: false

View File

@@ -0,0 +1,9 @@
when@dev:
_pentatrion_vite:
prefix: /build
resource: "@PentatrionViteBundle/Resources/config/routing.yaml"
_profiler_vite:
path: /_profiler/vite
defaults:
_controller: Pentatrion\ViteBundle\Controller\ProfilerController::info

View File

@@ -11,3 +11,6 @@ services:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
when@dev:
services:
ChampsLibres\WopiLib\Contract\Service\ProofValidatorInterface: '@Chill\WopiBundle\Service\Wopi\NullProofValidator'

View File

@@ -12,6 +12,8 @@ As Chill relies on the [symfony ](http://symfony.com) framework, reading the fra
- [Messages to users](messages-to-users.md)
- [Pagination](pagination.md)
- [Localisation](localisation.md)
- [Translation directives](translation_directives.md)
- [Translation provider](translation_provider.md)
- [Logging](logging.md)
- [Database migrations](migrations.md)
- [Searching](searching.md)

View File

@@ -0,0 +1,376 @@
# Translation Key Directives
These directives are meant to ensure better consistency across bundles, avoid duplication, and make keys more predictable.
## General Principles
1. **Use lowercase snake_case for all keys**
2. **Use dot-separated namespaces**
The dot is used to reflect:
- bundle
- feature
- sub-feature
- key type
3. **Do not use spaces in keys**
4. **Avoid duplicating the same text in multiple places**
When a translation is needed, try a search for the translation value first and see if it exists elsewhere
5. **If a key is used across multiple bundles, it must live in ChillMainBundle.**
6. **If a key is used across multiple bundles and is a generic term, it must be placed in the `common` namespace.**
## Key Structure
We use the following structure:
```
<scope>.<feature>.<sub-feature>.<key-type>
```
Where:
- `<scope>` identifies the bundle or shared context
- `<feature>` identifies the part of the module using the translation
- `<element>` describes the text purpose
- `<subelement>` for a multi-level element (e.g., activity.export.person.count.description)
### Examples of scopes
- `activity` — ChillActivityBundle
- `person` — ChillPersonBundle
- `common` — neutral shared translation values
## Naming Scopes
### 1. Bundle-specific keys
For most things inside a bundle:
```
activity.<feature>.<element>
```
Example:
```
activity.form.save
activity.list.title
activity.entity.type
activity.menu.activities
activity.controller.success_created
```
### 2. Shared UI elements (buttons, labels, generic text)
These belong in the `common` namespace in ChillMainBundle:
```
common.save
common.delete
common.edit
common.filter
common.duration_time
```
## Translation Workflow
Use the following workflow when deciding where a key belongs:
1. **Is this text used in more than one bundle?**
→ Place in `main` or `common`
2. **Is this text generic UI (button, label, pagination, yes/no)?**
→ Place in `common`
3. **Is this text specific to one bundle and one feature?**
→ Place in `<bundle>.feature.<element>`
4. **Is this text related to an entity or value object?**
→ Place in `<bundle>.entity.<entityname>.<field>`
5. **Is this text used in forms?**
`<bundle>.form.<field>` or `<bundle>.form.<action>`
6. **Is this text related to exports?**
`<bundle>.export.<feature>.<column>`
7. **Is it related to filtering, searching or parameters?**
`<bundle>.filter.<name>` or
`<bundle>.filter.<feature>.<field>` for nested filters
## Examples Based on Translations Within ChillActivityBundle
Below are concrete examples from `ChillActivityBundle`, refactored according to the guidelines.
### General activity keys
Instead of scattered keys like:
```
Show the activity
Edit the activity
Activity
Duration time
...
```
We use:
```
activity.general.show
activity.general.edit
activity.general.title
activity.general.duration
activity.general.travel_time
activity.general.attendee
activity.general.remark
activity.general.no_comments
```
### Forms
Instead of keys like:
```
Activity creation
Save activity
Reset form
Choose a type
```
Use:
```
activity.form.title_create
activity.form.save
activity.form.reset
activity.form.choose_type
activity.form.choose_duration
```
Long lists (like durations) should be grouped:
```
activity.form.duration.5min
activity.form.duration.10min
activity.form.duration.15min
activity.form.duration.1h
activity.form.duration.1h30
activity.form.duration.2h
...
```
### Entities
Entity fields should follow:
```
activity.entity.activity.date
activity.entity.activity.comment
activity.entity.activity.deleted
activity.entity.location.name
activity.entity.location.type
```
### Controller messages
Instead of strings as keys:
```
'Success : activity created!'
'The form is not valid. The activity has not been created !'
```
Use:
```
activity.controller.success_created
activity.controller.error_invalid_create
activity.controller.success_updated
activity.controller.error_invalid_update
```
### Roles
Access control keys should be:
```
activity.role.create
activity.role.update
activity.role.see
activity.role.see_details
activity.role.delete
activity.role.stats
activity.role.list
```
### Admin
```
activity.admin.configuration
activity.admin.types
activity.admin.reasons
activity.admin.reason_category
activity.admin.presence
```
### CRUD
```
activity.crud.type.title_new
activity.crud.type.title_edit
activity.crud.presence.title_new
```
### Activity Reason
```
activity.reason.list
activity.reason.create
activity.reason.active
activity.reason.category
activity.reason.entity_title
```
### Exports
Group them logically:
```
activity.export.person.count.title
activity.export.person.count.description
activity.export.person.count.header
activity.export.period.sum_duration.title
activity.export.period.sum_duration.description
activity.export.period.sum_duration.header
```
### Filters
Use hierarchical filters:
```
activity.filter.by_reason
activity.filter.by_type
activity.filter.by_date
activity.filter.by_location
activity.filter.by_sent_received
activity.filter.by_user
```
### Aggregators
```
activity.aggregator.reason.by_category
activity.aggregator.reason.level
activity.aggregator.user.by_scope
activity.aggregator.user.by_job
```
## Global/Shared Keys
Keys like the following **must not be redeclared** in each bundle:
- First name
- Last name
- Username
- ID
- Type
- Duration
- Comment
- Date
- Location
- Present / Not present
- Add / Edit / Delete / Save / Update
These belong in `common` or `main`:
```
common.firstname
common.lastname
common.username
common.id
common.type
common.comment
common.date
common.location
common.present
common.absent
common.add
common.edit
common.delete
common.save
common.update
```
## Naming Directives Summary
- **snake_case**
- **namespaced with dots**
- **bundle prefix for bundle-specific concepts**
- **common or main for shared concepts**
- **avoid free-floating keys (without namespace)**
- **reuse common keys wherever possible**
## Migration Strategy (Optional)
To apply this structure progressively:
1. New keys must follow these guidelines.
2. Existing keys may remain as-is until refactored.
3. When refactoring:
- Move cross-bundle keys to ChillMainBundle and possible `common` namespace.
- Replace duplicated keys with shared ones.
---
# Avoiding Duplicate Translations
## 1. Use Shared Namespaces
Two namespaces must be used for shared translations:
- `common.*` — generic UI concepts (save, delete, date, name, etc.)
If a translation may be reused in multiple bundles, it must be placed in the `common` namespace or in ChillMainBundle.
## 2. Bundle-Specific Keys
Keys belonging only to one bundle or one feature are namespaced inside that bundle:
```
activity.<feature>.<element>
person.<feature>.<element>
```
## 3. Search Before Creating
Before adding a new translation key, developers must:
1. For common translations like "enregistrer/opslaan" look in the `common` namespace.
2. Search in Loco or translations for existing values.
If a suitable key exists, reuse it.
## 4. Only Create a New Key When Necessary
Create a new key only when the text is:
- specific to the bundle
- specific to the feature
- not reusable elsewhere
## 5. Progressive Cleanup
Old duplicates may remain temporarily. When updating code in an area, clean duplicate values by moving them into `common` or `main`.
## General Workflow
- **Reuse shared keys** within `common` namespace.
- **Search before creating** new keys.
- **Namespace bundle-specific keys** under their bundle.
- **Refactor progressively** when touching old code.

View File

@@ -1,419 +0,0 @@
============================================
Directives for creating new translation keys
============================================
These directives are meant to ensure better consistency across bundles, avoid duplication, and make keys more predictable.
General Principles
==================
1. **Use lowercase snake_case for all keys**
2. **Use dot-separated namespaces**
The dot is used to reflect:
- bundle
- feature
- sub-feature
- key type
3. **Do not use spaces in keys**
4. **Avoid duplicating the same text in multiple places**
When a translation is needed, try a search for the translation value first and see if it exists elsewhere
5. **If a key is used across multiple bundles, it must live in ChillMainBundle.**
6. **If a key is used across multiple bundles and is a generic term, it must be placed in the ``common`` namespace.**
Key Structure
=============
We use the following structure:
.. code-block:: text
<scope>.<feature>.<sub-feature>.<key-type>
Where:
* ``<>`` identifies the bundle or shared context
* ``<feature>`` identifies the part of the module using the translation
* ``<element>`` describes the text purpose
* ``<subelement>`` for a multi-level element ( eg. activity.export.person.count.description)
Examples of scopes
------------------
* ``activity`` — ChillActivityBundle
* ``person`` — ChillPersonBundle
* ``common`` — neutral shared translation values
Naming Scopes
=============
1. **Bundle-specific keys**
For most things inside a bundle:
.. code-block:: text
activity.<feature>.<element>
Example:
.. code-block:: text
activity.form.save
activity.list.title
activity.entity.type
activity.menu.activities
activity.controller.success_created
2. **Shared UI elements (buttons, labels, generic text)**
These belong in the ``common`` namespace in ChillMainBundle:
.. code-block:: text
common.save
common.delete
common.edit
common.filter
common.duration_time
Translation workflow
====================
Use the following workflow when deciding where a key belongs:
1. **Is this text used in more than one bundle?**
→ Place in ``main`` or ``common``
2. **Is this text generic UI (button, label, pagination, yes/no)?**
→ Place in ``common``
3. **Is this text specific to one bundle and one feature?**
→ Place in ``<bundle>.feature.<element>``
4. **Is this text related to an entity or value object?**
→ Place in ``<bundle>.entity.<entityname>.<field>``
5. **Is this text used in forms?**
``<bundle>.form.<field>`` or ``<bundle>.form.<action>``
6. **Is this text related to exports?**
``<bundle>.export.<feature>.<column>``
7. **Is it related to filtering, searching or parameters?**
``<bundle>.filter.<name>`` or
``<bundle>.filter.<feature>.<field>`` for nested filters
Examples based on translations within ChillActivityBundle
=========================================================
Below are concrete examples from ``ChillActivityBundle``,
refactored according to the guidelines.
General activity keys
---------------------
Instead of scattered keys like::
Show the activity
Edit the activity
Activity
Duration time
...
We use:
.. code-block:: text
activity.general.show
activity.general.edit
activity.general.title
activity.general.duration
activity.general.travel_time
activity.general.attendee
activity.general.remark
activity.general.no_comments
Forms
-----
Instead of keys like::
Activity creation
Save activity
Reset form
Choose a type
Use:
.. code-block:: text
activity.form.title_create
activity.form.save
activity.form.reset
activity.form.choose_type
activity.form.choose_duration
Long lists (like durations) should be grouped:
.. code-block:: text
activity.form.duration.5min
activity.form.duration.10min
activity.form.duration.15min
activity.form.duration.1h
activity.form.duration.1h30
activity.form.duration.2h
...
Entities
--------
Entity fields should follow:
.. code-block:: text
activity.entity.activity.date
activity.entity.activity.comment
activity.entity.activity.deleted
activity.entity.location.name
activity.entity.location.type
Controller messages
-------------------
Instead of strings as keys::
'Success : activity created!'
'The form is not valid. The activity has not been created !'
Use:
.. code-block:: text
activity.controller.success_created
activity.controller.error_invalid_create
activity.controller.success_updated
activity.controller.error_invalid_update
Roles
-----
Access control keys should be:
.. code-block:: text
activity.role.create
activity.role.update
activity.role.see
activity.role.see_details
activity.role.delete
activity.role.stats
activity.role.list
Admin
-----
.. code-block:: text
activity.admin.configuration
activity.admin.types
activity.admin.reasons
activity.admin.reason_category
activity.admin.presence
CRUD
----
.. code-block:: text
activity.crud.type.title_new
activity.crud.type.title_edit
activity.crud.presence.title_new
Activity Reason
---------------
.. code-block:: text
activity.reason.list
activity.reason.create
activity.reason.active
activity.reason.category
activity.reason.entity_title
Exports
-------
Group them logically:
.. code-block:: text
activity.export.person.count.title
activity.export.person.count.description
activity.export.person.count.header
activity.export.period.sum_duration.title
activity.export.period.sum_duration.description
activity.export.period.sum_duration.header
Filters
-------
Use hierarchical filters:
.. code-block:: text
activity.filter.by_reason
activity.filter.by_type
activity.filter.by_date
activity.filter.by_location
activity.filter.by_sent_received
activity.filter.by_user
Aggregators
-----------
.. code-block:: text
activity.aggregator.reason.by_category
activity.aggregator.reason.level
activity.aggregator.user.by_scope
activity.aggregator.user.by_job
Global/Shared Keys
==================
Keys like the following **must not be redeclared** in each bundle:
- First name
- Last name
- Username
- ID
- Type
- Duration
- Comment
- Date
- Location
- Present / Not present
- Add / Edit / Delete / Save / Update
These belong in ``common`` or ``main``:
.. code-block:: text
common.firstname
common.lastname
common.username
common.id
common.type
common.comment
common.date
common.location
common.present
common.absent
common.add
common.edit
common.delete
common.save
common.update
Naming directives summary
==========================
* **snake_case**
* **namespaced with dots**
* **bundle prefix for bundle-specific concepts**
* **common or main for shared concepts**
* **avoid free-floating keys (without namespace)**
* **reuse common keys wherever possible**
Migration Strategy (Optional)
=============================
To apply this structure progressively:
1. New keys must follow these guidelines.
2. Existing keys may remain as-is until refactored.
3. When refactoring:
- Move cross-bundle keys to ChillMainBundle and possible `common` namespace.
- Replace duplicated keys with shared ones.
===========================================
Avoiding duplicate translations
===========================================
1. Use Shared Namespaces
========================
Two namespaces must be used for shared translations:
* ``common.*`` — generic UI concepts (save, delete, date, name, etc.)
If a translation may be reused in multiple bundles, it must be placed
in the ``common`` namespace or in ChillMainBundle.
2. Bundle-Specific Keys
=======================
Keys belonging only to one bundle or one feature are namespaced inside that
bundle:
.. code-block:: text
activity.<feature>.<element>
person.<feature>.<element>
3. Search Before Creating
=========================
Before adding a new translation key, developers must:
1. For common translations like: "enregistrer/opslaan" look in the `common` namespace.
3. Search in Loco or translations for existing values.
If a suitable key exists, reuse it.
4. Only Create a New Key When Necessary
=======================================
Create a new key only when the text is:
* specific to the bundle
* specific to the feature
* not reusable elsewhere
6. Progressive Cleanup
======================
Old duplicates may remain temporarily. When updating code in an area, clean
duplicate values by moving them into ``common`` or ``main``.
General workflow
================
* **Reuse shared keys** within ``common`` namespace.
* **Search before creating** new keys.
* **Namespace bundle-specific keys** under their bundle.
* **Refactor progressively** when touching old code.

View File

@@ -0,0 +1,139 @@
# Managing Translations Within CHILL Using Loco as a Translation Provider
Within CHILL we make use of Symfony's translation component together with *Loco* as an external translation provider. Using this setup centralises translations in a single online location (Loco), while still allowing developers to create and update translation keys locally in the project (YAML files).
## Workflow
We use the following workflow:
- Developers create translation keys in YAML files inside each bundle.
- Keys are written in **English**.
- Application UI defaults to **French**, with **Dutch** as an additional locale (other languages can be added in the future).
- Loco acts as the central translation memory and synchronisation source.
- Loco Symfony package was installed so that built-in translation commands can be used to push/pull content between Loco and the local project.
## Translation Directory Structure
Each bundle contains its own `translations` directory, for example:
```
chill-bundles/
ChillCoreBundle/
translations/
messages.fr.yml
messages.nl.yml
ChillPersonBundle/
translations/
messages.fr.yml
messages.nl.yml
...
```
## Configuration
The translation configuration is defined in `config/packages/translation.yaml`:
```yaml
framework:
default_locale: '%env(resolve:LOCALE)%'
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- '%env(resolve:LOCALE)%'
- 'en'
providers:
loco:
dsn: '%env(LOCO_DSN)%'
domains: [ 'messages' ]
locales: [ 'fr', 'nl' ]
```
Note:
- `en` is the **source locale** in Loco.
- `fr` and `nl` are the **application locales**.
- `domains: [messages]` means only `messages.*.yml` files are pushed.
### Environment Variables
In `.env`:
```
LOCALE=fr
```
In `.env.local`:
```
LOCO_DSN="loco://API_KEY@default"
```
Replace `API_KEY` with the key provided by Loco.
## Working with Loco
Loco shows all translation keys under three languages:
- **English (source)** — keys are listed but remain "untranslated"
- **French** — translated strings for French users
- **Dutch** — translated strings for Dutch users
Note: Don't add translations directly in the English column. This column simply represents the *key*.
## Pushing Translations to Loco
You can push local translations to Loco using:
```bash
symfony console translation:push loco --locales=fr --locales=nl --force
```
This will:
- Upload all French and Dutch translation values from `*.fr.yml` and `*.nl.yml` files
- Ensure Loco stays in sync with local YAML files
- Create any missing keys in Loco
## Pulling Translations from Loco
When translators update strings in Loco, developers can fetch updates with:
```bash
symfony console translation:pull loco --locales=fr --locales=nl --force
```
This will:
- Download the latest French and Dutch translations
- Overwrite the local YAML files with Loco's content
- Keep everything consistent across the team
## Adding New Translation Keys (Developer Workflow)
1. Add a new key directly in the appropriate YAML file, for example:
```
chill-bundles/ChillPersonBundle/translations/messages.fr.yml
```
Example key:
```yaml
person.form.submit: "Envoyer"
```
2. Add Dutch translation as well if you can (otherwise leave empty to be translated within Loco later):
```yaml
person.form.submit: "Verzenden"
```
3. Run a push to send the new key to Loco:
```bash
symfony console translation:push loco --locales=fr --locales=nl --force
```
4. The key will now appear in Loco for translation management.
Note: English appears as "untranslated", because it is merely the source language.

View File

@@ -1,148 +0,0 @@
=======================================================================
Managing translations within CHILL using Loco as a translation provider
=======================================================================
Within CHILL we make use of Symfony's translation component together with *Loco* as an external
translation provider. Using this setup centralise translations in a single online
location (Loco), while still allowing developers to create and update
translation keys locally in the project (YAML files).
Workflow
========
We use the following workflow:
* Developers create translation keys in YAML files inside each bundle.
* Keys are written in **English**.
* Application UI defaults to **French**, with **Dutch** as an additional locale (other languages can be added in the future).
* Loco acts as the central translation memory and synchronisation source.
* Loco Symfony package was installed so that built-in translation commands can be used to push/pull content
between Loco and the local project.
Translation directory structure
===============================
Each bundle contains its own ``translations`` directory, for example::
chill-bundles/
ChillCoreBundle/
translations/
messages.fr.yml
messages.nl.yml
ChillPersonBundle/
translations/
messages.fr.yml
messages.nl.yml
...
Configuration
=============
The translation configuration is defined in
``config/packages/translation.yaml``::
framework:
default_locale: '%env(resolve:LOCALE)%'
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- '%env(resolve:LOCALE)%'
- 'en'
providers:
loco:
dsn: '%env(LOCO_DSN)%'
domains: [ 'messages' ]
locales: [ 'fr', 'nl' ]
Note:
* ``en`` is the **source locale** in Loco.
* ``fr`` and ``nl`` are the **application locales**.
* ``domains: [messages]`` means only ``messages.*.yml`` files are pushed.
Environment variables
---------------------
In ``.env``::
LOCALE=fr
In ``.env.local``::
LOCO_DSN="loco://API_KEY@default"
Replace ``API_KEY`` with the key provided by Loco.
Working with Loco
=================
Loco shows all translation keys under three languages:
* **English (source)** — keys are listed but remain “untranslated”
* **French** — translated strings for French users
* **Dutch** — translated strings for Dutch users
Note: Don't add translations directly in the English column.
This column simply represents the *key*.
Pushing translations to Loco
============================
You can push local translations to Loco using:
.. code-block:: bash
symfony console translation:push loco --locales=fr --locales=nl --force
This will:
* Upload all French and Dutch translation values from ``*.fr.yml`` and
``*.nl.yml`` files
* Ensures Loco stays in sync with local YAML files
* Creates any missing keys in Loco
Pulling translations from Loco
==============================
When translators update strings in Loco, developers can fetch updates with:
.. code-block:: bash
symfony console translation:pull loco --locales=fr --locales=nl --force
This will:
* Download the latest French and Dutch translations
* Overwrite the local YAML files with Locos content
* Keep everything consistent across the team
Adding new translation keys (Developer workflow)
================================================
1. Add a new key directly in the appropriate YAML file, for example::
chill-bundles/ChillPersonBundle/translations/messages.fr.yml
Example key::
person.form.submit: "Envoyer"
2. Add Dutch translation as well if you can (otherwise leave empty to be translated within Loco later)::
person.form.submit: "Verzenden"
3. Run a push to send the new key to Loco:
.. code-block:: bash
symfony console translation:push loco --locales=fr --locales=nl --force
4. The key will now appear in Loco for translation management.
Note: English appears as “untranslated”, because it is merely the source language

View File

@@ -1,6 +1,15 @@
{
"name": "chill",
"name": "chill-bundles",
"private": true,
"version": "2.0.0",
"description": "Chill web application frontend (Vite build at repo root)",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"eslint": "eslint . --ext .js,.ts,.vue"
},
"devDependencies": {
"@alexlafroscia/yaml-merge": "^4.0.0",
"@apidevtools/swagger-cli": "^4.0.4",
@@ -11,11 +20,11 @@
"@hotwired/stimulus": "^3.0.0",
"@luminateone/eslint-baseline": "^1.0.9",
"@symfony/stimulus-bridge": "^3.2.0",
"@symfony/webpack-encore": "^4.1.0",
"@tsconfig/node20": "^20.1.4",
"@types/dompurify": "^3.0.5",
"@types/eslint__js": "^8.42.3",
"@typescript-eslint/parser": "^8.12.2",
"@vitejs/plugin-vue": "^5.1.4",
"bindings": "^1.5.0",
"bootstrap": "^5.3.6",
"chokidar": "^3.5.1",
@@ -40,9 +49,9 @@
"ts-loader": "^9.3.1",
"typescript": "^5.6.3",
"typescript-eslint": "^8.13.0",
"vue-loader": "^17.0.0",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
"vite": "^5.4.8",
"vite-plugin-symfony": "^8",
"vue-loader": "^17.0.0"
},
"dependencies": {
"@fullcalendar/core": "^6.1.4",
@@ -71,21 +80,5 @@
"vue-multiselect": "3.0.0-alpha.2",
"vue-toast-notification": "^3.1.2",
"vuex": "^4.0.0"
},
"browserslist": [
"defaults and fully supports es6-module and not dead"
],
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production --progress",
"specs-build": "yaml-merge src/Bundle/ChillMainBundle/chill.api.specs.yaml src/Bundle/ChillPersonBundle/chill.api.specs.yaml src/Bundle/ChillCalendarBundle/chill.api.specs.yaml src/Bundle/ChillThirdPartyBundle/chill.api.specs.yaml src/Bundle/ChillDocStoreBundle/chill.api.specs.yaml> templates/api/specs.yaml",
"specs-validate": "swagger-cli validate templates/api/specs.yaml",
"specs-create-dir": "mkdir -p templates/api",
"specs": "yarn run specs-create-dir && yarn run specs-build && yarn run specs-validate",
"version": "node --version",
"eslint": "npx eslint-baseline --fix \"src/**/*.{js,ts,vue}\""
},
"private": true
}
}

View File

@@ -3,7 +3,6 @@ parameters:
paths:
- src/
- utils/
- packages/
tmpDir: var/cache/phpstan
reportUnmatchedIgnoredErrors: false
excludePaths:

View File

@@ -27,7 +27,8 @@ class ByActivityNumberAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data, \Chill\MainBundle\Export\ExportGenerationContext $exportGenerationContext): void
{
$qb
->addSelect('(SELECT COUNT(activity.id) FROM '.Activity::class.' activity WHERE activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
// Use a distinct alias inside the subquery to avoid colliding with the root alias "activity"
->addSelect('(SELECT COUNT(agg_activity.id) FROM '.Activity::class.' agg_activity WHERE agg_activity.accompanyingPeriod = acp) AS activity_by_number_aggregator')
->addGroupBy('activity_by_number_aggregator');
}
@@ -65,7 +66,7 @@ class ByActivityNumberAggregator implements AggregatorInterface
{
return static function ($value) {
if ('_header' === $value) {
return '';
return 'Count activities linked to an accompanying period';
}
if (null === $value) {

View File

@@ -1 +1 @@
require("./chillactivity.scss");
import "./chillactivity.scss";

View File

@@ -136,6 +136,8 @@ import {
ACTIVITY_LOCATION_FIELDS_TYPE,
ACTIVITY_CHOOSE_LOCATION_TYPE,
ACTIVITY_CREATE_NEW_LOCATION,
ACTIVITY_EDIT_ADDRESS,
ACTIVITY_CREATE_ADDRESS,
trans,
} from "translator";
@@ -156,6 +158,8 @@ export default {
ACTIVITY_LOCATION_FIELDS_TYPE,
ACTIVITY_CHOOSE_LOCATION_TYPE,
ACTIVITY_CREATE_NEW_LOCATION,
ACTIVITY_EDIT_ADDRESS,
ACTIVITY_CREATE_ADDRESS,
};
},
props: ["availableLocations"],
@@ -179,14 +183,14 @@ export default {
options: {
button: {
text: {
create: "activity.create_address",
edit: "activity.edit_address",
create: ACTIVITY_CREATE_ADDRESS,
edit: ACTIVITY_EDIT_ADDRESS,
},
size: "btn-sm",
},
title: {
create: "activity.create_address",
edit: "activity.edit_address",
create: ACTIVITY_CREATE_ADDRESS,
edit: ACTIVITY_EDIT_ADDRESS,
},
},
context: {

View File

@@ -124,9 +124,9 @@
{# {{ form(delete_form) }} #}
{% block js %}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}

View File

@@ -15,7 +15,7 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
@@ -23,12 +23,12 @@
});
window.activity = {{ activity_json|json_encode|raw }};
</script>
{{ encore_entry_script_tags('vue_activity') }}
{{ vite_entry_script_tags('vue_activity') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('vue_activity') }}
{{ encore_entry_link_tags('page_edit_activity') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('vue_activity') }}
{{ vite_entry_link_tags('page_edit_activity') }}
{% endblock %}

View File

@@ -30,7 +30,7 @@
{% endblock %}
{% block js %}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingModifiedForm('form[name="{{ edit_form.vars.form.vars.name }}"]',
@@ -38,10 +38,10 @@
});
window.activity = {{ activity_json|json_encode|raw }};
</script>
{{ encore_entry_script_tags('vue_activity') }}
{{ vite_entry_script_tags('vue_activity') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('vue_activity') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('vue_activity') }}
{% endblock %}

View File

@@ -7,14 +7,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}

View File

@@ -22,14 +22,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}

View File

@@ -121,9 +121,9 @@
{{ form_end(form) }}
{% block js %}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}

View File

@@ -15,16 +15,16 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.activity = {{ activity_json|json_encode|raw }};
{% if default_location is not null %}window.default_location_id = {{ default_location.id }}{% endif %};
</script>
{{ encore_entry_script_tags('vue_activity') }}
{{ vite_entry_script_tags('vue_activity') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('vue_activity') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('vue_activity') }}
{% endblock %}

View File

@@ -14,7 +14,7 @@
{% endblock %}
{% block js %}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function (e) {
chill.displayAlertWhenLeavingUnsubmittedForm('form[name="{{ form.vars.form.vars.name }}"]',
@@ -22,10 +22,10 @@
});
window.activity = {{ activity_json|json_encode|raw }};
</script>
{{ encore_entry_script_tags('vue_activity') }}
{{ vite_entry_script_tags('vue_activity') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('vue_activity') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('vue_activity') }}
{% endblock %}

View File

@@ -6,16 +6,16 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% import '@ChillActivity/ActivityReason/macro.html.twig' as m %}

View File

@@ -6,14 +6,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_notification_toggle_read_status') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_notification_toggle_read_status') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% import '@ChillActivity/ActivityReason/macro.html.twig' as m %}

View File

@@ -1,18 +0,0 @@
// this file loads all assets from the Chill person bundle
module.exports = function (encore, entries) {
entries.push(__dirname + "/Resources/public/chill/index.js");
encore.addAliases({
ChillActivityAssets: __dirname + "/Resources/public",
});
encore.addEntry(
"page_edit_activity",
__dirname + "/Resources/public/page/edit_activity/index.scss",
);
encore.addEntry(
"vue_activity",
__dirname + "/Resources/public/vuejs/Activity/index.js",
);
};

View File

@@ -39,7 +39,7 @@ final class Version20251118124241 extends AbstractMigration
$this->addSql("COMMENT ON COLUMN activity_user.by_migration IS 'For backup purpose - can be safely deleted after a while. See migration \\Chill\\Migrations\\Activity\\Version20251118124241'");
$this->addSql('INSERT INTO activity_user (activity_id, user_id, by_migration)
SELECT id, user_id, true FROM activity
SELECT id, user_id, true FROM activity WHERE user_id is not null
ON CONFLICT DO NOTHING');
}

View File

@@ -0,0 +1,14 @@
export default {
chillBase: [
"./src/Bundle/ChillActivityBundle/Resources/public/chill/index.js",
],
aliases: {
ChillActivityAssets: "./src/Bundle/ChillActivityBundle/Resources/public",
},
inputs: {
page_edit_activity:
"./src/Bundle/ChillActivityBundle/Resources/public/page/edit_activity/index.scss",
vue_activity:
"./src/Bundle/ChillActivityBundle/Resources/public/vuejs/Activity/index.js",
},
};

View File

@@ -2,12 +2,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block title %}

View File

@@ -1 +1 @@
require("./chillbudget.scss");
import("./chillbudget.scss");

View File

@@ -7,11 +7,11 @@
{% block title title %}
{% block js %}
{{ encore_entry_script_tags('page_budget') }}
{{ vite_entry_script_tags('page_budget') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('page_budget') }}
{{ vite_entry_link_tags('page_budget') }}
{% endblock %}
{% block content %}

View File

@@ -7,11 +7,11 @@
{% block title title %}
{% block js %}
{{ encore_entry_script_tags('page_budget') }}
{{ vite_entry_script_tags('page_budget') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('page_budget') }}
{{ vite_entry_link_tags('page_budget') }}
{% endblock %}
{% block content %}

View File

@@ -1,8 +0,0 @@
// this file loads all assets from the Chill budget bundle
module.exports = function (encore, entries) {
encore.addAliases({
ChillBudgetAssets: __dirname + "/Resources/public",
});
encore.addEntry("page_budget", __dirname + "/Resources/public/page/index.js");
};

View File

@@ -0,0 +1,8 @@
export default {
aliases: {
ChillBudgetAssets: "./src/Bundle/ChillBudgetBundle/Resources/public",
},
inputs: {
page_budget: "./src/Bundle/ChillBudgetBundle/Resources/public/page/index.js",
},
};

View File

@@ -1 +1 @@
require("./scss/calendar.scss");
import("./scss/calendar.scss");

View File

@@ -255,5 +255,3 @@ export default {
},
};
</script>
<style src="vue-multiselect/dist/vue-multiselect.css"></style>

View File

@@ -20,13 +20,13 @@
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
window.mainUser = {{ entity.mainUser.id }};
</script>
{{ encore_entry_script_tags('vue_calendar') }}
{{ vite_entry_script_tags('vue_calendar') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_calendar') }}
{{ encore_entry_link_tags('page_calendar') }}
{{ vite_entry_link_tags('vue_calendar') }}
{{ vite_entry_link_tags('page_calendar') }}
{% endblock %}
{% block block_post_menu %}

View File

@@ -20,13 +20,13 @@
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
window.mainUser = {{ entity.mainUser.id }};
</script>
{{ encore_entry_script_tags('vue_calendar') }}
{{ vite_entry_script_tags('vue_calendar') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_calendar') }}
{{ encore_entry_link_tags('page_calendar') }}
{{ vite_entry_link_tags('vue_calendar') }}
{{ vite_entry_link_tags('page_calendar') }}
{% endblock %}
{% block block_post_menu %}

View File

@@ -23,10 +23,10 @@
window.endDate = {{ entity.endDate|date('Y-m-d H:i:s')|json_encode|raw }};
window.mainUser = {{ entity.mainUser.id }};
</script>
{{ encore_entry_script_tags('vue_calendar') }}
{{ vite_entry_script_tags('vue_calendar') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_calendar') }}
{{ vite_entry_link_tags('vue_calendar') }}
{% endblock %}

View File

@@ -9,14 +9,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_answer') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_answer') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_answer') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_answer') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}

View File

@@ -8,14 +8,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_answer') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_answer') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_answer') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_answer') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}

View File

@@ -16,10 +16,10 @@
<script type="text/javascript">
window.userId = {{ user.id }};
</script>
{{ encore_entry_script_tags('vue_mycalendarrange') }}
{{ vite_entry_script_tags('vue_mycalendarrange') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_mycalendarrange') }}
{{ vite_entry_link_tags('vue_mycalendarrange') }}
{% endblock %}

View File

@@ -15,18 +15,18 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript">
window.entity = {{ entity_json|json_encode|raw }};
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %};
</script>
{{ encore_entry_script_tags('vue_calendar') }}
{{ vite_entry_script_tags('vue_calendar') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_calendar') }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('vue_calendar') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block block_post_menu %}

View File

@@ -15,18 +15,18 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript">
window.entity = {{ entity_json|json_encode|raw }};
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %};
</script>
{{ encore_entry_script_tags('vue_calendar') }}
{{ vite_entry_script_tags('vue_calendar') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('vue_calendar') }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('vue_calendar') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block block_post_menu %}

View File

@@ -9,12 +9,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% block content %}

View File

@@ -8,12 +8,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% block content %}

View File

@@ -9,12 +9,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% block content %}

View File

@@ -8,12 +8,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}
{% block content %}

View File

@@ -29,12 +29,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_answer') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_answer') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_answer') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_answer') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}

View File

@@ -1,25 +0,0 @@
// this file loads all assets from the Chill calendar bundle
module.exports = function (encore, entries) {
entries.push(__dirname + "/Resources/public/chill/chill.js");
encore.addAliases({
ChillCalendarAssets: __dirname + "/Resources/public",
});
encore.addEntry(
"vue_calendar",
__dirname + "/Resources/public/vuejs/Calendar/index.js",
);
encore.addEntry(
"vue_mycalendarrange",
__dirname + "/Resources/public/vuejs/MyCalendarRange/index2.ts",
);
encore.addEntry(
"page_calendar",
__dirname + "/Resources/public/chill/index.js",
);
encore.addEntry(
"mod_answer",
__dirname + "/Resources/public/module/Invite/answer.js",
);
};

View File

@@ -0,0 +1,18 @@
export default {
chillBase: [
"./src/Bundle/ChillCalendarBundle/Resources/public/chill/chill.js",
],
aliases: {
ChillCalendarAssets: "./src/Bundle/ChillCalendarBundle/Resources/public",
},
inputs: {
vue_calendar:
"./src/Bundle/ChillCalendarBundle/Resources/public/vuejs/Calendar/index.js",
vue_mycalendarrange:
"./src/Bundle/ChillCalendarBundle/Resources/public/vuejs/MyCalendarRange/index2.ts",
page_calendar:
"./src/Bundle/ChillCalendarBundle/Resources/public/chill/index.js",
mod_answer:
"./src/Bundle/ChillCalendarBundle/Resources/public/module/Invite/answer.js",
},
};

View File

@@ -17,9 +17,9 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -2,12 +2,12 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}

View File

@@ -17,9 +17,9 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -3,11 +3,11 @@
{% block title 'docgen.Generate a document'|trans %}
{% block js %}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block content %}

View File

@@ -1,11 +0,0 @@
// this file loads all assets from the Chill DocGenerator bundle
module.exports = function (encore, entries) {
encore.addAliases({
ChillDocGeneratorAssets: __dirname + "/Resources/public",
});
encore.addEntry(
"mod_docgen_picktemplate",
__dirname + "/Resources/public/module/PickTemplate/index.js",
);
};

View File

@@ -0,0 +1,10 @@
export default {
aliases: {
ChillDocGeneratorAssets:
"./src/Bundle/ChillDocGeneratorBundle/Resources/public",
},
inputs: {
mod_docgen_picktemplate:
"./src/Bundle/ChillDocGeneratorBundle/Resources/public/module/PickTemplate/index.js",
},
};

View File

@@ -1,2 +1,2 @@
require("./uploader.js");
require("./downloader.js");
import("./uploader.js");
import("./downloader.js");

View File

@@ -22,8 +22,8 @@ import { initializeButtons } from "./downloader.js";
// load css
//require('dropzone/dist/basic.css');
require("dropzone/dist/dropzone.css");
require("./index.scss");
import("dropzone/dist/dropzone.css");
import("./index.scss");
//
// disable dropzone autodiscover

View File

@@ -366,7 +366,7 @@ import {
} from "../../types";
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
import * as pdfjsLib from "pdfjs-dist";
import {
import type {
PDFDocumentProxy,
PDFPageProxy,
} from "pdfjs-dist/types/src/display/api";

View File

@@ -42,10 +42,10 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -38,10 +38,10 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -12,9 +12,9 @@
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('mod_entity_workflow_pick') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_entity_workflow_pick') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}
@@ -80,7 +80,7 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_entity_workflow_pick') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_entity_workflow_pick') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}

View File

@@ -3,14 +3,14 @@ activeRouteKey = '' %} {% block title %}
{{ "Documents" }}
{% endblock %} {% block js %}
{{ parent() }}
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
{{ encore_entry_script_tags("mod_entity_workflow_pick") }}
{{ encore_entry_script_tags("mod_document_action_buttons_group") }}
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
{{ vite_entry_script_tags("mod_entity_workflow_pick") }}
{{ vite_entry_script_tags("mod_document_action_buttons_group") }}
{% endblock %} {% block css %}
{{ parent() }}
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
{{ encore_entry_link_tags("mod_entity_workflow_pick") }}
{{ encore_entry_link_tags("mod_document_action_buttons_group") }}
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
{{ vite_entry_link_tags("mod_entity_workflow_pick") }}
{{ vite_entry_link_tags("mod_document_action_buttons_group") }}
{% endblock %} {% block content %}
<div class="document-list">
<h1>{{ "Documents" }}</h1>

View File

@@ -13,14 +13,14 @@ License * along with this program. If not, see <http://www.gnu.org/licenses/>.
{{ 'Documents for %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}
{% endblock %} {% block js %}
{{ parent() }}
{{ encore_entry_script_tags("mod_docgen_picktemplate") }}
{{ encore_entry_script_tags("mod_entity_workflow_pick") }}
{{ encore_entry_script_tags("mod_document_action_buttons_group") }}
{{ vite_entry_script_tags("mod_docgen_picktemplate") }}
{{ vite_entry_script_tags("mod_entity_workflow_pick") }}
{{ vite_entry_script_tags("mod_document_action_buttons_group") }}
{% endblock %} {% block css %}
{{ parent() }}
{{ encore_entry_link_tags("mod_docgen_picktemplate") }}
{{ encore_entry_link_tags("mod_entity_workflow_pick") }}
{{ encore_entry_link_tags("mod_document_action_buttons_group") }}
{{ vite_entry_link_tags("mod_docgen_picktemplate") }}
{{ vite_entry_link_tags("mod_entity_workflow_pick") }}
{{ vite_entry_link_tags("mod_document_action_buttons_group") }}
{% endblock %} {% block content %}
<div class="document-list">

View File

@@ -58,9 +58,9 @@
{% endblock %}
{% block js %}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -54,9 +54,9 @@
{% endblock %}
{% block js %}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{% endblock %}

View File

@@ -24,11 +24,11 @@
{% block title %}{{ 'Detail of document of %name%'|trans({ '%name%': person|chill_entity_render_string } ) }}{% endblock %}
{% block js %}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block content %}

View File

@@ -7,21 +7,21 @@
<link rel="shortcut icon" href="{{ asset('build/images/favicon.ico') }}" type="image/x-icon">
<title>Signature</title>
{{ encore_entry_link_tags('mod_bootstrap') }}
{{ encore_entry_link_tags('mod_forkawesome') }}
{{ encore_entry_link_tags('chill') }}
{{ encore_entry_link_tags('vue_document_signature') }}
{{ vite_entry_link_tags('mod_bootstrap') }}
{{ vite_entry_link_tags('mod_forkawesome') }}
{{ vite_entry_link_tags('chill') }}
{{ vite_entry_link_tags('vue_document_signature') }}
</head>
<body>
{% block js %}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
<script type="text/javascript">
window.signature = {{ signature|json_encode|raw }};
</script>
{{ encore_entry_script_tags('vue_document_signature') }}
{{ vite_entry_script_tags('vue_document_signature') }}
{% endblock %}
<div class="content" id="content">

View File

@@ -2,12 +2,12 @@
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_document_download_button') }}
{{ vite_entry_link_tags('mod_document_download_button') }}
{% endblock %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_document_download_button') }}
{{ vite_entry_script_tags('mod_document_download_button') }}
{% endblock %}
{% block title %}{{ 'workflow.public_link.title'|trans }} - {{ title }}{% endblock %}

View File

@@ -1,21 +0,0 @@
module.exports = function (encore) {
encore.addAliases({
ChillDocStoreAssets: __dirname + "/Resources/public",
});
encore.addEntry(
"mod_async_upload",
__dirname + "/Resources/public/module/async_upload/index.ts",
);
encore.addEntry(
"mod_document_action_buttons_group",
__dirname + "/Resources/public/module/document_action_buttons_group/index",
);
encore.addEntry(
"mod_document_download_button",
__dirname + "/Resources/public/module/button_download/index",
);
encore.addEntry(
"vue_document_signature",
__dirname + "/Resources/public/vuejs/DocumentSignature/index",
);
};

View File

@@ -0,0 +1,15 @@
export default {
aliases: {
ChillDocStoreAssets: "./src/Bundle/ChillDocStoreBundle/Resources/public",
},
inputs: {
mod_async_upload:
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/async_upload/index.ts",
mod_document_action_buttons_group:
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/document_action_buttons_group/index.ts",
mod_document_download_button:
"./src/Bundle/ChillDocStoreBundle/Resources/public/module/button_download/index.ts",
vue_document_signature:
"./src/Bundle/ChillDocStoreBundle/Resources/public/vuejs/DocumentSignature/index.ts",
},
};

View File

@@ -1 +1 @@
require("./chillevent.scss");
import("./chillevent.scss");

View File

@@ -1,10 +1,10 @@
{% extends '@ChillEvent/layout.html.twig' %} {% block js %}
{{ encore_entry_script_tags("mod_async_upload") }}
{{ encore_entry_script_tags("mod_pickentity_type") }}
{{ vite_entry_script_tags("mod_async_upload") }}
{{ vite_entry_script_tags("mod_pickentity_type") }}
{% endblock %} {% block css %}
{{ encore_entry_link_tags("mod_async_upload") }}
{{ encore_entry_link_tags("mod_pickentity_type") }}
{{ vite_entry_link_tags("mod_async_upload") }}
{{ vite_entry_link_tags("mod_pickentity_type") }}
{% endblock %} {% block title 'Event edit'|trans %} {% block event_content -%}
<div class="col-10">

View File

@@ -1,9 +1,9 @@
{% extends '@ChillEvent/layout.html.twig' %}
{% block css %}
{{ encore_entry_link_tags("mod_async_upload") }}
{{ encore_entry_link_tags("mod_pickentity_type") }}
{{ encore_entry_link_tags('vue_event') }}
{{ vite_entry_link_tags("mod_async_upload") }}
{{ vite_entry_link_tags("mod_pickentity_type") }}
{{ vite_entry_link_tags('vue_event') }}
{% endblock %}
{% block title 'Event creation'|trans %}
@@ -52,9 +52,9 @@
{% endblock %}
{% block js %}
{{ encore_entry_script_tags("mod_async_upload") }}
{{ encore_entry_script_tags("mod_pickentity_type") }}
{{ encore_entry_script_tags('vue_event') }}
{{ vite_entry_script_tags("mod_async_upload") }}
{{ vite_entry_script_tags("mod_pickentity_type") }}
{{ vite_entry_script_tags('vue_event') }}
<script type="text/javascript">
window.entity = {{ entity_json|json_encode|raw }};
{% if app.user.currentLocation is not null %}window.default_location_id = {{ app.user.currentLocation.id }};{% endif %}

View File

@@ -1,10 +1,10 @@
{% extends '@ChillEvent/layout.html.twig' %} {% block title 'Events'|trans %} {%
block js %}
{{ parent() }}
{{ encore_entry_script_tags("mod_pickentity_type") }}
{{ vite_entry_script_tags("mod_pickentity_type") }}
{% endblock %} {% block css %}
{{ parent() }}
{{ encore_entry_link_tags("mod_pickentity_type") }}
{{ vite_entry_link_tags("mod_pickentity_type") }}
{% endblock %} {% block content %}
<div class="col-10">
<h1>{{ block("title") }}</h1>

View File

@@ -6,14 +6,14 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock %}
{% macro insert_onthefly(type, entity, parent = null) %}

View File

@@ -1,10 +0,0 @@
module.exports = function (encore, entries) {
entries.push(__dirname + "/Resources/public/chill/index.js");
encore.addEntry(
"vue_event",
__dirname + "/Resources/public/vuejs/index.js",
);
};

View File

@@ -0,0 +1,8 @@
export default {
chillBase: [
"./src/Bundle/ChillEventBundle/Resources/public/chill/index.js",
],
inputs: {
vue_event: "./src/Bundle/ChillEventBundle/Resources/public/vuejs/index.js",
},
};

View File

@@ -1 +1 @@
require("./footer_bandeau.jpg");
import("./footer_bandeau.jpg");

View File

@@ -1,7 +1,7 @@
{% extends '@ChillPerson/CRUD/edit.html.twig' %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block title 'Dispositifs de ' ~ entity.person.firstName ~ ' ' ~ entity.person.lastName %}
@@ -88,7 +88,7 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript" src="{{ asset('build/dispositifs_edit.js') }}"></script>
<script type="text/javascript">

View File

@@ -114,13 +114,13 @@
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock css %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript" src="{{ asset('build/personal_situation_edit.js') }}"></script>
{% endblock js %}

View File

@@ -274,12 +274,12 @@
{% block css %}
{{ parent() }}
{{ encore_entry_link_tags('mod_async_upload') }}
{{ encore_entry_script_tags('mod_document_action_buttons_group') }}
{{ vite_entry_link_tags('mod_async_upload') }}
{{ vite_entry_script_tags('mod_document_action_buttons_group') }}
{% endblock css %}
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_async_upload') }}
{{ encore_entry_link_tags('mod_document_action_buttons_group') }}
{{ vite_entry_script_tags('mod_async_upload') }}
{{ vite_entry_link_tags('mod_document_action_buttons_group') }}
{% endblock js %}

View File

@@ -4,7 +4,7 @@
{% set activeRouteKey = '' %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block title %}
@@ -66,6 +66,6 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript" src="{{ asset('build/immersion_edit.js') }}"></script>
{% endblock %}

View File

@@ -4,7 +4,7 @@
{% set activeRouteKey = '' %}
{% block css %}
{{ encore_entry_link_tags('mod_pickentity_type') }}
{{ vite_entry_link_tags('mod_pickentity_type') }}
{% endblock %}
{% block title %}
@@ -69,7 +69,7 @@
{% block js %}
{{ parent() }}
{{ encore_entry_script_tags('mod_pickentity_type') }}
{{ vite_entry_script_tags('mod_pickentity_type') }}
<script type="text/javascript" src="{{ asset('build/immersion_edit.js') }}"></script>
{% endblock %}

View File

@@ -1,15 +0,0 @@
module.exports = function (encore, chillEntries) {
let dispositif_edit_file =
__dirname + "/Resources/public/module/dispositif_edit/index.js",
personal_situation_edit_file =
__dirname + "/Resources/public/module/personal_situation/index.js",
cv_edit_file = __dirname + "/Resources/public/module/cv_edit/index.js",
immersion_edit_file =
__dirname + "/Resources/public/module/immersion_edit/index.js",
images = __dirname + "/Resources/public/images/index.js";
encore.addEntry("dispositifs_edit", dispositif_edit_file);
encore.addEntry("personal_situation_edit", personal_situation_edit_file);
encore.addEntry("immersion_edit", immersion_edit_file);
encore.addEntry("images", images);
encore.addEntry("cs_cv", cv_edit_file);
};

View File

@@ -0,0 +1,13 @@
export default {
inputs: {
dispositifs_edit:
"./src/Bundle/ChillJobBundle/src/Resources/public/module/dispositif_edit/index.js",
personal_situation_edit:
"./src/Bundle/ChillJobBundle/src/Resources/public/module/personal_situation/index.js",
immersion_edit:
"./src/Bundle/ChillJobBundle/src/Resources/public/module/immersion_edit/index.js",
images: "./src/Bundle/ChillJobBundle/src/Resources/public/images/index.js",
cs_cv:
"./src/Bundle/ChillJobBundle/src/Resources/public/module/cv_edit/index.js",
},
};

View File

@@ -1,12 +1,12 @@
@font-face {
/*font-family: 'open_sanssemibold';*/
font-family: 'Open Sans';
src: url('opensans-semibold-webfont.eot');
src: url('opensans-semibold-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-semibold-webfont.woff2') format('woff2'),
url('opensans-semibold-webfont.woff') format('woff'),
url('opensans-semibold-webfont.ttf') format('truetype'),
url('opensans-semibold-webfont.svg#open_sanssemibold') format('svg');
src: url('./opensans-semibold-webfont.eot');
src: url('./opensans-semibold-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-semibold-webfont.woff2') format('woff2'),
url('./opensans-semibold-webfont.woff') format('woff'),
url('./opensans-semibold-webfont.ttf') format('truetype'),
url('./opensans-semibold-webfont.svg#open_sanssemibold') format('svg');
font-weight: 600;
font-style: normal;
}
@@ -14,12 +14,12 @@
@font-face {
/*font-family: 'open_sanssemibold_italic';*/
font-family: 'Open Sans';
src: url('opensans-semibolditalic-webfont.eot');
src: url('opensans-semibolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-semibolditalic-webfont.woff2') format('woff2'),
url('opensans-semibolditalic-webfont.woff') format('woff'),
url('opensans-semibolditalic-webfont.ttf') format('truetype'),
url('opensans-semibolditalic-webfont.svg#open_sanssemibold_italic') format('svg');
src: url('./opensans-semibolditalic-webfont.eot');
src: url('./opensans-semibolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-semibolditalic-webfont.woff2') format('woff2'),
url('./opensans-semibolditalic-webfont.woff') format('woff'),
url('./opensans-semibolditalic-webfont.ttf') format('truetype'),
url('./opensans-semibolditalic-webfont.svg#open_sanssemibold_italic') format('svg');
font-weight: 600;
font-style: italic;
}
@@ -27,12 +27,12 @@
@font-face {
/*font-family: 'open_sansitalic';*/
font-family: 'Open Sans';
src: url('opensans-italic-webfont.eot');
src: url('opensans-italic-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-italic-webfont.woff2') format('woff2'),
url('opensans-italic-webfont.woff') format('woff'),
url('opensans-italic-webfont.ttf') format('truetype'),
url('opensans-italic-webfont.svg#open_sansitalic') format('svg');
src: url('./opensans-italic-webfont.eot');
src: url('./opensans-italic-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-italic-webfont.woff2') format('woff2'),
url('./opensans-italic-webfont.woff') format('woff'),
url('./opensans-italic-webfont.ttf') format('truetype'),
url('./opensans-italic-webfont.svg#open_sansitalic') format('svg');
font-weight: normal;
font-style: italic;
}
@@ -40,12 +40,12 @@
@font-face {
/*font-family: 'open_sanslight';*/
font-family: 'Open Sans';
src: url('opensans-light-webfont.eot');
src: url('opensans-light-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-light-webfont.woff2') format('woff2'),
url('opensans-light-webfont.woff') format('woff'),
url('opensans-light-webfont.ttf') format('truetype'),
url('opensans-light-webfont.svg#open_sanslight') format('svg');
src: url('./opensans-light-webfont.eot');
src: url('./opensans-light-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-light-webfont.woff2') format('woff2'),
url('./opensans-light-webfont.woff') format('woff'),
url('./opensans-light-webfont.ttf') format('truetype'),
url('./opensans-light-webfont.svg#open_sanslight') format('svg');
font-weight: 300;
font-style: normal;
}
@@ -53,12 +53,12 @@
@font-face {
/*font-family: 'open_sanslight_italic';*/
font-family: 'Open Sans';
src: url('opensans-lightitalic-webfont.eot');
src: url('opensans-lightitalic-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-lightitalic-webfont.woff2') format('woff2'),
url('opensans-lightitalic-webfont.woff') format('woff'),
url('opensans-lightitalic-webfont.ttf') format('truetype'),
url('opensans-lightitalic-webfont.svg#open_sanslight_italic') format('svg');
src: url('./opensans-lightitalic-webfont.eot');
src: url('./opensans-lightitalic-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-lightitalic-webfont.woff2') format('woff2'),
url('./opensans-lightitalic-webfont.woff') format('woff'),
url('./opensans-lightitalic-webfont.ttf') format('truetype'),
url('./opensans-lightitalic-webfont.svg#open_sanslight_italic') format('svg');
font-weight: 300;
font-style: italic;
}
@@ -66,12 +66,12 @@
@font-face {
/*font-family: 'open_sansregular';*/
font-family: 'Open Sans';
src: url('opensans-regular-webfont.eot');
src: url('opensans-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-regular-webfont.woff2') format('woff2'),
url('opensans-regular-webfont.woff') format('woff'),
url('opensans-regular-webfont.ttf') format('truetype'),
url('opensans-regular-webfont.svg#open_sansregular') format('svg');
src: url('./opensans-regular-webfont.eot');
src: url('./opensans-regular-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-regular-webfont.woff2') format('woff2'),
url('./opensans-regular-webfont.woff') format('woff'),
url('./opensans-regular-webfont.ttf') format('truetype'),
url('./opensans-regular-webfont.svg#open_sansregular') format('svg');
font-weight: normal;
font-style: normal;
}
@@ -79,12 +79,12 @@
@font-face {
/*font-family: 'open_sansbold';*/
font-family: 'Open Sans';
src: url('opensans-bold-webfont.eot');
src: url('opensans-bold-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-bold-webfont.woff2') format('woff2'),
url('opensans-bold-webfont.woff') format('woff'),
url('opensans-bold-webfont.ttf') format('truetype'),
url('opensans-bold-webfont.svg#open_sansbold') format('svg');
src: url('./opensans-bold-webfont.eot');
src: url('./opensans-bold-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-bold-webfont.woff2') format('woff2'),
url('./opensans-bold-webfont.woff') format('woff'),
url('./opensans-bold-webfont.ttf') format('truetype'),
url('./opensans-bold-webfont.svg#open_sansbold') format('svg');
font-weight: bold;
font-style: normal;
}
@@ -92,12 +92,12 @@
@font-face {
/*font-family: 'open_sansbold_italic';*/
font-family: 'Open Sans';
src: url('opensans-bolditalic-webfont.eot');
src: url('opensans-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-bolditalic-webfont.woff2') format('woff2'),
url('opensans-bolditalic-webfont.woff') format('woff'),
url('opensans-bolditalic-webfont.ttf') format('truetype'),
url('opensans-bolditalic-webfont.svg#open_sansbold_italic') format('svg');
src: url('./opensans-bolditalic-webfont.eot');
src: url('./opensans-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-bolditalic-webfont.woff2') format('woff2'),
url('./opensans-bolditalic-webfont.woff') format('woff'),
url('./opensans-bolditalic-webfont.ttf') format('truetype'),
url('./opensans-bolditalic-webfont.svg#open_sansbold_italic') format('svg');
font-weight: bold;
font-style: italic;
@@ -106,12 +106,12 @@
@font-face {
/*font-family: 'open_sansextrabold';*/
font-family: 'Open Sans';
src: url('opensans-extrabold-webfont.eot');
src: url('opensans-extrabold-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-extrabold-webfont.woff2') format('woff2'),
url('opensans-extrabold-webfont.woff') format('woff'),
url('opensans-extrabold-webfont.ttf') format('truetype'),
url('opensans-extrabold-webfont.svg#open_sansextrabold') format('svg');
src: url('./opensans-extrabold-webfont.eot');
src: url('./opensans-extrabold-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-extrabold-webfont.woff2') format('woff2'),
url('./opensans-extrabold-webfont.woff') format('woff'),
url('./opensans-extrabold-webfont.ttf') format('truetype'),
url('./opensans-extrabold-webfont.svg#open_sansextrabold') format('svg');
font-weight: 800;
font-style: normal;
}
@@ -119,12 +119,12 @@
@font-face {
/*font-family: 'open_sansextrabold_italic';*/
font-family: 'Open Sans';
src: url('opensans-extrabolditalic-webfont.eot');
src: url('opensans-extrabolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('opensans-extrabolditalic-webfont.woff2') format('woff2'),
url('opensans-extrabolditalic-webfont.woff') format('woff'),
url('opensans-extrabolditalic-webfont.ttf') format('truetype'),
url('opensans-extrabolditalic-webfont.svg#open_sansextrabold_italic') format('svg');
src: url('./opensans-extrabolditalic-webfont.eot');
src: url('./opensans-extrabolditalic-webfont.eot?#iefix') format('embedded-opentype'),
url('./opensans-extrabolditalic-webfont.woff2') format('woff2'),
url('./opensans-extrabolditalic-webfont.woff') format('woff'),
url('./opensans-extrabolditalic-webfont.ttf') format('truetype'),
url('./opensans-extrabolditalic-webfont.svg#open_sansextrabold_italic') format('svg');
font-weight: 800;
font-style: italic;
}
}

View File

@@ -4,44 +4,49 @@
*/
/// import jQuery
const $ = require("jquery");
global.$ = global.jQuery = $;
import $ from "jquery";
// expose jQuery globally for plugins expecting it
window.$ = window.jQuery = $;
/// import select2
const select2 = require("select2");
global.select2 = select2;
/// import select2 (relies on global jQuery)
import "select2/dist/js/select2.full";
window.select2 = window.select2 || window.$?.fn?.select2;
require("select2/dist/css/select2.css");
require("select2-bootstrap-theme/dist/select2-bootstrap.css");
import "select2/dist/css/select2.css";
import "select2-bootstrap-theme/dist/select2-bootstrap.css";
// Global vendor styles
import "vue-multiselect/dist/vue-multiselect.css";
import "vis-network/dist/dist/vis-network.min.css";
/*
* Load Chill themes assets
*/
require("./chillmain.scss");
import "./chillmain.scss";
import { chill } from "./js/chill.js";
global.chill = chill;
// expose chill helper globally for legacy inline scripts
window.chill = chill;
require("./js/date");
require("./js/counter.js");
import "./js/date";
import "./js/counter.js";
/// Load fonts
require("./fonts/OpenSans/OpenSans.scss");
import "./fonts/OpenSans/OpenSans.scss";
/// Load images
require("./img/favicon.ico");
require("./img/logo-chill-sans-slogan_white.png");
require("./img/logo-chill-outil-accompagnement_white.png");
import "./img/favicon.ico";
import "./img/logo-chill-sans-slogan_white.png";
import "./img/logo-chill-outil-accompagnement_white.png";
/*
* Load local libs
* Some libs are only used in a few pages, they are loaded on a case by case basis
*/
require("../lib/breadcrumb/index.js");
require("../lib/download-report/index.js");
require("../lib/select_interactive_loading/index.js");
import "../lib/breadcrumb/index.js";
import "../lib/download-report/index.js";
import "../lib/select_interactive_loading/index.js";
//require('../lib/show_hide/index.js');
//require('../lib/tabs/index.js');

View File

@@ -1 +1 @@
require("./layout.scss");
import "./layout.scss";

View File

@@ -14,5 +14,8 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import { download_report } from "./download-report.js";
chill.download_report = require("./download-report.js");
// Ensure global namespace exists, then expose for legacy usage
window.chill = window.chill || {};
window.chill.download_report = download_report;

View File

@@ -1,2 +1,2 @@
require("./tabs.js");
require("./tabs.scss");
import "./tabs.js";
import "./tabs.scss";

View File

@@ -1,4 +1,4 @@
require("./blur.scss");
import "./blur.scss";
document.querySelectorAll(".confidential").forEach(function (el) {
let i = document.createElement("i");

View File

@@ -1,8 +1,8 @@
// Compile all bootstrap assets from nodes-modules
//require('bootstrap/scss/bootstrap.scss')
// Or compile bootstrap only enabled assets
require("./bootstrap.scss");
// Or compile bootstrap only enabled assets (use ESM import so Vite processes CSS in dev)
import "./bootstrap.scss";
// You can specify which plugins you need
import Dropdown from "bootstrap/js/src/dropdown";

Some files were not shown because too many files have changed in this diff Show More