mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-11-03 10:48:25 +00:00
Merge branch 'prepare-junie' into 'master'
Clean skeleton (and add Junie guidelines) See merge request Chill-Projet/chill-bundles!830
This commit is contained in:
312
.junie/guidelines.md
Normal file
312
.junie/guidelines.md
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
# Project Guidelines for Junie
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
Chill is a comprehensive web application built as a set of Symfony bundles. It is a case management system, for social work. The project consists of multiple specialized bundles that provide different functionalities:
|
||||||
|
|
||||||
|
- **ChillMainBundle**: Core bundles that provide the foundation of the application
|
||||||
|
- **ChillPersonBundle**: Core bundles that provide the foundation of the bundles associated to person (which is the case for all other bundles)
|
||||||
|
- **ChillCalendarBundle**: Calendar and scheduling functionality
|
||||||
|
- **ChillDocStoreBundle** and **ChillDocGeneratorBundle**: Document management and generation
|
||||||
|
- **ChillActivityBundle**, **ChillEventBundle**, **ChillTaskBundle**: Activity and task tracking
|
||||||
|
- **ChillBudgetBundle**: Financial management
|
||||||
|
- **ChillThirdPartyBundle**: Integration with external systems
|
||||||
|
- **ChillCustomFieldsBundle**: Extensibility through custom fields
|
||||||
|
- **ChillReportBundle**: Save arbitrary reports about persons
|
||||||
|
- **ChillTicketBundle**: Record and track issues about persons
|
||||||
|
|
||||||
|
- And several other specialized bundles
|
||||||
|
|
||||||
|
## Technology Stack
|
||||||
|
|
||||||
|
- **Backend**: PHP 8.3+, Symfony 5.4
|
||||||
|
- **Frontend**: JavaScript/TypeScript, Vue.js 3, Bootstrap 5
|
||||||
|
- **Build Tools**: Webpack Encore, Yarn
|
||||||
|
- **Database**: PostgreSQL with materialized views
|
||||||
|
- **Other Services**: Redis, AMQP (RabbitMQ), SMTP
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
Note: This is a project which exists from a long time ago, and we found multiple structure inside each bundle. When having the choice, the developers should choose the new structure.
|
||||||
|
|
||||||
|
The project follows a standard Symfony bundle structure:
|
||||||
|
- `/src/Bundle/`: Contains all the Chill bundles. The code is either at the root of the bundle directory, or within a `src/` directory (preferred). See psr4 mapping at the root's `composer.json`.
|
||||||
|
- each bundle come with his own tests, either in the `Tests` directory (when the code is directly within the bundle directory (for instance `src/Bundle/ChillMainBundle/Tests`, `src/Bundle/ChillPersonBundle/Tests`)), or inside the `tests` directory, alongside to the `src/` sub-directory (example: `src/Bundle/ChillWopiBundle/tests`) (this is the preferred way).
|
||||||
|
- `/docs/`: Contains project documentation
|
||||||
|
|
||||||
|
Each bundle typically has the following structure:
|
||||||
|
|
||||||
|
- `Controller/`: Contains controllers
|
||||||
|
- `Entity/`: Contains Doctrine entities
|
||||||
|
- `Repository/`: Contains Doctrine repositories
|
||||||
|
- `Resources/`: Contains views, translations, and public assets
|
||||||
|
- `DependencyInjection/`: Contains service configuration
|
||||||
|
- `Export/`: Contains services related to exports
|
||||||
|
- `Security/`: Contains services related to security. Most of the time, those are new voters, and so on.
|
||||||
|
|
||||||
|
### A special word about TicketBundle
|
||||||
|
|
||||||
|
The ticket bundle is developed using a kind of "Command" pattern. The controller fill a "Command", and a "CommandHandler" handle this command. They are savec in the `src/Bundle/ChillTicketBundle/src/Action` directory.
|
||||||
|
|
||||||
|
## Development Guidelines
|
||||||
|
|
||||||
|
### Building and Configuration Instructions
|
||||||
|
|
||||||
|
All the command should be run through the `symfony` command, which will configure the required variables.
|
||||||
|
|
||||||
|
For assets, we must ensure that we use node at version `^20.0.0`. This is done using `nvm use 20`.
|
||||||
|
|
||||||
|
#### Initial Setup
|
||||||
|
|
||||||
|
1. **Clone the Repository**:
|
||||||
|
```bash
|
||||||
|
git clone <repository-url>
|
||||||
|
cd chill-bundles
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Install PHP Dependencies**:
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Install JavaScript Dependencies**:
|
||||||
|
```bash
|
||||||
|
nvm use 20
|
||||||
|
yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Configure Environment Variables**:
|
||||||
|
|
||||||
|
- Create a `.env.local` file with minimal configuration
|
||||||
|
```bash
|
||||||
|
echo "APP_ENV=dev" >> .env.local
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Start the associated services (database, and so on):
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Set Up the Database**:
|
||||||
|
```bash
|
||||||
|
# Create the database
|
||||||
|
symfony console doctrine:database:create
|
||||||
|
|
||||||
|
# Run migrations
|
||||||
|
symfony console doctrine:migrations:migrate
|
||||||
|
|
||||||
|
# Load fixtures (optional)
|
||||||
|
symfony console doctrine:fixtures:load
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Build Assets**:
|
||||||
|
```bash
|
||||||
|
nvm use 20
|
||||||
|
yarn run encore dev
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Start the Development Server**:
|
||||||
|
```bash
|
||||||
|
symfony server:start -d
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Docker Setup
|
||||||
|
|
||||||
|
The project includes Docker configuration for easier development:
|
||||||
|
|
||||||
|
1. **Start Docker Services**:
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Access the Application**:
|
||||||
|
- The application will be available at `http://localhost:8000`
|
||||||
|
- PostgreSQL will be available at `localhost:5432`
|
||||||
|
- Redis will be available at `localhost:6379`
|
||||||
|
|
||||||
|
#### Building Assets
|
||||||
|
|
||||||
|
Before submitting any changes, you should build the project to ensure that all assets are properly compiled:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# For production
|
||||||
|
yarn run encore production
|
||||||
|
|
||||||
|
# For development with hot-reloading
|
||||||
|
yarn run encore dev --watch
|
||||||
|
|
||||||
|
# for development
|
||||||
|
yarn run encore dev
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Configuration Files
|
||||||
|
|
||||||
|
Key configuration files:
|
||||||
|
|
||||||
|
- `config/packages/*.yaml`: Symfony bundle configurations
|
||||||
|
- `webpack.config.js`: Webpack Encore configuration
|
||||||
|
- `composer.json`: PHP dependencies and scripts
|
||||||
|
- `package.json`: JavaScript dependencies and scripts
|
||||||
|
- `.env`: Default environment variables. Must usually not be updated: use `.env.local` instead.
|
||||||
|
|
||||||
|
### Testing Information
|
||||||
|
|
||||||
|
The project uses PHPUnit for testing. Each bundle has its own test suite, and there's also a global test suite at the root level.
|
||||||
|
|
||||||
|
For creating mock, we prefer using prophecy (library phpspec/prophecy).
|
||||||
|
|
||||||
|
#### Running Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
vendor/bin/phpunit
|
||||||
|
|
||||||
|
# Run tests for a specific bundle
|
||||||
|
vendor/bin/phpunit --testsuite NameBundle
|
||||||
|
|
||||||
|
# Run a specific test file
|
||||||
|
vendor/bin/phpunit path/to/TestFile.php
|
||||||
|
|
||||||
|
# Run a specific test method
|
||||||
|
vendor/bin/phpunit --filter methodName path/to/TestFile.php
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Test Structure
|
||||||
|
|
||||||
|
Tests are organized by bundle and follow the same structure as the bundle itself:
|
||||||
|
|
||||||
|
- Unit tests: Test individual components in isolation
|
||||||
|
- Integration tests: Test components working together
|
||||||
|
- Functional tests: Test the application from the user's perspective
|
||||||
|
|
||||||
|
#### Writing Tests
|
||||||
|
|
||||||
|
Tests should be placed in the appropriate bundle's test directory. For example, tests for the TicketBundle should be placed in `src/Bundle/ChillTicketBundle/tests/`.
|
||||||
|
|
||||||
|
Here's an example of a simple entity test:
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Chill\TicketBundle\Tests\Entity;
|
||||||
|
|
||||||
|
use Chill\TicketBundle\Entity\Ticket;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
class TicketTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testGetAndSetExternalRef(): void
|
||||||
|
{
|
||||||
|
$ticket = new Ticket();
|
||||||
|
$externalRef = 'REF-123';
|
||||||
|
|
||||||
|
// Set the external reference
|
||||||
|
$ticket->setExternalRef($externalRef);
|
||||||
|
|
||||||
|
// Verify that getExternalRef returns the correct value
|
||||||
|
self::assertSame($externalRef, $ticket->getExternalRef());
|
||||||
|
|
||||||
|
// Change the external reference
|
||||||
|
$newExternalRef = 'REF-456';
|
||||||
|
$ticket->setExternalRef($newExternalRef);
|
||||||
|
|
||||||
|
// Verify that getExternalRef returns the updated value
|
||||||
|
self::assertSame($newExternalRef, $ticket->getExternalRef());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Test Database
|
||||||
|
|
||||||
|
For tests that require a database, the project uses an in-memory SQLite database by default. You can configure a different database for testing in the `.env.test` file.
|
||||||
|
|
||||||
|
### Code Quality Tools
|
||||||
|
|
||||||
|
The project uses several tools to maintain code quality:
|
||||||
|
|
||||||
|
#### PHP Code Style
|
||||||
|
|
||||||
|
The project uses PHP-CS-Fixer for code style. You can run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using the composer script
|
||||||
|
composer php-cs-fixer
|
||||||
|
|
||||||
|
# Or directly
|
||||||
|
php-cs-fixer fix --config=./.php-cs-fixer.dist.php
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Static Analysis
|
||||||
|
|
||||||
|
The project uses PHPStan for static analysis. You can run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using the composer script
|
||||||
|
composer phpstan
|
||||||
|
|
||||||
|
# Or directly
|
||||||
|
vendor/bin/phpstan analyse
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Automated Refactoring
|
||||||
|
|
||||||
|
The project uses Rector for automated refactoring. You can run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using the composer script
|
||||||
|
composer rector
|
||||||
|
|
||||||
|
# Or directly
|
||||||
|
vendor/bin/rector
|
||||||
|
```
|
||||||
|
|
||||||
|
#### JavaScript/TypeScript Linting
|
||||||
|
|
||||||
|
The project uses ESLint for JavaScript/TypeScript code quality. You can run it with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn run eslint
|
||||||
|
```
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
The project can be deployed in a production environment following Symfony's deployment guidelines. The documentation provides detailed instructions for setting up a production environment.
|
||||||
|
|
||||||
|
### Production Deployment Checklist
|
||||||
|
|
||||||
|
1. Set environment variables for production
|
||||||
|
2. Optimize Composer autoloader: `composer install --no-dev --optimize-autoloader`
|
||||||
|
3. Compile assets for production: `yarn run encore production`
|
||||||
|
4. Clear and warm up the cache: `php bin/console cache:clear --env=prod`
|
||||||
|
5. Run database migrations: `php bin/console doctrine:migrations:migrate --env=prod`
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
Comprehensive documentation is available in the `/docs/` directory, including installation instructions, configuration guides, and operational procedures.
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
1. **Create a Feature Branch**: Always create a new branch for your feature or bugfix
|
||||||
|
2. **Write Tests**: Write tests for your changes before implementing them
|
||||||
|
3. **Implement Changes**: Implement your changes following the project's coding standards
|
||||||
|
4. **Run Tests**: Make sure all tests pass
|
||||||
|
5. **Run Code Quality Tools**: Make sure your code passes all code quality checks
|
||||||
|
6. **Submit a Pull Request**: Submit a pull request for review
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
The project includes several tools for debugging:
|
||||||
|
|
||||||
|
- **Symfony Profiler**: Available in development mode at `/_profiler`
|
||||||
|
- **Xdebug**: Configure your IDE to use Xdebug for step-by-step debugging
|
||||||
|
- **Symfony Debug Toolbar**: Available at the bottom of the page in development mode
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
When working with this project, Junie should:
|
||||||
|
|
||||||
|
1. Understand the modular bundle structure and how the different components interact
|
||||||
|
2. Build the project before submitting changes to ensure assets are properly compiled
|
||||||
|
3. Run relevant tests to ensure changes don't break existing functionality
|
||||||
|
4. Follow the established code style and patterns
|
||||||
|
5. Use the provided tools for debugging and code quality
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$records of method League\\\\Csv\\\\Writer\\:\\:insertAll\\(\\) expects iterable\\<array\\<float\\|int\\|string\\|Stringable\\|null\\>\\>, iterable\\<array\\<string, bool\\|int\\|string\\>\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant ASC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Ascending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Entity/Workflow/EntityWorkflow.php
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
# See https://github.com/doctrine/orm/issues/11313 for a follow-up
|
|
||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant ASC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Ascending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomFieldsGroup.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant ASC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Ascending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Entity/Notification.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant DESC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Descending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWork.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant DESC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Descending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod/AccompanyingPeriodWorkEvaluation.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant DESC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Descending instead$#
|
|
||||||
"""
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Household/Household.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant DESC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Descending instead$#
|
|
||||||
"""
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Person.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Fetching deprecated class constant DESC of class Doctrine\\\\Common\\\\Collections\\\\Criteria\\:
|
|
||||||
use Order\\:\\:Descending instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
|
|
||||||
@@ -1,301 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\ActivityBundle\\\\Entity\\\\Activity\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\MainBundle\\\\Entity\\\\Scope\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\PersonBundle\\\\Entity\\\\Person\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, DateTime\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\ActivityBundle\\\\Entity\\\\ActivityReasonCategory\\|null given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityReasonCategoryController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\ActivityBundle\\\\Entity\\\\ActivityReason\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityReasonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method DateTime\\:\\:setTimezone\\(\\) with incorrect case\\: setTimeZone$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Form/ActivityType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in &&, Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\|null given on the right side\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillActivityBundle/Form/ActivityType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, Chill\\\\AsideActivityBundle\\\\Entity\\\\AsideActivityCategory\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillAsideActivityBundle/src/Entity/AsideActivityCategory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method DateTimeImmutable\\:\\:setTimezone\\(\\) with incorrect case\\: setTimeZone$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillAsideActivityBundle/src/Form/AsideActivityFormType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\MainBundle\\\\Entity\\\\Location\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Controller/CalendarController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, Symfony\\\\Component\\\\Validator\\\\ConstraintViolationListInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Command/CreateFieldsOnGroupCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomFieldsGroup\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomField\\|null given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomFieldsGroup given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomFieldsGroup\\|null given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldsGroupController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldLongChoice.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Form/DataTransformer/CustomFieldsGroupToIdTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getFirstName\\(\\) with incorrect case\\: getFirstname$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getLastName\\(\\) with incorrect case\\: getLastname$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getMobilenumber\\(\\) with incorrect case\\: getMobileNumber$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getPhonenumber\\(\\) with incorrect case\\: getPhoneNumber$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\Event given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\Event\\|null given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, int given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only numeric types are allowed in pre\\-increment, string given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\EventType\\|null given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventTypeController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\Participation\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/ParticipationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\Role\\|null given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/RoleController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\EventBundle\\\\Entity\\\\Status\\|null given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/StatusController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\Language\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadAndUpdateLanguagesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, Chill\\\\MainBundle\\\\Entity\\\\Language\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadAndUpdateLanguagesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, int given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadPostalCodesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\Center\\|null given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/CenterController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Redis\\:\\:setex\\(\\) with incorrect case\\: setEx$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\PermissionsGroup\\|null given\\.$#"
|
|
||||||
count: 5
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PermissionsGroupController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\RoleScope\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PermissionsGroupController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\Scope\\|null given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ScopeController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\GroupCenter\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\MainBundle\\\\Entity\\\\User\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, int given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadPostalCodes.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only numeric types are allowed in pre\\-increment, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadsheetListFormatter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, int given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataTransformer/IdToEntityDataTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, string\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/PickUserLocationType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, int\\<0, max\\> given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillMainBundle/Search/SearchApiQuery.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\MainBundle\\\\Entity\\\\Address\\:\\:getPostcode\\(\\) with incorrect case\\: getPostCode$#"
|
|
||||||
count: 6
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\ClassDiscriminatorMapping\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Person.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriodParticipation\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Person.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getFirstName\\(\\) with incorrect case\\: getFirstname$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/Type/PickPersonType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getLastName\\(\\) with incorrect case\\: getLastname$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/Type/PickPersonType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, int\\<0, max\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Search/SimilarPersonMatcher.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in &&, null given on the left side\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, Chill\\\\PersonBundle\\\\Entity\\\\Household\\\\Household\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, array\\<Chill\\\\PersonBundle\\\\Entity\\\\Person\\\\ResidentialAddress\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getDeathdate\\(\\) with incorrect case\\: getDeathDate$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Templating/Entity/PersonRender.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\PersonBundle\\\\Entity\\\\Person\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, Chill\\\\ReportBundle\\\\Entity\\\\Report given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Call to method Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\:\\:setFirstname\\(\\) with incorrect case\\: setFirstName$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/EventListener/ThirdPartyEventListener.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Dynamic call to static method Chill\\\\ThirdPartyBundle\\\\ThirdPartyType\\\\ThirdPartyTypeProviderInterface\\:\\:getKey\\(\\)\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/ThirdPartyType/ThirdPartyTypeManager.php
|
|
||||||
@@ -1,804 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\<Chill\\\\ActivityBundle\\\\Entity\\\\Activity\\>\\) of method Chill\\\\ActivityBundle\\\\Repository\\\\ActivityACLAwareRepository\\:\\:findByPerson\\(\\) should be covariant with return type \\(array\\<Chill\\\\ActivityBundle\\\\Repository\\\\Activity\\>\\) of method Chill\\\\ActivityBundle\\\\Repository\\\\ActivityACLAwareRepositoryInterface\\:\\:findByPerson\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Repository/ActivityACLAwareRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\<Chill\\\\ActivityBundle\\\\Entity\\\\ActivityReason\\>\\) of method Chill\\\\ActivityBundle\\\\Repository\\\\ActivityReasonRepository\\:\\:findAll\\(\\) should be covariant with return type \\(array\\<int, object\\>\\) of method Doctrine\\\\ORM\\\\EntityRepository\\<object\\>\\:\\:findAll\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Repository/ActivityReasonRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\<array\\<string\\>\\>\\) of method Chill\\\\AsideActivityBundle\\\\Security\\\\AsideActivityVoter\\:\\:getRolesWithHierarchy\\(\\) should be covariant with return type \\(array\\<string, array\\<int, string\\>\\>\\) of method Chill\\\\MainBundle\\\\Security\\\\ProvideRoleHierarchyInterface\\:\\:getRolesWithHierarchy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillAsideActivityBundle/src/Security/AsideActivityVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$criteria \\(array\\<string, mixed\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$criteria \\(array\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepositoryInterface\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarDocRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$criteria \\(array\\<string, mixed\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepository\\:\\:findOneBy\\(\\) should be contravariant with parameter \\$criteria \\(array\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepositoryInterface\\:\\:findOneBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarDocRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$orderBy \\(array\\<string, 'ASC'\\|'asc'\\|'DESC'\\|'desc'\\>\\|null\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$orderBy \\(array\\|null\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepositoryInterface\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarDocRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\<object\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepository\\:\\:findAll\\(\\) should be covariant with return type \\(array\\<Chill\\\\CalendarBundle\\\\Entity\\\\CalendarDoc\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepositoryInterface\\:\\:findAll\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarDocRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\<object\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepository\\:\\:findBy\\(\\) should be covariant with return type \\(array\\<Chill\\\\CalendarBundle\\\\Entity\\\\CalendarDoc\\>\\) of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarDocRepositoryInterface\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarDocRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\CalendarBundle\\\\Entity\\\\CalendarDoc\\) of method Chill\\\\CalendarBundle\\\\Security\\\\Voter\\\\CalendarDocVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Security/Voter/CalendarDocVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\CalendarBundle\\\\Entity\\\\Invite\\) of method Chill\\\\CalendarBundle\\\\Security\\\\Voter\\\\InviteVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Security/Voter/InviteVoter.php
|
|
||||||
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(int\\|void\\|null\\) of method Chill\\\\CustomFieldsBundle\\\\Command\\\\CreateFieldsOnGroupCommand\\:\\:execute\\(\\) should be covariant with return type \\(int\\) of method Symfony\\\\Component\\\\Console\\\\Command\\\\Command\\:\\:execute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Command/CreateFieldsOnGroupCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$customFieldsGroup \\(Chill\\\\CustomFieldsBundle\\\\Entity\\\\CustomFieldsGroup\\|null\\) of method Chill\\\\CustomFieldsBundle\\\\Form\\\\DataTransformer\\\\CustomFieldsGroupToIdTransformer\\:\\:transform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:transform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Form/DataTransformer/CustomFieldsGroupToIdTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$id \\(string\\) of method Chill\\\\CustomFieldsBundle\\\\Form\\\\DataTransformer\\\\CustomFieldsGroupToIdTransformer\\:\\:reverseTransform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:reverseTransform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Form/DataTransformer/CustomFieldsGroupToIdTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$query \\(Doctrine\\\\ORM\\\\QueryBuilder\\) of method Chill\\\\DocGeneratorBundle\\\\Controller\\\\AdminDocGeneratorTemplateController\\:\\:orderQuery\\(\\) should be contravariant with parameter \\$query \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:orderQuery\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Controller/AdminDocGeneratorTemplateController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Doctrine\\\\Common\\\\Collections\\\\Collection\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\CollectionDocGenNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/CollectionDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\CollectionDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/CollectionDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\CollectionDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/CollectionDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\|ArrayObject\\|bool\\|float\\|int\\|string\\|void\\|null\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\CollectionDocGenNormalizer\\:\\:normalize\\(\\) should be covariant with return type \\(array\\|ArrayObject\\|bool\\|float\\|int\\|string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/CollectionDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(Chill\\\\MainBundle\\\\Entity\\\\Scope\\|null\\) of method Chill\\\\DocStoreBundle\\\\Entity\\\\PersonDocument\\:\\:getScope\\(\\) should be covariant with return type \\(Chill\\\\MainBundle\\\\Entity\\\\Scope\\) of method Chill\\\\MainBundle\\\\Entity\\\\HasScopeInterface\\:\\:getScope\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Entity/PersonDocument.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\DocStoreBundle\\\\Entity\\\\PersonDocument\\) of method Chill\\\\DocStoreBundle\\\\Security\\\\Authorization\\\\PersonDocumentVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Security/Authorization/PersonDocumentVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\DocStoreBundle\\\\Serializer\\\\Normalizer\\\\StoredObjectDenormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Serializer/Normalizer/StoredObjectDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\DocStoreBundle\\\\Serializer\\\\Normalizer\\\\StoredObjectDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Serializer/Normalizer/StoredObjectDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\DocStoreBundle\\\\Entity\\\\AccompanyingCourseDocument\\) of method Chill\\\\DocStoreBundle\\\\Workflow\\\\AccompanyingCourseDocumentWorkflowHandler\\:\\:getRelatedObjects\\(\\) should be contravariant with parameter \\$object \\(object\\) of method Chill\\\\MainBundle\\\\Workflow\\\\EntityWorkflowHandlerInterface\\:\\:getRelatedObjects\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Workflow/AccompanyingCourseDocumentWorkflowHandler.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(null\\) of method Chill\\\\EventBundle\\\\Form\\\\ChoiceLoader\\\\EventChoiceLoader\\:\\:loadChoiceList\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoiceList\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\EventBundle\\\\Form\\\\ChoiceLoader\\\\EventChoiceLoader\\:\\:loadChoicesForValues\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoicesForValues\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\EventBundle\\\\Form\\\\ChoiceLoader\\\\EventChoiceLoader\\:\\:loadValuesForChoices\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadValuesForChoices\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\EventBundle\\\\Entity\\\\Event\\) of method Chill\\\\EventBundle\\\\Security\\\\Authorization\\\\EventVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Security/Authorization/EventVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\EventBundle\\\\Entity\\\\Participation\\) of method Chill\\\\EventBundle\\\\Security\\\\Authorization\\\\ParticipationVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Security/Authorization/ParticipationVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entity \\(Chill\\\\EventBundle\\\\Entity\\\\Event\\) of method Chill\\\\EventBundle\\\\Timeline\\\\TimelineEventProvider\\:\\:getEntityTemplate\\(\\) should be contravariant with parameter \\$entity \\(Chill\\\\MainBundle\\\\Timeline\\\\type\\) of method Chill\\\\MainBundle\\\\Timeline\\\\TimelineProviderInterface\\:\\:getEntityTemplate\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Timeline/TimelineEventProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$type \\(null\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Routing\\\\CRUDRoutesLoader\\:\\:supports\\(\\) should be contravariant with parameter \\$type \\(string\\|null\\) of method Symfony\\\\Component\\\\Config\\\\Loader\\\\LoaderInterface\\:\\:supports\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$query \\(Doctrine\\\\ORM\\\\QueryBuilder\\) of method Chill\\\\MainBundle\\\\Controller\\\\LocationApiController\\:\\:orderQuery\\(\\) should be contravariant with parameter \\$query \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\AbstractCRUDController\\:\\:orderQuery\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/LocationApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$query \\(Doctrine\\\\ORM\\\\QueryBuilder\\) of method Chill\\\\MainBundle\\\\Controller\\\\UserApiController\\:\\:customizeQuery\\(\\) should be contravariant with parameter \\$query \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\AbstractCRUDController\\:\\:customizeQuery\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(object\\|null\\) of method Chill\\\\MainBundle\\\\DependencyInjection\\\\ChillMainExtension\\:\\:getConfiguration\\(\\) should be covariant with return type \\(Symfony\\\\Component\\\\Config\\\\Definition\\\\ConfigurationInterface\\|null\\) of method Symfony\\\\Component\\\\DependencyInjection\\\\Extension\\\\ConfigurationExtensionInterface\\:\\:getConfiguration\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(object\\|null\\) of method Chill\\\\MainBundle\\\\DependencyInjection\\\\ChillMainExtension\\:\\:getConfiguration\\(\\) should be covariant with return type \\(Symfony\\\\Component\\\\Config\\\\Definition\\\\ConfigurationInterface\\|null\\) of method Symfony\\\\Component\\\\DependencyInjection\\\\Extension\\\\Extension\\:\\:getConfiguration\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/ChillMainExtension.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(null\\) of method Chill\\\\MainBundle\\\\Form\\\\ChoiceLoader\\\\PostalCodeChoiceLoader\\:\\:loadChoiceList\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoiceList\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\MainBundle\\\\Form\\\\ChoiceLoader\\\\PostalCodeChoiceLoader\\:\\:loadChoicesForValues\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoicesForValues\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\MainBundle\\\\Form\\\\ChoiceLoader\\\\PostalCodeChoiceLoader\\:\\:loadValuesForChoices\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadValuesForChoices\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$address \\(Chill\\\\MainBundle\\\\Entity\\\\Address\\) of method Chill\\\\MainBundle\\\\Form\\\\DataMapper\\\\AddressDataMapper\\:\\:mapDataToForms\\(\\) should be contravariant with parameter \\$viewData \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataMapperInterface\\:\\:mapDataToForms\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/AddressDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$forms \\(Iterator\\) of method Chill\\\\MainBundle\\\\Form\\\\DataMapper\\\\AddressDataMapper\\:\\:mapFormsToData\\(\\) should be contravariant with parameter \\$forms \\(iterable\\<Symfony\\\\Component\\\\Form\\\\FormInterface\\>&Traversable\\) of method Symfony\\\\Component\\\\Form\\\\DataMapperInterface\\:\\:mapFormsToData\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/AddressDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$address \\(Chill\\\\MainBundle\\\\Entity\\\\Address\\) of method Chill\\\\MainBundle\\\\Form\\\\DataMapper\\\\AddressDataMapper\\:\\:mapFormsToData\\(\\) should be contravariant with parameter \\$viewData \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataMapperInterface\\:\\:mapFormsToData\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/AddressDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$forms \\(Iterator\\) of method Chill\\\\MainBundle\\\\Form\\\\DataMapper\\\\AddressDataMapper\\:\\:mapDataToForms\\(\\) should be contravariant with parameter \\$forms \\(iterable\\<Symfony\\\\Component\\\\Form\\\\FormInterface\\>&Traversable\\) of method Symfony\\\\Component\\\\Form\\\\DataMapperInterface\\:\\:mapDataToForms\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/AddressDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(string\\) of method Chill\\\\MainBundle\\\\Form\\\\DataTransformer\\\\IdToEntityDataTransformer\\:\\:reverseTransform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:reverseTransform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataTransformer/IdToEntityDataTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(array\\<Chill\\\\MainBundle\\\\Entity\\\\User\\>\\|Chill\\\\MainBundle\\\\Entity\\\\User\\) of method Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\EntityToJsonTransformer\\:\\:transform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:transform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/EntityToJsonTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$array \\(array\\) of method Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\MultipleObjectsToIdTransformer\\:\\:transform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:transform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/MultipleObjectsToIdTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$id \\(string\\) of method Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\ObjectToIdTransformer\\:\\:reverseTransform\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataTransformerInterface\\:\\:reverseTransform\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/ObjectToIdTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\) of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\EntityWorkflowVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/EntityWorkflowVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entity \\(Chill\\\\MainBundle\\\\Entity\\\\HasCenterInterface\\) of method Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\DefaultCenterResolver\\:\\:resolveCenter\\(\\) should be contravariant with parameter \\$entity \\(object\\) of method Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverInterface\\:\\:resolveCenter\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Resolver/DefaultCenterResolver.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entity \\(Chill\\\\MainBundle\\\\Entity\\\\HasScopeInterface\\|Chill\\\\MainBundle\\\\Entity\\\\HasScopesInterface\\) of method Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\DefaultScopeResolver\\:\\:resolveScope\\(\\) should be contravariant with parameter \\$entity \\(mixed\\) of method Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\ScopeResolverInterface\\:\\:resolveScope\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Resolver/DefaultScopeResolver.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$address \\(Chill\\\\MainBundle\\\\Entity\\\\Address\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\AddressNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\AddressNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\AddressNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/AddressNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CenterNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CenterNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CenterNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CenterNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CenterNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CenterNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CenterNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CenterNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$collection \\(Chill\\\\MainBundle\\\\Serializer\\\\Model\\\\Collection\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CollectionNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CollectionNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CollectionNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\MainBundle\\\\Entity\\\\Embeddable\\\\CommentEmbeddable\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\CommentEmbeddableDocGenNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/CommentEmbeddableDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DateNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DateNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DateNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DateNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DateNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DateNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DateNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DateNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DateNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DateNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DiscriminatedObjectDenormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DiscriminatedObjectDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DiscriminatedObjectDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareDenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DiscriminatedObjectDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DiscriminatedObjectDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DiscriminatedObjectDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DoctrineExistingEntityNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\DoctrineExistingEntityNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/DoctrineExistingEntityNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\EntityWorkflowNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflowStep\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\EntityWorkflowStepNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/EntityWorkflowStepNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\MainBundle\\\\Entity\\\\Notification\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\NotificationNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/NotificationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(array\\|ArrayObject\\|bool\\|float\\|int\\|string\\|void\\|null\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\NotificationNormalizer\\:\\:normalize\\(\\) should be covariant with return type \\(array\\|ArrayObject\\|bool\\|float\\|int\\|string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/NotificationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$data \\(string\\|null\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\PhonenumberNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$data \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\PhonenumberNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PhonenumberNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\PointNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PointNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\PointNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PointNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\PrivateCommentEmbeddableNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PrivateCommentEmbeddableNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\UserNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/UserNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\UserNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/UserNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\MainBundle\\\\Serializer\\\\Normalizer\\\\UserNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/UserNormalizer.php
|
|
||||||
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(string\\) of method Chill\\\\MainBundle\\\\Validation\\\\Validator\\\\ValidPhonenumber\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$constraint \\(Chill\\\\MainBundle\\\\Validation\\\\Constraint\\\\PhonenumberConstraint\\) of method Chill\\\\MainBundle\\\\Validation\\\\Validator\\\\ValidPhonenumber\\:\\:validate\\(\\) should be contravariant with parameter \\$constraint \\(Symfony\\\\Component\\\\Validator\\\\Constraint\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(object\\) of method Chill\\\\MainBundle\\\\Validator\\\\Constraints\\\\Entity\\\\UserCircleConsistencyValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Validator/Constraints/Entity/UserCircleConsistencyValidator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$constraint \\(Chill\\\\MainBundle\\\\Validator\\\\Constraints\\\\Entity\\\\UserCircleConsistency\\) of method Chill\\\\MainBundle\\\\Validator\\\\Constraints\\\\Entity\\\\UserCircleConsistencyValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$constraint \\(Symfony\\\\Component\\\\Validator\\\\Constraint\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Validator/Constraints/Entity/UserCircleConsistencyValidator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\) of method Chill\\\\MainBundle\\\\Workflow\\\\Validator\\\\EntityWorkflowCreationValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Workflow/Validator/EntityWorkflowCreationValidator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflowStep\\) of method Chill\\\\MainBundle\\\\Workflow\\\\Validator\\\\StepDestValidValidator\\:\\:validate\\(\\) should be contravariant with parameter \\$value \\(mixed\\) of method Symfony\\\\Component\\\\Validator\\\\ConstraintValidatorInterface\\:\\:validate\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Workflow/Validator/StepDestValidValidator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$query \\(Doctrine\\\\ORM\\\\QueryBuilder\\) of method Chill\\\\PersonBundle\\\\Controller\\\\HouseholdCompositionTypeApiController\\:\\:customizeQuery\\(\\) should be contravariant with parameter \\$query \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\AbstractCRUDController\\:\\:customizeQuery\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdCompositionTypeApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(Doctrine\\\\Common\\\\Collections\\\\Collection\\) of method Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\:\\:getScopes\\(\\) should be covariant with return type \\(iterable\\<Chill\\\\MainBundle\\\\Entity\\\\Scope\\>\\) of method Chill\\\\MainBundle\\\\Entity\\\\HasScopesInterface\\:\\:getScopes\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(Chill\\\\MainBundle\\\\Entity\\\\Center\\|null\\) of method Chill\\\\PersonBundle\\\\Entity\\\\Person\\:\\:getCenter\\(\\) should be covariant with return type \\(Chill\\\\MainBundle\\\\Entity\\\\Center\\) of method Chill\\\\MainBundle\\\\Entity\\\\HasCenterInterface\\:\\:getCenter\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Person.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value \\(null\\) of method Chill\\\\PersonBundle\\\\Form\\\\ChoiceLoader\\\\PersonChoiceLoader\\:\\:loadChoiceList\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoiceList\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\PersonBundle\\\\Form\\\\ChoiceLoader\\\\PersonChoiceLoader\\:\\:loadChoicesForValues\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadChoicesForValues\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$value \\(null\\) of method Chill\\\\PersonBundle\\\\Form\\\\ChoiceLoader\\\\PersonChoiceLoader\\:\\:loadValuesForChoices\\(\\) should be contravariant with parameter \\$value \\(\\(callable\\(\\)\\: mixed\\)\\|null\\) of method Symfony\\\\Component\\\\Form\\\\ChoiceList\\\\Loader\\\\ChoiceLoaderInterface\\:\\:loadValuesForChoices\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$viewData \\(Doctrine\\\\Common\\\\Collections\\\\Collection\\) of method Chill\\\\PersonBundle\\\\Form\\\\DataMapper\\\\PersonAltNameDataMapper\\:\\:mapFormsToData\\(\\) should be contravariant with parameter \\$viewData \\(mixed\\) of method Symfony\\\\Component\\\\Form\\\\DataMapperInterface\\:\\:mapFormsToData\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/DataMapper/PersonAltNameDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$limit \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$limit \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$offset \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$offset \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriod/AccompanyingPeriodWorkEvaluationRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$limit \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\Household\\\\HouseholdCompositionRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$limit \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$offset \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\Household\\\\HouseholdCompositionRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$offset \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$limit \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\Household\\\\HouseholdCompositionRepositoryInterface\\:\\:findBy\\(\\) should be contravariant with parameter \\$limit \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepositoryInterface.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$offset \\(int\\) of method Chill\\\\PersonBundle\\\\Repository\\\\Household\\\\HouseholdCompositionRepositoryInterface\\:\\:findBy\\(\\) should be contravariant with parameter \\$offset \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/Household/HouseholdCompositionRepositoryInterface.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\EvaluationRepository\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\EvaluationRepositoryInterface\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/EvaluationRepositoryInterface.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\GoalRepository\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/GoalRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\ResultRepository\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/ResultRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\SocialActionRepository\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialActionRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(class\\-string\\) of method Chill\\\\PersonBundle\\\\Repository\\\\SocialWork\\\\SocialIssueRepository\\:\\:getClassName\\(\\) should be covariant with return type \\(class\\-string\\<object\\>\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:getClassName\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/SocialWork/SocialIssueRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationDocument\\) of method Chill\\\\PersonBundle\\\\Security\\\\Authorization\\\\AccompanyingPeriodWorkEvaluationDocumentVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkEvaluationDocumentVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluation\\) of method Chill\\\\PersonBundle\\\\Security\\\\Authorization\\\\AccompanyingPeriodWorkEvaluationVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkEvaluationVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWork\\) of method Chill\\\\PersonBundle\\\\Security\\\\Authorization\\\\AccompanyingPeriodWorkVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Security/Authorization/AccompanyingPeriodWorkVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$period \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\|null\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodDocGenNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$origin \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\Origin\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodOriginNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodOriginNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodOriginNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodOriginNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$participation \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriodParticipation\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodParticipationNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodParticipationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodParticipationNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodParticipationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodResourceNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodResourceNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodResourceNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodResourceNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkDenormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareDenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkEvaluationDenormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkEvaluationDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkEvaluationDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareDenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkEvaluationDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkEvaluationDenormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkEvaluationDenormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluation\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkEvaluationNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkEvaluationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWork\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\AccompanyingPeriodWorkNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/AccompanyingPeriodWorkNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\MembersEditorNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\MembersEditorNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/MembersEditorNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonDocGenNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$person \\(Chill\\\\PersonBundle\\\\Entity\\\\Person\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonJsonNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonJsonNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonJsonNormalizer\\:\\:denormalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:denormalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\PersonJsonNormalizer\\:\\:supportsDenormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\DenormalizerInterface\\:\\:supportsDenormalization\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$relation \\(Chill\\\\PersonBundle\\\\Entity\\\\Relationships\\\\Relationship\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\RelationshipDocGenNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/RelationshipDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\RelationshipDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/RelationshipDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\RelationshipDocGenNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/RelationshipDocGenNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\SocialActionNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/SocialActionNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\SocialActionNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/SocialActionNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\SocialIssueNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/SocialIssueNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\SocialIssueNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\ContextAwareNormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/SocialIssueNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$format \\(string\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\SocialIssueNormalizer\\:\\:supportsNormalization\\(\\) should be contravariant with parameter \\$format \\(string\\|null\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:supportsNormalization\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/SocialIssueNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\) of method Chill\\\\PersonBundle\\\\Serializer\\\\Normalizer\\\\WorkflowNormalizer\\:\\:normalize\\(\\) should be contravariant with parameter \\$object \\(mixed\\) of method Symfony\\\\Component\\\\Serializer\\\\Normalizer\\\\NormalizerInterface\\:\\:normalize\\(\\)$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Serializer/Normalizer/WorkflowNormalizer.php
|
|
||||||
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationDocument\\) of method Chill\\\\PersonBundle\\\\Workflow\\\\AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler\\:\\:getRelatedObjects\\(\\) should be contravariant with parameter \\$object \\(object\\) of method Chill\\\\MainBundle\\\\Workflow\\\\EntityWorkflowHandlerInterface\\:\\:getRelatedObjects\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationDocumentWorkflowHandler.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluation\\) of method Chill\\\\PersonBundle\\\\Workflow\\\\AccompanyingPeriodWorkEvaluationWorkflowHandler\\:\\:getRelatedObjects\\(\\) should be contravariant with parameter \\$object \\(object\\) of method Chill\\\\MainBundle\\\\Workflow\\\\EntityWorkflowHandlerInterface\\:\\:getRelatedObjects\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkEvaluationWorkflowHandler.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object \\(Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodWork\\) of method Chill\\\\PersonBundle\\\\Workflow\\\\AccompanyingPeriodWorkWorkflowHandler\\:\\:getRelatedObjects\\(\\) should be contravariant with parameter \\$object \\(object\\) of method Chill\\\\MainBundle\\\\Workflow\\\\EntityWorkflowHandlerInterface\\:\\:getRelatedObjects\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Workflow/AccompanyingPeriodWorkWorkflowHandler.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(Chill\\\\MainBundle\\\\Entity\\\\Center\\|null\\) of method Chill\\\\TaskBundle\\\\Entity\\\\AbstractTask\\:\\:getCenter\\(\\) should be covariant with return type \\(Chill\\\\MainBundle\\\\Entity\\\\Center\\) of method Chill\\\\MainBundle\\\\Entity\\\\HasCenterInterface\\:\\:getCenter\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Entity/AbstractTask.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Return type \\(Chill\\\\MainBundle\\\\Entity\\\\Scope\\|null\\) of method Chill\\\\TaskBundle\\\\Entity\\\\AbstractTask\\:\\:getScope\\(\\) should be covariant with return type \\(Chill\\\\MainBundle\\\\Entity\\\\Scope\\) of method Chill\\\\MainBundle\\\\Entity\\\\HasScopeInterface\\:\\:getScope\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Entity/AbstractTask.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$entity \\(Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\) of method Chill\\\\ThirdPartyBundle\\\\Controller\\\\ThirdPartyController\\:\\:onPostFetchEntity\\(\\) should be contravariant with parameter \\$entity \\(mixed\\) of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:onPostFetchEntity\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Controller/ThirdPartyController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$createdAt \\(DateTimeImmutable\\) of method Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\:\\:setCreatedAt\\(\\) should be contravariant with parameter \\$datetime \\(DateTimeInterface\\) of method Chill\\\\MainBundle\\\\Doctrine\\\\Model\\\\TrackCreationInterface\\:\\:setCreatedAt\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Entity/ThirdParty.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$updatedAt \\(DateTimeImmutable\\) of method Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\:\\:setUpdatedAt\\(\\) should be contravariant with parameter \\$datetime \\(DateTimeInterface\\) of method Chill\\\\MainBundle\\\\Doctrine\\\\Model\\\\TrackUpdateInterface\\:\\:setUpdatedAt\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Entity/ThirdParty.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$limit \\(null\\) of method Chill\\\\ThirdPartyBundle\\\\Repository\\\\ThirdPartyRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$limit \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Repository/ThirdPartyRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$offset \\(null\\) of method Chill\\\\ThirdPartyBundle\\\\Repository\\\\ThirdPartyRepository\\:\\:findBy\\(\\) should be contravariant with parameter \\$offset \\(int\\|null\\) of method Doctrine\\\\Persistence\\\\ObjectRepository\\<object\\>\\:\\:findBy\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Repository/ThirdPartyRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject \\(Chill\\\\ThirdPartyBundle\\\\Entity\\\\ThirdParty\\|null\\) of method Chill\\\\ThirdPartyBundle\\\\Security\\\\Voter\\\\ThirdPartyVoter\\:\\:voteOnAttribute\\(\\) should be contravariant with parameter \\$subject \\(mixed\\) of method Symfony\\\\Component\\\\Security\\\\Core\\\\Authorization\\\\Voter\\\\Voter\\:\\:voteOnAttribute\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Security/Voter/ThirdPartyVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$document \\(Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\) of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getBasename\\(\\) should be contravariant with parameter \\$document \\(ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document\\) of method ChampsLibres\\\\WopiLib\\\\Contract\\\\Service\\\\DocumentManagerInterface\\:\\:getBasename\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$document \\(Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\) of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getCreationDate\\(\\) should be contravariant with parameter \\$document \\(ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document\\) of method ChampsLibres\\\\WopiLib\\\\Contract\\\\Service\\\\DocumentManagerInterface\\:\\:getCreationDate\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$document \\(Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\) of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getDocumentId\\(\\) should be contravariant with parameter \\$document \\(ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document\\) of method ChampsLibres\\\\WopiLib\\\\Contract\\\\Service\\\\DocumentManagerInterface\\:\\:getDocumentId\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$document \\(Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\) of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getLastModifiedDate\\(\\) should be contravariant with parameter \\$document \\(ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document\\) of method ChampsLibres\\\\WopiLib\\\\Contract\\\\Service\\\\DocumentManagerInterface\\:\\:getLastModifiedDate\\(\\)$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,676 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Controller/ActivityController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$context of method Chill\\\\ActivityBundle\\\\Timeline\\\\TimelineActivityProvider\\:\\:checkContext\\(\\) expects string, Chill\\\\MainBundle\\\\Timeline\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Timeline/TimelineActivityProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$callback of function array_map expects \\(callable\\(Chill\\\\BudgetBundle\\\\Repository\\\\ChargeType\\)\\: mixed\\)\\|null, Closure\\(Chill\\\\BudgetBundle\\\\Entity\\\\ChargeKind\\)\\: int\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillBudgetBundle/Service/Summary/SummaryBudget.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$callback of function array_map expects \\(callable\\(Chill\\\\BudgetBundle\\\\Repository\\\\ResourceType\\)\\: mixed\\)\\|null, Closure\\(Chill\\\\BudgetBundle\\\\Entity\\\\ResourceKind\\)\\: int\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillBudgetBundle/Service/Summary/SummaryBudget.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$byUser of class Chill\\\\CalendarBundle\\\\Messenger\\\\Message\\\\InviteUpdateMessage constructor expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Controller/InviteApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$byUser of class Chill\\\\CalendarBundle\\\\Messenger\\\\Message\\\\CalendarRemovedMessage constructor expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Messenger/Doctrine/CalendarEntityListener.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$byUser of class Chill\\\\CalendarBundle\\\\Messenger\\\\Message\\\\CalendarMessage constructor expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Messenger/Doctrine/CalendarEntityListener.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$byUser of class Chill\\\\CalendarBundle\\\\Messenger\\\\Message\\\\CalendarRangeRemovedMessage constructor expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Messenger/Doctrine/CalendarRangeEntityListener.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$byUser of class Chill\\\\CalendarBundle\\\\Messenger\\\\Message\\\\CalendarRangeMessage constructor expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Messenger/Doctrine/CalendarRangeEntityListener.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$token of method Chill\\\\CalendarBundle\\\\RemoteCalendar\\\\Connector\\\\MSGraph\\\\OnBehalfOfUserTokenStorage\\:\\:setToken\\(\\) expects TheNetworg\\\\OAuth2\\\\Client\\\\Token\\\\AccessToken, League\\\\OAuth2\\\\Client\\\\Token\\\\AccessTokenInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/OnBehalfOfUserTokenStorage.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$code of class Exception constructor expects int, array\\<string, int\\|string\\|null\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraphRemoteCalendarConnector.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$offset of method Chill\\\\CalendarBundle\\\\Repository\\\\CalendarRepository\\:\\:findBy\\(\\) expects int\\|null, array\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCalendarBundle/Repository/CalendarRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$prefix of function uniqid expects string, int\\<0, max\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Form/Type/ChoicesListType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$callback of function array_filter expects callable\\(Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadataInterface\\)\\: mixed, Closure\\(Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadata\\)\\: bool given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$metadata of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:normalizeNullData\\(\\) expects Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\ClassMetadata, Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\ClassMetadataInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$attributes of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:normalizeNullData\\(\\) expects array\\<Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadata\\>, array\\<Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadataInterface\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#5 \\$metadata of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:normalizeObject\\(\\) expects Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\ClassMetadata, Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\ClassMetadataInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#6 \\$attributes of method Chill\\\\DocGeneratorBundle\\\\Serializer\\\\Normalizer\\\\DocGenObjectNormalizer\\:\\:normalizeObject\\(\\) expects array\\<Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadata\\>, array\\<Symfony\\\\Component\\\\Serializer\\\\Mapping\\\\AttributeMetadataInterface\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocGeneratorBundle/Serializer/Normalizer/DocGenObjectNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Controller/DocumentPersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$value of function count expects array\\|Countable, Chill\\\\MainBundle\\\\Entity\\\\Center given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/EventController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$participations of method Chill\\\\EventBundle\\\\Controller\\\\ParticipationController\\:\\:createEditFormMultiple\\(\\) expects ArrayIterator, Traversable given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillEventBundle/Controller/ParticipationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$callback of function call_user_func expects callable\\(\\)\\: mixed, null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$previous of class Symfony\\\\Component\\\\HttpKernel\\\\Exception\\\\BadRequestHttpException constructor expects Throwable\\|null, int given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$code of class Symfony\\\\Component\\\\HttpKernel\\\\Exception\\\\BadRequestHttpException constructor expects int, Symfony\\\\Component\\\\Serializer\\\\Exception\\\\NotEncodableValueException given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$code of class Symfony\\\\Component\\\\HttpKernel\\\\Exception\\\\BadRequestHttpException constructor expects int, Symfony\\\\Component\\\\Serializer\\\\Exception\\\\UnexpectedValueException given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$formClass of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:createFormFor\\(\\) expects string\\|null, Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\type\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$scope of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\Scope\\|null, Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\Scope\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$name of method Chill\\\\MainBundle\\\\Entity\\\\Country\\:\\:setName\\(\\) expects string, array\\<int\\|string, string\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, Chill\\\\MainBundle\\\\Entity\\\\the given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadPostalCodesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$alias of method Chill\\\\MainBundle\\\\Export\\\\ExportManager\\:\\:getExport\\(\\) expects string, Symfony\\\\Component\\\\HttpFoundation\\\\Request given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$alias of method Chill\\\\MainBundle\\\\Controller\\\\ExportController\\:\\:exportFormStep\\(\\) expects string, Symfony\\\\Component\\\\HttpFoundation\\\\Request given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$alias of method Chill\\\\MainBundle\\\\Controller\\\\ExportController\\:\\:formatterFormStep\\(\\) expects string, Symfony\\\\Component\\\\HttpFoundation\\\\Request given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$alias of method Chill\\\\MainBundle\\\\Controller\\\\ExportController\\:\\:forwardToGenerate\\(\\) expects string, Symfony\\\\Component\\\\HttpFoundation\\\\Request given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$alias of method Chill\\\\MainBundle\\\\Controller\\\\ExportController\\:\\:selectCentersStep\\(\\) expects string, Symfony\\\\Component\\\\HttpFoundation\\\\Request given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/ExportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:countUnreadByUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:findUnreadByUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$addressee of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:countAllForAttendee\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$addressee of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:findAllForAttendee\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$sender of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:countAllForSender\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$sender of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:findAllForSender\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:countUnreadByUserWhereAddressee\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Repository\\\\NotificationRepository\\:\\:countUnreadByUserWhereSender\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/NotificationController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PasswordController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$token of class Chill\\\\MainBundle\\\\Security\\\\PasswordRecover\\\\PasswordRecoverEvent constructor expects Chill\\\\MainBundle\\\\Security\\\\PasswordRecover\\\\type\\|null, string given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PasswordController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$ip of class Chill\\\\MainBundle\\\\Security\\\\PasswordRecover\\\\PasswordRecoverEvent constructor expects Chill\\\\MainBundle\\\\Security\\\\PasswordRecover\\\\type\\|null, string\\|null given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PasswordController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$context of method Chill\\\\MainBundle\\\\Timeline\\\\TimelineBuilder\\:\\:countItems\\(\\) expects Chill\\\\MainBundle\\\\Timeline\\\\unknown, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/TimelineCenterController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:addSubscriberToFinal\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:addSubscriberToStep\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:isUserSubscribedToFinal\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:isUserSubscribedToStep\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:removeSubscriberToFinal\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflow\\:\\:removeSubscriberToStep\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/WorkflowApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$place of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Configuration\\:\\:filterWidgetByPlace\\(\\) expects string, Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$place of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Configuration\\:\\:getWidgetAliasesbyPlace\\(\\) expects Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\type, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$array of function implode expects array\\|null, Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Configuration.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$place of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\WidgetFactoryInterface\\:\\:createDefinition\\(\\) expects Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\type, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$order of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\WidgetFactoryInterface\\:\\:createDefinition\\(\\) expects Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\type, float given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$place of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\WidgetFactoryInterface\\:\\:getServiceId\\(\\) expects string, Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Widget/Factory/AbstractWidgetFactory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$order of method Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\WidgetFactoryInterface\\:\\:getServiceId\\(\\) expects float, Chill\\\\MainBundle\\\\DependencyInjection\\\\Widget\\\\Factory\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Widget/Factory/AbstractWidgetFactory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$iterator of function iterator_to_array expects Traversable, array\\<Chill\\\\MainBundle\\\\Export\\\\AggregatorInterface\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Export/ExportManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$nbAggregators of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\CSVFormatter\\:\\:appendAggregatorForm\\(\\) expects string, int\\<0, max\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Export/Formatter/CSVFormatter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$array of function array_map expects array, Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadSheetFormatter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$nbAggregators of method Chill\\\\MainBundle\\\\Export\\\\Formatter\\\\SpreadSheetFormatter\\:\\:appendAggregatorForm\\(\\) expects string, int\\<0, max\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Export/Formatter/SpreadSheetFormatter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$callback of function call_user_func expects callable\\(\\)\\: mixed, null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Embeddable\\\\PrivateCommentEmbeddable\\:\\:getCommentForUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/PrivateCommentDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$em of class Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\ObjectToIdTransformer constructor expects Doctrine\\\\ORM\\\\EntityManagerInterface, Doctrine\\\\Persistence\\\\ObjectManager given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/Select2CountryType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$em of class Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\MultipleObjectsToIdTransformer constructor expects Doctrine\\\\ORM\\\\EntityManagerInterface, Doctrine\\\\Persistence\\\\ObjectManager given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$translatableStrings of method Chill\\\\MainBundle\\\\Templating\\\\TranslatableStringHelper\\:\\:localize\\(\\) expects array, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/Select2LanguageType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$datetime of class DateTime constructor expects string, Chill\\\\MainBundle\\\\Search\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Search/AbstractSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$paginator of method Chill\\\\MainBundle\\\\Search\\\\SearchApi\\:\\:fetchRawResult\\(\\) expects Chill\\\\MainBundle\\\\Pagination\\\\Paginator, Chill\\\\MainBundle\\\\Pagination\\\\PaginatorInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Search/SearchApi.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$callback of function uasort expects callable\\(Chill\\\\MainBundle\\\\Search\\\\HasAdvancedSearchForm, Chill\\\\MainBundle\\\\Search\\\\HasAdvancedSearchForm\\)\\: int, Closure\\(Chill\\\\MainBundle\\\\Search\\\\SearchInterface, Chill\\\\MainBundle\\\\Search\\\\SearchInterface\\)\\: \\-1\\|0\\|1 given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Search/SearchProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$subject of function preg_match_all expects string, Chill\\\\MainBundle\\\\Search\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Search/SearchProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object of function get_class expects object, array\\<Chill\\\\MainBundle\\\\Entity\\\\Center\\> given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Notification\\:\\:isReadBy\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/NotificationNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Entity\\\\Embeddable\\\\PrivateCommentEmbeddable\\:\\:setCommentForUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/PrivateCommentEmbeddableNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Templating/Widget/WidgetRenderingTwig.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$context of method Chill\\\\MainBundle\\\\Timeline\\\\TimelineBuilder\\:\\:buildUnionQuery\\(\\) expects string, Chill\\\\MainBundle\\\\Timeline\\\\unknown given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$context of method Chill\\\\MainBundle\\\\Timeline\\\\TimelineProviderInterface\\:\\:getEntityTemplate\\(\\) expects Chill\\\\MainBundle\\\\Timeline\\\\type, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$phoneNumber of method Chill\\\\MainBundle\\\\Phonenumber\\\\PhoneNumberHelperInterface\\:\\:format\\(\\) expects libphonenumber\\\\PhoneNumber\\|null, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Validation/Validator/ValidPhonenumber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$transitionBy of method Chill\\\\MainBundle\\\\Entity\\\\Workflow\\\\EntityWorkflowStep\\:\\:setTransitionBy\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User\\|null, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Workflow/EventSubscriber/EntityWorkflowTransitionEventSubscriber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Actions/Remove/PersonMove.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingCourseApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$callback of function usort expects callable\\(mixed, mixed\\)\\: int, Closure\\(mixed, mixed\\)\\: bool given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\PersonBundle\\\\Repository\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationRepository\\:\\:countNearMaxDateByUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkEvaluationApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\PersonBundle\\\\Repository\\\\AccompanyingPeriod\\\\AccompanyingPeriodWorkEvaluationRepository\\:\\:findNearMaxDateByUser\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodWorkEvaluationApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$object of static method DateTimeImmutable\\:\\:createFromMutable\\(\\) expects DateTime, DateTimeInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$callback of function usort expects callable\\(mixed, mixed\\)\\: int, Closure\\(mixed, mixed\\)\\: bool given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$previous of class Symfony\\\\Component\\\\HttpKernel\\\\Exception\\\\BadRequestHttpException constructor expects Throwable\\|null, int given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$code of class Symfony\\\\Component\\\\HttpKernel\\\\Exception\\\\BadRequestHttpException constructor expects int, Symfony\\\\Component\\\\Serializer\\\\Exception\\\\InvalidArgumentException\\|Symfony\\\\Component\\\\Serializer\\\\Exception\\\\UnexpectedValueException given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/HouseholdMemberController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$form of method Chill\\\\PersonBundle\\\\Controller\\\\PersonController\\:\\:isLastPostDataChanges\\(\\) expects Symfony\\\\Component\\\\Form\\\\Form, Symfony\\\\Component\\\\Form\\\\FormInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$precision of method Chill\\\\PersonBundle\\\\Search\\\\SimilarPersonMatcher\\:\\:matchPerson\\(\\) expects float, Chill\\\\PersonBundle\\\\Repository\\\\PersonNotDuplicateRepository given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$orderBy of method Chill\\\\PersonBundle\\\\Search\\\\SimilarPersonMatcher\\:\\:matchPerson\\(\\) expects string, float given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#4 \\$addYearComparison of method Chill\\\\PersonBundle\\\\Search\\\\SimilarPersonMatcher\\:\\:matchPerson\\(\\) expects bool, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonDuplicateController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$context of method Chill\\\\MainBundle\\\\Timeline\\\\TimelineBuilder\\:\\:countItems\\(\\) expects Chill\\\\MainBundle\\\\Timeline\\\\unknown, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/TimelinePersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/TimelinePersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$period of method Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod\\\\AccompanyingPeriodLocationHistory\\:\\:setPeriod\\(\\) expects Chill\\\\PersonBundle\\\\Entity\\\\AccompanyingPeriod, null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/AccompanyingPeriod.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$now of method Chill\\\\PersonBundle\\\\Entity\\\\Household\\\\Household\\:\\:getCurrentMembers\\(\\) expects DateTimeImmutable\\|null, DateTimeInterface\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Household/Household.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$now of method Chill\\\\PersonBundle\\\\Entity\\\\Household\\\\Household\\:\\:getNonCurrentMembers\\(\\) expects DateTimeImmutable\\|null, DateTimeInterface\\|null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Household/Household.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$key of method Doctrine\\\\Common\\\\Collections\\\\Collection\\<\\(int\\|string\\),mixed\\>\\:\\:remove\\(\\) expects \\(int\\|string\\), Chill\\\\PersonBundle\\\\Entity\\\\SocialWork\\\\SocialAction given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/SocialWork/Evaluation.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$translatableStrings of method Chill\\\\MainBundle\\\\Templating\\\\TranslatableStringHelper\\:\\:localize\\(\\) expects array, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Export/Helper/ListPersonHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$callback of function call_user_func expects callable\\(\\)\\: mixed, null given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entityName of method Doctrine\\\\ORM\\\\EntityManager\\:\\:getRepository\\(\\) expects class\\-string\\<ChillPersonBundle\\:AccompanyingPeriod\\>, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Timeline/AbstractTimelineAccompanyingPeriod.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$user of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:filterReachableCenters\\(\\) expects Chill\\\\MainBundle\\\\Entity\\\\User, Symfony\\\\Component\\\\Security\\\\Core\\\\User\\\\UserInterface\\|null given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Timeline/AbstractTimelineAccompanyingPeriod.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$context of method Chill\\\\PersonBundle\\\\Timeline\\\\AbstractTimelineAccompanyingPeriod\\:\\:getBasicEntityTemplate\\(\\) expects string, Chill\\\\MainBundle\\\\Timeline\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Timeline/TimelineAccompanyingPeriodClosing.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#3 \\$context of method Chill\\\\PersonBundle\\\\Timeline\\\\AbstractTimelineAccompanyingPeriod\\:\\:getBasicEntityTemplate\\(\\) expects string, Chill\\\\MainBundle\\\\Timeline\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Timeline/TimelineAccompanyingPeriodOpening.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelperInterface\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Widget/PersonListWidget.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$className of method Doctrine\\\\Persistence\\\\ObjectManager\\:\\:getRepository\\(\\) expects class\\-string\\<ChillReportBundle\\:Report\\>, string given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entity of method Chill\\\\ReportBundle\\\\Controller\\\\ReportController\\:\\:createEditForm\\(\\) expects Chill\\\\ReportBundle\\\\Entity\\\\Report, ChillReportBundle\\:Report given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableScopes\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$em of class Chill\\\\MainBundle\\\\Form\\\\Type\\\\DataTransformer\\\\ScopeTransformer constructor expects Doctrine\\\\ORM\\\\EntityManagerInterface, Doctrine\\\\Persistence\\\\ObjectManager given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Form/ReportType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableScopes\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Form/ReportType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Search/ReportSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableScopes\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Search/ReportSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$context of method Chill\\\\ReportBundle\\\\Timeline\\\\TimelineReportProvider\\:\\:checkContext\\(\\) expects string, Chill\\\\MainBundle\\\\Timeline\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Timeline/TimelineReportProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entity of method Chill\\\\ReportBundle\\\\Timeline\\\\TimelineReportProvider\\:\\:getFieldsToRender\\(\\) expects Chill\\\\ReportBundle\\\\Entity\\\\Report, Chill\\\\MainBundle\\\\Timeline\\\\type given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Timeline/TimelineReportProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$entityName of method Doctrine\\\\ORM\\\\EntityManager\\:\\:getRepository\\(\\) expects class\\-string\\<ChillReportBundle\\:Report\\>, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Timeline/TimelineReportProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 6
|
|
||||||
path: src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Controller/TaskController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$keys of function array_fill_keys expects array, Chill\\\\TaskBundle\\\\Entity\\\\json given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Entity/AbstractTask.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$task of method Chill\\\\TaskBundle\\\\Entity\\\\Task\\\\SingleTaskPlaceEvent\\:\\:setTask\\(\\) expects Chill\\\\TaskBundle\\\\Entity\\\\SingleTask, Chill\\\\TaskBundle\\\\Entity\\\\AbstractTask given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Event/Lifecycle/TaskLifecycleEvent.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$repository of class Chill\\\\PersonBundle\\\\Form\\\\DataTransformer\\\\PersonToIdTransformer constructor expects Chill\\\\PersonBundle\\\\Repository\\\\PersonRepository, Doctrine\\\\ORM\\\\EntityManagerInterface given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskListType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskListType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$extras of method Knp\\\\Menu\\\\MenuItem\\:\\:setExtras\\(\\) expects array\\<string, mixed\\>, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Menu/MenuBuilder.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Repository/SingleTaskRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$event of method Symfony\\\\Contracts\\\\EventDispatcher\\\\EventDispatcherInterface\\:\\:dispatch\\(\\) expects object, string given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Security/Authorization/TaskVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#2 \\$role of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:getReachableCenters\\(\\) expects string, Symfony\\\\Component\\\\Security\\\\Core\\\\Role\\\\Role given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$storedObject of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:getContent\\(\\) expects Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject, ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$storedObject of method Chill\\\\WopiBundle\\\\Service\\\\Wopi\\\\ChillDocumentManager\\:\\:setContent\\(\\) expects Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject, ChampsLibres\\\\WopiLib\\\\Contract\\\\Entity\\\\Document given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\#1 \\$type of method Chill\\\\DocStoreBundle\\\\Entity\\\\StoredObject\\:\\:setType\\(\\) expects string\\|null, false given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillWopiBundle/src/Service/Wopi/ChillDocumentManager.php
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Call to an undefined method Chill\\\\MainBundle\\\\Controller\\\\UserController\\:\\:createEditForm\\(\\)\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserController.php
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Controller/CustomFieldsGroupController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/AbstractCRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/ApiController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillImportUsersCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillUserSendRenewPasswordCodeCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Encoder\\\\EncoderFactory\\:
|
|
||||||
since Symfony 5\\.3, use \\{@link PasswordHasherFactory\\} instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/SetPasswordCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/MenuController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/SearchController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/UserController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Instantiation of deprecated class Symfony\\\\Component\\\\Security\\\\Core\\\\Encoder\\\\EncoderFactory\\:
|
|
||||||
since Symfony 5\\.3, use \\{@link PasswordHasherFactory\\} instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DataFixtures/ORM/LoadUsers.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Serializer/Normalizer/UserNormalizer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/Validation/Validator/UserUniqueEmailAndUsername.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Validator/Constraints/Entity/UserCircleConsistencyValidator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 13
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/PersonController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method get\\(\\) of class Symfony\\\\Bundle\\\\FrameworkBundle\\\\Controller\\\\AbstractController\\:
|
|
||||||
since Symfony 5\\.4, use method or constructor injection in your controller instead$#
|
|
||||||
"""
|
|
||||||
count: 7
|
|
||||||
path: src/Bundle/ChillReportBundle/Controller/ReportController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getUsername\\(\\) of class Chill\\\\MainBundle\\\\Entity\\\\User\\:
|
|
||||||
since Symfony 5\\.3, use getUserIdentifier\\(\\) instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskListType.php
|
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\ActivityBundle\\\\Repository\\\\ActivityACLAwareRepository\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Repository/ActivityACLAwareRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Entity/ActivityReasonCategory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\AuthorizationHelper\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/AuthorizationHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\DefaultVoterHelper\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/DefaultVoterHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\DefaultVoterHelperFactory\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/DefaultVoterHelperFactory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\MainBundle\\\\Security\\\\Authorization\\\\DefaultVoterHelperGenerator\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Authorization/DefaultVoterHelperGenerator.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Class Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcher implements deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/Resolver/CenterResolverDispatcher.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Call to deprecated method getCurrentAccompanyingPeriod\\(\\) of class Chill\\\\PersonBundle\\\\Entity\\\\Person\\:
|
|
||||||
since 1\\.1 use `getOpenedAccompanyingPeriod instead$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Controller/AccompanyingPeriodController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Access to deprecated property \\$proxyAccompanyingPeriodOpenState of class Chill\\\\PersonBundle\\\\Entity\\\\Person\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillPersonBundle/Entity/Person.php
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\PersonBundle\\\\Repository\\\\AccompanyingPeriodACLAwareRepository\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Repository/AccompanyingPeriodACLAwareRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\TaskBundle\\\\Controller\\\\SingleTaskController\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Controller/SingleTaskController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: """
|
|
||||||
#^Parameter \\$centerResolverDispatcher of method Chill\\\\TaskBundle\\\\Form\\\\SingleTaskType\\:\\:__construct\\(\\) has typehint with deprecated interface Chill\\\\MainBundle\\\\Security\\\\Resolver\\\\CenterResolverDispatcherInterface\\:
|
|
||||||
Use CenterResolverManager and its interface CenterResolverManagerInterface$#
|
|
||||||
"""
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskType.php
|
|
||||||
@@ -1,387 +0,0 @@
|
|||||||
parameters:
|
|
||||||
ignoreErrors:
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Entity/ActivityReason.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Entity/ActivityReasonCategory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillActivityBundle/Form/ActivityType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillBudgetBundle/Form/ChargeType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillBudgetBundle/Form/ResourceType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Command/CreateFieldsOnGroupCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/AbstractCustomField.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 4
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldChoice.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldChoice\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldChoice.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldDate.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldDate\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldDate.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldLongChoice\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldLongChoice.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldNumber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldNumber\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldNumber.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldText\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldText.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\CustomFieldsBundle\\\\CustomFields\\\\CustomFieldTitle\\:\\:buildForm\\(\\) should return Symfony\\\\Component\\\\Form\\\\FormTypeInterface but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/CustomFields/CustomFieldTitle.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomField.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Entity/CustomFieldsGroup.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillCustomFieldsBundle/Form/CustomFieldType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillDocStoreBundle/Entity/DocumentCategory.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/ChoiceLoader/EventChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\$resolver of method Chill\\\\EventBundle\\\\Form\\\\EventTypeType\\:\\:setDefaultOptions\\(\\) has invalid type Symfony\\\\Component\\\\OptionsResolver\\\\OptionsResolverInterface\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/EventTypeType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\$resolver of method Chill\\\\EventBundle\\\\Form\\\\RoleType\\:\\:setDefaultOptions\\(\\) has invalid type Symfony\\\\Component\\\\OptionsResolver\\\\OptionsResolverInterface\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/RoleType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\$resolver of method Chill\\\\EventBundle\\\\Form\\\\StatusType\\:\\:setDefaultOptions\\(\\) has invalid type Symfony\\\\Component\\\\OptionsResolver\\\\OptionsResolverInterface\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Form/StatusType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillEventBundle/Search/EventSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\EventBundle\\\\Search\\\\EventSearch\\:\\:renderResult\\(\\) should return string but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillEventBundle/Search/EventSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Casting to string something that's already string\\.$#"
|
|
||||||
count: 5
|
|
||||||
path: src/Bundle/ChillFamilyMembersBundle/Entity/AbstractFamilyMember.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillFamilyMembersBundle/Form/FamilyMemberType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Parameter \\$scope of method Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\CRUDController\\:\\:getReachableCenters\\(\\) has invalid type Chill\\\\MainBundle\\\\CRUD\\\\Controller\\\\Scope\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Controller/CRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Resolver/Resolver.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\CRUD\\\\Resolver\\\\Resolver\\:\\:getConfigValue\\(\\) should return string but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/CRUD/Resolver/Resolver.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\ChillImportUsersCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillImportUsersCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillImportUsersCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillUserSendRenewPasswordCodeCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\ChillUserSendRenewPasswordCodeCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/ChillUserSendRenewPasswordCodeCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\LoadAndUpdateLanguagesCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadAndUpdateLanguagesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadAndUpdateLanguagesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\LoadCountriesCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadCountriesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\LoadPostalCodesCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/LoadPostalCodesCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Command\\\\SetPasswordCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Command/SetPasswordCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PasswordController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Controller/PostalCodeController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/DependencyInjection/Widget/AbstractWidgetsCompilerPass.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Entity/Address.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Entity/User.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/ChoiceLoader/PostalCodeChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/DataMapper/AddressDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/AddressType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/AddressType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a negated boolean, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/ChillTextareaType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillMainBundle/Form/Type/DataTransformer/DateIntervalTransformer.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillMainBundle/Phonenumber/PhonenumberHelper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/PasswordRecover/PasswordRecoverEvent.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Security/PasswordRecover/TokenManager.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\MainBundle\\\\Timeline\\\\TimelineBuilder\\:\\:getTemplateData\\(\\) should return array but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillMainBundle/Timeline/TimelineBuilder.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Actions/Remove/PersonMove.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/CRUD/Controller/OneToOneEntityPersonCRUDController.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Command/ChillPersonMoveCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\PersonBundle\\\\Command\\\\ChillPersonMoveCommand\\:\\:execute\\(\\) should return int but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Command/ChillPersonMoveCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Command/ChillPersonMoveCommand.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/ChoiceLoader/PersonChoiceLoader.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/DataMapper/PersonAltNameDataMapper.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in a ternary operator condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/Type/PersonAltNameType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Form/Type/PersonPhoneType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\PersonBundle\\\\Search\\\\PersonSearch\\:\\:renderResult\\(\\) should return string but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillPersonBundle/Search/PersonSearch.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\ReportBundle\\\\DataFixtures\\\\ORM\\\\LoadReports\\:\\:getRandomChoice\\(\\) should return array\\<string\\>\\|string but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/DataFixtures/ORM/LoadReports.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillReportBundle/Export/Export/ReportList.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\ReportBundle\\\\Security\\\\Authorization\\\\ReportVoter\\:\\:supports\\(\\) should return bool but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillReportBundle/Security/Authorization/ReportVoter.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Casting to string something that's already string\\.$#"
|
|
||||||
count: 3
|
|
||||||
path: src/Bundle/ChillTaskBundle/Entity/AbstractTask.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Only booleans are allowed in an if condition, mixed given\\.$#"
|
|
||||||
count: 2
|
|
||||||
path: src/Bundle/ChillTaskBundle/Form/SingleTaskListType.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Repository/SingleTaskAclAwareRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#"
|
|
||||||
count: 5
|
|
||||||
path: src/Bundle/ChillTaskBundle/Repository/SingleTaskRepository.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\TaskBundle\\\\Timeline\\\\SingleTaskTaskLifeCycleEventTimelineProvider\\:\\:getTransitionByName\\(\\) should return Symfony\\\\Component\\\\Workflow\\\\Transition but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Timeline/SingleTaskTaskLifeCycleEventTimelineProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\TaskBundle\\\\Timeline\\\\TaskLifeCycleEventTimelineProvider\\:\\:getTransitionByName\\(\\) should return Symfony\\\\Component\\\\Workflow\\\\Transition but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillTaskBundle/Timeline/TaskLifeCycleEventTimelineProvider.php
|
|
||||||
|
|
||||||
-
|
|
||||||
message: "#^Method Chill\\\\ThirdPartyBundle\\\\Search\\\\ThirdPartySearch\\:\\:renderResult\\(\\) should return string but return statement is missing\\.$#"
|
|
||||||
count: 1
|
|
||||||
path: src/Bundle/ChillThirdPartyBundle/Search/ThirdPartySearch.php
|
|
||||||
|
|
||||||
@@ -24,14 +24,4 @@ parameters:
|
|||||||
|
|
||||||
includes:
|
includes:
|
||||||
- phpstan-baseline.neon
|
- phpstan-baseline.neon
|
||||||
- phpstan-critical.neon
|
|
||||||
- phpstan-deprecations.neon
|
|
||||||
- phpstan-types.neon
|
|
||||||
- phpstan-baseline-level-2.neon
|
|
||||||
- phpstan-baseline-level-3.neon
|
|
||||||
- phpstan-baseline-level-4.neon
|
|
||||||
- phpstan-baseline-level-5.neon
|
|
||||||
- phpstan-deprecations-sf54.neon
|
|
||||||
- phpstan-baseline-deprecations-doctrine-orm.neon
|
|
||||||
- phpstan-baseline-2024-05.neon
|
|
||||||
|
|
||||||
|
|||||||
1523
psalm-baseline.xml
1523
psalm-baseline.xml
File diff suppressed because it is too large
Load Diff
47
psalm.xml
47
psalm.xml
@@ -1,47 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<psalm
|
|
||||||
errorLevel="7"
|
|
||||||
resolveFromConfigFile="true"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xmlns="https://getpsalm.org/schema/config"
|
|
||||||
xsi:schemaLocation="https://getpsalm.org/schema/config tests/app/vendor/vimeo/psalm/config.xsd"
|
|
||||||
errorBaseline="psalm-baseline.xml"
|
|
||||||
cacheDirectory="./.psalm"
|
|
||||||
>
|
|
||||||
<projectFiles>
|
|
||||||
<directory name="src"/>
|
|
||||||
<ignoreFiles>
|
|
||||||
<directory name="./tests/"/>
|
|
||||||
<directory name="./node_modules/"/>
|
|
||||||
</ignoreFiles>
|
|
||||||
</projectFiles>
|
|
||||||
|
|
||||||
<!-- suppress error around parameter bags - see https://github.com/symfony/symfony/issues/45609#issuecomment-1056816975 -->
|
|
||||||
<!-- maybe to desactivate with php 8.1 ? -->
|
|
||||||
<issueHandlers>
|
|
||||||
<UndefinedDocblockClass>
|
|
||||||
<errorLevel type="suppress">
|
|
||||||
<referencedClass name="UnitEnum"/>
|
|
||||||
</errorLevel>
|
|
||||||
</UndefinedDocblockClass>
|
|
||||||
</issueHandlers>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
<fileExtensions>
|
|
||||||
<extension name=".php"/>
|
|
||||||
<extension name=".twig" checker="tests/app/vendor/psalm/plugin-symfony/src/Twig/TemplateFileAnalyzer.php" />
|
|
||||||
</fileExtensions>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<plugins>
|
|
||||||
<pluginClass class="Psalm\PhpUnitPlugin\Plugin"/>
|
|
||||||
<!--
|
|
||||||
<pluginClass class="Psalm\SymfonyPsalmPlugin\Plugin">
|
|
||||||
<containerXml>tests/app/var/cache/dev/srcApp_KernelDevDebugContainer.xml</containerXml>
|
|
||||||
<stubs>
|
|
||||||
<file name="vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php" />
|
|
||||||
</stubs>
|
|
||||||
</pluginClass>
|
|
||||||
-->
|
|
||||||
</plugins>
|
|
||||||
</psalm>
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- composer config github-oauth.github.com $GITHUB_TOKEN
|
|
||||||
- php -d memory_limit=-1 /usr/local/bin/composer install --no-interaction
|
|
||||||
- cp Resources/test/Fixtures/App/app/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/app/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- deploy
|
|
||||||
- test
|
|
||||||
- build-doc
|
|
||||||
- deploy-doc
|
|
||||||
|
|
||||||
test:php-7.2:
|
|
||||||
stage: test
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
<<: *test_definition
|
|
||||||
script: php vendor/bin/phpunit
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
|
|
||||||
# deploy documentation
|
|
||||||
api-doc-build:
|
|
||||||
stage: build-doc
|
|
||||||
environment: api-doc
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
- mkdir api-doc
|
|
||||||
script: apigen generate --destination api-doc/$CI_BUILD_REF_NAME/$CI_PROJECT_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "api-doc/"
|
|
||||||
name: api
|
|
||||||
expire_in: '2h'
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
api-doc-deploy:
|
|
||||||
stage: deploy-doc
|
|
||||||
image: pallet/swiftclient:latest
|
|
||||||
before_script:
|
|
||||||
# test that CONTAINER_API variable is set
|
|
||||||
- if [ -z ${CONTAINER_API+x} ]; then echo "Please set CONTAINER_API variable"; exit -1; fi
|
|
||||||
# go to api-doc to have and url with PROJECT/BUILD
|
|
||||||
- cd api-doc
|
|
||||||
# upload, and keep files during 1 year
|
|
||||||
script: "swift upload --header \"X-Delete-After: 31536000\" $CONTAINER_API $CI_BUILD_REF_NAME/$CI_PROJECT_NAME"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
|
|
||||||
Version 1.5.1
|
|
||||||
=============
|
|
||||||
|
|
||||||
- [report activity count] fix error: do not show centers which are not selected in results.
|
|
||||||
|
|
||||||
Version 1.5.2
|
|
||||||
=============
|
|
||||||
|
|
||||||
- [aggregate by activity type] fix translation in aggregate activity type
|
|
||||||
- fix some translation in export
|
|
||||||
- fix error when persons not loaded by other aggregators / filters
|
|
||||||
- add "filter by activity type" filter
|
|
||||||
|
|
||||||
Version 1.5.3
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add privacy events to activity list / show / edit
|
|
||||||
|
|
||||||
Version 1.5.4
|
|
||||||
=============
|
|
||||||
|
|
||||||
- [report activity]: add aggregator for activity users
|
|
||||||
- fix bug: error when extracting activities without filter / aggregators selecting persons
|
|
||||||
|
|
||||||
Version 1.5.5
|
|
||||||
=============
|
|
||||||
|
|
||||||
- [activity] replace dropdown for selecting reasons and use chillEntity for reason rendering
|
|
||||||
- fix bug: error when trying to edit activity of which the type has been deactivated
|
|
||||||
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
# configuration for apigen
|
|
||||||
|
|
||||||
source:
|
|
||||||
- .
|
|
||||||
|
|
||||||
exclude:
|
|
||||||
- vendor/*
|
|
||||||
- Test*
|
|
||||||
|
|
||||||
title: Chill Activity Bundle
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/activity",
|
|
||||||
"description": "This bundle extend chill for recording the different activities of the user",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "https://github.com/Chill-project/Activity",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\ActivityBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"post-install-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
|
|
||||||
"symfony-app-dir": "Test/Fixtures/App/app/"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<phpunit bootstrap="./Resources/test/Fixtures/App/app/autoload.php" colors="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="ChillActivityBundle test suite">
|
|
||||||
<directory suffix="Test.php">./Tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory>./</directory>
|
|
||||||
<exclude>
|
|
||||||
<directory>./Resources</directory>
|
|
||||||
<directory>./Tests</directory>
|
|
||||||
<directory>./vendor</directory>
|
|
||||||
</exclude>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<server name="KERNEL_DIR" value="Resources/test/Fixtures/App/app/" />
|
|
||||||
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
|
|
||||||
</php>
|
|
||||||
</phpunit>
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/budget",
|
|
||||||
"description": "This bundle extend chill for recording element of a budget for peoples",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "https://framagit.org/Chill-project/BudgetBundle",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\BudgetBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
|
|
||||||
"symfony-app-dir": "Test/Fixtures/App/app/"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
11
src/Bundle/ChillCalendarBundle/.gitignore
vendored
11
src/Bundle/ChillCalendarBundle/.gitignore
vendored
@@ -1,11 +0,0 @@
|
|||||||
composer.lock
|
|
||||||
vendor/*
|
|
||||||
parameters.yml
|
|
||||||
*~
|
|
||||||
*.DS_Store
|
|
||||||
*.sass-cache
|
|
||||||
Resources/node_modules/
|
|
||||||
Tests/Fixtures/App/app/config/parameters.yml
|
|
||||||
/nbproject/private/
|
|
||||||
Resources/test/Fixtures/App/bootstrap.php.cache
|
|
||||||
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/calendar",
|
|
||||||
"description": "This bundle extends chill for managing a calendar",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"license": "AGPL-3.0-or-later",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "hhttps://gitlab.com/Chill-Projet/chill-bundles/",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\CalendarBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
|
|
||||||
"symfony-app-dir": "Test/Fixtures/App/app/"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
32
src/Bundle/ChillCustomFieldsBundle/.gitignore
vendored
32
src/Bundle/ChillCustomFieldsBundle/.gitignore
vendored
@@ -1,32 +0,0 @@
|
|||||||
/web/bundles/
|
|
||||||
/app/cache/*
|
|
||||||
!/app/cache/dev/security/nonces/index
|
|
||||||
!/app/cache/prod/security/nonces/index
|
|
||||||
/app/logs/*
|
|
||||||
/vendor/
|
|
||||||
/app/config/parameters.ini
|
|
||||||
/app/config/parameters.yml
|
|
||||||
/app/bootstrap*
|
|
||||||
/src/Acme/
|
|
||||||
/output/
|
|
||||||
/web/uploads/images/*
|
|
||||||
!/web/uploads/images/index.html
|
|
||||||
/src/Progracqteur/WikipedaleBundle/DataFixtures/ORM/Files/*
|
|
||||||
.gitignore~
|
|
||||||
*~
|
|
||||||
composer.phar
|
|
||||||
composer.lock
|
|
||||||
/nbproject/private/
|
|
||||||
parameters.yml
|
|
||||||
app/config/parameters.yml
|
|
||||||
Tests/Fixtures/App/app/config/parameters.yml
|
|
||||||
.DS_Store
|
|
||||||
*bower_components
|
|
||||||
bin/*
|
|
||||||
/tmp/*
|
|
||||||
src/Chill/CustomFieldsBundle/vendor/*
|
|
||||||
bootstrap.php.cache
|
|
||||||
#the file created by composer to store creds
|
|
||||||
auth.json
|
|
||||||
Tests/Fixtures/App/app/config/parameters.yml
|
|
||||||
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- echo "PHP version is $(php --version)"
|
|
||||||
- composer config github-oauth.github.com $GITHUB_TOKEN
|
|
||||||
- if [ $CI_BUILD_REF_NAME = "1.0" ] ; then export COMPOSER_ROOT_VERSION="1.0-dev"; else export COMPOSER_ROOT_VERSION="dev-master"; fi
|
|
||||||
- php -d memory_limit=-1 /usr/local/bin/composer install --no-interaction
|
|
||||||
- cp Resources/test/Fixtures/App/app/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/app/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/app/console --env=test cache:warmup
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- deploy
|
|
||||||
- test
|
|
||||||
- build-doc
|
|
||||||
- deploy-doc
|
|
||||||
|
|
||||||
test:php-7.2:
|
|
||||||
stage: test
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
<<: *test_definition
|
|
||||||
script: vendor/bin/phpunit
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
|
|
||||||
# deploy documentation
|
|
||||||
api-doc-build:
|
|
||||||
stage: build-doc
|
|
||||||
environment: api-doc
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
- mkdir api-doc
|
|
||||||
script: apigen generate --destination api-doc/$CI_BUILD_REF_NAME/$CI_PROJECT_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "api-doc/"
|
|
||||||
name: api
|
|
||||||
expire_in: '2h'
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
api-doc-deploy:
|
|
||||||
stage: deploy-doc
|
|
||||||
image: pallet/swiftclient:latest
|
|
||||||
before_script:
|
|
||||||
# test that CONTAINER_API variable is set
|
|
||||||
- if [ -z ${CONTAINER_API+x} ]; then echo "Please set CONTAINER_API variable"; exit -1; fi
|
|
||||||
# go to api-doc to have and url with PROJECT/BUILD
|
|
||||||
- cd api-doc
|
|
||||||
# upload, and keep files during 1 year
|
|
||||||
script: "swift upload --header \"X-Delete-After: 31536000\" $CONTAINER_API $CI_BUILD_REF_NAME/$CI_PROJECT_NAME"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
# configuration for apigen
|
|
||||||
|
|
||||||
|
|
||||||
source:
|
|
||||||
- .
|
|
||||||
|
|
||||||
accessLevels: ["public", "protected"]
|
|
||||||
|
|
||||||
exclude:
|
|
||||||
- vendor/*
|
|
||||||
- Resources/test/*
|
|
||||||
- Tests/Fixtures/*
|
|
||||||
|
|
||||||
title: Chill CustomFields Bundle
|
|
||||||
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/custom-fields",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"description": "This bundle allow to add custom fields on entities.",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "https://github.com/Chill-project/CustomFields",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\CustomFieldsBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors" : [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop",
|
|
||||||
"homepage": "http://www.champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true,
|
|
||||||
"scripts": {
|
|
||||||
"post-install-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"symfony-app-dir": "Tests/Fixtures/App/app",
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<phpunit bootstrap="./Resources/test/Fixtures/App/app/autoload.php" colors="true">
|
|
||||||
<!-- the file "./Tests/boostrap.php" will be created on the next step -->
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="ChillCustomField test suite">
|
|
||||||
<directory suffix="Test.php">./Tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory>./</directory>
|
|
||||||
<exclude>
|
|
||||||
<directory>./Resources</directory>
|
|
||||||
<directory>./Tests</directory>
|
|
||||||
<directory>./vendor</directory>
|
|
||||||
</exclude>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<server name="KERNEL_DIR" value="Resources/test/Fixtures/App/app/" />
|
|
||||||
<ini name="error_reporting" value="-16385"/>
|
|
||||||
</php>
|
|
||||||
</phpunit>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
php Tests/Fixtures/App/app/console.php server:run --docroot=Tests/Fixtures/App/web/
|
|
||||||
11
src/Bundle/ChillDocGeneratorBundle/.gitignore
vendored
11
src/Bundle/ChillDocGeneratorBundle/.gitignore
vendored
@@ -1,11 +0,0 @@
|
|||||||
composer.lock
|
|
||||||
vendor/*
|
|
||||||
parameters.yml
|
|
||||||
*~
|
|
||||||
*.DS_Store
|
|
||||||
*.sass-cache
|
|
||||||
Resources/node_modules/
|
|
||||||
Tests/Fixtures/App/app/config/parameters.yml
|
|
||||||
/nbproject/private/
|
|
||||||
Resources/test/Fixtures/App/bootstrap.php.cache
|
|
||||||
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/docgen",
|
|
||||||
"description": "This bundle extends chill for generation of documents",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"license": "AGPL-3.0-or-later",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "hhttps://gitlab.com/Chill-Projet/chill-bundles/",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\DocGeneratorBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"spomky-labs/base64url": "^2"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
|
|
||||||
"symfony-app-dir": "Test/Fixtures/App/app/"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
1
src/Bundle/ChillDocStoreBundle/.gitignore
vendored
1
src/Bundle/ChillDocStoreBundle/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
/vendor/
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
before_script:
|
|
||||||
- composer config github-oauth.github.com $GITHUB_TOKEN
|
|
||||||
- composer install
|
|
||||||
- cp Resources/test/Fixtures/App/app/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/app/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/app/console --env=test cache:warmup
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- deploy
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
|
|
||||||
Version 1.5.1
|
|
||||||
=============
|
|
||||||
|
|
||||||
- adding .gitlab-ci to upgrade automatically packagist
|
|
||||||
- adding fixtures for ACL and DocumentCategory
|
|
||||||
|
|
||||||
Version 1.5.2
|
|
||||||
=============
|
|
||||||
|
|
||||||
- fix some missing translations on update / create document and "any document" in list
|
|
||||||
- use dropzone to upload a document with a better UI
|
|
||||||
|
|
||||||
You must add `"dropzone": "^5.5.1"` to your dependencies in `packages.json` at the root project.
|
|
||||||
|
|
||||||
Version 1.5.3
|
|
||||||
=============
|
|
||||||
|
|
||||||
- the javascript for uploading a file now works within collections, listening to collection events.
|
|
||||||
|
|
||||||
Version 1.5.4
|
|
||||||
=============
|
|
||||||
|
|
||||||
- replace default message on download button below dropzone ;
|
|
||||||
- launch event when dropzone is initialized, to allow to customize events on dropzone;
|
|
||||||
- add privacy events to document index / show
|
|
||||||
- add privacy events to document edit / update
|
|
||||||
- remove dump message
|
|
||||||
|
|
||||||
Version 1.5.5
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add button to remove existing document in form, and improve UI in this part
|
|
||||||
- fix error when document is removed in form
|
|
||||||
|
|
||||||
Master branch
|
|
||||||
=============
|
|
||||||
|
|
||||||
- fix capitalization of person document pages
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/chill-doc-store",
|
|
||||||
"description": "A Chill bundle to store documents",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Chill\\DocStoreBundle\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"symfony/mime": "^4 || ^5",
|
|
||||||
"symfony/http-foundation": "^4"
|
|
||||||
},
|
|
||||||
"license": "AGPL-3.0"
|
|
||||||
}
|
|
||||||
24
src/Bundle/ChillEventBundle/.gitignore
vendored
24
src/Bundle/ChillEventBundle/.gitignore
vendored
@@ -1,24 +0,0 @@
|
|||||||
*~
|
|
||||||
# MacOS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Bootstrap
|
|
||||||
app/bootstrap*
|
|
||||||
|
|
||||||
# Symfony directories
|
|
||||||
vendor/*
|
|
||||||
*/logs/*
|
|
||||||
*/cache/*
|
|
||||||
web/uploads/*
|
|
||||||
web/bundles/*
|
|
||||||
|
|
||||||
# Configuration files
|
|
||||||
app/config/parameters.ini
|
|
||||||
app/config/parameters.yml
|
|
||||||
Tests/Fixtures/App/config/parameters.yml
|
|
||||||
|
|
||||||
# fixtures
|
|
||||||
Resources/test/Fixtures/App/DoctrineMigrations/
|
|
||||||
|
|
||||||
#composer
|
|
||||||
composer.lock
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
before_script:
|
|
||||||
- composer config github-oauth.github.com $GITHUB_TOKEN
|
|
||||||
- php -d memory_limit=-1 /usr/local/bin/composer install
|
|
||||||
- cp Resources/test/Fixtures/App/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/console --env=test cache:warmup
|
|
||||||
- php Resources/test/Fixtures/App/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- test
|
|
||||||
- deploy
|
|
||||||
- build-doc
|
|
||||||
- deploy-doc
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
test:php-5.6:
|
|
||||||
stage: test
|
|
||||||
<<: *test_definition
|
|
||||||
image: chill/ci-image:php-5.6
|
|
||||||
script: phpunit
|
|
||||||
|
|
||||||
test:php-7:
|
|
||||||
stage: test
|
|
||||||
<<: *test_definition
|
|
||||||
image: chill/ci-image:php-7
|
|
||||||
script: phpunit
|
|
||||||
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
|
|
||||||
# deploy documentation
|
|
||||||
api-doc-build:
|
|
||||||
stage: build-doc
|
|
||||||
environment: api-doc
|
|
||||||
image: chill/ci-image:php-7
|
|
||||||
before_script:
|
|
||||||
- mkdir api-doc
|
|
||||||
script: apigen generate --destination api-doc/$CI_BUILD_REF_NAME/$CI_PROJECT_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "api-doc/"
|
|
||||||
name: api
|
|
||||||
expire_in: '2h'
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
api-doc-deploy:
|
|
||||||
stage: deploy-doc
|
|
||||||
image: pallet/swiftclient:latest
|
|
||||||
before_script:
|
|
||||||
# test that CONTAINER_API variable is set
|
|
||||||
- if [ -z ${CONTAINER_API+x} ]; then echo "Please set CONTAINER_API variable"; exit -1; fi
|
|
||||||
# go to api-doc to have and url with PROJECT/BUILD
|
|
||||||
- cd api-doc
|
|
||||||
# upload, and keep files during 1 year
|
|
||||||
script: "swift upload --header \"X-Delete-After: 31536000\" $CONTAINER_API $CI_BUILD_REF_NAME/$CI_PROJECT_NAME"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
Branch sf3
|
|
||||||
==========
|
|
||||||
|
|
||||||
- fix symfony3 php depreciations ;
|
|
||||||
- add time to event dates ;
|
|
||||||
- add new moderator field on events ;
|
|
||||||
- misc improvements form styles ;
|
|
||||||
- adapt webpack config for styles sheets ;
|
|
||||||
- add a new page 'events participation' in menu person, that list all events participation for a person ;
|
|
||||||
- subscribe a person to an event from person context ;
|
|
||||||
- improve message translation ;
|
|
||||||
- add a first step to pick center in new event form ;
|
|
||||||
- add events in history timeline ;
|
|
||||||
- export participations list for an event ;
|
|
||||||
- add event administration pages ;
|
|
||||||
- add remove participation and remove event feature ;
|
|
||||||
- fix the way the bundle compile assets ;
|
|
||||||
This modification will require to update Chill-Standard to the latest version.
|
|
||||||
At least, the file `webpack.config.js` should be upgrade [to the last
|
|
||||||
version](https://framagit.org/Chill-project/Chill-Standard/-/blob/c7a7de68ec49d97c9e1481b72c1f848f9b5cb2d7/webpack.config.js)
|
|
||||||
- fix redirection when only one participation edit ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
# configuration for apigen
|
|
||||||
|
|
||||||
|
|
||||||
source:
|
|
||||||
- .
|
|
||||||
|
|
||||||
exclude:
|
|
||||||
- vendor/*
|
|
||||||
- Resources/test/*
|
|
||||||
|
|
||||||
title: Chill EventBundle
|
|
||||||
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/event",
|
|
||||||
"description": "This bundle extend chill software. This bundle allow to define event and participation to those events.",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"license": "AGPL-3.0-only",
|
|
||||||
"keywords" : ["chill", "social work"],
|
|
||||||
"homepage" : "https://git.framasoft.org/Chill-project/Chill-Group",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\EventBundle\\": "" }
|
|
||||||
},
|
|
||||||
"support": {
|
|
||||||
"issues": "https://git.framasoft.org/Chill-project/Chill-Event/issues",
|
|
||||||
"source": "https://git.framasoft.org/Chill-project/Chill-Event",
|
|
||||||
"docs" : "http://docs.chill.social",
|
|
||||||
"email": "dev@listes.chill.social"
|
|
||||||
},
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"suggest" : {
|
|
||||||
"chill-project/group": "dev-master@dev"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"post-install-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/DoctrineMigrations"
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<phpunit bootstrap="./Resources/test/bootstrap.php" colors="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="ChillEventBundle test suite">
|
|
||||||
<directory suffix="Test.php">./Tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory>./</directory>
|
|
||||||
<exclude>
|
|
||||||
<directory>./Resources</directory>
|
|
||||||
<directory>./Tests</directory>
|
|
||||||
<directory>./vendor</directory>
|
|
||||||
</exclude>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<server name="KERNEL_DIR" value="./Resources/test/Fixtures/App/" />
|
|
||||||
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
|
|
||||||
</php>
|
|
||||||
</phpunit>
|
|
||||||
34
src/Bundle/ChillMainBundle/.gitignore
vendored
34
src/Bundle/ChillMainBundle/.gitignore
vendored
@@ -1,34 +0,0 @@
|
|||||||
# MacOS
|
|
||||||
.DS_Store
|
|
||||||
|
|
||||||
# Bootstrap
|
|
||||||
app/bootstrap*
|
|
||||||
|
|
||||||
# Symfony directories
|
|
||||||
vendor/*
|
|
||||||
*/logs/*
|
|
||||||
*/cache/*
|
|
||||||
web/uploads/*
|
|
||||||
web/bundles/*
|
|
||||||
|
|
||||||
# Configuration files
|
|
||||||
app/config/parameters.ini
|
|
||||||
app/config/parameters.yml
|
|
||||||
Tests/Fixtures/App/config/parameters.yml
|
|
||||||
|
|
||||||
#composer
|
|
||||||
composer.lock
|
|
||||||
#sass-cache
|
|
||||||
Resources/assets/gumpy/.sass-cache
|
|
||||||
Resources/public/stylesheets/sass
|
|
||||||
*~
|
|
||||||
|
|
||||||
Resources/.sass-cache/
|
|
||||||
Resources/bower_components/
|
|
||||||
Resources/node_modules/
|
|
||||||
|
|
||||||
/nbproject/private/
|
|
||||||
|
|
||||||
# Yarn lock
|
|
||||||
Resources/package-lock.json
|
|
||||||
Resources/yarn.lock
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
before_script:
|
|
||||||
- composer config github-oauth.github.com $GITHUB_TOKEN
|
|
||||||
- composer install
|
|
||||||
- cp Resources/test/Fixtures/App/app/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/app/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/app/console --env=test cache:warmup
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- deploy
|
|
||||||
- test
|
|
||||||
- build-doc
|
|
||||||
- deploy-doc
|
|
||||||
|
|
||||||
test:php-7.2:
|
|
||||||
stage: test
|
|
||||||
<<: *test_definition
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
script: APP_ENV=test vendor/bin/phpunit
|
|
||||||
|
|
||||||
# deploy documentation
|
|
||||||
api-doc-build:
|
|
||||||
stage: build-doc
|
|
||||||
environment: api-doc
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
- mkdir api-doc
|
|
||||||
script: apigen generate --destination api-doc/$CI_BUILD_REF_NAME/$CI_PROJECT_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "api-doc/"
|
|
||||||
name: api
|
|
||||||
expire_in: '2h'
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
api-doc-deploy:
|
|
||||||
stage: deploy-doc
|
|
||||||
image: pallet/swiftclient:latest
|
|
||||||
before_script:
|
|
||||||
# test that CONTAINER_API variable is set
|
|
||||||
- if [ -z ${CONTAINER_API+x} ]; then echo "Please set CONTAINER_API variable"; exit -1; fi
|
|
||||||
# go to api-doc to have and url with PROJECT/BUILD
|
|
||||||
- cd api-doc
|
|
||||||
# upload, and keep files during 1 year
|
|
||||||
script: "swift upload --header \"X-Delete-After: 31536000\" $CONTAINER_API $CI_BUILD_REF_NAME/$CI_PROJECT_NAME"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
Version 1.5.1
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add email to users on fixtures ;
|
|
||||||
- spare ressource with recursive trigger on inserting user ;
|
|
||||||
- fix error when no flags are used during edit and creation of permission group ;
|
|
||||||
|
|
||||||
Version 1.5.2
|
|
||||||
=============
|
|
||||||
|
|
||||||
- allow to filters users shown by `UserPickerType` based on flags. This flags do an additional filter based on the flags assigned in permissions groups;
|
|
||||||
- add a method to filters users by permissions groups flags in `UserRepository`
|
|
||||||
|
|
||||||
Version 1.5.3
|
|
||||||
=============
|
|
||||||
|
|
||||||
- fix error when interval is hour only
|
|
||||||
|
|
||||||
Version 1.5.4
|
|
||||||
=============
|
|
||||||
|
|
||||||
- layout of page "list exports"
|
|
||||||
- create function "SIMILARITY" (see [posgtgresql documentation](https://www.postgresql.org/docs/9.6/static/pgtrgm.html))
|
|
||||||
- create function "OVERLAPSI", which will detect period of date overlapping, replacing NULL date by infinity or -infinity (see [postgresql page for date time function and operators](https://www.postgresql.org/docs/9.6/static/functions-datetime.html))
|
|
||||||
- add repository for Center class
|
|
||||||
|
|
||||||
Version 1.5.5
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add margin of 0.5rem beyond buttons ;
|
|
||||||
- add a spreadsheet formatter (format xlsx, ods, csv) for lists
|
|
||||||
- add possibility to generate DirectExport: exports without formatters, filters and aggregators ;
|
|
||||||
- add api for grouping centers ;
|
|
||||||
- select centers as grouped on step "pick centers" in exports ;
|
|
||||||
|
|
||||||
Version 1.5.6
|
|
||||||
=============
|
|
||||||
|
|
||||||
- fix long url in report download. The exports parameters are now stored in redis.
|
|
||||||
- add an option to allow address to be empty if street or postcode is not set. Used for embedding address in another form, when address is not required.
|
|
||||||
|
|
||||||
Version 1.5.7
|
|
||||||
=============
|
|
||||||
|
|
||||||
- insert the title of the export inside the "download" page ;
|
|
||||||
- add twig helper "print_or_message" ;
|
|
||||||
- add twig helper for routing ;
|
|
||||||
- add css layout for boxes ;
|
|
||||||
- collect supplementary query parameters in SearchController ;
|
|
||||||
|
|
||||||
Version 1.5.8
|
|
||||||
=============
|
|
||||||
|
|
||||||
- allow to remove interval units from DateInterval
|
|
||||||
|
|
||||||
Version 1.5.9
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add optionnal impersonate feature (if firewall option switch_user is true) ;
|
|
||||||
|
|
||||||
Version 1.5.10
|
|
||||||
==============
|
|
||||||
|
|
||||||
- allow to group export in UI
|
|
||||||
|
|
||||||
Version 1.5.11
|
|
||||||
==============
|
|
||||||
|
|
||||||
- improve return path functions and filters ;
|
|
||||||
|
|
||||||
Version 1.5.12
|
|
||||||
==============
|
|
||||||
|
|
||||||
- make the redirection to admin temporarily: some admin experienced cache problems (403 error) when they switched from one admin account to a non-admin one ;
|
|
||||||
|
|
||||||
Version 1.5.13
|
|
||||||
==============
|
|
||||||
|
|
||||||
- allow to customize logo on login screen and main layout ;
|
|
||||||
- remove desert background image on page, handle it from cache in login screen;
|
|
||||||
|
|
||||||
Version 1.5.14
|
|
||||||
==============
|
|
||||||
|
|
||||||
- fix errors in pagination
|
|
||||||
- fix search: usage of parenthesis
|
|
||||||
- add DQL function REPLACE for replacing in strings: "REPLACE(string, 'from', 'to')"
|
|
||||||
- add function to format phonenumber
|
|
||||||
- improve `chill_print_or_message` to support date time;
|
|
||||||
- add a module `show_hide` for javascript;
|
|
||||||
- load assets using functions ;
|
|
||||||
- load a `runtime.js` assets for objects shared by webpack ;
|
|
||||||
|
|
||||||
Version 1.5.15
|
|
||||||
==============
|
|
||||||
|
|
||||||
- create an api for rendering entities
|
|
||||||
- css: render the placeholder in expanded choice item as italic (the "no specified" choice")
|
|
||||||
- css: add an extra space around choices expanded widget
|
|
||||||
- add Tabs parametric feature to easily render tabs panels
|
|
||||||
- css: add a margin on the button "delete entry" in collection
|
|
||||||
- module `show_hide`: add the possibility to launch a show hide manually and not on page loading. Useful when show/hide occurs in collection.
|
|
||||||
- module `show_hide`: add events to module
|
|
||||||
- [phonenumber validation] allow to validate against mobile **or** landline/voip phonenumbers;
|
|
||||||
- [phonenumber validation & format] format and validation does not make the app fail when network is not available;
|
|
||||||
|
|
||||||
Version 1.5.16
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [translation] in french, replace "Modifier" by "Enregistrer" in the edit form
|
|
||||||
- [entity render] do not throw an exception when null element are passed to `chill_entity_render_box` and `chill_entity_render_string`
|
|
||||||
|
|
||||||
Version 1.5.17
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [chill entity render] fix error when fallback to default entity render (usage of `__toString()`)
|
|
||||||
- [CRUD] add step delete
|
|
||||||
- [CRUD] check that action exists before inserting them in edit and view template
|
|
||||||
- [CRUD] fix error when no crud are created
|
|
||||||
|
|
||||||
Version 1.5.18
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [webpack] add namespace for import sass ;
|
|
||||||
- [activity] move activity.scss to own bundle ;
|
|
||||||
|
|
||||||
Version 1.5.19
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [address] add a "homeless" characteristic to addresses ;
|
|
||||||
|
|
||||||
Version 1.5.20
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [CRUD] make index query more abstract.
|
|
||||||
|
|
||||||
Improve build and count query in default index action to be customized
|
|
||||||
in one dedicated method.
|
|
||||||
|
|
||||||
Version 1.5.21
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [Export list] improve alignment of last line
|
|
||||||
- [CRUD] Forward query parameters when pushing button "save and new" in "create" page;
|
|
||||||
- [Show/hide] Take selects input into account;
|
|
||||||
|
|
||||||
Version 1.5.23
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [address] allow to add custom fields to addresses
|
|
||||||
|
|
||||||
Version 1.5.24
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [bugfix] add missing migration files
|
|
||||||
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
# configuration for apigen
|
|
||||||
|
|
||||||
|
|
||||||
source:
|
|
||||||
- .
|
|
||||||
|
|
||||||
exclude:
|
|
||||||
- vendor/*
|
|
||||||
- Tests/*
|
|
||||||
- Resource/tests/*
|
|
||||||
|
|
||||||
title: Chill MainBundle
|
|
||||||
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chill-project/main",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"type": "symfony-bundle",
|
|
||||||
"description": "The main bundle for the Chill App",
|
|
||||||
"keywords" : ["chill", "social work", "software for social service"],
|
|
||||||
"homepage" : "http://chill.social",
|
|
||||||
"support": {
|
|
||||||
"email": "dev@lists.chill.social",
|
|
||||||
"issues": "https://git.framasoft.org/Chill-project/Chill-Main/issues",
|
|
||||||
"sources": "https://git.framasoft.org/Chill-project/Chill-Main",
|
|
||||||
"docs": "http://docs.chill.social"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Chill\\MainBundle\\": "" }
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"classmap": [ "Resources/test/Fixtures/App/app/AppKernel.php" ]
|
|
||||||
},
|
|
||||||
"authors" : [
|
|
||||||
{
|
|
||||||
"name": "Champs-Libres",
|
|
||||||
"email": "info@champs-libres.coop",
|
|
||||||
"homepage": "http://www.champs-libres.coop"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"league/csv": "^9.6",
|
|
||||||
"phpoffice/phpspreadsheet": "~1.2",
|
|
||||||
"odolbeau/phone-number-bundle": "^3.6"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"post-install-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
],
|
|
||||||
"post-update-cmd": [
|
|
||||||
"ComposerBundleMigration\\Composer\\Migrations::synchronizeMigrations",
|
|
||||||
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"app-migrations-dir": "Resources/test/Fixtures/App/app/DoctrineMigrations",
|
|
||||||
"symfony-app-dir": "Tests/Fixtures/App/"
|
|
||||||
},
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
|
||||||
<phpdoc>
|
|
||||||
<parser>
|
|
||||||
<target>data/output</target>
|
|
||||||
<default-package-name>Chill\MainBundle</default-package-name>
|
|
||||||
</parser>
|
|
||||||
<transformer>
|
|
||||||
<target>data/output</target>
|
|
||||||
</transformer>
|
|
||||||
<files>
|
|
||||||
<directory>.</directory>
|
|
||||||
<ignore>Tests/Fixtures/App/AppKernel.php</ignore>
|
|
||||||
</files>
|
|
||||||
</phpdoc>
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<phpunit bootstrap="./vendor/autoload.php" colors="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="ChillMain test suite">
|
|
||||||
<directory suffix="Test.php">./Tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
<filter>
|
|
||||||
<whitelist>
|
|
||||||
<directory>./</directory>
|
|
||||||
<exclude>
|
|
||||||
<directory>./Resources</directory>
|
|
||||||
<directory>./Tests</directory>
|
|
||||||
<directory>./vendor</directory>
|
|
||||||
</exclude>
|
|
||||||
</whitelist>
|
|
||||||
</filter>
|
|
||||||
<php>
|
|
||||||
<server name="KERNEL_DIR" value="./Resources/test/Fixtures/App/app" />
|
|
||||||
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak" />
|
|
||||||
<env name="APP_ENV" value="test" />
|
|
||||||
</php>
|
|
||||||
</phpunit>
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
; top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
; Unix-style newlines
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = LF
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
[*.{php,html,twig}]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.md]
|
|
||||||
max_line_length = 80
|
|
||||||
|
|
||||||
[COMMIT_EDITMSG]
|
|
||||||
max_line_length = 0
|
|
||||||
11
src/Bundle/ChillPersonBundle/.gitignore
vendored
11
src/Bundle/ChillPersonBundle/.gitignore
vendored
@@ -1,11 +0,0 @@
|
|||||||
composer.lock
|
|
||||||
vendor/*
|
|
||||||
parameters.yml
|
|
||||||
*~
|
|
||||||
*.DS_Store
|
|
||||||
*.sass-cache
|
|
||||||
Resources/node_modules/
|
|
||||||
Tests/Fixtures/App/app/config/parameters.yml
|
|
||||||
/nbproject/private/
|
|
||||||
Resources/test/Fixtures/App/bootstrap.php.cache
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
.test_definition: &test_definition
|
|
||||||
services:
|
|
||||||
- chill/database:latest
|
|
||||||
before_script:
|
|
||||||
- if [ -z ${GITHUB_TOKEN+x} ]; then composer config github-oauth.github.com $GITHUB_TOKEN; fi
|
|
||||||
- php -d memory_limit=-1 /usr/local/bin/composer install --no-interaction
|
|
||||||
- cp Resources/test/Fixtures/App/app/config/parameters.gitlab-ci.yml Resources/test/Fixtures/App/app/config/parameters.yml
|
|
||||||
- php Resources/test/Fixtures/App/app/console --env=test cache:warmup
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:migrations:migrate --env=test --no-interaction
|
|
||||||
- php Resources/test/Fixtures/App/app/console doctrine:fixtures:load --env=test --no-interaction
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- deploy
|
|
||||||
- test
|
|
||||||
- build-doc
|
|
||||||
- deploy-doc
|
|
||||||
|
|
||||||
test:php-7.2:
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
stage: test
|
|
||||||
<<: *test_definition
|
|
||||||
script: APP_ENV=test php vendor/bin/phpunit
|
|
||||||
|
|
||||||
deploy-packagist:
|
|
||||||
stage: deploy
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
# test that PACKAGIST USERNAME and PACKAGIST_TOKEN variable are set
|
|
||||||
- if [ -z ${PACKAGIST_USERNAME+x} ]; then echo "Please set PACKAGIST_USERNAME variable"; exit -1; fi
|
|
||||||
- if [ -z ${PACKAGIST_TOKEN+x} ]; then echo "Please set PACKAGIST_TOKEN variable"; exit -1; fi
|
|
||||||
script:
|
|
||||||
- STATUSCODE=$(curl -XPOST -H'content-type:application/json' "https://packagist.org/api/update-package?username=$PACKAGIST_USERNAME&apiToken=$PACKAGIST_TOKEN" -d"{\"repository\":{\"url\":\"$CI_PROJECT_URL.git\"}}" --silent --output /dev/stderr --write-out "%{http_code}")
|
|
||||||
- if [ $STATUSCODE = "202" ]; then exit 0; else exit $STATUSCODE; fi
|
|
||||||
|
|
||||||
# deploy documentation
|
|
||||||
api-doc-build:
|
|
||||||
stage: build-doc
|
|
||||||
environment: api-doc
|
|
||||||
image: chill/ci-image:php-7.2
|
|
||||||
before_script:
|
|
||||||
- mkdir api-doc
|
|
||||||
script: apigen generate --destination api-doc/$CI_BUILD_REF_NAME/$CI_PROJECT_NAME
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "api-doc/"
|
|
||||||
name: api
|
|
||||||
expire_in: '2h'
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
|
|
||||||
api-doc-deploy:
|
|
||||||
stage: deploy-doc
|
|
||||||
image: pallet/swiftclient:latest
|
|
||||||
before_script:
|
|
||||||
# test that CONTAINER_API variable is set
|
|
||||||
- if [ -z ${CONTAINER_API+x} ]; then echo "Please set CONTAINER_API variable"; exit -1; fi
|
|
||||||
# go to api-doc to have and url with PROJECT/BUILD
|
|
||||||
- cd api-doc
|
|
||||||
# upload, and keep files during 1 year
|
|
||||||
script: "swift upload --header \"X-Delete-After: 31536000\" $CONTAINER_API $CI_BUILD_REF_NAME/$CI_PROJECT_NAME"
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- tags
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
|
|
||||||
Version 1.5.1
|
|
||||||
=============
|
|
||||||
|
|
||||||
- Improve import of person to allow multiple centers by file ;
|
|
||||||
- Launch an event on person import ;
|
|
||||||
- Allow person to have a `null` gender ;
|
|
||||||
- Allow filters and aggregator to handle null gender ;
|
|
||||||
- remove inexistant `person.css` file
|
|
||||||
- fix bug in accompanying person validation
|
|
||||||
|
|
||||||
Version 1.5.2
|
|
||||||
==============
|
|
||||||
|
|
||||||
- Add an column with fullname canonical (lowercase and unaccent) to persons entity ;
|
|
||||||
- Add a trigram index on fullname canonical ;
|
|
||||||
- Add a "similar person matcher", which allow to detect person with similar names when adding a person ;
|
|
||||||
- Add a research of persons by fuzzy name, returning result with a similarity of 0.15 ;
|
|
||||||
|
|
||||||
Thanks to @matla :-)
|
|
||||||
|
|
||||||
Version 1.5.3
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add filtering on accompanying period
|
|
||||||
- fix problems in gender filter
|
|
||||||
|
|
||||||
Version 1.5.4
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add filenumber in person header
|
|
||||||
|
|
||||||
Version 1.5.5
|
|
||||||
=============
|
|
||||||
|
|
||||||
- Fix bug in accompanying period filter
|
|
||||||
|
|
||||||
Version 1.5.6
|
|
||||||
=============
|
|
||||||
|
|
||||||
- Update address validation
|
|
||||||
- Add command to move person and all data of a person to a new one, and delete the old one.
|
|
||||||
|
|
||||||
Version 1.5.7
|
|
||||||
=============
|
|
||||||
|
|
||||||
- fix error on macro renderPerson / withLink not taken into account
|
|
||||||
- add a link between accompanying person and user
|
|
||||||
- add an icon when the file is opened / closed in result list, and in person rendering macro
|
|
||||||
- improve command to move person and all data: allow to delete some entities during move and add events
|
|
||||||
|
|
||||||
Version 1.5.8
|
|
||||||
=============
|
|
||||||
|
|
||||||
- add search by phonenumber, with a custom SearchInterface
|
|
||||||
|
|
||||||
This can be activated or desactivated by config:
|
|
||||||
|
|
||||||
```
|
|
||||||
chill_person:
|
|
||||||
enabled: true
|
|
||||||
search:
|
|
||||||
enabled: true
|
|
||||||
|
|
||||||
# enable search by phone. 'always' show the result on every result. 'on-domain' will show the result only if the domain is given in the search box. 'never' disable this feature
|
|
||||||
search_by_phone: on-domain # One of "always"; "on-domain"; "never"
|
|
||||||
```
|
|
||||||
- format phonenumber using twilio (if available) ;
|
|
||||||
- add `record_actions` in person search result list: users can click on a little eye to open person page ;
|
|
||||||
- add new fields (email, mobilenumber, gender) into importPeopleFromCSV command
|
|
||||||
- configure asset using a function
|
|
||||||
|
|
||||||
|
|
||||||
Version 1.5.9
|
|
||||||
=============
|
|
||||||
|
|
||||||
- create CRUD
|
|
||||||
- add the ability to add alt names to persons
|
|
||||||
- [UI] set action button bottom of edit form according to crud template
|
|
||||||
- [closing motive] add an hierarchy for closing motives ;
|
|
||||||
- [closing motive] Add an admin section for closing motives ;
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
Version 1.5.10
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [closing motive] display closing motive in remark
|
|
||||||
|
|
||||||
Version 1.5.11
|
|
||||||
==============
|
|
||||||
|
|
||||||
- Fix versioning constraint to chill main
|
|
||||||
|
|
||||||
Version 1.5.12
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [addresses] add a homeless to person's addresses, and this information into
|
|
||||||
person list
|
|
||||||
|
|
||||||
Version 1.5.13
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [CRUD] add step delete
|
|
||||||
- [CRUD] improve index view in person CRUD
|
|
||||||
- [CRUD] filter by basis on person by default in EntityPersonCRUDController
|
|
||||||
- [CRUD] override relevant part of the main CRUD template
|
|
||||||
- [CRUD] fix redirection on person view: add a `person_id` to every page redirected.
|
|
||||||
|
|
||||||
Version 1.5.14
|
|
||||||
==============
|
|
||||||
|
|
||||||
- [Accompanying period list] Fix period label in list
|
|
||||||
- [Accompanying period list] Fix label of closing motive
|
|
||||||
- [Person details] Add an "empty" statement on place of birth
|
|
||||||
- [Person list] Add a lock/unlock icon instead of open/closed folder in result list;
|
|
||||||
- [Admin closing motive] Remove links to Closing motive View;
|
|
||||||
- [Admin closing motive] Improve icons for active in list of closing motive;
|
|
||||||
@@ -1,661 +0,0 @@
|
|||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
Version 3, 19 November 2007
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The GNU Affero General Public License is a free, copyleft license for
|
|
||||||
software and other kinds of works, specifically designed to ensure
|
|
||||||
cooperation with the community in the case of network server software.
|
|
||||||
|
|
||||||
The licenses for most software and other practical works are designed
|
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
our General Public Licenses are intended to guarantee your freedom to
|
|
||||||
share and change all versions of a program--to make sure it remains free
|
|
||||||
software for all its users.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
Developers that use our General Public Licenses protect your rights
|
|
||||||
with two steps: (1) assert copyright on the software, and (2) offer
|
|
||||||
you this License which gives you legal permission to copy, distribute
|
|
||||||
and/or modify the software.
|
|
||||||
|
|
||||||
A secondary benefit of defending all users' freedom is that
|
|
||||||
improvements made in alternate versions of the program, if they
|
|
||||||
receive widespread use, become available for other developers to
|
|
||||||
incorporate. Many developers of free software are heartened and
|
|
||||||
encouraged by the resulting cooperation. However, in the case of
|
|
||||||
software used on network servers, this result may fail to come about.
|
|
||||||
The GNU General Public License permits making a modified version and
|
|
||||||
letting the public access it on a server without ever releasing its
|
|
||||||
source code to the public.
|
|
||||||
|
|
||||||
The GNU Affero General Public License is designed specifically to
|
|
||||||
ensure that, in such cases, the modified source code becomes available
|
|
||||||
to the community. It requires the operator of a network server to
|
|
||||||
provide the source code of the modified version running there to the
|
|
||||||
users of that server. Therefore, public use of a modified version, on
|
|
||||||
a publicly accessible server, gives the public access to the source
|
|
||||||
code of the modified version.
|
|
||||||
|
|
||||||
An older license, called the Affero General Public License and
|
|
||||||
published by Affero, was designed to accomplish similar goals. This is
|
|
||||||
a different license, not a version of the Affero GPL, but Affero has
|
|
||||||
released a new version of the Affero GPL which permits relicensing under
|
|
||||||
this license.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, if you modify the
|
|
||||||
Program, your modified version must prominently offer all users
|
|
||||||
interacting with it remotely through a computer network (if your version
|
|
||||||
supports such interaction) an opportunity to receive the Corresponding
|
|
||||||
Source of your version by providing access to the Corresponding Source
|
|
||||||
from a network server at no charge, through some standard or customary
|
|
||||||
means of facilitating copying of software. This Corresponding Source
|
|
||||||
shall include the Corresponding Source for any work covered by version 3
|
|
||||||
of the GNU General Public License that is incorporated pursuant to the
|
|
||||||
following paragraph.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the work with which it is combined will remain governed by version
|
|
||||||
3 of the GNU General Public License.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU Affero General Public License from time to time. Such new versions
|
|
||||||
will be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU Affero General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU Affero General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU Affero General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If your software can interact with users remotely through a computer
|
|
||||||
network, you should also make sure that it provides a way for users to
|
|
||||||
get its source. For example, if your program is a web application, its
|
|
||||||
interface could display a "Source" link that leads users to an archive
|
|
||||||
of the code. There are many ways you could offer source, and different
|
|
||||||
solutions will be better for different programs; see section 13 for the
|
|
||||||
specific requirements.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
||||||
<http://www.gnu.org/licenses/>.
|
|
||||||
@@ -1,43 +1,43 @@
|
|||||||
import {
|
import {
|
||||||
Address,
|
Address,
|
||||||
Center,
|
Center,
|
||||||
Civility,
|
Civility,
|
||||||
DateTime,
|
DateTime,
|
||||||
User,
|
User,
|
||||||
WorkflowAvailable,
|
WorkflowAvailable,
|
||||||
} from "../../../ChillMainBundle/Resources/public/types";
|
} from "../../../ChillMainBundle/Resources/public/types";
|
||||||
import { StoredObject } from "../../../ChillDocStoreBundle/Resources/public/types";
|
import { StoredObject } from "../../../ChillDocStoreBundle/Resources/public/types";
|
||||||
|
|
||||||
export interface Person {
|
export interface Person {
|
||||||
id: number;
|
id: number;
|
||||||
type: "person";
|
type: "person";
|
||||||
text: string;
|
text: string;
|
||||||
textAge: string;
|
textAge: string;
|
||||||
firstName: string;
|
firstName: string;
|
||||||
lastName: string;
|
lastName: string;
|
||||||
current_household_address: Address | null;
|
current_household_address: Address | null;
|
||||||
birthdate: DateTime | null;
|
birthdate: DateTime | null;
|
||||||
deathdate: DateTime | null;
|
deathdate: DateTime | null;
|
||||||
age: number;
|
age: number;
|
||||||
phonenumber: string;
|
phonenumber: string;
|
||||||
mobilenumber: string;
|
mobilenumber: string;
|
||||||
email: string;
|
email: string;
|
||||||
gender: "woman" | "man" | "other";
|
gender: "woman" | "man" | "other";
|
||||||
centers: Center[];
|
centers: Center[];
|
||||||
civility: Civility | null;
|
civility: Civility | null;
|
||||||
current_household_id: number;
|
current_household_id: number;
|
||||||
current_residential_addresses: Address[];
|
current_residential_addresses: Address[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface AccompanyingPeriodWorkEvaluationDocument {
|
export interface AccompanyingPeriodWorkEvaluationDocument {
|
||||||
id: number;
|
id: number;
|
||||||
type: "accompanying_period_work_evaluation_document";
|
type: "accompanying_period_work_evaluation_document";
|
||||||
storedObject: StoredObject;
|
storedObject: StoredObject;
|
||||||
title: string;
|
title: string;
|
||||||
createdAt: DateTime | null;
|
createdAt: DateTime | null;
|
||||||
createdBy: User | null;
|
createdBy: User | null;
|
||||||
updatedAt: DateTime | null;
|
updatedAt: DateTime | null;
|
||||||
updatedBy: User | null;
|
updatedBy: User | null;
|
||||||
workflows_availables: WorkflowAvailable[];
|
workflows_availables: WorkflowAvailable[];
|
||||||
workflows: object[];
|
workflows: object[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
<template>
|
<template>
|
||||||
<banner />
|
<banner />
|
||||||
<sticky-nav />
|
<sticky-nav />
|
||||||
|
|
||||||
<h1 v-if="accompanyingCourse.step === 'DRAFT'">
|
<h1 v-if="accompanyingCourse.step === 'DRAFT'">
|
||||||
{{ $t("course.title.draft") }}
|
{{ $t("course.title.draft") }}
|
||||||
</h1>
|
</h1>
|
||||||
<h1 v-else>
|
<h1 v-else>
|
||||||
{{ $t("course.title.active") }}
|
{{ $t("course.title.active") }}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<persons-associated />
|
<persons-associated />
|
||||||
<course-location />
|
<course-location />
|
||||||
<origin-demand />
|
<origin-demand />
|
||||||
<admin-location />
|
<admin-location />
|
||||||
<requestor :is-anonymous="accompanyingCourse.requestorAnonymous" />
|
<requestor :is-anonymous="accompanyingCourse.requestorAnonymous" />
|
||||||
<social-issue />
|
<social-issue />
|
||||||
<scopes />
|
<scopes />
|
||||||
<referrer />
|
<referrer />
|
||||||
<resources />
|
<resources />
|
||||||
<start-date v-if="accompanyingCourse.step.startsWith('CONFIRMED')" />
|
<start-date v-if="accompanyingCourse.step.startsWith('CONFIRMED')" />
|
||||||
<comment v-if="accompanyingCourse.step === 'DRAFT'" />
|
<comment v-if="accompanyingCourse.step === 'DRAFT'" />
|
||||||
<confirm v-if="accompanyingCourse.step === 'DRAFT'" />
|
<confirm v-if="accompanyingCourse.step === 'DRAFT'" />
|
||||||
|
|
||||||
<!-- <div v-for="error in errorMsg" v-bind:key="error.id" class="vue-component errors alert alert-danger">
|
<!-- <div v-for="error in errorMsg" v-bind:key="error.id" class="vue-component errors alert alert-danger">
|
||||||
<p>
|
<p>
|
||||||
<span>{{ error.sta }} {{ error.txt }}</span><br>
|
<span>{{ error.sta }} {{ error.txt }}</span><br>
|
||||||
<span>{{ $t(error.msg) }}</span>
|
<span>{{ $t(error.msg) }}</span>
|
||||||
@@ -47,26 +47,26 @@ import Confirm from "./components/Confirm.vue";
|
|||||||
import StartDate from "./components/StartDate.vue";
|
import StartDate from "./components/StartDate.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
components: {
|
components: {
|
||||||
Banner,
|
Banner,
|
||||||
StickyNav,
|
StickyNav,
|
||||||
OriginDemand,
|
OriginDemand,
|
||||||
AdminLocation,
|
AdminLocation,
|
||||||
PersonsAssociated,
|
PersonsAssociated,
|
||||||
Requestor,
|
Requestor,
|
||||||
SocialIssue,
|
SocialIssue,
|
||||||
CourseLocation,
|
CourseLocation,
|
||||||
Scopes,
|
Scopes,
|
||||||
Referrer,
|
Referrer,
|
||||||
Resources,
|
Resources,
|
||||||
Comment,
|
Comment,
|
||||||
Confirm,
|
Confirm,
|
||||||
StartDate,
|
StartDate,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["accompanyingCourse", "addressContext"]),
|
...mapState(["accompanyingCourse", "addressContext"]),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -75,62 +75,62 @@ export default {
|
|||||||
$chill-accourse-context: #718596;
|
$chill-accourse-context: #718596;
|
||||||
|
|
||||||
div#accompanying-course {
|
div#accompanying-course {
|
||||||
div.vue-component {
|
div.vue-component {
|
||||||
h2 {
|
h2 {
|
||||||
margin: 1em 0.7em;
|
margin: 1em 0.7em;
|
||||||
position: relative;
|
position: relative;
|
||||||
&:before {
|
&:before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: "\f142"; //ellipsis-v
|
content: "\f142"; //ellipsis-v
|
||||||
font-family: "ForkAwesome";
|
font-family: "ForkAwesome";
|
||||||
color: tint-color($chill-accourse-context, 10%);
|
color: tint-color($chill-accourse-context, 10%);
|
||||||
left: -22px;
|
left: -22px;
|
||||||
top: 4px;
|
top: 4px;
|
||||||
}
|
}
|
||||||
a[id^="section"] {
|
a[id^="section"] {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -2.5em; // reference for stickNav
|
top: -2.5em; // reference for stickNav
|
||||||
}
|
}
|
||||||
}
|
|
||||||
padding: 0em 0em;
|
|
||||||
margin: 1em 0;
|
|
||||||
border-radius: 5px;
|
|
||||||
border: 1px dotted tint-color($chill-accourse-context, 10%);
|
|
||||||
border-left: 1px dotted tint-color($chill-accourse-context, 10%);
|
|
||||||
border-right: 1px dotted tint-color($chill-accourse-context, 10%);
|
|
||||||
dd {
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
& > div {
|
|
||||||
margin: 1em 3em 0;
|
|
||||||
|
|
||||||
&.flex-table,
|
|
||||||
&.flex-bloc {
|
|
||||||
margin: 1em 0 0;
|
|
||||||
}
|
|
||||||
&.alert.to-confirm {
|
|
||||||
margin: 1em 0 0;
|
|
||||||
padding: 1em 3em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
div.flex-table {
|
|
||||||
div.item-row {
|
|
||||||
div.item-col:first-child {
|
|
||||||
flex-basis: 33%;
|
|
||||||
}
|
}
|
||||||
}
|
padding: 0em 0em;
|
||||||
}
|
margin: 1em 0;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px dotted tint-color($chill-accourse-context, 10%);
|
||||||
|
border-left: 1px dotted tint-color($chill-accourse-context, 10%);
|
||||||
|
border-right: 1px dotted tint-color($chill-accourse-context, 10%);
|
||||||
|
dd {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
& > div {
|
||||||
|
margin: 1em 3em 0;
|
||||||
|
|
||||||
&.errors {
|
&.flex-table,
|
||||||
//display: flex;
|
&.flex-bloc {
|
||||||
//position: sticky;
|
margin: 1em 0 0;
|
||||||
//bottom: 0.3em;
|
}
|
||||||
//z-index: 1000;
|
&.alert.to-confirm {
|
||||||
margin: 1em 0;
|
margin: 1em 0 0;
|
||||||
padding: 1em;
|
padding: 1em 3em;
|
||||||
border-radius: 0;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.flex-table {
|
||||||
|
div.item-row {
|
||||||
|
div.item-col:first-child {
|
||||||
|
flex-basis: 33%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.errors {
|
||||||
|
//display: flex;
|
||||||
|
//position: sticky;
|
||||||
|
//bottom: 0.3em;
|
||||||
|
//z-index: 1000;
|
||||||
|
margin: 1em 0;
|
||||||
|
padding: 1em;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,35 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-40" />{{ $t("admin_location.title") }}</h2>
|
<h2><a id="section-40" />{{ $t("admin_location.title") }}</h2>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label for="selectAdminLocation">
|
<label for="selectAdminLocation">
|
||||||
{{ $t("admin_location.title") }}
|
{{ $t("admin_location.title") }}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
name="selectAdminLocation"
|
name="selectAdminLocation"
|
||||||
label="text"
|
label="text"
|
||||||
:custom-label="customLabel"
|
:custom-label="customLabel"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
:placeholder="$t('admin_location.placeholder')"
|
:placeholder="$t('admin_location.placeholder')"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
:options="options"
|
:options="options"
|
||||||
group-values="locations"
|
group-values="locations"
|
||||||
group-label="locationCategories"
|
group-label="locationCategories"
|
||||||
:select-label="$t('multiselect.select_label')"
|
:select-label="$t('multiselect.select_label')"
|
||||||
:deselect-label="$t('multiselect.deselect_label')"
|
:deselect-label="$t('multiselect.deselect_label')"
|
||||||
:selected-label="$t('multiselect.selected_label')"
|
:selected-label="$t('multiselect.selected_label')"
|
||||||
@select="updateAdminLocation"
|
@select="updateAdminLocation"
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="!isAdminLocationValid"
|
||||||
|
class="alert alert-warning to-confirm"
|
||||||
|
>
|
||||||
|
{{ $t("admin_location.not_valid") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="!isAdminLocationValid" class="alert alert-warning to-confirm">
|
|
||||||
{{ $t("admin_location.not_valid") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -38,67 +41,72 @@ import { fetchResults } from "ChillMainAssets/lib/api/apiMethods";
|
|||||||
import { mapState, mapGetters } from "vuex";
|
import { mapState, mapGetters } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "AdminLocation",
|
name: "AdminLocation",
|
||||||
components: { VueMultiselect },
|
components: { VueMultiselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
options: [],
|
options: [],
|
||||||
};
|
};
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
value: (state) => state.accompanyingCourse.administrativeLocation,
|
|
||||||
}),
|
|
||||||
...mapGetters(["isAdminLocationValid"]),
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.getOptions();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getOptions() {
|
|
||||||
fetchResults(`/api/1.0/main/location.json`).then((response) => {
|
|
||||||
let uniqueLocationTypeId = [
|
|
||||||
...new Set(response.map((o) => o.locationType.id)),
|
|
||||||
];
|
|
||||||
let results = [];
|
|
||||||
for (let id of uniqueLocationTypeId) {
|
|
||||||
results.push({
|
|
||||||
locationCategories: response.filter(
|
|
||||||
(o) => o.locationType.id === id,
|
|
||||||
)[0].locationType.title.fr,
|
|
||||||
locations: response.filter((o) => o.locationType.id === id),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.options = results;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
updateAdminLocation(value) {
|
computed: {
|
||||||
this.$store
|
...mapState({
|
||||||
.dispatch("updateAdminLocation", value)
|
value: (state) => state.accompanyingCourse.administrativeLocation,
|
||||||
.catch(({ name, violations }) => {
|
}),
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
...mapGetters(["isAdminLocationValid"]),
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
customLabel(value) {
|
mounted() {
|
||||||
return value.locationType
|
this.getOptions();
|
||||||
? value.name
|
},
|
||||||
? `${value.name} (${value.locationType.title.fr})`
|
methods: {
|
||||||
: value.locationType.title.fr
|
getOptions() {
|
||||||
: "";
|
fetchResults(`/api/1.0/main/location.json`).then((response) => {
|
||||||
|
let uniqueLocationTypeId = [
|
||||||
|
...new Set(response.map((o) => o.locationType.id)),
|
||||||
|
];
|
||||||
|
let results = [];
|
||||||
|
for (let id of uniqueLocationTypeId) {
|
||||||
|
results.push({
|
||||||
|
locationCategories: response.filter(
|
||||||
|
(o) => o.locationType.id === id,
|
||||||
|
)[0].locationType.title.fr,
|
||||||
|
locations: response.filter(
|
||||||
|
(o) => o.locationType.id === id,
|
||||||
|
),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.options = results;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateAdminLocation(value) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateAdminLocation", value)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
customLabel(value) {
|
||||||
|
return value.locationType
|
||||||
|
? value.name
|
||||||
|
? `${value.name} (${value.locationType.title.fr})`
|
||||||
|
: value.locationType.title.fr
|
||||||
|
: "";
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||||
<style lang="css" scoped>
|
<style lang="css" scoped>
|
||||||
label {
|
label {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,106 +1,132 @@
|
|||||||
<template>
|
<template>
|
||||||
<teleport to="#header-accompanying_course-name #banner-flags">
|
<teleport to="#header-accompanying_course-name #banner-flags">
|
||||||
<toggle-flags />
|
<toggle-flags />
|
||||||
</teleport>
|
</teleport>
|
||||||
|
|
||||||
<teleport to="#header-accompanying_course-name #banner-status">
|
<teleport to="#header-accompanying_course-name #banner-status">
|
||||||
<span
|
<span
|
||||||
v-if="accompanyingCourse.step === 'DRAFT'"
|
v-if="accompanyingCourse.step === 'DRAFT'"
|
||||||
class="text-md-end d-md-block"
|
class="text-md-end d-md-block"
|
||||||
|
>
|
||||||
|
<span class="badge bg-secondary">
|
||||||
|
{{ $t("course.step.draft") }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-else-if="
|
||||||
|
accompanyingCourse.step === 'CONFIRMED' ||
|
||||||
|
accompanyingCourse.step === 'CONFIRMED_INACTIVE_SHORT' ||
|
||||||
|
accompanyingCourse.step === 'CONFIRMED_INACTIVE_LONG'
|
||||||
|
"
|
||||||
|
class="text-md-end"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
v-if="accompanyingCourse.step === 'CONFIRMED'"
|
||||||
|
class="d-md-block mb-md-3"
|
||||||
|
>
|
||||||
|
<span class="badge bg-primary">
|
||||||
|
{{ $t("course.step.active") }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-else-if="
|
||||||
|
accompanyingCourse.step === 'CONFIRMED_INACTIVE_SHORT'
|
||||||
|
"
|
||||||
|
class="d-md-block mb-md-3"
|
||||||
|
>
|
||||||
|
<span class="badge bg-chill-yellow text-primary">
|
||||||
|
{{ $t("course.step.inactive_short") }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-else-if="
|
||||||
|
accompanyingCourse.step === 'CONFIRMED_INACTIVE_LONG'
|
||||||
|
"
|
||||||
|
class="d-md-block mb-md-3"
|
||||||
|
>
|
||||||
|
<span class="badge bg-chill-pink">
|
||||||
|
{{ $t("course.step.inactive_long") }}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span class="d-md-block">
|
||||||
|
<span class="d-md-block ms-3 ms-md-0">
|
||||||
|
<i
|
||||||
|
>{{ $t("course.open_at")
|
||||||
|
}}{{
|
||||||
|
$d(accompanyingCourse.openingDate.datetime, "text")
|
||||||
|
}}</i
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="accompanyingCourse.user"
|
||||||
|
class="d-md-block ms-3 ms-md-0"
|
||||||
|
>
|
||||||
|
<span class="item-key">{{ $t("course.referrer") }}:</span
|
||||||
|
>
|
||||||
|
<b>{{ accompanyingCourse.user.text }}</b>
|
||||||
|
<template v-if="accompanyingCourse.user.isAbsent">
|
||||||
|
|
||||||
|
<span
|
||||||
|
class="badge bg-danger rounded-pill"
|
||||||
|
title="Absent"
|
||||||
|
>A</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span v-else class="text-md-end d-md-block">
|
||||||
|
<span class="badge bg-danger">
|
||||||
|
{{ $t("course.step.closed") }}
|
||||||
|
</span>
|
||||||
|
<span class="d-md-block">
|
||||||
|
<span class="d-md-block ms-3 ms-md-0">
|
||||||
|
<i
|
||||||
|
>{{
|
||||||
|
$d(accompanyingCourse.openingDate.datetime, "text")
|
||||||
|
}}
|
||||||
|
-
|
||||||
|
{{
|
||||||
|
$d(accompanyingCourse.closingDate.datetime, "text")
|
||||||
|
}}</i
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
v-if="accompanyingCourse.user"
|
||||||
|
class="d-md-block ms-3 ms-md-0"
|
||||||
|
>
|
||||||
|
<span class="item-key">{{ $t("course.referrer") }}:</span>
|
||||||
|
<b>{{ accompanyingCourse.user.text }}</b>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</teleport>
|
||||||
|
|
||||||
|
<teleport
|
||||||
|
to="#header-accompanying_course-name #persons-associated-shortlist"
|
||||||
>
|
>
|
||||||
<span class="badge bg-secondary">
|
<persons-associated
|
||||||
{{ $t("course.step.draft") }}
|
:accompanyingCourse="accompanyingCourse"
|
||||||
</span>
|
:shortlist="true"
|
||||||
</span>
|
></persons-associated>
|
||||||
<span
|
</teleport>
|
||||||
v-else-if="
|
|
||||||
accompanyingCourse.step === 'CONFIRMED' ||
|
<teleport to="#header-accompanying_course-details #banner-social-issues">
|
||||||
accompanyingCourse.step === 'CONFIRMED_INACTIVE_SHORT' ||
|
<social-issue
|
||||||
accompanyingCourse.step === 'CONFIRMED_INACTIVE_LONG'
|
v-for="issue in accompanyingCourse.socialIssues"
|
||||||
"
|
:key="issue.id"
|
||||||
class="text-md-end"
|
:issue="issue"
|
||||||
|
/>
|
||||||
|
</teleport>
|
||||||
|
|
||||||
|
<teleport
|
||||||
|
to="#header-accompanying_course-details #banner-persons-associated"
|
||||||
>
|
>
|
||||||
<span
|
<persons-associated
|
||||||
v-if="accompanyingCourse.step === 'CONFIRMED'"
|
:accompanying-course="accompanyingCourse"
|
||||||
class="d-md-block mb-md-3"
|
:shortlist="false"
|
||||||
>
|
/>
|
||||||
<span class="badge bg-primary">
|
</teleport>
|
||||||
{{ $t("course.step.active") }}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-else-if="accompanyingCourse.step === 'CONFIRMED_INACTIVE_SHORT'"
|
|
||||||
class="d-md-block mb-md-3"
|
|
||||||
>
|
|
||||||
<span class="badge bg-chill-yellow text-primary">
|
|
||||||
{{ $t("course.step.inactive_short") }}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-else-if="accompanyingCourse.step === 'CONFIRMED_INACTIVE_LONG'"
|
|
||||||
class="d-md-block mb-md-3"
|
|
||||||
>
|
|
||||||
<span class="badge bg-chill-pink">
|
|
||||||
{{ $t("course.step.inactive_long") }}
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<span class="d-md-block">
|
|
||||||
<span class="d-md-block ms-3 ms-md-0">
|
|
||||||
<i
|
|
||||||
>{{ $t("course.open_at")
|
|
||||||
}}{{ $d(accompanyingCourse.openingDate.datetime, "text") }}</i
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
<span v-if="accompanyingCourse.user" class="d-md-block ms-3 ms-md-0">
|
|
||||||
<span class="item-key">{{ $t("course.referrer") }}:</span>
|
|
||||||
<b>{{ accompanyingCourse.user.text }}</b>
|
|
||||||
<template v-if="accompanyingCourse.user.isAbsent">
|
|
||||||
|
|
||||||
<span class="badge bg-danger rounded-pill" title="Absent">A</span>
|
|
||||||
</template>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
<span v-else class="text-md-end d-md-block">
|
|
||||||
<span class="badge bg-danger">
|
|
||||||
{{ $t("course.step.closed") }}
|
|
||||||
</span>
|
|
||||||
<span class="d-md-block">
|
|
||||||
<span class="d-md-block ms-3 ms-md-0">
|
|
||||||
<i
|
|
||||||
>{{ $d(accompanyingCourse.openingDate.datetime, "text") }} -
|
|
||||||
{{ $d(accompanyingCourse.closingDate.datetime, "text") }}</i
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
<span v-if="accompanyingCourse.user" class="d-md-block ms-3 ms-md-0">
|
|
||||||
<span class="item-key">{{ $t("course.referrer") }}:</span>
|
|
||||||
<b>{{ accompanyingCourse.user.text }}</b>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</teleport>
|
|
||||||
|
|
||||||
<teleport to="#header-accompanying_course-name #persons-associated-shortlist">
|
|
||||||
<persons-associated
|
|
||||||
:accompanyingCourse="accompanyingCourse"
|
|
||||||
:shortlist="true"
|
|
||||||
></persons-associated>
|
|
||||||
</teleport>
|
|
||||||
|
|
||||||
<teleport to="#header-accompanying_course-details #banner-social-issues">
|
|
||||||
<social-issue
|
|
||||||
v-for="issue in accompanyingCourse.socialIssues"
|
|
||||||
:key="issue.id"
|
|
||||||
:issue="issue"
|
|
||||||
/>
|
|
||||||
</teleport>
|
|
||||||
|
|
||||||
<teleport to="#header-accompanying_course-details #banner-persons-associated">
|
|
||||||
<persons-associated
|
|
||||||
:accompanying-course="accompanyingCourse"
|
|
||||||
:shortlist="false"
|
|
||||||
/>
|
|
||||||
</teleport>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -109,30 +135,30 @@ import SocialIssue from "./Banner/SocialIssue.vue";
|
|||||||
import PersonsAssociated from "./Banner/PersonsAssociated.vue";
|
import PersonsAssociated from "./Banner/PersonsAssociated.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Banner",
|
name: "Banner",
|
||||||
components: {
|
components: {
|
||||||
ToggleFlags,
|
ToggleFlags,
|
||||||
SocialIssue,
|
SocialIssue,
|
||||||
PersonsAssociated,
|
PersonsAssociated,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
accompanyingCourse() {
|
accompanyingCourse() {
|
||||||
return this.$store.state.accompanyingCourse;
|
return this.$store.state.accompanyingCourse;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
div#banner-flags,
|
div#banner-flags,
|
||||||
div#banner-status {
|
div#banner-status {
|
||||||
.badge {
|
.badge {
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
div#banner-status {
|
div#banner-status {
|
||||||
span.badge {
|
span.badge {
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,123 +1,129 @@
|
|||||||
<template>
|
<template>
|
||||||
<span v-if="shortlist">
|
<span v-if="shortlist">
|
||||||
<span v-for="person in firstPersons" class="me-1" :key="person.id">
|
<span v-for="person in firstPersons" class="me-1" :key="person.id">
|
||||||
<on-the-fly
|
<on-the-fly
|
||||||
:type="person.type"
|
:type="person.type"
|
||||||
:id="person.id"
|
:id="person.id"
|
||||||
:buttonText="person.textAge"
|
:buttonText="person.textAge"
|
||||||
:displayBadge="'true' === 'true'"
|
:displayBadge="'true' === 'true'"
|
||||||
action="show"
|
action="show"
|
||||||
></on-the-fly>
|
></on-the-fly>
|
||||||
|
</span>
|
||||||
|
<span v-if="hasMoreThanShortListPerson">
|
||||||
|
<a
|
||||||
|
class="showMore carousel-control"
|
||||||
|
role="button"
|
||||||
|
data-bs-target="#ACHeaderSlider"
|
||||||
|
data-bs-slide="next"
|
||||||
|
>{{ $t("more_x", { x: countMoreThanShortListPerson }) }}</a
|
||||||
|
>
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<span v-if="hasMoreThanShortListPerson">
|
<span v-else>
|
||||||
<a
|
<span
|
||||||
class="showMore carousel-control"
|
v-for="([pk, persons], h) in personsByHousehold"
|
||||||
role="button"
|
:class="{ household: pk > -1, 'no-household': pk === -1 }"
|
||||||
data-bs-target="#ACHeaderSlider"
|
:key="h.id"
|
||||||
data-bs-slide="next"
|
>
|
||||||
>{{ $t("more_x", { x: countMoreThanShortListPerson }) }}</a
|
<a v-if="pk !== -1" :href="householdLink(pk)">
|
||||||
>
|
<i
|
||||||
|
class="fa fa-home fa-fw text-light"
|
||||||
|
:title="
|
||||||
|
$t('persons_associated.show_household_number', {
|
||||||
|
id: pk,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
></i>
|
||||||
|
</a>
|
||||||
|
<span v-for="person in persons" class="me-1" :key="person.id">
|
||||||
|
<on-the-fly
|
||||||
|
:type="person.type"
|
||||||
|
:id="person.id"
|
||||||
|
:buttonText="person.textAge"
|
||||||
|
:displayBadge="true"
|
||||||
|
action="show"
|
||||||
|
></on-the-fly>
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
|
||||||
<span v-else>
|
|
||||||
<span
|
|
||||||
v-for="([pk, persons], h) in personsByHousehold"
|
|
||||||
:class="{ household: pk > -1, 'no-household': pk === -1 }"
|
|
||||||
:key="h.id"
|
|
||||||
>
|
|
||||||
<a v-if="pk !== -1" :href="householdLink(pk)">
|
|
||||||
<i
|
|
||||||
class="fa fa-home fa-fw text-light"
|
|
||||||
:title="$t('persons_associated.show_household_number', { id: pk })"
|
|
||||||
></i>
|
|
||||||
</a>
|
|
||||||
<span v-for="person in persons" class="me-1" :key="person.id">
|
|
||||||
<on-the-fly
|
|
||||||
:type="person.type"
|
|
||||||
:id="person.id"
|
|
||||||
:buttonText="person.textAge"
|
|
||||||
:displayBadge="true"
|
|
||||||
action="show"
|
|
||||||
></on-the-fly>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly";
|
import OnTheFly from "ChillMainAssets/vuejs/OnTheFly/components/OnTheFly";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PersonsAssociated",
|
name: "PersonsAssociated",
|
||||||
components: {
|
components: {
|
||||||
OnTheFly,
|
OnTheFly,
|
||||||
},
|
|
||||||
props: ["accompanyingCourse", "shortlist"],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
showAllPersons: false,
|
|
||||||
maxTotalPersons: 2,
|
|
||||||
nbShortList: 3,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
participations() {
|
|
||||||
return this.accompanyingCourse.participations.filter(
|
|
||||||
(p) => p.endDate === null,
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
persons() {
|
props: ["accompanyingCourse", "shortlist"],
|
||||||
return this.participations.map((p) => p.person);
|
data() {
|
||||||
|
return {
|
||||||
|
showAllPersons: false,
|
||||||
|
maxTotalPersons: 2,
|
||||||
|
nbShortList: 3,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
firstPersons() {
|
computed: {
|
||||||
return this.participations.slice(0, 3).map((p) => p.person);
|
participations() {
|
||||||
},
|
return this.accompanyingCourse.participations.filter(
|
||||||
hasMoreThanShortListPerson() {
|
(p) => p.endDate === null,
|
||||||
return this.participations.length > 3;
|
);
|
||||||
},
|
},
|
||||||
countMoreThanShortListPerson() {
|
persons() {
|
||||||
return this.participations.length - 3;
|
return this.participations.map((p) => p.person);
|
||||||
},
|
},
|
||||||
resources() {
|
firstPersons() {
|
||||||
return this.accompanyingCourse.resources;
|
return this.participations.slice(0, 3).map((p) => p.person);
|
||||||
},
|
},
|
||||||
requestor() {
|
hasMoreThanShortListPerson() {
|
||||||
return this.accompanyingCourse.requestor;
|
return this.participations.length > 3;
|
||||||
},
|
},
|
||||||
personsByHousehold() {
|
countMoreThanShortListPerson() {
|
||||||
const households = new Map();
|
return this.participations.length - 3;
|
||||||
this.accompanyingCourse.participations
|
},
|
||||||
.filter((part) => part.endDate === null)
|
resources() {
|
||||||
.map((part) => part.person)
|
return this.accompanyingCourse.resources;
|
||||||
.forEach((person) => {
|
},
|
||||||
if (!households.has(person.current_household_id || -1)) {
|
requestor() {
|
||||||
households.set(person.current_household_id || -1, []);
|
return this.accompanyingCourse.requestor;
|
||||||
}
|
},
|
||||||
households.get(person.current_household_id || -1).push(person);
|
personsByHousehold() {
|
||||||
});
|
const households = new Map();
|
||||||
|
this.accompanyingCourse.participations
|
||||||
|
.filter((part) => part.endDate === null)
|
||||||
|
.map((part) => part.person)
|
||||||
|
.forEach((person) => {
|
||||||
|
if (!households.has(person.current_household_id || -1)) {
|
||||||
|
households.set(person.current_household_id || -1, []);
|
||||||
|
}
|
||||||
|
households
|
||||||
|
.get(person.current_household_id || -1)
|
||||||
|
.push(person);
|
||||||
|
});
|
||||||
|
|
||||||
return households;
|
return households;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
householdLink(id) {
|
||||||
householdLink(id) {
|
return `/fr/person/household/${id}/summary`;
|
||||||
return `/fr/person/household/${id}/summary`;
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.showMore {
|
.showMore {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
span.household {
|
span.household {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border-top: 1px solid rgba(255, 255, 255, 0.3);
|
border-top: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin-right: 0.3em;
|
margin-right: 0.3em;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<span class="badge bg-chill-l-gray text-dark">{{ issue.text }}</span>
|
<span class="badge bg-chill-l-gray text-dark">{{ issue.text }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "SocialIssues",
|
name: "SocialIssues",
|
||||||
props: ["issue"],
|
props: ["issue"],
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -14,9 +14,9 @@ export default {
|
|||||||
@import "ChillPersonAssets/chill/scss/mixins";
|
@import "ChillPersonAssets/chill/scss/mixins";
|
||||||
@import "ChillMainAssets/chill/scss/chill_variables";
|
@import "ChillMainAssets/chill/scss/chill_variables";
|
||||||
span.badge {
|
span.badge {
|
||||||
@include badge_social($social-issue-color);
|
@include badge_social($social-issue-color);
|
||||||
font-size: 95%;
|
font-size: 95%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,142 +1,158 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="text-md-end">
|
<div class="text-md-end">
|
||||||
<span class="d-block d-sm-inline-block mb-md-2">
|
<span class="d-block d-sm-inline-block mb-md-2">
|
||||||
<a @click="toggleIntensity" class="flag-toggle">
|
<a @click="toggleIntensity" class="flag-toggle">
|
||||||
<span :class="{ on: !isRegular }">{{ $t("course.occasional") }}</span>
|
<span :class="{ on: !isRegular }">{{
|
||||||
<i
|
$t("course.occasional")
|
||||||
class="fa"
|
}}</span>
|
||||||
:class="{
|
<i
|
||||||
'fa-toggle-on': isRegular,
|
class="fa"
|
||||||
'fa-toggle-on fa-flip-horizontal': !isRegular,
|
:class="{
|
||||||
}"
|
'fa-toggle-on': isRegular,
|
||||||
/>
|
'fa-toggle-on fa-flip-horizontal': !isRegular,
|
||||||
<span :class="{ on: isRegular }">{{ $t("course.regular") }}</span>
|
}"
|
||||||
</a>
|
/>
|
||||||
</span>
|
<span :class="{ on: isRegular }">{{
|
||||||
|
$t("course.regular")
|
||||||
|
}}</span>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
<span class="d-block d-sm-inline-block ms-sm-3 ms-md-0">
|
<span class="d-block d-sm-inline-block ms-sm-3 ms-md-0">
|
||||||
<button
|
<button
|
||||||
class="badge rounded-pill me-1"
|
class="badge rounded-pill me-1"
|
||||||
:class="{ 'bg-danger': isEmergency, 'bg-secondary': !isEmergency }"
|
:class="{
|
||||||
@click="toggleEmergency"
|
'bg-danger': isEmergency,
|
||||||
>
|
'bg-secondary': !isEmergency,
|
||||||
{{ $t("course.emergency") }}
|
}"
|
||||||
</button>
|
@click="toggleEmergency"
|
||||||
<button
|
>
|
||||||
class="badge rounded-pill"
|
{{ $t("course.emergency") }}
|
||||||
:class="{
|
</button>
|
||||||
'bg-danger': isConfidential,
|
<button
|
||||||
'bg-secondary': !isConfidential,
|
class="badge rounded-pill"
|
||||||
}"
|
:class="{
|
||||||
@click="toggleConfidential"
|
'bg-danger': isConfidential,
|
||||||
>
|
'bg-secondary': !isConfidential,
|
||||||
{{ $t("course.confidential") }}
|
}"
|
||||||
</button>
|
@click="toggleConfidential"
|
||||||
</span>
|
>
|
||||||
</div>
|
{{ $t("course.confidential") }}
|
||||||
|
</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ToggleFlags",
|
name: "ToggleFlags",
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
intensity: (state) => state.accompanyingCourse.intensity,
|
intensity: (state) => state.accompanyingCourse.intensity,
|
||||||
emergency: (state) => state.accompanyingCourse.emergency,
|
emergency: (state) => state.accompanyingCourse.emergency,
|
||||||
confidential: (state) => state.accompanyingCourse.confidential,
|
confidential: (state) => state.accompanyingCourse.confidential,
|
||||||
permissions: (state) => state.permissions,
|
permissions: (state) => state.permissions,
|
||||||
}),
|
}),
|
||||||
isRegular() {
|
isRegular() {
|
||||||
return this.intensity === "regular" ? true : false;
|
return this.intensity === "regular" ? true : false;
|
||||||
|
},
|
||||||
|
isEmergency() {
|
||||||
|
return this.emergency ? true : false;
|
||||||
|
},
|
||||||
|
isConfidential() {
|
||||||
|
return this.confidential ? true : false;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
isEmergency() {
|
methods: {
|
||||||
return this.emergency ? true : false;
|
toggleIntensity() {
|
||||||
|
let value;
|
||||||
|
switch (this.intensity) {
|
||||||
|
case "occasional":
|
||||||
|
value = "regular";
|
||||||
|
break;
|
||||||
|
case "regular":
|
||||||
|
value = "occasional";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
//temporaire (modif backend)
|
||||||
|
value = "occasional";
|
||||||
|
}
|
||||||
|
this.$store.dispatch("toggleIntensity", value).catch(({ name }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
this.$toast.open({
|
||||||
|
message: this.$t(
|
||||||
|
"Only the referrer can toggle the intensity of an accompanying course",
|
||||||
|
),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
toggleEmergency() {
|
||||||
|
this.$store
|
||||||
|
.dispatch("toggleEmergency", !this.isEmergency)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
toggleConfidential() {
|
||||||
|
this.$store.dispatch("toggleConfidential").catch(({ name }) => {
|
||||||
|
console.log(name);
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
this.$toast.open({
|
||||||
|
message: this.$t(
|
||||||
|
"Only the referrer can toggle the confidentiality of an accompanying course",
|
||||||
|
),
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
isConfidential() {
|
|
||||||
return this.confidential ? true : false;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
toggleIntensity() {
|
|
||||||
let value;
|
|
||||||
switch (this.intensity) {
|
|
||||||
case "occasional":
|
|
||||||
value = "regular";
|
|
||||||
break;
|
|
||||||
case "regular":
|
|
||||||
value = "occasional";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
//temporaire (modif backend)
|
|
||||||
value = "occasional";
|
|
||||||
}
|
|
||||||
this.$store.dispatch("toggleIntensity", value).catch(({ name }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
this.$toast.open({
|
|
||||||
message: this.$t(
|
|
||||||
"Only the referrer can toggle the intensity of an accompanying course",
|
|
||||||
),
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
toggleEmergency() {
|
|
||||||
this.$store
|
|
||||||
.dispatch("toggleEmergency", !this.isEmergency)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
toggleConfidential() {
|
|
||||||
this.$store.dispatch("toggleConfidential").catch(({ name }) => {
|
|
||||||
console.log(name);
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
this.$toast.open({
|
|
||||||
message: this.$t(
|
|
||||||
"Only the referrer can toggle the confidentiality of an accompanying course",
|
|
||||||
),
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
a.flag-toggle {
|
a.flag-toggle {
|
||||||
color: white;
|
|
||||||
cursor: pointer;
|
|
||||||
&:hover {
|
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: underline;
|
cursor: pointer;
|
||||||
border-radius: 20px;
|
&:hover {
|
||||||
}
|
color: white;
|
||||||
i {
|
text-decoration: underline;
|
||||||
margin: auto 0.4em;
|
border-radius: 20px;
|
||||||
}
|
}
|
||||||
span.on {
|
i {
|
||||||
font-weight: bolder;
|
margin: auto 0.4em;
|
||||||
}
|
}
|
||||||
|
span.on {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
button.badge {
|
button.badge {
|
||||||
&.bg-secondary {
|
&.bg-secondary {
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,36 +1,38 @@
|
|||||||
<template>
|
<template>
|
||||||
<li>
|
<li>
|
||||||
<button
|
<button
|
||||||
class="btn btn-sm btn-secondary"
|
class="btn btn-sm btn-secondary"
|
||||||
@click="modal.showModal = true"
|
@click="modal.showModal = true"
|
||||||
:title="$t('courselocation.assign_course_address')"
|
:title="$t('courselocation.assign_course_address')"
|
||||||
>
|
>
|
||||||
<i class="fa fa-map-marker" />
|
<i class="fa fa-map-marker" />
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<teleport to="body">
|
|
||||||
<modal
|
|
||||||
v-if="modal.showModal"
|
|
||||||
:modal-dialog-class="modal.modalDialogClass"
|
|
||||||
@close="modal.showModal = false"
|
|
||||||
>
|
|
||||||
<template #header>
|
|
||||||
<h2 class="modal-title">
|
|
||||||
{{ $t("courselocation.sure") }}
|
|
||||||
</h2>
|
|
||||||
</template>
|
|
||||||
<template #body>
|
|
||||||
<address-render-box :address="person.current_household_address" />
|
|
||||||
<p>{{ $t("courselocation.sure_description") }}</p>
|
|
||||||
</template>
|
|
||||||
<template #footer>
|
|
||||||
<button class="btn btn-danger" @click="assignAddress">
|
|
||||||
{{ $t("courselocation.ok") }}
|
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</li>
|
||||||
</modal>
|
|
||||||
</teleport>
|
<teleport to="body">
|
||||||
|
<modal
|
||||||
|
v-if="modal.showModal"
|
||||||
|
:modal-dialog-class="modal.modalDialogClass"
|
||||||
|
@close="modal.showModal = false"
|
||||||
|
>
|
||||||
|
<template #header>
|
||||||
|
<h2 class="modal-title">
|
||||||
|
{{ $t("courselocation.sure") }}
|
||||||
|
</h2>
|
||||||
|
</template>
|
||||||
|
<template #body>
|
||||||
|
<address-render-box
|
||||||
|
:address="person.current_household_address"
|
||||||
|
/>
|
||||||
|
<p>{{ $t("courselocation.sure_description") }}</p>
|
||||||
|
</template>
|
||||||
|
<template #footer>
|
||||||
|
<button class="btn btn-danger" @click="assignAddress">
|
||||||
|
{{ $t("courselocation.ok") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -39,49 +41,52 @@ import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
|||||||
import AddressRenderBox from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
|
import AddressRenderBox from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ButtonLocation",
|
name: "ButtonLocation",
|
||||||
components: {
|
components: {
|
||||||
AddressRenderBox,
|
AddressRenderBox,
|
||||||
Modal,
|
Modal,
|
||||||
},
|
},
|
||||||
props: ["person"],
|
props: ["person"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
modal: {
|
modal: {
|
||||||
showModal: false,
|
showModal: false,
|
||||||
modalDialogClass: "modal-dialog-centered modal-md",
|
modalDialogClass: "modal-dialog-centered modal-md",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
context: (state) => state.addressContext,
|
context: (state) => state.addressContext,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
assignAddress() {
|
assignAddress() {
|
||||||
//console.log('assignAddress id', this.person.current_household_address);
|
//console.log('assignAddress id', this.person.current_household_address);
|
||||||
let payload = {
|
let payload = {
|
||||||
target: this.context.target.name,
|
target: this.context.target.name,
|
||||||
targetId: this.context.target.id,
|
targetId: this.context.target.id,
|
||||||
locationStatusTo: "person",
|
locationStatusTo: "person",
|
||||||
personId: this.person.id,
|
personId: this.person.id,
|
||||||
};
|
};
|
||||||
this.$store
|
this.$store
|
||||||
.dispatch("updateLocation", payload)
|
.dispatch("updateLocation", payload)
|
||||||
.catch(({ name, violations }) => {
|
.catch(({ name, violations }) => {
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
if (
|
||||||
violations.forEach((violation) =>
|
name === "ValidationException" ||
|
||||||
this.$toast.open({ message: violation }),
|
name === "AccessException"
|
||||||
);
|
) {
|
||||||
} else {
|
violations.forEach((violation) =>
|
||||||
this.$toast.open({ message: "An error occurred" });
|
this.$toast.open({ message: violation }),
|
||||||
}
|
);
|
||||||
});
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
window.location.assign("#section-20");
|
}
|
||||||
this.modal.showModal = false;
|
});
|
||||||
|
|
||||||
|
window.location.assign("#section-20");
|
||||||
|
this.modal.showModal = false;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,56 +1,56 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-100" />{{ $t("comment.title") }}</h2>
|
<h2><a id="section-100" />{{ $t("comment.title") }}</h2>
|
||||||
|
|
||||||
<!--div class="error flash_message" v-if="errors.length > 0">
|
<!--div class="error flash_message" v-if="errors.length > 0">
|
||||||
{{ errors[0] }}
|
{{ errors[0] }}
|
||||||
TODO fix errors flashbag for app component
|
TODO fix errors flashbag for app component
|
||||||
</div-->
|
</div-->
|
||||||
|
|
||||||
<div>
|
|
||||||
<form @submit.prevent="submitform">
|
|
||||||
<label class="col-form-label" for="content">{{
|
|
||||||
$t("comment.label")
|
|
||||||
}}</label>
|
|
||||||
|
|
||||||
<comment-editor v-model="content" />
|
|
||||||
|
|
||||||
<div class="sub-comment">
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
pinnedComment !== null &&
|
|
||||||
typeof pinnedComment.creator !== 'undefined'
|
|
||||||
"
|
|
||||||
class="metadata"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
$t("comment.created_by", [
|
|
||||||
pinnedComment.creator.text,
|
|
||||||
$d(pinnedComment.updatedAt.datetime, "long"),
|
|
||||||
])
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
<div class="loading">
|
|
||||||
<i
|
|
||||||
v-if="loading"
|
|
||||||
class="fa fa-circle-o-notch fa-spin"
|
|
||||||
:title="$t('loading')"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="record_actions">
|
<form @submit.prevent="submitform">
|
||||||
<li v-if="pinnedComment !== null">
|
<label class="col-form-label" for="content">{{
|
||||||
<a class="btn btn-delete" @click="removeComment">
|
$t("comment.label")
|
||||||
{{ $t("action.delete") }}
|
}}</label>
|
||||||
</a>
|
|
||||||
</li>
|
<comment-editor v-model="content" />
|
||||||
</ul>
|
|
||||||
|
<div class="sub-comment">
|
||||||
|
<div
|
||||||
|
v-if="
|
||||||
|
pinnedComment !== null &&
|
||||||
|
typeof pinnedComment.creator !== 'undefined'
|
||||||
|
"
|
||||||
|
class="metadata"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t("comment.created_by", [
|
||||||
|
pinnedComment.creator.text,
|
||||||
|
$d(pinnedComment.updatedAt.datetime, "long"),
|
||||||
|
])
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
<div class="loading">
|
||||||
|
<i
|
||||||
|
v-if="loading"
|
||||||
|
class="fa fa-circle-o-notch fa-spin"
|
||||||
|
:title="$t('loading')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li v-if="pinnedComment !== null">
|
||||||
|
<a class="btn btn-delete" @click="removeComment">
|
||||||
|
{{ $t("action.delete") }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -58,113 +58,127 @@ import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/Comme
|
|||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Comment",
|
name: "Comment",
|
||||||
components: {
|
components: {
|
||||||
CommentEditor,
|
CommentEditor,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
lastRecordedContent: null,
|
lastRecordedContent: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
pinnedComment: (state) => state.accompanyingCourse.pinnedComment,
|
pinnedComment: (state) => state.accompanyingCourse.pinnedComment,
|
||||||
}),
|
}),
|
||||||
classicEditor: () => ClassicEditor,
|
classicEditor: () => ClassicEditor,
|
||||||
editorConfig: () => classicEditorConfig,
|
editorConfig: () => classicEditorConfig,
|
||||||
content: {
|
content: {
|
||||||
set(value) {
|
set(value) {
|
||||||
console.log("new comment value", value);
|
console.log("new comment value", value);
|
||||||
console.log("previous value", this.lastRecordedContent);
|
console.log("previous value", this.lastRecordedContent);
|
||||||
this.lastRecordedContent = value;
|
this.lastRecordedContent = value;
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.log("performing test on ", value);
|
console.log("performing test on ", value);
|
||||||
if (this.lastRecordedContent === value) {
|
if (this.lastRecordedContent === value) {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
if (value !== "") {
|
if (value !== "") {
|
||||||
this.$store
|
this.$store
|
||||||
.dispatch("updatePinnedComment", value)
|
.dispatch("updatePinnedComment", value)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
})
|
})
|
||||||
.catch(({ name, violations }) => {
|
.catch(({ name, violations }) => {
|
||||||
if (
|
if (
|
||||||
name === "ValidationException" ||
|
name === "ValidationException" ||
|
||||||
name === "AccessException"
|
name === "AccessException"
|
||||||
) {
|
) {
|
||||||
violations.forEach((violation) =>
|
violations.forEach((violation) =>
|
||||||
this.$toast.open({ message: violation }),
|
this.$toast.open({
|
||||||
);
|
message: violation,
|
||||||
} else {
|
}),
|
||||||
this.$toast.open({ message: "An error occurred" });
|
);
|
||||||
}
|
} else {
|
||||||
});
|
this.$toast.open({
|
||||||
} else {
|
message: "An error occurred",
|
||||||
if (this.$store.state.accompanyingCourse.pinnedComment !== null) {
|
});
|
||||||
this.$store
|
}
|
||||||
.dispatch("removePinnedComment", {
|
});
|
||||||
id: this.pinnedComment.id,
|
} else {
|
||||||
})
|
if (
|
||||||
.then(() => {
|
this.$store.state.accompanyingCourse
|
||||||
this.loading = false;
|
.pinnedComment !== null
|
||||||
this.lastRecoredContent = null;
|
) {
|
||||||
})
|
this.$store
|
||||||
.catch(({ name, violations }) => {
|
.dispatch("removePinnedComment", {
|
||||||
if (
|
id: this.pinnedComment.id,
|
||||||
name === "ValidationException" ||
|
})
|
||||||
name === "AccessException"
|
.then(() => {
|
||||||
) {
|
this.loading = false;
|
||||||
violations.forEach((violation) =>
|
this.lastRecoredContent = null;
|
||||||
this.$toast.open({ message: violation }),
|
})
|
||||||
);
|
.catch(({ name, violations }) => {
|
||||||
} else {
|
if (
|
||||||
this.$toast.open({ message: "An error occurred" });
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({
|
||||||
|
message: violation,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({
|
||||||
|
message: "An error occurred",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
}, 3000);
|
||||||
}
|
},
|
||||||
}
|
get() {
|
||||||
}
|
return this.pinnedComment ? this.pinnedComment.content : "";
|
||||||
}, 3000);
|
},
|
||||||
},
|
},
|
||||||
get() {
|
errors() {
|
||||||
return this.pinnedComment ? this.pinnedComment.content : "";
|
return this.$store.state.errorMsg;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
errors() {
|
methods: {
|
||||||
return this.$store.state.errorMsg;
|
removeComment() {
|
||||||
|
this.$store
|
||||||
|
.dispatch("removePinnedComment", { id: this.pinnedComment.id })
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
removeComment() {
|
|
||||||
this.$store
|
|
||||||
.dispatch("removePinnedComment", { id: this.pinnedComment.id })
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
div.ck-editor.ck-reset {
|
div.ck-editor.ck-reset {
|
||||||
margin: 0.6em 0;
|
margin: 0.6em 0;
|
||||||
}
|
}
|
||||||
div.sub-comment {
|
div.sub-comment {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
div.loading {
|
div.loading {
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,120 +1,127 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2>
|
<h2>
|
||||||
<a id="section-110" />
|
<a id="section-110" />
|
||||||
{{ $t("confirm.title") }}
|
{{ $t("confirm.title") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div>
|
<div>
|
||||||
<p v-html="$t('confirm.text_draft', [$t('course.step.draft')])" />
|
<p v-html="$t('confirm.text_draft', [$t('course.step.draft')])" />
|
||||||
|
|
||||||
<div v-if="!isValidToBeConfirmed">
|
<div v-if="!isValidToBeConfirmed">
|
||||||
<div class="alert alert-warning">
|
<div class="alert alert-warning">
|
||||||
{{ $t("confirm.alert_validation") }}
|
{{ $t("confirm.alert_validation") }}
|
||||||
<ul class="mt-2">
|
<ul class="mt-2">
|
||||||
<li v-for="k in validationKeys" :key="k">
|
<li v-for="k in validationKeys" :key="k">
|
||||||
{{ $t(notValidMessages[k].msg) }}
|
{{ $t(notValidMessages[k].msg) }}
|
||||||
<a :href="notValidMessages[k].anchor">
|
<a :href="notValidMessages[k].anchor">
|
||||||
<i class="fa fa-level-up fa-fw" />
|
<i class="fa fa-level-up fa-fw" />
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button class="btn btn-save" disabled>
|
||||||
|
{{ $t("confirm.ok") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="btn btn-delete" :href="deleteLink">
|
||||||
|
{{ $t("confirm.delete") }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-else>
|
||||||
|
<p
|
||||||
|
v-html="
|
||||||
|
$t('confirm.text_active', [$t('course.step.active')])
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button
|
||||||
|
class="btn btn-save"
|
||||||
|
@click="modal.showModal = true"
|
||||||
|
>
|
||||||
|
{{ $t("confirm.ok") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a class="btn btn-delete" :href="deleteLink">
|
||||||
|
{{ $t("confirm.delete") }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<button class="btn btn-save" disabled>
|
|
||||||
{{ $t("confirm.ok") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="btn btn-delete" :href="deleteLink">
|
|
||||||
{{ $t("confirm.delete") }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-else>
|
<teleport to="body">
|
||||||
<p v-html="$t('confirm.text_active', [$t('course.step.active')])" />
|
<modal
|
||||||
<ul class="record_actions">
|
v-if="modal.showModal"
|
||||||
<li>
|
:modal-dialog-class="modal.modalDialogClass"
|
||||||
<button class="btn btn-save" @click="modal.showModal = true">
|
@close="modal.showModal = false"
|
||||||
{{ $t("confirm.ok") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="btn btn-delete" :href="deleteLink">
|
|
||||||
{{ $t("confirm.delete") }}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<teleport to="body">
|
|
||||||
<modal
|
|
||||||
v-if="modal.showModal"
|
|
||||||
:modal-dialog-class="modal.modalDialogClass"
|
|
||||||
@close="modal.showModal = false"
|
|
||||||
>
|
|
||||||
<template #header>
|
|
||||||
<h2 class="modal-title">
|
|
||||||
{{ $t("confirm.sure") }}
|
|
||||||
</h2>
|
|
||||||
</template>
|
|
||||||
<template #body>
|
|
||||||
<p>{{ $t("confirm.sure_description") }}</p>
|
|
||||||
<div v-if="accompanyingCourse.user === null">
|
|
||||||
<div v-if="usersSuggestedFilteredByJob.length === 0">
|
|
||||||
<p class="alert alert-warning">
|
|
||||||
{{ $t("confirm.no_suggested_referrer") }}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-if="usersSuggestedFilteredByJob.length === 1"
|
|
||||||
class="alert alert-info"
|
|
||||||
>
|
>
|
||||||
<p>{{ $t("confirm.one_suggested_referrer") }}:</p>
|
<template #header>
|
||||||
<ul class="list-suggest add-items inline">
|
<h2 class="modal-title">
|
||||||
<li>
|
{{ $t("confirm.sure") }}
|
||||||
<user-render-box-badge
|
</h2>
|
||||||
:user="usersSuggestedFilteredByJob[0]"
|
</template>
|
||||||
/>
|
<template #body>
|
||||||
</li>
|
<p>{{ $t("confirm.sure_description") }}</p>
|
||||||
</ul>
|
<div v-if="accompanyingCourse.user === null">
|
||||||
<p>{{ $t("confirm.choose_suggested_referrer") }}</p>
|
<div v-if="usersSuggestedFilteredByJob.length === 0">
|
||||||
<ul class="record_actions">
|
<p class="alert alert-warning">
|
||||||
<li>
|
{{ $t("confirm.no_suggested_referrer") }}
|
||||||
<button
|
</p>
|
||||||
class="btn btn-save mr-5"
|
</div>
|
||||||
@click="chooseSuggestedReferrer"
|
<div
|
||||||
>
|
v-if="usersSuggestedFilteredByJob.length === 1"
|
||||||
{{ $t("confirm.choose_button") }}
|
class="alert alert-info"
|
||||||
</button>
|
>
|
||||||
</li>
|
<p>{{ $t("confirm.one_suggested_referrer") }}:</p>
|
||||||
<li>
|
<ul class="list-suggest add-items inline">
|
||||||
<button
|
<li>
|
||||||
class="btn btn-secondary"
|
<user-render-box-badge
|
||||||
@click="doNotChooseSuggestedReferrer"
|
:user="usersSuggestedFilteredByJob[0]"
|
||||||
>
|
/>
|
||||||
{{ $t("confirm.do_not_choose_button") }}
|
</li>
|
||||||
</button>
|
</ul>
|
||||||
</li>
|
<p>{{ $t("confirm.choose_suggested_referrer") }}</p>
|
||||||
</ul>
|
<ul class="record_actions">
|
||||||
</div>
|
<li>
|
||||||
</div>
|
<button
|
||||||
</template>
|
class="btn btn-save mr-5"
|
||||||
<template #footer>
|
@click="chooseSuggestedReferrer"
|
||||||
<button
|
>
|
||||||
class="btn btn-danger"
|
{{ $t("confirm.choose_button") }}
|
||||||
:disabled="disableConfirm"
|
</button>
|
||||||
@click="confirmCourse"
|
</li>
|
||||||
>
|
<li>
|
||||||
{{ $t("confirm.ok") }}
|
<button
|
||||||
</button>
|
class="btn btn-secondary"
|
||||||
</template>
|
@click="doNotChooseSuggestedReferrer"
|
||||||
</modal>
|
>
|
||||||
</teleport>
|
{{ $t("confirm.do_not_choose_button") }}
|
||||||
</div>
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template #footer>
|
||||||
|
<button
|
||||||
|
class="btn btn-danger"
|
||||||
|
:disabled="disableConfirm"
|
||||||
|
@click="confirmCourse"
|
||||||
|
>
|
||||||
|
{{ $t("confirm.ok") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -123,106 +130,112 @@ import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
|||||||
import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRenderBoxBadge";
|
import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRenderBoxBadge";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Confirm",
|
name: "Confirm",
|
||||||
components: {
|
components: {
|
||||||
Modal,
|
Modal,
|
||||||
UserRenderBoxBadge,
|
UserRenderBoxBadge,
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-centered modal-md",
|
|
||||||
},
|
|
||||||
notValidMessages: {
|
|
||||||
participation: {
|
|
||||||
msg: "confirm.participation_not_valid",
|
|
||||||
anchor: "#section-10",
|
|
||||||
},
|
|
||||||
location: {
|
|
||||||
msg: "confirm.location_not_valid",
|
|
||||||
anchor: "#section-20",
|
|
||||||
},
|
|
||||||
origin: {
|
|
||||||
msg: "confirm.origin_not_valid",
|
|
||||||
anchor: "#section-30",
|
|
||||||
},
|
|
||||||
adminLocation: {
|
|
||||||
msg: "confirm.adminLocation_not_valid",
|
|
||||||
anchor: "#section-40",
|
|
||||||
},
|
|
||||||
socialIssue: {
|
|
||||||
msg: "confirm.socialIssue_not_valid",
|
|
||||||
anchor: "#section-60",
|
|
||||||
},
|
|
||||||
scopes: {
|
|
||||||
msg: "confirm.set_a_scope",
|
|
||||||
anchor: "#section-70",
|
|
||||||
},
|
|
||||||
job: {
|
|
||||||
msg: "confirm.job_not_valid",
|
|
||||||
anchor: "#section-80",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
clickedDoNotChooseReferrer: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
accompanyingCourse: (state) => state.accompanyingCourse,
|
|
||||||
}),
|
|
||||||
...mapGetters([
|
|
||||||
"isParticipationValid",
|
|
||||||
"isSocialIssueValid",
|
|
||||||
"isOriginValid",
|
|
||||||
"isAdminLocationValid",
|
|
||||||
"isLocationValid",
|
|
||||||
"isJobValid",
|
|
||||||
"validationKeys",
|
|
||||||
"isValidToBeConfirmed",
|
|
||||||
"usersSuggestedFilteredByJob",
|
|
||||||
]),
|
|
||||||
deleteLink() {
|
|
||||||
return `/fr/parcours/${this.accompanyingCourse.id}/delete`; //TODO locale
|
|
||||||
},
|
},
|
||||||
disableConfirm() {
|
data() {
|
||||||
return (
|
return {
|
||||||
this.accompanyingCourse.user === null &&
|
modal: {
|
||||||
this.usersSuggestedFilteredByJob.length === 1 &&
|
showModal: false,
|
||||||
this.clickedDoNotChooseReferrer === false
|
modalDialogClass: "modal-dialog-centered modal-md",
|
||||||
);
|
},
|
||||||
|
notValidMessages: {
|
||||||
|
participation: {
|
||||||
|
msg: "confirm.participation_not_valid",
|
||||||
|
anchor: "#section-10",
|
||||||
|
},
|
||||||
|
location: {
|
||||||
|
msg: "confirm.location_not_valid",
|
||||||
|
anchor: "#section-20",
|
||||||
|
},
|
||||||
|
origin: {
|
||||||
|
msg: "confirm.origin_not_valid",
|
||||||
|
anchor: "#section-30",
|
||||||
|
},
|
||||||
|
adminLocation: {
|
||||||
|
msg: "confirm.adminLocation_not_valid",
|
||||||
|
anchor: "#section-40",
|
||||||
|
},
|
||||||
|
socialIssue: {
|
||||||
|
msg: "confirm.socialIssue_not_valid",
|
||||||
|
anchor: "#section-60",
|
||||||
|
},
|
||||||
|
scopes: {
|
||||||
|
msg: "confirm.set_a_scope",
|
||||||
|
anchor: "#section-70",
|
||||||
|
},
|
||||||
|
job: {
|
||||||
|
msg: "confirm.job_not_valid",
|
||||||
|
anchor: "#section-80",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
clickedDoNotChooseReferrer: false,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
},
|
computed: {
|
||||||
methods: {
|
...mapState({
|
||||||
confirmCourse() {
|
accompanyingCourse: (state) => state.accompanyingCourse,
|
||||||
this.$store
|
}),
|
||||||
.dispatch("confirmAccompanyingCourse")
|
...mapGetters([
|
||||||
.catch(({ name, violations }) => {
|
"isParticipationValid",
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
"isSocialIssueValid",
|
||||||
violations.forEach((violation) =>
|
"isOriginValid",
|
||||||
this.$toast.open({ message: violation }),
|
"isAdminLocationValid",
|
||||||
|
"isLocationValid",
|
||||||
|
"isJobValid",
|
||||||
|
"validationKeys",
|
||||||
|
"isValidToBeConfirmed",
|
||||||
|
"usersSuggestedFilteredByJob",
|
||||||
|
]),
|
||||||
|
deleteLink() {
|
||||||
|
return `/fr/parcours/${this.accompanyingCourse.id}/delete`; //TODO locale
|
||||||
|
},
|
||||||
|
disableConfirm() {
|
||||||
|
return (
|
||||||
|
this.accompanyingCourse.user === null &&
|
||||||
|
this.usersSuggestedFilteredByJob.length === 1 &&
|
||||||
|
this.clickedDoNotChooseReferrer === false
|
||||||
);
|
);
|
||||||
} else {
|
},
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
chooseSuggestedReferrer() {
|
methods: {
|
||||||
this.$store
|
confirmCourse() {
|
||||||
.dispatch("updateReferrer", this.usersSuggestedFilteredByJob[0])
|
this.$store
|
||||||
.catch(({ name, violations }) => {
|
.dispatch("confirmAccompanyingCourse")
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
.catch(({ name, violations }) => {
|
||||||
violations.forEach((violation) =>
|
if (
|
||||||
this.$toast.open({ message: violation }),
|
name === "ValidationException" ||
|
||||||
);
|
name === "AccessException"
|
||||||
} else {
|
) {
|
||||||
this.$toast.open({ message: "An error occurred" });
|
violations.forEach((violation) =>
|
||||||
}
|
this.$toast.open({ message: violation }),
|
||||||
});
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
chooseSuggestedReferrer() {
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateReferrer", this.usersSuggestedFilteredByJob[0])
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
doNotChooseSuggestedReferrer() {
|
||||||
|
this.clickedDoNotChooseReferrer = true;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
doNotChooseSuggestedReferrer() {
|
|
||||||
this.clickedDoNotChooseReferrer = true;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,85 +1,95 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2>
|
<h2>
|
||||||
<a id="section-20" />
|
<a id="section-20" />
|
||||||
{{ $t("courselocation.title") }}
|
{{ $t("courselocation.title") }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-for="error in displayErrors"
|
v-for="error in displayErrors"
|
||||||
class="alert alert-danger my-2"
|
class="alert alert-danger my-2"
|
||||||
:key="error"
|
:key="error"
|
||||||
>
|
>
|
||||||
{{ error }}
|
{{ error }}
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="hasNoLocation">
|
|
||||||
<label class="chill-no-data-statement">
|
|
||||||
{{ $t("courselocation.no_address") }}
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex-table" v-if="accompanyingCourse.location">
|
|
||||||
<div class="item-bloc">
|
|
||||||
<address-render-box :address="accompanyingCourse.location" />
|
|
||||||
|
|
||||||
<div v-if="isPersonLocation" class="alert alert-secondary separator">
|
|
||||||
<label class="col-form-label">
|
|
||||||
{{
|
|
||||||
$t("courselocation.person_locator", [
|
|
||||||
accompanyingCourse.personLocation.text,
|
|
||||||
])
|
|
||||||
}}
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="isTemporaryAddress" class="alert alert-warning separator">
|
<div v-if="hasNoLocation">
|
||||||
<p>
|
<label class="chill-no-data-statement">
|
||||||
{{ $t("courselocation.temporary_address_must_be_changed") }}
|
{{ $t("courselocation.no_address") }}
|
||||||
<i class="fa fa-fw fa-map-marker" />
|
</label>
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
<div class="flex-table" v-if="accompanyingCourse.location">
|
||||||
v-if="hasNoPersonLocation"
|
<div class="item-bloc">
|
||||||
class="alert alert-danger no-person-location"
|
<address-render-box :address="accompanyingCourse.location" />
|
||||||
>
|
|
||||||
<i class="fa fa-warning fa-2x" />
|
|
||||||
<div>
|
|
||||||
<p>
|
|
||||||
{{
|
|
||||||
$t(
|
|
||||||
"courselocation.associate_at_least_one_person_with_one_household_with_address",
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
<a href="#section-10">
|
|
||||||
<i class="fa fa-level-up fa-fw" />
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div
|
||||||
<ul class="record_actions">
|
v-if="isPersonLocation"
|
||||||
<li>
|
class="alert alert-secondary separator"
|
||||||
<add-address
|
>
|
||||||
v-if="!isPersonLocation"
|
<label class="col-form-label">
|
||||||
:key="key"
|
{{
|
||||||
:context="context"
|
$t("courselocation.person_locator", [
|
||||||
:options="options"
|
accompanyingCourse.personLocation.text,
|
||||||
:address-changed-callback="submitTemporaryAddress"
|
])
|
||||||
ref="addAddress"
|
}}
|
||||||
/>
|
</label>
|
||||||
</li>
|
</div>
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="!isLocationValid" class="alert alert-warning to-confirm">
|
<div
|
||||||
{{ $t("courselocation.not_valid") }}
|
v-if="isTemporaryAddress"
|
||||||
|
class="alert alert-warning separator"
|
||||||
|
>
|
||||||
|
<p>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"courselocation.temporary_address_must_be_changed",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
<i class="fa fa-fw fa-map-marker" />
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="hasNoPersonLocation"
|
||||||
|
class="alert alert-danger no-person-location"
|
||||||
|
>
|
||||||
|
<i class="fa fa-warning fa-2x" />
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"courselocation.associate_at_least_one_person_with_one_household_with_address",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
<a href="#section-10">
|
||||||
|
<i class="fa fa-level-up fa-fw" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<add-address
|
||||||
|
v-if="!isPersonLocation"
|
||||||
|
:key="key"
|
||||||
|
:context="context"
|
||||||
|
:options="options"
|
||||||
|
:address-changed-callback="submitTemporaryAddress"
|
||||||
|
ref="addAddress"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="!isLocationValid" class="alert alert-warning to-confirm">
|
||||||
|
{{ $t("courselocation.not_valid") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -88,171 +98,177 @@ import AddAddress from "ChillMainAssets/vuejs/Address/components/AddAddress.vue"
|
|||||||
import AddressRenderBox from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
|
import AddressRenderBox from "ChillMainAssets/vuejs/_components/Entity/AddressRenderBox.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "CourseLocation",
|
name: "CourseLocation",
|
||||||
components: {
|
components: {
|
||||||
AddAddress,
|
AddAddress,
|
||||||
AddressRenderBox,
|
AddressRenderBox,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addAddress: {
|
addAddress: {
|
||||||
options: {
|
options: {
|
||||||
button: {
|
button: {
|
||||||
text: {
|
text: {
|
||||||
create: "courselocation.add_temporary_address",
|
create: "courselocation.add_temporary_address",
|
||||||
edit: "courselocation.edit_temporary_address",
|
edit: "courselocation.edit_temporary_address",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
create: "courselocation.add_temporary_address",
|
||||||
|
edit: "courselocation.edit_temporary_address",
|
||||||
|
},
|
||||||
|
onlyButton: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
};
|
||||||
title: {
|
},
|
||||||
create: "courselocation.add_temporary_address",
|
computed: {
|
||||||
edit: "courselocation.edit_temporary_address",
|
...mapState({
|
||||||
},
|
accompanyingCourse: (state) => state.accompanyingCourse,
|
||||||
onlyButton: true,
|
context: (state) => state.addressContext,
|
||||||
|
}),
|
||||||
|
...mapGetters(["isLocationValid"]),
|
||||||
|
options() {
|
||||||
|
return this.addAddress.options;
|
||||||
},
|
},
|
||||||
},
|
key() {
|
||||||
};
|
return this.context.edit
|
||||||
},
|
? "address_" + this.context.addressId
|
||||||
computed: {
|
: this.accompanyingCourse.type +
|
||||||
...mapState({
|
"_" +
|
||||||
accompanyingCourse: (state) => state.accompanyingCourse,
|
this.accompanyingCourse.id;
|
||||||
context: (state) => state.addressContext,
|
|
||||||
}),
|
|
||||||
...mapGetters(["isLocationValid"]),
|
|
||||||
options() {
|
|
||||||
return this.addAddress.options;
|
|
||||||
},
|
|
||||||
key() {
|
|
||||||
return this.context.edit
|
|
||||||
? "address_" + this.context.addressId
|
|
||||||
: this.accompanyingCourse.type + "_" + this.accompanyingCourse.id;
|
|
||||||
},
|
|
||||||
isTemporaryAddress() {
|
|
||||||
return this.accompanyingCourse.locationStatus === "address";
|
|
||||||
},
|
|
||||||
isPersonLocation() {
|
|
||||||
return this.accompanyingCourse.locationStatus === "person";
|
|
||||||
},
|
|
||||||
hasNoLocation() {
|
|
||||||
return this.accompanyingCourse.locationStatus === "none";
|
|
||||||
},
|
|
||||||
currentParticipations() {
|
|
||||||
return this.accompanyingCourse.participations.filter(
|
|
||||||
(p) => p.enddate !== null,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
hasNoPersonLocation() {
|
|
||||||
let addressInParticipations_ = [];
|
|
||||||
this.currentParticipations.forEach((p) => {
|
|
||||||
addressInParticipations_.push(
|
|
||||||
this.checkHouseholdAddressForParticipation(p),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
const booleanReducer = (previousValue, currentValue) =>
|
|
||||||
previousValue || currentValue;
|
|
||||||
|
|
||||||
let addressInParticipations =
|
|
||||||
addressInParticipations_.length > 0
|
|
||||||
? addressInParticipations_.reduce(booleanReducer)
|
|
||||||
: false;
|
|
||||||
|
|
||||||
//console.log(addressInParticipations_, addressInParticipations);
|
|
||||||
return (
|
|
||||||
this.accompanyingCourse.step !== "DRAFT" &&
|
|
||||||
this.isTemporaryAddress &&
|
|
||||||
!addressInParticipations
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isContextEdit() {
|
|
||||||
return this.context.edit;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
checkHouseholdAddressForParticipation(participation) {
|
|
||||||
if (participation.person.current_household_id === null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return participation.person.current_household_address !== null;
|
|
||||||
},
|
|
||||||
initAddressContext() {
|
|
||||||
let context = {
|
|
||||||
target: {
|
|
||||||
name: this.accompanyingCourse.type,
|
|
||||||
id: this.accompanyingCourse.id,
|
|
||||||
},
|
},
|
||||||
edit: false,
|
isTemporaryAddress() {
|
||||||
addressId: null,
|
return this.accompanyingCourse.locationStatus === "address";
|
||||||
defaults: window.addaddress,
|
},
|
||||||
};
|
isPersonLocation() {
|
||||||
if (this.accompanyingCourse.location) {
|
return this.accompanyingCourse.locationStatus === "person";
|
||||||
context["edit"] = true;
|
},
|
||||||
context["addressId"] = this.accompanyingCourse.location.address_id;
|
hasNoLocation() {
|
||||||
}
|
return this.accompanyingCourse.locationStatus === "none";
|
||||||
this.$store.commit("setAddressContext", context);
|
},
|
||||||
},
|
currentParticipations() {
|
||||||
displayErrors() {
|
return this.accompanyingCourse.participations.filter(
|
||||||
return this.$refs.addAddress.errorMsg;
|
(p) => p.enddate !== null,
|
||||||
},
|
|
||||||
submitTemporaryAddress(payload) {
|
|
||||||
//console.log('@@@ click on Submit Temporary Address Button', payload);
|
|
||||||
payload["locationStatusTo"] = "address"; // <== temporary, not none, not person
|
|
||||||
this.$store
|
|
||||||
.dispatch("updateLocation", payload)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
);
|
||||||
} else {
|
},
|
||||||
this.$toast.open({ message: "An error occurred" });
|
hasNoPersonLocation() {
|
||||||
}
|
let addressInParticipations_ = [];
|
||||||
});
|
this.currentParticipations.forEach((p) => {
|
||||||
|
addressInParticipations_.push(
|
||||||
|
this.checkHouseholdAddressForParticipation(p),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
this.$store.commit("setEditContextTrue", payload);
|
const booleanReducer = (previousValue, currentValue) =>
|
||||||
|
previousValue || currentValue;
|
||||||
|
|
||||||
|
let addressInParticipations =
|
||||||
|
addressInParticipations_.length > 0
|
||||||
|
? addressInParticipations_.reduce(booleanReducer)
|
||||||
|
: false;
|
||||||
|
|
||||||
|
//console.log(addressInParticipations_, addressInParticipations);
|
||||||
|
return (
|
||||||
|
this.accompanyingCourse.step !== "DRAFT" &&
|
||||||
|
this.isTemporaryAddress &&
|
||||||
|
!addressInParticipations
|
||||||
|
);
|
||||||
|
},
|
||||||
|
isContextEdit() {
|
||||||
|
return this.context.edit;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
created() {
|
checkHouseholdAddressForParticipation(participation) {
|
||||||
this.initAddressContext();
|
if (participation.person.current_household_id === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return participation.person.current_household_address !== null;
|
||||||
|
},
|
||||||
|
initAddressContext() {
|
||||||
|
let context = {
|
||||||
|
target: {
|
||||||
|
name: this.accompanyingCourse.type,
|
||||||
|
id: this.accompanyingCourse.id,
|
||||||
|
},
|
||||||
|
edit: false,
|
||||||
|
addressId: null,
|
||||||
|
defaults: window.addaddress,
|
||||||
|
};
|
||||||
|
if (this.accompanyingCourse.location) {
|
||||||
|
context["edit"] = true;
|
||||||
|
context["addressId"] =
|
||||||
|
this.accompanyingCourse.location.address_id;
|
||||||
|
}
|
||||||
|
this.$store.commit("setAddressContext", context);
|
||||||
|
},
|
||||||
|
displayErrors() {
|
||||||
|
return this.$refs.addAddress.errorMsg;
|
||||||
|
},
|
||||||
|
submitTemporaryAddress(payload) {
|
||||||
|
//console.log('@@@ click on Submit Temporary Address Button', payload);
|
||||||
|
payload["locationStatusTo"] = "address"; // <== temporary, not none, not person
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateLocation", payload)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//console.log('ac.locationStatus', this.accompanyingCourse.locationStatus);
|
this.$store.commit("setEditContextTrue", payload);
|
||||||
//console.log('ac.location (temporary location)', this.accompanyingCourse.location);
|
},
|
||||||
//console.log('ac.personLocation', this.accompanyingCourse.personLocation);
|
},
|
||||||
},
|
created() {
|
||||||
|
this.initAddressContext();
|
||||||
|
|
||||||
|
//console.log('ac.locationStatus', this.accompanyingCourse.locationStatus);
|
||||||
|
//console.log('ac.location (temporary location)', this.accompanyingCourse.location);
|
||||||
|
//console.log('ac.personLocation', this.accompanyingCourse.personLocation);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
div#accompanying-course {
|
div#accompanying-course {
|
||||||
div.vue-component {
|
div.vue-component {
|
||||||
& > div.alert.no-person-location {
|
& > div.alert.no-person-location {
|
||||||
margin: 1px 0 0;
|
margin: 1px 0 0;
|
||||||
}
|
|
||||||
div.no-person-location {
|
|
||||||
padding-top: 1.5em;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
& > i {
|
|
||||||
flex-basis: 1.5em;
|
|
||||||
flex-grow: 0;
|
|
||||||
flex-shrink: 0;
|
|
||||||
padding-top: 0.2em;
|
|
||||||
opacity: 0.75;
|
|
||||||
}
|
|
||||||
& > div {
|
|
||||||
flex-basis: auto;
|
|
||||||
div.action {
|
|
||||||
button.btn-update {
|
|
||||||
margin-right: 2em;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
div.no-person-location {
|
||||||
}
|
padding-top: 1.5em;
|
||||||
div.flex-table {
|
display: flex;
|
||||||
div.item-bloc {
|
flex-direction: row;
|
||||||
div.alert {
|
& > i {
|
||||||
margin: 0 -0.9em -1em;
|
flex-basis: 1.5em;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
padding-top: 0.2em;
|
||||||
|
opacity: 0.75;
|
||||||
|
}
|
||||||
|
& > div {
|
||||||
|
flex-basis: auto;
|
||||||
|
div.action {
|
||||||
|
button.btn-update {
|
||||||
|
margin-right: 2em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
div.flex-table {
|
||||||
|
div.item-bloc {
|
||||||
|
div.alert {
|
||||||
|
margin: 0 -0.9em -1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,33 +1,33 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-30" />{{ $t("origin.title") }}</h2>
|
<h2><a id="section-30" />{{ $t("origin.title") }}</h2>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<label for="selectOrigin">
|
<label for="selectOrigin">
|
||||||
{{ $t("origin.title") }}
|
{{ $t("origin.title") }}
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
name="selectOrigin"
|
name="selectOrigin"
|
||||||
label="text"
|
label="text"
|
||||||
:custom-label="transText"
|
:custom-label="transText"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
:multiple="false"
|
:multiple="false"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
:placeholder="$t('origin.placeholder')"
|
:placeholder="$t('origin.placeholder')"
|
||||||
v-model="value"
|
v-model="value"
|
||||||
:options="options"
|
:options="options"
|
||||||
:select-label="$t('multiselect.select_label')"
|
:select-label="$t('multiselect.select_label')"
|
||||||
:deselect-label="$t('multiselect.deselect_label')"
|
:deselect-label="$t('multiselect.deselect_label')"
|
||||||
:selected-label="$t('multiselect.selected_label')"
|
:selected-label="$t('multiselect.selected_label')"
|
||||||
@select="updateOrigin"
|
@select="updateOrigin"
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="!isOriginValid" class="alert alert-warning to-confirm">
|
||||||
|
{{ $t("origin.not_valid") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="!isOriginValid" class="alert alert-warning to-confirm">
|
|
||||||
{{ $t("origin.not_valid") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -36,58 +36,61 @@ import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
|||||||
import { mapState, mapGetters } from "vuex";
|
import { mapState, mapGetters } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "OriginDemand",
|
name: "OriginDemand",
|
||||||
components: { VueMultiselect },
|
components: { VueMultiselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
options: [],
|
options: [],
|
||||||
};
|
};
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
value: (state) => state.accompanyingCourse.origin,
|
|
||||||
}),
|
|
||||||
...mapGetters(["isOriginValid"]),
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.getOptions();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getOptions() {
|
|
||||||
const url = `/api/1.0/person/accompanying-period/origin.json`;
|
|
||||||
makeFetch("GET", url)
|
|
||||||
.then((response) => {
|
|
||||||
this.options = response.results;
|
|
||||||
return response;
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
commit("catchError", error);
|
|
||||||
this.$toast.open({ message: error.txt });
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
updateOrigin(value) {
|
computed: {
|
||||||
this.$store
|
...mapState({
|
||||||
.dispatch("updateOrigin", value)
|
value: (state) => state.accompanyingCourse.origin,
|
||||||
.catch(({ name, violations }) => {
|
}),
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
...mapGetters(["isOriginValid"]),
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
transText({ text }) {
|
mounted() {
|
||||||
return text.fr;
|
this.getOptions();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getOptions() {
|
||||||
|
const url = `/api/1.0/person/accompanying-period/origin.json`;
|
||||||
|
makeFetch("GET", url)
|
||||||
|
.then((response) => {
|
||||||
|
this.options = response.results;
|
||||||
|
return response;
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
commit("catchError", error);
|
||||||
|
this.$toast.open({ message: error.txt });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
updateOrigin(value) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateOrigin", value)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
transText({ text }) {
|
||||||
|
return text.fr;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||||
<style lang="css" scoped>
|
<style lang="css" scoped>
|
||||||
label {
|
label {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,106 +1,121 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-10" />{{ $t("persons_associated.title") }}</h2>
|
<h2><a id="section-10" />{{ $t("persons_associated.title") }}</h2>
|
||||||
|
|
||||||
<div v-if="currentParticipations.length > 0">
|
<div v-if="currentParticipations.length > 0">
|
||||||
<label class="col-form-label">{{
|
<label class="col-form-label">{{
|
||||||
$tc("persons_associated.counter", counter)
|
$tc("persons_associated.counter", counter)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<label class="chill-no-data-statement">{{
|
<label class="chill-no-data-statement">{{
|
||||||
$tc("persons_associated.counter", counter)
|
$tc("persons_associated.counter", counter)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-if="participationWithoutHousehold.length > 0"
|
|
||||||
class="alert alert-warning no-household"
|
|
||||||
>
|
|
||||||
<i class="fa fa-warning fa-2x" />
|
|
||||||
<form method="GET" action="/fr/person/household/members/editor">
|
|
||||||
<div class="float-button bottom">
|
|
||||||
<div class="box">
|
|
||||||
<div class="action">
|
|
||||||
<button class="btn btn-update" type="submit">
|
|
||||||
{{ $t("persons_associated.update_household") }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<p class="mb-3">
|
|
||||||
{{ $t("persons_associated.person_without_household_warning") }}
|
|
||||||
</p>
|
|
||||||
<div
|
|
||||||
class="form-check"
|
|
||||||
v-for="p in participationWithoutHousehold"
|
|
||||||
:key="p.id"
|
|
||||||
>
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
class="form-check-input"
|
|
||||||
name="persons[]"
|
|
||||||
checked="checked"
|
|
||||||
:id="p.person.id"
|
|
||||||
:value="p.person.id"
|
|
||||||
/>
|
|
||||||
<label class="form-check-label">
|
|
||||||
<person-text :person="p.person" />
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<input type="hidden" name="expand_suggestions" value="true" />
|
|
||||||
<input type="hidden" name="returnPath" :value="getReturnPath" />
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="accompanying_period_id"
|
|
||||||
:value="courseId"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex-table mb-3">
|
<div
|
||||||
<participation-item
|
v-if="participationWithoutHousehold.length > 0"
|
||||||
v-for="participation in currentParticipations"
|
class="alert alert-warning no-household"
|
||||||
:participation="participation"
|
|
||||||
:key="participation.id"
|
|
||||||
@remove="removeParticipation"
|
|
||||||
@close="closeParticipation"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="suggestedPersons.length > 0">
|
|
||||||
<ul class="list-suggest add-items inline">
|
|
||||||
<li
|
|
||||||
v-for="p in suggestedPersons"
|
|
||||||
:key="p.id"
|
|
||||||
@click="addSuggestedPerson(p)"
|
|
||||||
>
|
>
|
||||||
<person-text :person="p" />
|
<i class="fa fa-warning fa-2x" />
|
||||||
</li>
|
<form method="GET" action="/fr/person/household/members/editor">
|
||||||
</ul>
|
<div class="float-button bottom">
|
||||||
</div>
|
<div class="box">
|
||||||
|
<div class="action">
|
||||||
|
<button class="btn btn-update" type="submit">
|
||||||
|
{{ $t("persons_associated.update_household") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p class="mb-3">
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"persons_associated.person_without_household_warning",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</p>
|
||||||
|
<div
|
||||||
|
class="form-check"
|
||||||
|
v-for="p in participationWithoutHousehold"
|
||||||
|
:key="p.id"
|
||||||
|
>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
class="form-check-input"
|
||||||
|
name="persons[]"
|
||||||
|
checked="checked"
|
||||||
|
:id="p.person.id"
|
||||||
|
:value="p.person.id"
|
||||||
|
/>
|
||||||
|
<label class="form-check-label">
|
||||||
|
<person-text :person="p.person" />
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<input
|
||||||
|
type="hidden"
|
||||||
|
name="expand_suggestions"
|
||||||
|
value="true"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
type="hidden"
|
||||||
|
name="returnPath"
|
||||||
|
:value="getReturnPath"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
type="hidden"
|
||||||
|
name="accompanying_period_id"
|
||||||
|
:value="courseId"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div class="flex-table mb-3">
|
||||||
<ul class="record_actions">
|
<participation-item
|
||||||
<li class="add-persons">
|
v-for="participation in currentParticipations"
|
||||||
<add-persons
|
:participation="participation"
|
||||||
button-title="persons_associated.add_persons"
|
:key="participation.id"
|
||||||
modal-title="add_persons.title"
|
@remove="removeParticipation"
|
||||||
:key="addPersons.key"
|
@close="closeParticipation"
|
||||||
:options="addPersons.options"
|
/>
|
||||||
@add-new-persons="addNewPersons"
|
</div>
|
||||||
ref="addPersons"
|
|
||||||
>
|
|
||||||
<!-- to cast child method -->
|
|
||||||
</add-persons>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="!isParticipationValid" class="alert alert-warning to-confirm">
|
<div v-if="suggestedPersons.length > 0">
|
||||||
{{ $t("persons_associated.participation_not_valid") }}
|
<ul class="list-suggest add-items inline">
|
||||||
|
<li
|
||||||
|
v-for="p in suggestedPersons"
|
||||||
|
:key="p.id"
|
||||||
|
@click="addSuggestedPerson(p)"
|
||||||
|
>
|
||||||
|
<person-text :person="p" />
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li class="add-persons">
|
||||||
|
<add-persons
|
||||||
|
button-title="persons_associated.add_persons"
|
||||||
|
modal-title="add_persons.title"
|
||||||
|
:key="addPersons.key"
|
||||||
|
:options="addPersons.options"
|
||||||
|
@add-new-persons="addNewPersons"
|
||||||
|
ref="addPersons"
|
||||||
|
>
|
||||||
|
<!-- to cast child method -->
|
||||||
|
</add-persons>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="!isParticipationValid"
|
||||||
|
class="alert alert-warning to-confirm"
|
||||||
|
>
|
||||||
|
{{ $t("persons_associated.participation_not_valid") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -110,157 +125,176 @@ import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
|||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PersonsAssociated",
|
name: "PersonsAssociated",
|
||||||
components: {
|
components: {
|
||||||
ParticipationItem,
|
ParticipationItem,
|
||||||
AddPersons,
|
AddPersons,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addPersons: {
|
addPersons: {
|
||||||
key: "persons_associated",
|
key: "persons_associated",
|
||||||
options: {
|
options: {
|
||||||
type: ["person"],
|
type: ["person"],
|
||||||
priority: null,
|
priority: null,
|
||||||
uniq: false,
|
uniq: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
courseId: (state) => state.accompanyingCourse.id,
|
courseId: (state) => state.accompanyingCourse.id,
|
||||||
participations: (state) => state.accompanyingCourse.participations,
|
participations: (state) => state.accompanyingCourse.participations,
|
||||||
suggestedPersons: (state) =>
|
suggestedPersons: (state) =>
|
||||||
[
|
[
|
||||||
state.accompanyingCourse.requestor,
|
state.accompanyingCourse.requestor,
|
||||||
...state.accompanyingCourse.resources.map((r) => r.resource),
|
...state.accompanyingCourse.resources.map(
|
||||||
]
|
(r) => r.resource,
|
||||||
.filter((e) => e !== null)
|
),
|
||||||
.filter((e) => e.type === "person")
|
]
|
||||||
.filter(
|
.filter((e) => e !== null)
|
||||||
(p) =>
|
.filter((e) => e.type === "person")
|
||||||
!state.accompanyingCourse.participations
|
.filter(
|
||||||
.filter((pa) => pa.endDate === null)
|
(p) =>
|
||||||
.map((pa) => pa.person.id)
|
!state.accompanyingCourse.participations
|
||||||
.includes(p.id),
|
.filter((pa) => pa.endDate === null)
|
||||||
)
|
.map((pa) => pa.person.id)
|
||||||
// filter persons appearing twice in requestor and resources
|
.includes(p.id),
|
||||||
.filter((e, index, suggested) => {
|
)
|
||||||
for (let i = 0; i < suggested.length; i = i + 1) {
|
// filter persons appearing twice in requestor and resources
|
||||||
if (i < index && e.id === suggested[i].id) {
|
.filter((e, index, suggested) => {
|
||||||
return false;
|
for (let i = 0; i < suggested.length; i = i + 1) {
|
||||||
}
|
if (i < index && e.id === suggested[i].id) {
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
...mapGetters(["isParticipationValid"]),
|
...mapGetters(["isParticipationValid"]),
|
||||||
currentParticipations() {
|
currentParticipations() {
|
||||||
return this.participations.filter((p) => p.endDate === null);
|
return this.participations.filter((p) => p.endDate === null);
|
||||||
},
|
},
|
||||||
counter() {
|
counter() {
|
||||||
return this.currentParticipations.length;
|
return this.currentParticipations.length;
|
||||||
},
|
},
|
||||||
participationWithoutHousehold() {
|
participationWithoutHousehold() {
|
||||||
return this.currentParticipations.filter(
|
return this.currentParticipations.filter(
|
||||||
(p) => p.person.current_household_id === null,
|
(p) => p.person.current_household_id === null,
|
||||||
);
|
|
||||||
},
|
|
||||||
getReturnPath() {
|
|
||||||
return (
|
|
||||||
window.location.pathname + window.location.search + window.location.hash
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
removeParticipation(item) {
|
|
||||||
this.$store
|
|
||||||
.dispatch("removeParticipation", item)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
);
|
||||||
} else {
|
},
|
||||||
this.$toast.open({ message: "An error occurred" });
|
getReturnPath() {
|
||||||
}
|
return (
|
||||||
});
|
window.location.pathname +
|
||||||
},
|
window.location.search +
|
||||||
closeParticipation(item) {
|
window.location.hash
|
||||||
this.$store
|
|
||||||
.dispatch("closeParticipation", item)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
);
|
||||||
} else {
|
},
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
addNewPersons({ selected, modal }) {
|
methods: {
|
||||||
selected.forEach(function (item) {
|
removeParticipation(item) {
|
||||||
this.$store
|
this.$store
|
||||||
.dispatch("addParticipation", item)
|
.dispatch("removeParticipation", item)
|
||||||
.catch(({ name, violations }) => {
|
.catch(({ name, violations }) => {
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
if (
|
||||||
violations.forEach((violation) =>
|
name === "ValidationException" ||
|
||||||
this.$toast.open({ message: violation }),
|
name === "AccessException"
|
||||||
);
|
) {
|
||||||
} else {
|
violations.forEach((violation) =>
|
||||||
this.$toast.open({ message: "An error occurred" });
|
this.$toast.open({ message: violation }),
|
||||||
}
|
);
|
||||||
});
|
} else {
|
||||||
}, this);
|
this.$toast.open({ message: "An error occurred" });
|
||||||
this.$refs.addPersons.resetSearch(); // to cast child method
|
}
|
||||||
modal.showModal = false;
|
});
|
||||||
|
},
|
||||||
|
closeParticipation(item) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("closeParticipation", item)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addNewPersons({ selected, modal }) {
|
||||||
|
selected.forEach(function (item) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("addParticipation", item)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, this);
|
||||||
|
this.$refs.addPersons.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
},
|
||||||
|
addSuggestedPerson(person) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("addParticipation", {
|
||||||
|
result: person,
|
||||||
|
type: "person",
|
||||||
|
})
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
addSuggestedPerson(person) {
|
|
||||||
this.$store
|
|
||||||
.dispatch("addParticipation", { result: person, type: "person" })
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
div#accompanying-course {
|
div#accompanying-course {
|
||||||
div.vue-component {
|
div.vue-component {
|
||||||
& > div.alert.no-household {
|
& > div.alert.no-household {
|
||||||
margin: 0 0 -1em;
|
margin: 0 0 -1em;
|
||||||
}
|
}
|
||||||
div.no-household {
|
div.no-household {
|
||||||
padding-bottom: 1.5em;
|
padding-bottom: 1.5em;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
& > i {
|
& > i {
|
||||||
flex-basis: 1.5em;
|
flex-basis: 1.5em;
|
||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
padding-top: 0.2em;
|
padding-top: 0.2em;
|
||||||
opacity: 0.75;
|
opacity: 0.75;
|
||||||
}
|
}
|
||||||
& > form {
|
& > form {
|
||||||
flex-basis: auto;
|
flex-basis: auto;
|
||||||
div.action {
|
div.action {
|
||||||
button.btn-update {
|
button.btn-update {
|
||||||
margin-right: 2em;
|
margin-right: 2em;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,97 +1,98 @@
|
|||||||
<template>
|
<template>
|
||||||
<person-render-box
|
<person-render-box
|
||||||
render="bloc"
|
render="bloc"
|
||||||
:options="{
|
:options="{
|
||||||
addInfo: true,
|
addInfo: true,
|
||||||
addId: false,
|
addId: false,
|
||||||
addEntity: false,
|
addEntity: false,
|
||||||
addLink: false,
|
addLink: false,
|
||||||
addHouseholdLink: false,
|
addHouseholdLink: false,
|
||||||
addAltNames: true,
|
addAltNames: true,
|
||||||
addAge: true,
|
addAge: true,
|
||||||
hLevel: 3,
|
hLevel: 3,
|
||||||
isConfidential: false,
|
isConfidential: false,
|
||||||
isMultiline: true,
|
isMultiline: true,
|
||||||
}"
|
}"
|
||||||
:person="participation.person"
|
:person="participation.person"
|
||||||
:return-path="getAccompanyingCourseReturnPath"
|
:return-path="getAccompanyingCourseReturnPath"
|
||||||
>
|
|
||||||
<template #end-bloc>
|
|
||||||
<div class="item-row separator">
|
|
||||||
<ul class="record_actions">
|
|
||||||
<button-location
|
|
||||||
v-if="
|
|
||||||
hasCurrentHouseholdAddress &&
|
|
||||||
!isPersonLocatingCourse(participation.person)
|
|
||||||
"
|
|
||||||
:person="participation.person"
|
|
||||||
/>
|
|
||||||
<li v-if="participation.person.current_household_id">
|
|
||||||
<a
|
|
||||||
class="btn btn-sm btn-chill-beige"
|
|
||||||
:href="getCurrentHouseholdUrl"
|
|
||||||
:title="
|
|
||||||
$t('persons_associated.show_household_number', {
|
|
||||||
id: participation.person.current_household_id,
|
|
||||||
})
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<i class="fa fa-fw fa-home" />
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="participation.person.type"
|
|
||||||
:id="participation.person.id"
|
|
||||||
action="show"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="participation.person.type"
|
|
||||||
:id="participation.person.id"
|
|
||||||
action="edit"
|
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
|
||||||
ref="onTheFly"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
v-if="!participation.endDate"
|
|
||||||
class="btn btn-sm btn-remove"
|
|
||||||
:title="$t('persons_associated.leave_course')"
|
|
||||||
@click="modal.showModal = true"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</person-render-box>
|
|
||||||
|
|
||||||
<teleport to="body">
|
|
||||||
<modal
|
|
||||||
v-if="modal.showModal"
|
|
||||||
:modal-dialog-class="modal.modalDialogClass"
|
|
||||||
@close="modal.showModal = false"
|
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #end-bloc>
|
||||||
<h2 class="modal-title">
|
<div class="item-row separator">
|
||||||
{{ $t("persons_associated.sure") }}
|
<ul class="record_actions">
|
||||||
</h2>
|
<button-location
|
||||||
</template>
|
v-if="
|
||||||
<template #body>
|
hasCurrentHouseholdAddress &&
|
||||||
<p>{{ $t("persons_associated.sure_description") }}</p>
|
!isPersonLocatingCourse(participation.person)
|
||||||
</template>
|
"
|
||||||
<template #footer>
|
:person="participation.person"
|
||||||
<button
|
/>
|
||||||
class="btn btn-danger"
|
<li v-if="participation.person.current_household_id">
|
||||||
@click.prevent="$emit('close', participation)"
|
<a
|
||||||
|
class="btn btn-sm btn-chill-beige"
|
||||||
|
:href="getCurrentHouseholdUrl"
|
||||||
|
:title="
|
||||||
|
$t('persons_associated.show_household_number', {
|
||||||
|
id: participation.person
|
||||||
|
.current_household_id,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<i class="fa fa-fw fa-home" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="participation.person.type"
|
||||||
|
:id="participation.person.id"
|
||||||
|
action="show"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="participation.person.type"
|
||||||
|
:id="participation.person.id"
|
||||||
|
action="edit"
|
||||||
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
|
ref="onTheFly"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<button
|
||||||
|
v-if="!participation.endDate"
|
||||||
|
class="btn btn-sm btn-remove"
|
||||||
|
:title="$t('persons_associated.leave_course')"
|
||||||
|
@click="modal.showModal = true"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</person-render-box>
|
||||||
|
|
||||||
|
<teleport to="body">
|
||||||
|
<modal
|
||||||
|
v-if="modal.showModal"
|
||||||
|
:modal-dialog-class="modal.modalDialogClass"
|
||||||
|
@close="modal.showModal = false"
|
||||||
>
|
>
|
||||||
{{ $t("persons_associated.ok") }}
|
<template #header>
|
||||||
</button>
|
<h2 class="modal-title">
|
||||||
</template>
|
{{ $t("persons_associated.sure") }}
|
||||||
</modal>
|
</h2>
|
||||||
</teleport>
|
</template>
|
||||||
|
<template #body>
|
||||||
|
<p>{{ $t("persons_associated.sure_description") }}</p>
|
||||||
|
</template>
|
||||||
|
<template #footer>
|
||||||
|
<button
|
||||||
|
class="btn btn-danger"
|
||||||
|
@click.prevent="$emit('close', participation)"
|
||||||
|
>
|
||||||
|
{{ $t("persons_associated.ok") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -102,135 +103,135 @@ import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
|||||||
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ParticipationItem",
|
name: "ParticipationItem",
|
||||||
components: {
|
components: {
|
||||||
OnTheFly,
|
OnTheFly,
|
||||||
ButtonLocation,
|
ButtonLocation,
|
||||||
PersonRenderBox,
|
PersonRenderBox,
|
||||||
Modal,
|
Modal,
|
||||||
},
|
|
||||||
props: ["participation"],
|
|
||||||
emits: ["remove", "close"],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-centered modal-md",
|
|
||||||
},
|
|
||||||
PersonRenderBox: {
|
|
||||||
participation: "participation",
|
|
||||||
options: {
|
|
||||||
addInfo: false,
|
|
||||||
addId: true,
|
|
||||||
addAge: false,
|
|
||||||
hLevel: 1,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
hasCurrentHouseholdAddress() {
|
|
||||||
if (
|
|
||||||
!this.participation.endDate &&
|
|
||||||
this.participation.person.current_household_address !== null
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
getAccompanyingCourseReturnPath() {
|
props: ["participation"],
|
||||||
return `fr/parcours/${this.$store.state.accompanyingCourse.id}/edit#section-10`;
|
emits: ["remove", "close"],
|
||||||
},
|
data() {
|
||||||
getCurrentHouseholdUrl() {
|
return {
|
||||||
return `/fr/person/household/${this.participation.person.current_household_id}/summary?returnPath=${this.getAccompanyingCourseReturnPath}`;
|
modal: {
|
||||||
},
|
showModal: false,
|
||||||
},
|
modalDialogClass: "modal-dialog-centered modal-md",
|
||||||
methods: {
|
},
|
||||||
isPersonLocatingCourse(person) {
|
PersonRenderBox: {
|
||||||
return this.$store.getters.isPersonLocatingCourse(person);
|
participation: "participation",
|
||||||
},
|
options: {
|
||||||
saveFormOnTheFly(payload) {
|
addInfo: false,
|
||||||
console.log(
|
addId: true,
|
||||||
"saveFormOnTheFly: type",
|
addAge: false,
|
||||||
payload.type,
|
hLevel: 1,
|
||||||
", data",
|
},
|
||||||
payload.data,
|
},
|
||||||
);
|
|
||||||
payload.target = "participation";
|
|
||||||
|
|
||||||
let body = { type: payload.type };
|
|
||||||
if (payload.type === "person") {
|
|
||||||
body.firstName = payload.data.firstName;
|
|
||||||
body.lastName = payload.data.lastName;
|
|
||||||
if (payload.data.birthdate !== null) {
|
|
||||||
body.birthdate = payload.data.birthdate;
|
|
||||||
}
|
|
||||||
body.phonenumber = payload.data.phonenumber;
|
|
||||||
body.mobilenumber = payload.data.mobilenumber;
|
|
||||||
body.email = payload.data.email;
|
|
||||||
body.altNames = payload.data.altNames;
|
|
||||||
body.gender = {
|
|
||||||
id: payload.data.gender.id,
|
|
||||||
type: payload.data.gender.type,
|
|
||||||
};
|
};
|
||||||
if (payload.data.civility !== null) {
|
|
||||||
body.civility = {
|
|
||||||
id: payload.data.civility.id,
|
|
||||||
type: payload.data.civility.type,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
makeFetch(
|
|
||||||
"PATCH",
|
|
||||||
`/api/1.0/person/person/${payload.data.id}.json`,
|
|
||||||
body,
|
|
||||||
)
|
|
||||||
.then((response) => {
|
|
||||||
this.$store.dispatch("addPerson", {
|
|
||||||
target: payload.target,
|
|
||||||
body: response,
|
|
||||||
});
|
|
||||||
this.$refs.onTheFly.closeModal();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.name === "ValidationException") {
|
|
||||||
for (let v of error.violations) {
|
|
||||||
this.$toast.open({ message: v });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (payload.type === "thirdparty") {
|
|
||||||
body.name = payload.data.text;
|
|
||||||
body.email = payload.data.email;
|
|
||||||
body.telephone = payload.data.telephone;
|
|
||||||
body.telephone2 = payload.data.telephone2;
|
|
||||||
body.address = { id: payload.data.address.address_id };
|
|
||||||
|
|
||||||
makeFetch(
|
|
||||||
"PATCH",
|
|
||||||
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
|
||||||
body,
|
|
||||||
)
|
|
||||||
.then((response) => {
|
|
||||||
this.$store.dispatch("addThirdparty", {
|
|
||||||
target: payload.target,
|
|
||||||
body: response,
|
|
||||||
});
|
|
||||||
this.$refs.onTheFly.closeModal();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.name === "ValidationException") {
|
|
||||||
for (let v of error.violations) {
|
|
||||||
this.$toast.open({ message: v });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
},
|
computed: {
|
||||||
|
hasCurrentHouseholdAddress() {
|
||||||
|
if (
|
||||||
|
!this.participation.endDate &&
|
||||||
|
this.participation.person.current_household_address !== null
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
getAccompanyingCourseReturnPath() {
|
||||||
|
return `fr/parcours/${this.$store.state.accompanyingCourse.id}/edit#section-10`;
|
||||||
|
},
|
||||||
|
getCurrentHouseholdUrl() {
|
||||||
|
return `/fr/person/household/${this.participation.person.current_household_id}/summary?returnPath=${this.getAccompanyingCourseReturnPath}`;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
isPersonLocatingCourse(person) {
|
||||||
|
return this.$store.getters.isPersonLocatingCourse(person);
|
||||||
|
},
|
||||||
|
saveFormOnTheFly(payload) {
|
||||||
|
console.log(
|
||||||
|
"saveFormOnTheFly: type",
|
||||||
|
payload.type,
|
||||||
|
", data",
|
||||||
|
payload.data,
|
||||||
|
);
|
||||||
|
payload.target = "participation";
|
||||||
|
|
||||||
|
let body = { type: payload.type };
|
||||||
|
if (payload.type === "person") {
|
||||||
|
body.firstName = payload.data.firstName;
|
||||||
|
body.lastName = payload.data.lastName;
|
||||||
|
if (payload.data.birthdate !== null) {
|
||||||
|
body.birthdate = payload.data.birthdate;
|
||||||
|
}
|
||||||
|
body.phonenumber = payload.data.phonenumber;
|
||||||
|
body.mobilenumber = payload.data.mobilenumber;
|
||||||
|
body.email = payload.data.email;
|
||||||
|
body.altNames = payload.data.altNames;
|
||||||
|
body.gender = {
|
||||||
|
id: payload.data.gender.id,
|
||||||
|
type: payload.data.gender.type,
|
||||||
|
};
|
||||||
|
if (payload.data.civility !== null) {
|
||||||
|
body.civility = {
|
||||||
|
id: payload.data.civility.id,
|
||||||
|
type: payload.data.civility.type,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
makeFetch(
|
||||||
|
"PATCH",
|
||||||
|
`/api/1.0/person/person/${payload.data.id}.json`,
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
this.$store.dispatch("addPerson", {
|
||||||
|
target: payload.target,
|
||||||
|
body: response,
|
||||||
|
});
|
||||||
|
this.$refs.onTheFly.closeModal();
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === "ValidationException") {
|
||||||
|
for (let v of error.violations) {
|
||||||
|
this.$toast.open({ message: v });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (payload.type === "thirdparty") {
|
||||||
|
body.name = payload.data.text;
|
||||||
|
body.email = payload.data.email;
|
||||||
|
body.telephone = payload.data.telephone;
|
||||||
|
body.telephone2 = payload.data.telephone2;
|
||||||
|
body.address = { id: payload.data.address.address_id };
|
||||||
|
|
||||||
|
makeFetch(
|
||||||
|
"PATCH",
|
||||||
|
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
this.$store.dispatch("addThirdparty", {
|
||||||
|
target: payload.target,
|
||||||
|
body: response,
|
||||||
|
});
|
||||||
|
this.$refs.onTheFly.closeModal();
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === "ValidationException") {
|
||||||
|
for (let v of error.violations) {
|
||||||
|
this.$toast.open({ message: v });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,111 +1,116 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-80" />{{ $t("referrer.title") }}</h2>
|
<h2><a id="section-80" />{{ $t("referrer.title") }}</h2>
|
||||||
|
|
||||||
<teleport to="body">
|
<teleport to="body">
|
||||||
<modal
|
<modal
|
||||||
v-if="modal.showModal"
|
v-if="modal.showModal"
|
||||||
:modal-dialog-class="modal.modalDialogClass"
|
:modal-dialog-class="modal.modalDialogClass"
|
||||||
@close="cancelChange"
|
@close="cancelChange"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<h3 class="modal-title">
|
<h3 class="modal-title">
|
||||||
{{ $t("confirm.title") }}
|
{{ $t("confirm.title") }}
|
||||||
</h3>
|
</h3>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<template #body-head>
|
<template #body-head>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p
|
<p
|
||||||
v-html="
|
v-html="
|
||||||
$t('confirm.sure_referrer', { referrer: this.value.text })
|
$t('confirm.sure_referrer', {
|
||||||
"
|
referrer: this.value.text,
|
||||||
|
})
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<button
|
||||||
|
class="btn btn-save"
|
||||||
|
@click.prevent="this.confirmReferrer"
|
||||||
|
>
|
||||||
|
{{ $t("confirm.ok_referrer") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label class="col-form-label" for="selectJob">
|
||||||
|
{{ $t("job.label") }}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<VueMultiselect
|
||||||
|
name="selectJob"
|
||||||
|
label="text"
|
||||||
|
:custom-label="customJobLabel"
|
||||||
|
track-by="id"
|
||||||
|
:multiple="false"
|
||||||
|
:searchable="true"
|
||||||
|
:placeholder="$t('job.placeholder')"
|
||||||
|
v-model="valueJob"
|
||||||
|
:options="jobs"
|
||||||
|
:select-label="$t('multiselect.select_label')"
|
||||||
|
:deselect-label="$t('multiselect.deselect_label')"
|
||||||
|
:selected-label="$t('multiselect.selected_label')"
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template #footer>
|
<label class="col-form-label" for="selectReferrer">
|
||||||
<button class="btn btn-save" @click.prevent="this.confirmReferrer">
|
{{ $t("referrer.label") }}
|
||||||
{{ $t("confirm.ok_referrer") }}
|
</label>
|
||||||
</button>
|
|
||||||
</template>
|
|
||||||
</modal>
|
|
||||||
</teleport>
|
|
||||||
|
|
||||||
<div>
|
<VueMultiselect
|
||||||
<label class="col-form-label" for="selectJob">
|
name="selectReferrer"
|
||||||
{{ $t("job.label") }}
|
label="text"
|
||||||
</label>
|
track-by="id"
|
||||||
|
:multiple="false"
|
||||||
|
:searchable="true"
|
||||||
|
:placeholder="$t('referrer.placeholder')"
|
||||||
|
v-model="value"
|
||||||
|
@select="updateReferrer"
|
||||||
|
@remove="removeReferrer"
|
||||||
|
:options="users"
|
||||||
|
:select-label="$t('multiselect.select_label')"
|
||||||
|
:deselect-label="$t('multiselect.deselect_label')"
|
||||||
|
:selected-label="$t('multiselect.selected_label')"
|
||||||
|
/>
|
||||||
|
|
||||||
<VueMultiselect
|
<template v-if="usersSuggestedFilteredByJob.length > 0">
|
||||||
name="selectJob"
|
<ul class="list-suggest add-items inline">
|
||||||
label="text"
|
<li
|
||||||
:custom-label="customJobLabel"
|
v-for="(u, i) in usersSuggestedFilteredByJob"
|
||||||
track-by="id"
|
@click="updateReferrer(u)"
|
||||||
:multiple="false"
|
:key="`referrer-${i}`"
|
||||||
:searchable="true"
|
>
|
||||||
:placeholder="$t('job.placeholder')"
|
<span>
|
||||||
v-model="valueJob"
|
<user-render-box-badge :user="u" />
|
||||||
:options="jobs"
|
</span>
|
||||||
:select-label="$t('multiselect.select_label')"
|
</li>
|
||||||
:deselect-label="$t('multiselect.deselect_label')"
|
</ul>
|
||||||
:selected-label="$t('multiselect.selected_label')"
|
</template>
|
||||||
/>
|
</div>
|
||||||
|
|
||||||
<label class="col-form-label" for="selectReferrer">
|
<div>
|
||||||
{{ $t("referrer.label") }}
|
<ul class="record_actions">
|
||||||
</label>
|
<li>
|
||||||
|
<button
|
||||||
|
class="btn btn-create"
|
||||||
|
type="button"
|
||||||
|
name="button"
|
||||||
|
@click="assignMe"
|
||||||
|
>
|
||||||
|
{{ $t("referrer.assign_me") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<VueMultiselect
|
<div v-if="!isJobValid" class="alert alert-warning to-confirm">
|
||||||
name="selectReferrer"
|
{{ $t("job.not_valid") }}
|
||||||
label="text"
|
</div>
|
||||||
track-by="id"
|
|
||||||
:multiple="false"
|
|
||||||
:searchable="true"
|
|
||||||
:placeholder="$t('referrer.placeholder')"
|
|
||||||
v-model="value"
|
|
||||||
@select="updateReferrer"
|
|
||||||
@remove="removeReferrer"
|
|
||||||
:options="users"
|
|
||||||
:select-label="$t('multiselect.select_label')"
|
|
||||||
:deselect-label="$t('multiselect.deselect_label')"
|
|
||||||
:selected-label="$t('multiselect.selected_label')"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<template v-if="usersSuggestedFilteredByJob.length > 0">
|
|
||||||
<ul class="list-suggest add-items inline">
|
|
||||||
<li
|
|
||||||
v-for="(u, i) in usersSuggestedFilteredByJob"
|
|
||||||
@click="updateReferrer(u)"
|
|
||||||
:key="`referrer-${i}`"
|
|
||||||
>
|
|
||||||
<span>
|
|
||||||
<user-render-box-badge :user="u" />
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
class="btn btn-create"
|
|
||||||
type="button"
|
|
||||||
name="button"
|
|
||||||
@click="assignMe"
|
|
||||||
>
|
|
||||||
{{ $t("referrer.assign_me") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="!isJobValid" class="alert alert-warning to-confirm">
|
|
||||||
{{ $t("job.not_valid") }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -116,124 +121,134 @@ import UserRenderBoxBadge from "ChillMainAssets/vuejs/_components/Entity/UserRen
|
|||||||
import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Referrer",
|
name: "Referrer",
|
||||||
components: {
|
components: {
|
||||||
UserRenderBoxBadge,
|
UserRenderBoxBadge,
|
||||||
VueMultiselect,
|
VueMultiselect,
|
||||||
Modal,
|
Modal,
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
jobs: [],
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
|
||||||
},
|
|
||||||
value: this.$store.state.accompanyingCourse.user,
|
|
||||||
confirmed: false,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
valueJob: (state) => state.accompanyingCourse.job,
|
|
||||||
}),
|
|
||||||
...mapGetters(["isJobValid", "usersSuggestedFilteredByJob"]),
|
|
||||||
users: function () {
|
|
||||||
let users = this.$store.getters.usersFilteredByJob;
|
|
||||||
// ensure that the selected user is in the list. add it if necessary
|
|
||||||
if (
|
|
||||||
this.$store.state.accompanyingCourse.user !== null &&
|
|
||||||
users.find(
|
|
||||||
(u) => this.$store.state.accompanyingCourse.user.id === u.id,
|
|
||||||
) === undefined
|
|
||||||
) {
|
|
||||||
users.push(this.$store.state.accompanyingCourse.user);
|
|
||||||
}
|
|
||||||
return users;
|
|
||||||
},
|
},
|
||||||
valueJob: {
|
data() {
|
||||||
get() {
|
return {
|
||||||
return this.$store.state.accompanyingCourse.job;
|
jobs: [],
|
||||||
},
|
modal: {
|
||||||
set(value) {
|
showModal: false,
|
||||||
this.$store
|
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
||||||
.dispatch("updateJob", value)
|
},
|
||||||
.catch(({ name, violations }) => {
|
value: this.$store.state.accompanyingCourse.user,
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
confirmed: false,
|
||||||
violations.forEach((violation) =>
|
};
|
||||||
this.$toast.open({ message: violation }),
|
},
|
||||||
);
|
computed: {
|
||||||
} else {
|
...mapState({
|
||||||
this.$toast.open({ message: "An error occurred" });
|
valueJob: (state) => state.accompanyingCourse.job,
|
||||||
|
}),
|
||||||
|
...mapGetters(["isJobValid", "usersSuggestedFilteredByJob"]),
|
||||||
|
users: function () {
|
||||||
|
let users = this.$store.getters.usersFilteredByJob;
|
||||||
|
// ensure that the selected user is in the list. add it if necessary
|
||||||
|
if (
|
||||||
|
this.$store.state.accompanyingCourse.user !== null &&
|
||||||
|
users.find(
|
||||||
|
(u) =>
|
||||||
|
this.$store.state.accompanyingCourse.user.id === u.id,
|
||||||
|
) === undefined
|
||||||
|
) {
|
||||||
|
users.push(this.$store.state.accompanyingCourse.user);
|
||||||
}
|
}
|
||||||
});
|
return users;
|
||||||
},
|
},
|
||||||
|
valueJob: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.accompanyingCourse.job;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateJob", value)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
mounted() {
|
||||||
mounted() {
|
this.getJobs();
|
||||||
this.getJobs();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
updateReferrer(value) {
|
|
||||||
this.value = value;
|
|
||||||
this.toggleModal();
|
|
||||||
},
|
},
|
||||||
getJobs() {
|
methods: {
|
||||||
const url = "/api/1.0/main/user-job.json";
|
updateReferrer(value) {
|
||||||
makeFetch("GET", url)
|
this.value = value;
|
||||||
.then((response) => {
|
this.toggleModal();
|
||||||
this.jobs = response.results;
|
},
|
||||||
})
|
getJobs() {
|
||||||
.catch((error) => {
|
const url = "/api/1.0/main/user-job.json";
|
||||||
this.$toast.open({ message: error.txt });
|
makeFetch("GET", url)
|
||||||
});
|
.then((response) => {
|
||||||
|
this.jobs = response.results;
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
this.$toast.open({ message: error.txt });
|
||||||
|
});
|
||||||
|
},
|
||||||
|
customJobLabel(value) {
|
||||||
|
return value.label.fr;
|
||||||
|
},
|
||||||
|
assignMe() {
|
||||||
|
const url = `/api/1.0/main/whoami.json`;
|
||||||
|
makeFetch("GET", url).then((user) => {
|
||||||
|
// this.value = user
|
||||||
|
this.updateReferrer(user);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
toggleModal() {
|
||||||
|
this.modal.showModal = !this.modal.showModal;
|
||||||
|
},
|
||||||
|
confirmReferrer() {
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateReferrer", this.value)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.toggleModal();
|
||||||
|
},
|
||||||
|
removeReferrer() {
|
||||||
|
console.log("remove option");
|
||||||
|
this.$store
|
||||||
|
.dispatch("updateReferrer", null)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
cancelChange() {
|
||||||
|
this.value = this.$store.state.accompanyingCourse.user;
|
||||||
|
this.toggleModal();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
customJobLabel(value) {
|
|
||||||
return value.label.fr;
|
|
||||||
},
|
|
||||||
assignMe() {
|
|
||||||
const url = `/api/1.0/main/whoami.json`;
|
|
||||||
makeFetch("GET", url).then((user) => {
|
|
||||||
// this.value = user
|
|
||||||
this.updateReferrer(user);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
toggleModal() {
|
|
||||||
this.modal.showModal = !this.modal.showModal;
|
|
||||||
},
|
|
||||||
confirmReferrer() {
|
|
||||||
this.$store
|
|
||||||
.dispatch("updateReferrer", this.value)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.toggleModal();
|
|
||||||
},
|
|
||||||
removeReferrer() {
|
|
||||||
console.log("remove option");
|
|
||||||
this.$store
|
|
||||||
.dispatch("updateReferrer", null)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
cancelChange() {
|
|
||||||
this.value = this.$store.state.accompanyingCourse.user;
|
|
||||||
this.toggleModal();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,239 +1,263 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-50" />{{ $t("requestor.title") }}</h2>
|
<h2><a id="section-50" />{{ $t("requestor.title") }}</h2>
|
||||||
|
|
||||||
<div v-if="accompanyingCourse.requestor && isAnonymous" class="flex-table">
|
<div
|
||||||
<label>
|
v-if="accompanyingCourse.requestor && isAnonymous"
|
||||||
<input type="checkbox" v-model="requestorIsAnonymous" class="me-2" />
|
class="flex-table"
|
||||||
{{ $t("requestor.is_anonymous") }}
|
|
||||||
</label>
|
|
||||||
<confidential v-if="accompanyingCourse.requestor.type === 'thirdparty'">
|
|
||||||
<template #confidential-content>
|
|
||||||
<third-party-render-box
|
|
||||||
:thirdparty="accompanyingCourse.requestor"
|
|
||||||
:options="{
|
|
||||||
addLink: false,
|
|
||||||
addId: false,
|
|
||||||
addEntity: true,
|
|
||||||
addInfo: false,
|
|
||||||
hLevel: 3,
|
|
||||||
isMultiline: true,
|
|
||||||
isConfidential: true,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<template #record-actions>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="show"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="edit"
|
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
|
||||||
ref="onTheFly"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</third-party-render-box>
|
|
||||||
</template>
|
|
||||||
</confidential>
|
|
||||||
|
|
||||||
<confidential v-else-if="accompanyingCourse.requestor.type === 'person'">
|
|
||||||
<template #confidential-content>
|
|
||||||
<person-render-box
|
|
||||||
render="bloc"
|
|
||||||
:person="accompanyingCourse.requestor"
|
|
||||||
:options="{
|
|
||||||
addLink: false,
|
|
||||||
addId: false,
|
|
||||||
addAltNames: false,
|
|
||||||
addEntity: true,
|
|
||||||
addInfo: true,
|
|
||||||
hLevel: 3,
|
|
||||||
isMultiline: true,
|
|
||||||
isConfidential: false,
|
|
||||||
addAge: true,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<template #record-actions>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="show"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="edit"
|
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
|
||||||
ref="onTheFly"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</person-render-box>
|
|
||||||
</template>
|
|
||||||
</confidential>
|
|
||||||
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
class="btn btn-remove"
|
|
||||||
:title="$t('action.remove')"
|
|
||||||
@click="removeRequestor"
|
|
||||||
>
|
|
||||||
{{ $t("action.remove") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-else-if="accompanyingCourse.requestor && !isAnonymous"
|
|
||||||
class="flex-table"
|
|
||||||
>
|
|
||||||
<label>
|
|
||||||
<input type="checkbox" v-model="requestorIsAnonymous" class="me-2" />
|
|
||||||
{{ $t("requestor.is_anonymous") }}
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<third-party-render-box
|
|
||||||
v-if="accompanyingCourse.requestor.type === 'thirdparty'"
|
|
||||||
:thirdparty="accompanyingCourse.requestor"
|
|
||||||
:options="{
|
|
||||||
addLink: false,
|
|
||||||
addId: false,
|
|
||||||
addEntity: true,
|
|
||||||
addInfo: false,
|
|
||||||
hLevel: 3,
|
|
||||||
isMultiline: true,
|
|
||||||
isConfidential: true,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<template #record-actions>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="show"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="edit"
|
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
|
||||||
ref="onTheFly"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</third-party-render-box>
|
|
||||||
|
|
||||||
<person-render-box
|
|
||||||
render="bloc"
|
|
||||||
v-if="accompanyingCourse.requestor.type === 'person'"
|
|
||||||
:person="accompanyingCourse.requestor"
|
|
||||||
:options="{
|
|
||||||
addLink: false,
|
|
||||||
addId: false,
|
|
||||||
addAltNames: false,
|
|
||||||
addEntity: true,
|
|
||||||
addInfo: true,
|
|
||||||
hLevel: 3,
|
|
||||||
isMultiline: true,
|
|
||||||
isConfidential: false,
|
|
||||||
}"
|
|
||||||
>
|
|
||||||
<template #record-actions>
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="show"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<on-the-fly
|
|
||||||
:type="accompanyingCourse.requestor.type"
|
|
||||||
:id="accompanyingCourse.requestor.id"
|
|
||||||
action="edit"
|
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
|
||||||
ref="onTheFly"
|
|
||||||
/>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
|
||||||
</person-render-box>
|
|
||||||
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
class="btn btn-remove"
|
|
||||||
:title="$t('action.remove')"
|
|
||||||
@click="removeRequestor"
|
|
||||||
>
|
|
||||||
{{ $t("action.remove") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-else>
|
|
||||||
<label class="chill-no-data-statement">{{
|
|
||||||
$t("requestor.counter")
|
|
||||||
}}</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
v-if="
|
|
||||||
accompanyingCourse.requestor === null && suggestedEntities.length > 0
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<ul class="list-suggest add-items inline">
|
|
||||||
<li
|
|
||||||
v-for="p in suggestedEntities"
|
|
||||||
:key="uniqueId(p)"
|
|
||||||
@click="addSuggestedEntity(p)"
|
|
||||||
>
|
>
|
||||||
<person-text v-if="p.type === 'person'" :person="p" />
|
<label>
|
||||||
<span v-else>{{ p.text }}</span>
|
<input
|
||||||
</li>
|
type="checkbox"
|
||||||
</ul>
|
v-model="requestorIsAnonymous"
|
||||||
</div>
|
class="me-2"
|
||||||
|
/>
|
||||||
|
{{ $t("requestor.is_anonymous") }}
|
||||||
|
</label>
|
||||||
|
<confidential
|
||||||
|
v-if="accompanyingCourse.requestor.type === 'thirdparty'"
|
||||||
|
>
|
||||||
|
<template #confidential-content>
|
||||||
|
<third-party-render-box
|
||||||
|
:thirdparty="accompanyingCourse.requestor"
|
||||||
|
:options="{
|
||||||
|
addLink: false,
|
||||||
|
addId: false,
|
||||||
|
addEntity: true,
|
||||||
|
addInfo: false,
|
||||||
|
hLevel: 3,
|
||||||
|
isMultiline: true,
|
||||||
|
isConfidential: true,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #record-actions>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="
|
||||||
|
accompanyingCourse.requestor.type
|
||||||
|
"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="show"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="
|
||||||
|
accompanyingCourse.requestor.type
|
||||||
|
"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="edit"
|
||||||
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
|
ref="onTheFly"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</third-party-render-box>
|
||||||
|
</template>
|
||||||
|
</confidential>
|
||||||
|
|
||||||
<div>
|
<confidential
|
||||||
<ul class="record_actions">
|
v-else-if="accompanyingCourse.requestor.type === 'person'"
|
||||||
<li class="add-persons">
|
>
|
||||||
<add-persons
|
<template #confidential-content>
|
||||||
v-if="accompanyingCourse.requestor === null"
|
<person-render-box
|
||||||
button-title="requestor.add_requestor"
|
render="bloc"
|
||||||
modal-title="requestor.add_requestor"
|
:person="accompanyingCourse.requestor"
|
||||||
:key="addPersons.key"
|
:options="{
|
||||||
:options="addPersons.options"
|
addLink: false,
|
||||||
@add-new-persons="addNewPersons"
|
addId: false,
|
||||||
ref="addPersons"
|
addAltNames: false,
|
||||||
>
|
addEntity: true,
|
||||||
<!-- to cast child method -->
|
addInfo: true,
|
||||||
</add-persons>
|
hLevel: 3,
|
||||||
</li>
|
isMultiline: true,
|
||||||
</ul>
|
isConfidential: false,
|
||||||
|
addAge: true,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #record-actions>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="
|
||||||
|
accompanyingCourse.requestor.type
|
||||||
|
"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="show"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="
|
||||||
|
accompanyingCourse.requestor.type
|
||||||
|
"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="edit"
|
||||||
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
|
ref="onTheFly"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</person-render-box>
|
||||||
|
</template>
|
||||||
|
</confidential>
|
||||||
|
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button
|
||||||
|
class="btn btn-remove"
|
||||||
|
:title="$t('action.remove')"
|
||||||
|
@click="removeRequestor"
|
||||||
|
>
|
||||||
|
{{ $t("action.remove") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-else-if="accompanyingCourse.requestor && !isAnonymous"
|
||||||
|
class="flex-table"
|
||||||
|
>
|
||||||
|
<label>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
v-model="requestorIsAnonymous"
|
||||||
|
class="me-2"
|
||||||
|
/>
|
||||||
|
{{ $t("requestor.is_anonymous") }}
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<third-party-render-box
|
||||||
|
v-if="accompanyingCourse.requestor.type === 'thirdparty'"
|
||||||
|
:thirdparty="accompanyingCourse.requestor"
|
||||||
|
:options="{
|
||||||
|
addLink: false,
|
||||||
|
addId: false,
|
||||||
|
addEntity: true,
|
||||||
|
addInfo: false,
|
||||||
|
hLevel: 3,
|
||||||
|
isMultiline: true,
|
||||||
|
isConfidential: true,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #record-actions>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="accompanyingCourse.requestor.type"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="show"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="accompanyingCourse.requestor.type"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="edit"
|
||||||
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
|
ref="onTheFly"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</third-party-render-box>
|
||||||
|
|
||||||
|
<person-render-box
|
||||||
|
render="bloc"
|
||||||
|
v-if="accompanyingCourse.requestor.type === 'person'"
|
||||||
|
:person="accompanyingCourse.requestor"
|
||||||
|
:options="{
|
||||||
|
addLink: false,
|
||||||
|
addId: false,
|
||||||
|
addAltNames: false,
|
||||||
|
addEntity: true,
|
||||||
|
addInfo: true,
|
||||||
|
hLevel: 3,
|
||||||
|
isMultiline: true,
|
||||||
|
isConfidential: false,
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<template #record-actions>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="accompanyingCourse.requestor.type"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="show"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<on-the-fly
|
||||||
|
:type="accompanyingCourse.requestor.type"
|
||||||
|
:id="accompanyingCourse.requestor.id"
|
||||||
|
action="edit"
|
||||||
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
|
ref="onTheFly"
|
||||||
|
/>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</template>
|
||||||
|
</person-render-box>
|
||||||
|
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button
|
||||||
|
class="btn btn-remove"
|
||||||
|
:title="$t('action.remove')"
|
||||||
|
@click="removeRequestor"
|
||||||
|
>
|
||||||
|
{{ $t("action.remove") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-else>
|
||||||
|
<label class="chill-no-data-statement">{{
|
||||||
|
$t("requestor.counter")
|
||||||
|
}}</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="
|
||||||
|
accompanyingCourse.requestor === null &&
|
||||||
|
suggestedEntities.length > 0
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<ul class="list-suggest add-items inline">
|
||||||
|
<li
|
||||||
|
v-for="p in suggestedEntities"
|
||||||
|
:key="uniqueId(p)"
|
||||||
|
@click="addSuggestedEntity(p)"
|
||||||
|
>
|
||||||
|
<person-text v-if="p.type === 'person'" :person="p" />
|
||||||
|
<span v-else>{{ p.text }}</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li class="add-persons">
|
||||||
|
<add-persons
|
||||||
|
v-if="accompanyingCourse.requestor === null"
|
||||||
|
button-title="requestor.add_requestor"
|
||||||
|
modal-title="requestor.add_requestor"
|
||||||
|
:key="addPersons.key"
|
||||||
|
:options="addPersons.options"
|
||||||
|
@add-new-persons="addNewPersons"
|
||||||
|
ref="addPersons"
|
||||||
|
>
|
||||||
|
<!-- to cast child method -->
|
||||||
|
</add-persons>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -247,208 +271,221 @@ import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
|||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Requestor",
|
name: "Requestor",
|
||||||
components: {
|
components: {
|
||||||
AddPersons,
|
AddPersons,
|
||||||
OnTheFly,
|
OnTheFly,
|
||||||
PersonRenderBox,
|
PersonRenderBox,
|
||||||
ThirdPartyRenderBox,
|
ThirdPartyRenderBox,
|
||||||
Confidential,
|
Confidential,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
},
|
||||||
props: ["isAnonymous"],
|
props: ["isAnonymous"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addPersons: {
|
addPersons: {
|
||||||
key: "requestor",
|
key: "requestor",
|
||||||
options: {
|
options: {
|
||||||
type: ["person", "thirdparty"],
|
type: ["person", "thirdparty"],
|
||||||
priority: null,
|
priority: null,
|
||||||
uniq: true,
|
uniq: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
suggestedEntities: (state) => {
|
||||||
|
return (
|
||||||
|
[
|
||||||
|
...state.accompanyingCourse.participations
|
||||||
|
.filter((p) => p.endDate === null)
|
||||||
|
.map((p) => p.person),
|
||||||
|
...state.accompanyingCourse.resources.map(
|
||||||
|
(r) => r.resource,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
.filter((e) => e !== null)
|
||||||
|
// filter for same entity appearing twice
|
||||||
|
.filter((e, index, suggested) => {
|
||||||
|
for (let i = 0; i < suggested.length; i = i + 1) {
|
||||||
|
if (
|
||||||
|
i < index &&
|
||||||
|
e.id === suggested[i].id &&
|
||||||
|
e.type === suggested[i].type
|
||||||
|
) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
accompanyingCourse() {
|
||||||
|
return this.$store.state.accompanyingCourse;
|
||||||
},
|
},
|
||||||
},
|
requestorIsAnonymous: {
|
||||||
};
|
set(value) {
|
||||||
},
|
this.$store.dispatch("requestorIsAnonymous", value);
|
||||||
computed: {
|
},
|
||||||
...mapState({
|
get() {
|
||||||
suggestedEntities: (state) => {
|
return this.$store.state.accompanyingCourse.requestorAnonymous;
|
||||||
return (
|
},
|
||||||
[
|
},
|
||||||
...state.accompanyingCourse.participations
|
},
|
||||||
.filter((p) => p.endDate === null)
|
methods: {
|
||||||
.map((p) => p.person),
|
removeRequestor() {
|
||||||
...state.accompanyingCourse.resources.map((r) => r.resource),
|
//console.log('@@ CLICK remove requestor: item');
|
||||||
]
|
this.$store
|
||||||
.filter((e) => e !== null)
|
.dispatch("removeRequestor")
|
||||||
// filter for same entity appearing twice
|
.catch(({ name, violations }) => {
|
||||||
.filter((e, index, suggested) => {
|
if (
|
||||||
for (let i = 0; i < suggested.length; i = i + 1) {
|
name === "ValidationException" ||
|
||||||
if (
|
name === "AccessException"
|
||||||
i < index &&
|
) {
|
||||||
e.id === suggested[i].id &&
|
violations.forEach((violation) =>
|
||||||
e.type === suggested[i].type
|
this.$toast.open({ message: violation }),
|
||||||
) {
|
);
|
||||||
return false;
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addNewPersons({ selected, modal }) {
|
||||||
|
//console.log('@@@ CLICK button addNewPersons', selected);
|
||||||
|
this.$store
|
||||||
|
.dispatch("addRequestor", selected.shift())
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.$refs.addPersons.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
},
|
||||||
|
saveFormOnTheFly(payload) {
|
||||||
|
console.log(
|
||||||
|
"saveFormOnTheFly: type",
|
||||||
|
payload.type,
|
||||||
|
", data",
|
||||||
|
payload.data,
|
||||||
|
);
|
||||||
|
payload.target = "requestor";
|
||||||
|
|
||||||
|
let body = { type: payload.type };
|
||||||
|
if (payload.type === "person") {
|
||||||
|
body.firstName = payload.data.firstName;
|
||||||
|
body.lastName = payload.data.lastName;
|
||||||
|
if (payload.data.birthdate !== null) {
|
||||||
|
body.birthdate = payload.data.birthdate;
|
||||||
}
|
}
|
||||||
}
|
body.phonenumber = payload.data.phonenumber;
|
||||||
|
body.mobilenumber = payload.data.mobilenumber;
|
||||||
|
body.email = payload.data.email;
|
||||||
|
body.altNames = payload.data.altNames;
|
||||||
|
body.gender = payload.data.gender;
|
||||||
|
|
||||||
return true;
|
makeFetch(
|
||||||
})
|
"PATCH",
|
||||||
);
|
`/api/1.0/person/person/${payload.data.id}.json`,
|
||||||
},
|
body,
|
||||||
}),
|
)
|
||||||
accompanyingCourse() {
|
.then((response) => {
|
||||||
return this.$store.state.accompanyingCourse;
|
this.$store.dispatch("addPerson", {
|
||||||
},
|
target: payload.target,
|
||||||
requestorIsAnonymous: {
|
body: response,
|
||||||
set(value) {
|
});
|
||||||
this.$store.dispatch("requestorIsAnonymous", value);
|
this.$refs.onTheFly.closeModal();
|
||||||
},
|
})
|
||||||
get() {
|
.catch((error) => {
|
||||||
return this.$store.state.accompanyingCourse.requestorAnonymous;
|
if (error.name === "ValidationException") {
|
||||||
},
|
for (let v of error.violations) {
|
||||||
},
|
this.$toast.open({ message: v });
|
||||||
},
|
}
|
||||||
methods: {
|
} else {
|
||||||
removeRequestor() {
|
this.$toast.open({ message: "An error occurred" });
|
||||||
//console.log('@@ CLICK remove requestor: item');
|
}
|
||||||
this.$store.dispatch("removeRequestor").catch(({ name, violations }) => {
|
});
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
} else if (payload.type === "thirdparty") {
|
||||||
violations.forEach((violation) =>
|
body.name = payload.data.text;
|
||||||
this.$toast.open({ message: violation }),
|
body.email = payload.data.email;
|
||||||
);
|
body.telephone = payload.data.telephone;
|
||||||
} else {
|
body.telephone2 = payload.data.telephone2;
|
||||||
this.$toast.open({ message: "An error occurred" });
|
if (payload.data.address) {
|
||||||
}
|
body.address = { id: payload.data.address.address_id };
|
||||||
});
|
}
|
||||||
},
|
|
||||||
addNewPersons({ selected, modal }) {
|
|
||||||
//console.log('@@@ CLICK button addNewPersons', selected);
|
|
||||||
this.$store
|
|
||||||
.dispatch("addRequestor", selected.shift())
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.$refs.addPersons.resetSearch(); // to cast child method
|
makeFetch(
|
||||||
modal.showModal = false;
|
"PATCH",
|
||||||
},
|
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
||||||
saveFormOnTheFly(payload) {
|
body,
|
||||||
console.log(
|
)
|
||||||
"saveFormOnTheFly: type",
|
.then((response) => {
|
||||||
payload.type,
|
this.$store.dispatch("addThirdparty", {
|
||||||
", data",
|
target: payload.target,
|
||||||
payload.data,
|
body: response,
|
||||||
);
|
});
|
||||||
payload.target = "requestor";
|
this.$refs.onTheFly.closeModal();
|
||||||
|
})
|
||||||
let body = { type: payload.type };
|
.catch((error) => {
|
||||||
if (payload.type === "person") {
|
if (error.name === "ValidationException") {
|
||||||
body.firstName = payload.data.firstName;
|
for (let v of error.violations) {
|
||||||
body.lastName = payload.data.lastName;
|
this.$toast.open({ message: v });
|
||||||
if (payload.data.birthdate !== null) {
|
}
|
||||||
body.birthdate = payload.data.birthdate;
|
} else {
|
||||||
}
|
this.$toast.open({ message: "An error occurred" });
|
||||||
body.phonenumber = payload.data.phonenumber;
|
}
|
||||||
body.mobilenumber = payload.data.mobilenumber;
|
});
|
||||||
body.email = payload.data.email;
|
|
||||||
body.altNames = payload.data.altNames;
|
|
||||||
body.gender = payload.data.gender;
|
|
||||||
|
|
||||||
makeFetch(
|
|
||||||
"PATCH",
|
|
||||||
`/api/1.0/person/person/${payload.data.id}.json`,
|
|
||||||
body,
|
|
||||||
)
|
|
||||||
.then((response) => {
|
|
||||||
this.$store.dispatch("addPerson", {
|
|
||||||
target: payload.target,
|
|
||||||
body: response,
|
|
||||||
});
|
|
||||||
this.$refs.onTheFly.closeModal();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.name === "ValidationException") {
|
|
||||||
for (let v of error.violations) {
|
|
||||||
this.$toast.open({ message: v });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
} else if (payload.type === "thirdparty") {
|
addSuggestedEntity(e) {
|
||||||
body.name = payload.data.text;
|
this.$store
|
||||||
body.email = payload.data.email;
|
.dispatch("addRequestor", { result: e, type: e.type })
|
||||||
body.telephone = payload.data.telephone;
|
.catch(({ name, violations }) => {
|
||||||
body.telephone2 = payload.data.telephone2;
|
if (
|
||||||
if (payload.data.address) {
|
name === "ValidationException" ||
|
||||||
body.address = { id: payload.data.address.address_id };
|
name === "AccessException"
|
||||||
}
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
makeFetch(
|
this.$toast.open({ message: violation }),
|
||||||
"PATCH",
|
);
|
||||||
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
} else {
|
||||||
body,
|
this.$toast.open({ message: "An error occurred" });
|
||||||
)
|
}
|
||||||
.then((response) => {
|
});
|
||||||
this.$store.dispatch("addThirdparty", {
|
},
|
||||||
target: payload.target,
|
uniqueId(e) {
|
||||||
body: response,
|
return `${e.type}-${e.id}`;
|
||||||
});
|
},
|
||||||
this.$refs.onTheFly.closeModal();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.name === "ValidationException") {
|
|
||||||
for (let v of error.violations) {
|
|
||||||
this.$toast.open({ message: v });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
addSuggestedEntity(e) {
|
|
||||||
this.$store
|
|
||||||
.dispatch("addRequestor", { result: e, type: e.type })
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
uniqueId(e) {
|
|
||||||
return `${e.type}-${e.id}`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
div.flex-table {
|
div.flex-table {
|
||||||
margin: 1em 0 0 !important;
|
margin: 1em 0 0 !important;
|
||||||
& > label,
|
& > label,
|
||||||
& > ul.record_actions {
|
& > ul.record_actions {
|
||||||
margin: 1em 3em 0 !important;
|
margin: 1em 3em 0 !important;
|
||||||
}
|
}
|
||||||
div.item-bloc {
|
div.item-bloc {
|
||||||
background-color: white !important;
|
background-color: white !important;
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.confidential {
|
.confidential {
|
||||||
display: block;
|
display: block;
|
||||||
margin-right: 0px !important;
|
margin-right: 0px !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,57 +1,57 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-90" />{{ $t("resources.title") }}</h2>
|
<h2><a id="section-90" />{{ $t("resources.title") }}</h2>
|
||||||
|
|
||||||
<div v-if="resources.length > 0">
|
<div v-if="resources.length > 0">
|
||||||
<label class="col-form-label">{{
|
<label class="col-form-label">{{
|
||||||
$tc("resources.counter", counter)
|
$tc("resources.counter", counter)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<label class="chill-no-data-statement">{{
|
<label class="chill-no-data-statement">{{
|
||||||
$tc("resources.counter", counter)
|
$tc("resources.counter", counter)
|
||||||
}}</label>
|
}}</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="flex-table mb-3">
|
<div class="flex-table mb-3">
|
||||||
<resource-item
|
<resource-item
|
||||||
v-for="resource in resources"
|
v-for="resource in resources"
|
||||||
:resource="resource"
|
:resource="resource"
|
||||||
:key="resource.id"
|
:key="resource.id"
|
||||||
@remove="removeResource"
|
@remove="removeResource"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="suggestedEntities.length > 0">
|
<div v-if="suggestedEntities.length > 0">
|
||||||
<ul class="list-suggest add-items inline">
|
<ul class="list-suggest add-items inline">
|
||||||
<li
|
<li
|
||||||
v-for="p in suggestedEntities"
|
v-for="p in suggestedEntities"
|
||||||
:key="uniqueId(p)"
|
:key="uniqueId(p)"
|
||||||
@click="addSuggestedEntity(p)"
|
@click="addSuggestedEntity(p)"
|
||||||
>
|
>
|
||||||
<person-text v-if="p.type === 'person'" :person="p" />
|
<person-text v-if="p.type === 'person'" :person="p" />
|
||||||
<span v-else>{{ p.text }}</span>
|
<span v-else>{{ p.text }}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li class="add-persons">
|
<li class="add-persons">
|
||||||
<add-persons
|
<add-persons
|
||||||
button-title="resources.add_resources"
|
button-title="resources.add_resources"
|
||||||
modal-title="resources.add_resources"
|
modal-title="resources.add_resources"
|
||||||
:key="addPersons.key"
|
:key="addPersons.key"
|
||||||
:options="addPersons.options"
|
:options="addPersons.options"
|
||||||
@add-new-persons="addNewPersons"
|
@add-new-persons="addNewPersons"
|
||||||
ref="addPersons"
|
ref="addPersons"
|
||||||
>
|
>
|
||||||
<!-- to cast child method -->
|
<!-- to cast child method -->
|
||||||
</add-persons>
|
</add-persons>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -61,117 +61,126 @@ import ResourceItem from "./Resources/ResourceItem.vue";
|
|||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Resources",
|
name: "Resources",
|
||||||
components: {
|
components: {
|
||||||
AddPersons,
|
AddPersons,
|
||||||
ResourceItem,
|
ResourceItem,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addPersons: {
|
addPersons: {
|
||||||
key: "resources",
|
key: "resources",
|
||||||
options: {
|
options: {
|
||||||
type: ["person", "thirdparty"],
|
type: ["person", "thirdparty"],
|
||||||
priority: null,
|
priority: null,
|
||||||
uniq: false,
|
uniq: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: mapState({
|
computed: mapState({
|
||||||
resources: (state) => state.accompanyingCourse.resources,
|
resources: (state) => state.accompanyingCourse.resources,
|
||||||
counter: (state) => state.accompanyingCourse.resources.length,
|
counter: (state) => state.accompanyingCourse.resources.length,
|
||||||
suggestedEntities: (state) =>
|
suggestedEntities: (state) =>
|
||||||
[
|
[
|
||||||
state.accompanyingCourse.requestor,
|
state.accompanyingCourse.requestor,
|
||||||
...state.accompanyingCourse.participations
|
...state.accompanyingCourse.participations
|
||||||
.filter((p) => p.endDate === null)
|
.filter((p) => p.endDate === null)
|
||||||
.map((p) => p.person),
|
.map((p) => p.person),
|
||||||
]
|
]
|
||||||
.filter((e) => e !== null)
|
.filter((e) => e !== null)
|
||||||
.filter((e) => {
|
.filter((e) => {
|
||||||
if (e.type === "person") {
|
if (e.type === "person") {
|
||||||
return !state.accompanyingCourse.resources
|
return !state.accompanyingCourse.resources
|
||||||
.filter((r) => r.resource.type === "person")
|
.filter((r) => r.resource.type === "person")
|
||||||
.map((r) => r.resource.id)
|
.map((r) => r.resource.id)
|
||||||
.includes(e.id);
|
.includes(e.id);
|
||||||
}
|
}
|
||||||
if (e.type === "thirdparty") {
|
if (e.type === "thirdparty") {
|
||||||
return !state.accompanyingCourse.resources
|
return !state.accompanyingCourse.resources
|
||||||
.filter((r) => r.resource.type === "thirdparty")
|
.filter((r) => r.resource.type === "thirdparty")
|
||||||
.map((r) => r.resource.id)
|
.map((r) => r.resource.id)
|
||||||
.includes(e.id);
|
.includes(e.id);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// filter persons appearing twice in requestor and resources
|
// filter persons appearing twice in requestor and resources
|
||||||
.filter((e, index, suggested) => {
|
.filter((e, index, suggested) => {
|
||||||
for (let i = 0; i < suggested.length; i = i + 1) {
|
for (let i = 0; i < suggested.length; i = i + 1) {
|
||||||
if (i < index && e.id === suggested[i].id) {
|
if (i < index && e.id === suggested[i].id) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
methods: {
|
methods: {
|
||||||
removeResource(item) {
|
removeResource(item) {
|
||||||
//console.log('@@ CLICK remove resource: item', item);
|
//console.log('@@ CLICK remove resource: item', item);
|
||||||
this.$store
|
this.$store
|
||||||
.dispatch("removeResource", item)
|
.dispatch("removeResource", item)
|
||||||
.catch(({ name, violations }) => {
|
.catch(({ name, violations }) => {
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
if (
|
||||||
violations.forEach((violation) =>
|
name === "ValidationException" ||
|
||||||
this.$toast.open({ message: violation }),
|
name === "AccessException"
|
||||||
);
|
) {
|
||||||
} else {
|
violations.forEach((violation) =>
|
||||||
this.$toast.open({ message: "An error occurred" });
|
this.$toast.open({ message: violation }),
|
||||||
}
|
);
|
||||||
});
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addNewPersons({ selected, modal }) {
|
||||||
|
//console.log('@@@ CLICK button addNewPersons', selected);
|
||||||
|
selected.forEach(function (item) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("addResource", item)
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: violations });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, this);
|
||||||
|
this.$refs.addPersons.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
},
|
||||||
|
addSuggestedEntity(e) {
|
||||||
|
this.$store
|
||||||
|
.dispatch("addResource", { result: e, type: e.type })
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
uniqueId(e) {
|
||||||
|
return `${e.type}-${e.id}`;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
addNewPersons({ selected, modal }) {
|
|
||||||
//console.log('@@@ CLICK button addNewPersons', selected);
|
|
||||||
selected.forEach(function (item) {
|
|
||||||
this.$store
|
|
||||||
.dispatch("addResource", item)
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: violations });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}, this);
|
|
||||||
this.$refs.addPersons.resetSearch(); // to cast child method
|
|
||||||
modal.showModal = false;
|
|
||||||
},
|
|
||||||
addSuggestedEntity(e) {
|
|
||||||
this.$store
|
|
||||||
.dispatch("addResource", { result: e, type: e.type })
|
|
||||||
.catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
uniqueId(e) {
|
|
||||||
return `${e.type}-${e.id}`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
div.flex-bloc {
|
div.flex-bloc {
|
||||||
div.item-bloc {
|
div.item-bloc {
|
||||||
flex-basis: 50%;
|
flex-basis: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,107 +1,107 @@
|
|||||||
<template>
|
<template>
|
||||||
<person-render-box
|
<person-render-box
|
||||||
render="bloc"
|
render="bloc"
|
||||||
v-if="resource.resource.type === 'person'"
|
v-if="resource.resource.type === 'person'"
|
||||||
:person="resource.resource"
|
:person="resource.resource"
|
||||||
:options="{
|
:options="{
|
||||||
addInfo: true,
|
addInfo: true,
|
||||||
addId: false,
|
addId: false,
|
||||||
addEntity: true,
|
addEntity: true,
|
||||||
addLink: false,
|
addLink: false,
|
||||||
addAltNames: true,
|
addAltNames: true,
|
||||||
addAge: false,
|
addAge: false,
|
||||||
hLevel: 3,
|
hLevel: 3,
|
||||||
isConfidential: true,
|
isConfidential: true,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #end-bloc>
|
<template #end-bloc>
|
||||||
<div class="item-row separator">
|
<div class="item-row separator">
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li>
|
<li>
|
||||||
<write-comment
|
<write-comment
|
||||||
:resource="resource"
|
:resource="resource"
|
||||||
@update-comment="updateComment"
|
@update-comment="updateComment"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<on-the-fly
|
<on-the-fly
|
||||||
:parent="parent"
|
:parent="parent"
|
||||||
:type="resource.resource.type"
|
:type="resource.resource.type"
|
||||||
:id="resource.resource.id"
|
:id="resource.resource.id"
|
||||||
action="show"
|
action="show"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<on-the-fly
|
<on-the-fly
|
||||||
:parent="parent"
|
:parent="parent"
|
||||||
:type="resource.resource.type"
|
:type="resource.resource.type"
|
||||||
:id="resource.resource.id"
|
:id="resource.resource.id"
|
||||||
action="edit"
|
action="edit"
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
ref="onTheFly"
|
ref="onTheFly"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<button
|
<button
|
||||||
class="btn btn-sm btn-remove"
|
class="btn btn-sm btn-remove"
|
||||||
:title="$t('action.remove')"
|
:title="$t('action.remove')"
|
||||||
@click.prevent="$emit('remove', resource)"
|
@click.prevent="$emit('remove', resource)"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</person-render-box>
|
</person-render-box>
|
||||||
|
|
||||||
<third-party-render-box
|
<third-party-render-box
|
||||||
v-if="resource.resource.type === 'thirdparty'"
|
v-if="resource.resource.type === 'thirdparty'"
|
||||||
:thirdparty="resource.resource"
|
:thirdparty="resource.resource"
|
||||||
:options="{
|
:options="{
|
||||||
addLink: false,
|
addLink: false,
|
||||||
addId: false,
|
addId: false,
|
||||||
addEntity: true,
|
addEntity: true,
|
||||||
addInfo: false,
|
addInfo: false,
|
||||||
hLevel: 3,
|
hLevel: 3,
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<template #end-bloc>
|
<template #end-bloc>
|
||||||
<div class="item-row separator">
|
<div class="item-row separator">
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li>
|
<li>
|
||||||
<write-comment
|
<write-comment
|
||||||
:resource="resource"
|
:resource="resource"
|
||||||
@update-comment="updateComment"
|
@update-comment="updateComment"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<on-the-fly
|
<on-the-fly
|
||||||
:parent="parent"
|
:parent="parent"
|
||||||
:type="resource.resource.type"
|
:type="resource.resource.type"
|
||||||
:id="resource.resource.id"
|
:id="resource.resource.id"
|
||||||
action="show"
|
action="show"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<on-the-fly
|
<on-the-fly
|
||||||
:parent="parent"
|
:parent="parent"
|
||||||
:type="resource.resource.type"
|
:type="resource.resource.type"
|
||||||
:id="resource.resource.id"
|
:id="resource.resource.id"
|
||||||
action="edit"
|
action="edit"
|
||||||
@save-form-on-the-fly="saveFormOnTheFly"
|
@save-form-on-the-fly="saveFormOnTheFly"
|
||||||
ref="onTheFly"
|
ref="onTheFly"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<button
|
<button
|
||||||
class="btn btn-sm btn-remove"
|
class="btn btn-sm btn-remove"
|
||||||
:title="$t('action.remove')"
|
:title="$t('action.remove')"
|
||||||
@click.prevent="$emit('remove', resource)"
|
@click.prevent="$emit('remove', resource)"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</third-party-render-box>
|
</third-party-render-box>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -112,130 +112,130 @@ import WriteComment from "./WriteComment";
|
|||||||
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ResourceItem",
|
name: "ResourceItem",
|
||||||
components: {
|
components: {
|
||||||
OnTheFly,
|
OnTheFly,
|
||||||
PersonRenderBox,
|
PersonRenderBox,
|
||||||
ThirdPartyRenderBox,
|
ThirdPartyRenderBox,
|
||||||
WriteComment,
|
WriteComment,
|
||||||
},
|
},
|
||||||
props: ["resource"],
|
props: ["resource"],
|
||||||
emits: ["remove"],
|
emits: ["remove"],
|
||||||
computed: {
|
computed: {
|
||||||
parent() {
|
parent() {
|
||||||
return {
|
return {
|
||||||
type: this.resource.type,
|
type: this.resource.type,
|
||||||
id: this.resource.id,
|
id: this.resource.id,
|
||||||
comment: this.resource.comment,
|
comment: this.resource.comment,
|
||||||
parent: {
|
parent: {
|
||||||
type: this.$store.state.accompanyingCourse.type,
|
type: this.$store.state.accompanyingCourse.type,
|
||||||
id: this.$store.state.accompanyingCourse.id,
|
id: this.$store.state.accompanyingCourse.id,
|
||||||
|
},
|
||||||
|
};
|
||||||
},
|
},
|
||||||
};
|
hasCurrentHouseholdAddress() {
|
||||||
},
|
if (this.resource.resource.current_household_address !== null) {
|
||||||
hasCurrentHouseholdAddress() {
|
return true;
|
||||||
if (this.resource.resource.current_household_address !== null) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
saveFormOnTheFly(payload) {
|
|
||||||
// console.log('saveFormOnTheFly: type', payload.type, ', data', payload.data);
|
|
||||||
payload.target = "resource";
|
|
||||||
|
|
||||||
let body = { type: payload.type };
|
|
||||||
if (payload.type === "person") {
|
|
||||||
body.firstName = payload.data.firstName;
|
|
||||||
body.lastName = payload.data.lastName;
|
|
||||||
if (payload.data.birthdate !== null) {
|
|
||||||
body.birthdate = payload.data.birthdate;
|
|
||||||
}
|
|
||||||
body.phonenumber = payload.data.phonenumber;
|
|
||||||
body.mobilenumber = payload.data.mobilenumber;
|
|
||||||
body.email = payload.data.email;
|
|
||||||
body.altNames = payload.data.altNames;
|
|
||||||
body.gender = {
|
|
||||||
id: payload.data.gender.id,
|
|
||||||
type: payload.data.gender.type,
|
|
||||||
};
|
|
||||||
if (payload.data.civility !== null) {
|
|
||||||
body.civility = {
|
|
||||||
id: payload.data.civility.id,
|
|
||||||
type: payload.data.civility.type,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
makeFetch(
|
|
||||||
"PATCH",
|
|
||||||
`/api/1.0/person/person/${payload.data.id}.json`,
|
|
||||||
body,
|
|
||||||
)
|
|
||||||
.then((response) => {
|
|
||||||
this.$store.dispatch("addPerson", {
|
|
||||||
target: payload.target,
|
|
||||||
body: response,
|
|
||||||
});
|
|
||||||
this.$refs.onTheFly.closeModal();
|
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
if (error.name === "ValidationException") {
|
|
||||||
for (let v of error.violations) {
|
|
||||||
this.$toast.open({ message: v });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
}
|
||||||
});
|
return false;
|
||||||
} else if (payload.type === "thirdparty") {
|
},
|
||||||
// console.log('data', payload.data)
|
},
|
||||||
body.firstname = payload.data.firstname;
|
methods: {
|
||||||
body.name = payload.data.name;
|
saveFormOnTheFly(payload) {
|
||||||
body.email = payload.data.email;
|
// console.log('saveFormOnTheFly: type', payload.type, ', data', payload.data);
|
||||||
body.telephone = payload.data.telephone;
|
payload.target = "resource";
|
||||||
body.telephone2 = payload.data.telephone2;
|
|
||||||
body.address = payload.data.address
|
|
||||||
? { id: payload.data.address.address_id }
|
|
||||||
: null;
|
|
||||||
if (null !== payload.data.civility) {
|
|
||||||
body.civility = {
|
|
||||||
type: "chill_main_civility",
|
|
||||||
id: payload.data.civility.id,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if (null !== payload.data.profession) {
|
|
||||||
body.profession = payload.data.profession;
|
|
||||||
}
|
|
||||||
// console.log('body', body);
|
|
||||||
|
|
||||||
makeFetch(
|
let body = { type: payload.type };
|
||||||
"PATCH",
|
if (payload.type === "person") {
|
||||||
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
body.firstName = payload.data.firstName;
|
||||||
body,
|
body.lastName = payload.data.lastName;
|
||||||
)
|
if (payload.data.birthdate !== null) {
|
||||||
.then((response) => {
|
body.birthdate = payload.data.birthdate;
|
||||||
this.$store.dispatch("addThirdparty", {
|
}
|
||||||
target: payload.target,
|
body.phonenumber = payload.data.phonenumber;
|
||||||
body: response,
|
body.mobilenumber = payload.data.mobilenumber;
|
||||||
});
|
body.email = payload.data.email;
|
||||||
this.$refs.onTheFly.closeModal();
|
body.altNames = payload.data.altNames;
|
||||||
})
|
body.gender = {
|
||||||
.catch((error) => {
|
id: payload.data.gender.id,
|
||||||
if (error.name === "ValidationException") {
|
type: payload.data.gender.type,
|
||||||
for (let v of error.violations) {
|
};
|
||||||
this.$toast.open({ message: v });
|
if (payload.data.civility !== null) {
|
||||||
}
|
body.civility = {
|
||||||
} else {
|
id: payload.data.civility.id,
|
||||||
this.$toast.open({ message: "An error occurred" });
|
type: payload.data.civility.type,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
makeFetch(
|
||||||
|
"PATCH",
|
||||||
|
`/api/1.0/person/person/${payload.data.id}.json`,
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
this.$store.dispatch("addPerson", {
|
||||||
|
target: payload.target,
|
||||||
|
body: response,
|
||||||
|
});
|
||||||
|
this.$refs.onTheFly.closeModal();
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === "ValidationException") {
|
||||||
|
for (let v of error.violations) {
|
||||||
|
this.$toast.open({ message: v });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (payload.type === "thirdparty") {
|
||||||
|
// console.log('data', payload.data)
|
||||||
|
body.firstname = payload.data.firstname;
|
||||||
|
body.name = payload.data.name;
|
||||||
|
body.email = payload.data.email;
|
||||||
|
body.telephone = payload.data.telephone;
|
||||||
|
body.telephone2 = payload.data.telephone2;
|
||||||
|
body.address = payload.data.address
|
||||||
|
? { id: payload.data.address.address_id }
|
||||||
|
: null;
|
||||||
|
if (null !== payload.data.civility) {
|
||||||
|
body.civility = {
|
||||||
|
type: "chill_main_civility",
|
||||||
|
id: payload.data.civility.id,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (null !== payload.data.profession) {
|
||||||
|
body.profession = payload.data.profession;
|
||||||
|
}
|
||||||
|
// console.log('body', body);
|
||||||
|
|
||||||
|
makeFetch(
|
||||||
|
"PATCH",
|
||||||
|
`/api/1.0/thirdparty/thirdparty/${payload.data.id}.json`,
|
||||||
|
body,
|
||||||
|
)
|
||||||
|
.then((response) => {
|
||||||
|
this.$store.dispatch("addThirdparty", {
|
||||||
|
target: payload.target,
|
||||||
|
body: response,
|
||||||
|
});
|
||||||
|
this.$refs.onTheFly.closeModal();
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
if (error.name === "ValidationException") {
|
||||||
|
for (let v of error.violations) {
|
||||||
|
this.$toast.open({ message: v });
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
}
|
updateComment(resource) {
|
||||||
|
console.log("updateComment", resource);
|
||||||
|
this.$store.commit("updateResource", resource);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
updateComment(resource) {
|
|
||||||
console.log("updateComment", resource);
|
|
||||||
this.$store.commit("updateResource", resource);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,32 +1,34 @@
|
|||||||
<template>
|
<template>
|
||||||
<a
|
<a
|
||||||
class="btn btn-sm btn-misc change-icon"
|
class="btn btn-sm btn-misc change-icon"
|
||||||
:title="$t('write_comment')"
|
:title="$t('write_comment')"
|
||||||
@click="openModal"
|
@click="openModal"
|
||||||
><i class="fa fa-pencil-square-o" />
|
><i class="fa fa-pencil-square-o" />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<teleport to="body">
|
<teleport to="body">
|
||||||
<modal
|
<modal
|
||||||
v-if="modal.showModal"
|
v-if="modal.showModal"
|
||||||
:modal-dialog-class="modal.modalDialogClass"
|
:modal-dialog-class="modal.modalDialogClass"
|
||||||
@close="modal.showModal = false"
|
@close="modal.showModal = false"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<h3 class="modal-title">
|
<h3 class="modal-title">
|
||||||
{{ $t("write_comment_about", { r: resource.resource.text }) }}
|
{{
|
||||||
</h3>
|
$t("write_comment_about", { r: resource.resource.text })
|
||||||
</template>
|
}}
|
||||||
<template #body>
|
</h3>
|
||||||
<comment-editor v-model="content" />
|
</template>
|
||||||
</template>
|
<template #body>
|
||||||
<template #footer>
|
<comment-editor v-model="content" />
|
||||||
<a class="btn btn-save" @click="saveAction">
|
</template>
|
||||||
{{ $t("action.save") }}
|
<template #footer>
|
||||||
</a>
|
<a class="btn btn-save" @click="saveAction">
|
||||||
</template>
|
{{ $t("action.save") }}
|
||||||
</modal>
|
</a>
|
||||||
</teleport>
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -35,71 +37,71 @@ import { makeFetch } from "ChillMainAssets/lib/api/apiMethods";
|
|||||||
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "WriteComment",
|
name: "WriteComment",
|
||||||
components: {
|
components: {
|
||||||
Modal,
|
Modal,
|
||||||
CommentEditor,
|
CommentEditor,
|
||||||
},
|
|
||||||
props: ["resource"],
|
|
||||||
emits: ["updateComment"],
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
|
||||||
},
|
|
||||||
formdata: {
|
|
||||||
content: this.resource.comment,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
i18n: {
|
|
||||||
messages: {
|
|
||||||
fr: {
|
|
||||||
write_comment: "Écrire un commentaire",
|
|
||||||
write_comment_about: "Écrire un commentaire à propos de {r}",
|
|
||||||
comment_placeholder: "Commencez à écrire...",
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
props: ["resource"],
|
||||||
computed: {
|
emits: ["updateComment"],
|
||||||
editor: () => ClassicEditor,
|
data() {
|
||||||
editorConfig: () => classicEditorConfig,
|
return {
|
||||||
content: {
|
modal: {
|
||||||
set(value) {
|
showModal: false,
|
||||||
this.formdata.content = value;
|
modalDialogClass: "modal-dialog-scrollable modal-xl",
|
||||||
},
|
},
|
||||||
get() {
|
formdata: {
|
||||||
return this.formdata.content;
|
content: this.resource.comment,
|
||||||
},
|
},
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
openModal() {
|
|
||||||
//console.log('write comment for', this.resource.resource.type, this.resource.resource.id);
|
|
||||||
this.modal.showModal = true;
|
|
||||||
},
|
|
||||||
saveAction() {
|
|
||||||
//console.log('save comment', this.resource.id, this.formdata.content);
|
|
||||||
this.patchResource(this.resource.id, this.formdata.content);
|
|
||||||
},
|
|
||||||
patchResource(id, comment) {
|
|
||||||
let url = `/api/1.0/person/accompanying-period/resource/${id}.json`,
|
|
||||||
body = {
|
|
||||||
type: "accompanying_period_resource",
|
|
||||||
comment: comment,
|
|
||||||
};
|
};
|
||||||
makeFetch("PATCH", url, body).then((r) => {
|
|
||||||
let resource = {
|
|
||||||
type: "accompanying_period_resource",
|
|
||||||
id: r.id,
|
|
||||||
comment: r.comment,
|
|
||||||
resource: r.resource,
|
|
||||||
};
|
|
||||||
this.$emit("updateComment", resource);
|
|
||||||
this.modal.showModal = false;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
},
|
i18n: {
|
||||||
|
messages: {
|
||||||
|
fr: {
|
||||||
|
write_comment: "Écrire un commentaire",
|
||||||
|
write_comment_about: "Écrire un commentaire à propos de {r}",
|
||||||
|
comment_placeholder: "Commencez à écrire...",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
editor: () => ClassicEditor,
|
||||||
|
editorConfig: () => classicEditorConfig,
|
||||||
|
content: {
|
||||||
|
set(value) {
|
||||||
|
this.formdata.content = value;
|
||||||
|
},
|
||||||
|
get() {
|
||||||
|
return this.formdata.content;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
openModal() {
|
||||||
|
//console.log('write comment for', this.resource.resource.type, this.resource.resource.id);
|
||||||
|
this.modal.showModal = true;
|
||||||
|
},
|
||||||
|
saveAction() {
|
||||||
|
//console.log('save comment', this.resource.id, this.formdata.content);
|
||||||
|
this.patchResource(this.resource.id, this.formdata.content);
|
||||||
|
},
|
||||||
|
patchResource(id, comment) {
|
||||||
|
let url = `/api/1.0/person/accompanying-period/resource/${id}.json`,
|
||||||
|
body = {
|
||||||
|
type: "accompanying_period_resource",
|
||||||
|
comment: comment,
|
||||||
|
};
|
||||||
|
makeFetch("PATCH", url, body).then((r) => {
|
||||||
|
let resource = {
|
||||||
|
type: "accompanying_period_resource",
|
||||||
|
id: r.id,
|
||||||
|
comment: r.comment,
|
||||||
|
resource: r.resource,
|
||||||
|
};
|
||||||
|
this.$emit("updateComment", resource);
|
||||||
|
this.modal.showModal = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-70" />{{ $t("scopes.title") }}</h2>
|
<h2><a id="section-70" />{{ $t("scopes.title") }}</h2>
|
||||||
|
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<div class="form-check" v-for="s in scopes" :key="s.id">
|
<div class="form-check" v-for="s in scopes" :key="s.id">
|
||||||
<input
|
<input
|
||||||
class="form-check-input"
|
class="form-check-input"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
v-model="checkedScopes"
|
v-model="checkedScopes"
|
||||||
:value="s"
|
:value="s"
|
||||||
/>
|
/>
|
||||||
<label class="form-check-label">
|
<label class="form-check-label">
|
||||||
{{ localizeString(s.name) }}
|
{{ localizeString(s.name) }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="!isScopeValid" class="alert alert-warning to-confirm">
|
<div v-if="!isScopeValid" class="alert alert-warning to-confirm">
|
||||||
{{ $t("scopes.add_at_least_one") }}
|
{{ $t("scopes.add_at_least_one") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -27,33 +27,38 @@ import { mapState, mapGetters } from "vuex";
|
|||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Scopes",
|
name: "Scopes",
|
||||||
computed: {
|
computed: {
|
||||||
...mapState(["scopes", "scopesAtStart"]),
|
...mapState(["scopes", "scopesAtStart"]),
|
||||||
...mapGetters(["isScopeValid"]),
|
...mapGetters(["isScopeValid"]),
|
||||||
checkedScopes: {
|
checkedScopes: {
|
||||||
get: function () {
|
get: function () {
|
||||||
return this.$store.state.accompanyingCourse.scopes;
|
return this.$store.state.accompanyingCourse.scopes;
|
||||||
},
|
},
|
||||||
set: function (v) {
|
set: function (v) {
|
||||||
this.$store.dispatch("setScopes", v).catch(({ name, violations }) => {
|
this.$store
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
.dispatch("setScopes", v)
|
||||||
violations.forEach((violation) =>
|
.catch(({ name, violations }) => {
|
||||||
this.$toast.open({ message: violation }),
|
if (
|
||||||
);
|
name === "ValidationException" ||
|
||||||
} else {
|
name === "AccessException"
|
||||||
this.$toast.open({ message: "An error occurred" });
|
) {
|
||||||
}
|
violations.forEach((violation) =>
|
||||||
});
|
this.$toast.open({ message: violation }),
|
||||||
},
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
localizeString,
|
||||||
localizeString,
|
restore() {
|
||||||
restore() {
|
console.log("restore");
|
||||||
console.log("restore");
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2><a id="section-60" />{{ $t("social_issue.title") }}</h2>
|
<h2><a id="section-60" />{{ $t("social_issue.title") }}</h2>
|
||||||
|
|
||||||
<div class="my-4">
|
<div class="my-4">
|
||||||
<!--label for="field">{{ $t('social_issue.label') }}</label
|
<!--label for="field">{{ $t('social_issue.label') }}</label
|
||||||
-->
|
-->
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
name="field"
|
name="field"
|
||||||
:close-on-select="true"
|
:close-on-select="true"
|
||||||
:allow-empty="true"
|
:allow-empty="true"
|
||||||
:show-labels="false"
|
:show-labels="false"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
label="text"
|
label="text"
|
||||||
:multiple="true"
|
:multiple="true"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
:placeholder="$t('social_issue.label')"
|
:placeholder="$t('social_issue.label')"
|
||||||
@update:model-value="updateSocialIssues"
|
@update:model-value="updateSocialIssues"
|
||||||
:model-value="value"
|
:model-value="value"
|
||||||
:options="options"
|
:options="options"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="!isSocialIssueValid" class="alert alert-warning to-confirm">
|
<div v-if="!isSocialIssueValid" class="alert alert-warning to-confirm">
|
||||||
{{ $t("social_issue.not_valid") }}
|
{{ $t("social_issue.not_valid") }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -33,54 +33,59 @@ import { fetchResults } from "ChillMainAssets/lib/api/apiMethods";
|
|||||||
import { mapGetters, mapState } from "vuex";
|
import { mapGetters, mapState } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "SocialIssue",
|
name: "SocialIssue",
|
||||||
components: { VueMultiselect },
|
components: { VueMultiselect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
options: [],
|
options: [],
|
||||||
};
|
};
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
value: (state) => state.accompanyingCourse.socialIssues,
|
|
||||||
}),
|
|
||||||
...mapGetters(["isSocialIssueValid"]),
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.getOptions();
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getOptions() {
|
|
||||||
fetchResults(`/api/1.0/person/social-work/social-issue.json`).then(
|
|
||||||
(response) => {
|
|
||||||
this.options = response;
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
updateSocialIssues(value) {
|
computed: {
|
||||||
this.$store
|
...mapState({
|
||||||
.dispatch("updateSocialIssues", this.transformValue(value))
|
value: (state) => state.accompanyingCourse.socialIssues,
|
||||||
.catch(({ name, violations }) => {
|
}),
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
...mapGetters(["isSocialIssueValid"]),
|
||||||
violations.forEach((violation) =>
|
},
|
||||||
this.$toast.open({ message: violation }),
|
mounted() {
|
||||||
|
this.getOptions();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getOptions() {
|
||||||
|
fetchResults(`/api/1.0/person/social-work/social-issue.json`).then(
|
||||||
|
(response) => {
|
||||||
|
this.options = response;
|
||||||
|
},
|
||||||
);
|
);
|
||||||
} else {
|
},
|
||||||
this.$toast.open({ message: "An error occurred" });
|
updateSocialIssues(value) {
|
||||||
}
|
this.$store
|
||||||
});
|
.dispatch("updateSocialIssues", this.transformValue(value))
|
||||||
|
.catch(({ name, violations }) => {
|
||||||
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
transformValue(updated) {
|
||||||
|
let stored = this.value;
|
||||||
|
let added = updated.filter((x) => stored.indexOf(x) === -1).shift();
|
||||||
|
let removed = stored
|
||||||
|
.filter((x) => updated.indexOf(x) === -1)
|
||||||
|
.shift();
|
||||||
|
let method = typeof removed === "undefined" ? "POST" : "DELETE";
|
||||||
|
let changed = typeof removed === "undefined" ? added : removed;
|
||||||
|
let body = { type: "social_issue", id: changed.id };
|
||||||
|
let payload = updated;
|
||||||
|
return { payload, body, method };
|
||||||
|
},
|
||||||
},
|
},
|
||||||
transformValue(updated) {
|
|
||||||
let stored = this.value;
|
|
||||||
let added = updated.filter((x) => stored.indexOf(x) === -1).shift();
|
|
||||||
let removed = stored.filter((x) => updated.indexOf(x) === -1).shift();
|
|
||||||
let method = typeof removed === "undefined" ? "POST" : "DELETE";
|
|
||||||
let changed = typeof removed === "undefined" ? added : removed;
|
|
||||||
let body = { type: "social_issue", id: changed.id };
|
|
||||||
let payload = updated;
|
|
||||||
return { payload, body, method };
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -91,20 +96,20 @@ export default {
|
|||||||
@import "ChillPersonAssets/chill/scss/mixins";
|
@import "ChillPersonAssets/chill/scss/mixins";
|
||||||
@import "ChillMainAssets/chill/scss/chill_variables";
|
@import "ChillMainAssets/chill/scss/chill_variables";
|
||||||
div#accompanying-course {
|
div#accompanying-course {
|
||||||
span.multiselect__tag {
|
span.multiselect__tag {
|
||||||
@include badge_social($social-issue-color);
|
@include badge_social($social-issue-color);
|
||||||
background: $chill-l-gray;
|
background: $chill-l-gray;
|
||||||
color: $dark;
|
color: $dark;
|
||||||
}
|
|
||||||
span.multiselect__option--highlight {
|
|
||||||
&::after {
|
|
||||||
background: $green;
|
|
||||||
}
|
}
|
||||||
&.multiselect__option--selected {
|
span.multiselect__option--highlight {
|
||||||
&::after {
|
&::after {
|
||||||
background: $red;
|
background: $green;
|
||||||
}
|
}
|
||||||
|
&.multiselect__option--selected {
|
||||||
|
&::after {
|
||||||
|
background: $red;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2>
|
<h2>
|
||||||
<a id="section-110" />
|
<a id="section-110" />
|
||||||
{{ $t("startdate.change") }}
|
{{ $t("startdate.change") }}
|
||||||
</h2>
|
</h2>
|
||||||
<div>
|
<div>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<div class="col-sm-12 date-update">
|
<div class="col-sm-12 date-update">
|
||||||
<input
|
<input
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="date"
|
type="date"
|
||||||
id="startDate"
|
id="startDate"
|
||||||
v-model="startDateInput"
|
v-model="startDateInput"
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -24,56 +24,69 @@ import { dateToISO, ISOToDatetime } from "ChillMainAssets/chill/js/date";
|
|||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "StartDate",
|
name: "StartDate",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
lastRecordedDate: null,
|
lastRecordedDate: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
startDate: (state) =>
|
startDate: (state) =>
|
||||||
dateToISO(ISOToDatetime(state.accompanyingCourse.openingDate.datetime)),
|
dateToISO(
|
||||||
}),
|
ISOToDatetime(
|
||||||
startDateInput: {
|
state.accompanyingCourse.openingDate.datetime,
|
||||||
get() {
|
),
|
||||||
return this.startDate;
|
),
|
||||||
},
|
}),
|
||||||
set(value) {
|
startDateInput: {
|
||||||
this.lastRecordedDate = value;
|
get() {
|
||||||
|
return this.startDate;
|
||||||
setTimeout(() => {
|
},
|
||||||
console.log("timeout finished");
|
set(value) {
|
||||||
if (this.lastRecordedDate === value) {
|
this.lastRecordedDate = value;
|
||||||
console.log("last recorded", this.lastRecordedDate, "value", value);
|
|
||||||
this.$store
|
setTimeout(() => {
|
||||||
.dispatch("updateStartDate", value)
|
console.log("timeout finished");
|
||||||
.catch(({ name, violations }) => {
|
if (this.lastRecordedDate === value) {
|
||||||
if (
|
console.log(
|
||||||
name === "ValidationException" ||
|
"last recorded",
|
||||||
name === "AccessException"
|
this.lastRecordedDate,
|
||||||
) {
|
"value",
|
||||||
violations.forEach((violation) =>
|
value,
|
||||||
this.$toast.open({ message: violation }),
|
);
|
||||||
);
|
this.$store
|
||||||
} else {
|
.dispatch("updateStartDate", value)
|
||||||
this.$toast.open({ message: "An error occurred" });
|
.catch(({ name, violations }) => {
|
||||||
}
|
if (
|
||||||
});
|
name === "ValidationException" ||
|
||||||
}
|
name === "AccessException"
|
||||||
}, 3000);
|
) {
|
||||||
},
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({
|
||||||
|
message: violation,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({
|
||||||
|
message: "An error occurred",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 3000);
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.date-update {
|
.date-update {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
&-btn {
|
&-btn {
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,195 +1,207 @@
|
|||||||
<template>
|
<template>
|
||||||
<teleport to="#content">
|
<teleport to="#content">
|
||||||
<div id="navmap">
|
<div id="navmap">
|
||||||
<nav>
|
<nav>
|
||||||
<a class="top" href="#top">
|
<a class="top" href="#top">
|
||||||
<i class="fa fa-fw fa-square" />
|
<i class="fa fa-fw fa-square" />
|
||||||
<span>{{ $t("nav.top") }}</span>
|
<span>{{ $t("nav.top") }}</span>
|
||||||
</a>
|
</a>
|
||||||
<item v-for="item of items" :key="item.key" :item="item" :step="step" />
|
<item
|
||||||
</nav>
|
v-for="item of items"
|
||||||
</div>
|
:key="item.key"
|
||||||
</teleport>
|
:item="item"
|
||||||
|
:step="step"
|
||||||
|
/>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</teleport>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Item from "./StickyNav/Item.vue";
|
import Item from "./StickyNav/Item.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "StickyNav",
|
name: "StickyNav",
|
||||||
components: {
|
components: {
|
||||||
Item,
|
Item,
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
header: document.querySelector("header nav.navbar"),
|
|
||||||
bannerName: document.querySelector("#header-accompanying_course-name"),
|
|
||||||
bannerDetails: document.querySelector(
|
|
||||||
"#header-accompanying_course-details",
|
|
||||||
),
|
|
||||||
container: null,
|
|
||||||
heightSum: null,
|
|
||||||
stickyNav: null,
|
|
||||||
limit: 25,
|
|
||||||
anchors: null,
|
|
||||||
items: [],
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
accompanyingCourse() {
|
|
||||||
return this.$store.state.accompanyingCourse;
|
|
||||||
},
|
},
|
||||||
step() {
|
data() {
|
||||||
return this.accompanyingCourse.step;
|
return {
|
||||||
|
header: document.querySelector("header nav.navbar"),
|
||||||
|
bannerName: document.querySelector(
|
||||||
|
"#header-accompanying_course-name",
|
||||||
|
),
|
||||||
|
bannerDetails: document.querySelector(
|
||||||
|
"#header-accompanying_course-details",
|
||||||
|
),
|
||||||
|
container: null,
|
||||||
|
heightSum: null,
|
||||||
|
stickyNav: null,
|
||||||
|
limit: 25,
|
||||||
|
anchors: null,
|
||||||
|
items: [],
|
||||||
|
};
|
||||||
},
|
},
|
||||||
top() {
|
computed: {
|
||||||
return parseInt(
|
accompanyingCourse() {
|
||||||
window
|
return this.$store.state.accompanyingCourse;
|
||||||
.getComputedStyle(this.stickyNav)
|
},
|
||||||
.getPropertyValue("top")
|
step() {
|
||||||
.slice(0, -2),
|
return this.accompanyingCourse.step;
|
||||||
);
|
},
|
||||||
|
top() {
|
||||||
|
return parseInt(
|
||||||
|
window
|
||||||
|
.getComputedStyle(this.stickyNav)
|
||||||
|
.getPropertyValue("top")
|
||||||
|
.slice(0, -2),
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
mounted() {
|
||||||
mounted() {
|
this.ready();
|
||||||
this.ready();
|
window.addEventListener("scroll", this.handleScroll);
|
||||||
window.addEventListener("scroll", this.handleScroll);
|
},
|
||||||
},
|
unmounted() {
|
||||||
unmounted() {
|
window.removeEventListener("scroll", this.handleScroll);
|
||||||
window.removeEventListener("scroll", this.handleScroll);
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
ready() {
|
||||||
ready() {
|
// load datas DOM when mounted ready
|
||||||
// load datas DOM when mounted ready
|
this.container = document.querySelector("#content");
|
||||||
this.container = document.querySelector("#content");
|
this.stickyNav = document.querySelector("#navmap");
|
||||||
this.stickyNav = document.querySelector("#navmap");
|
this.anchors = document.querySelectorAll("h2 a[id^='section']");
|
||||||
this.anchors = document.querySelectorAll("h2 a[id^='section']");
|
this.initItemsMap();
|
||||||
this.initItemsMap();
|
|
||||||
|
|
||||||
// TODO resizeObserver not supports IE !
|
// TODO resizeObserver not supports IE !
|
||||||
// Listen when elements change size, then recalculate heightSum and initItemsMap
|
// Listen when elements change size, then recalculate heightSum and initItemsMap
|
||||||
const resizeObserver = new ResizeObserver(() => {
|
const resizeObserver = new ResizeObserver(() => {
|
||||||
this.refreshPos();
|
this.refreshPos();
|
||||||
});
|
});
|
||||||
|
|
||||||
resizeObserver.observe(this.header);
|
resizeObserver.observe(this.header);
|
||||||
resizeObserver.observe(this.bannerName);
|
resizeObserver.observe(this.bannerName);
|
||||||
resizeObserver.observe(this.bannerDetails);
|
resizeObserver.observe(this.bannerDetails);
|
||||||
resizeObserver.observe(this.container);
|
resizeObserver.observe(this.container);
|
||||||
|
},
|
||||||
|
initItemsMap() {
|
||||||
|
this.anchors.forEach((anchor) => {
|
||||||
|
this.items.push({
|
||||||
|
pos: null,
|
||||||
|
active: false,
|
||||||
|
key: parseInt(anchor.id.slice(8).slice(0, -1)),
|
||||||
|
id: "#" + anchor.id,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
refreshPos() {
|
||||||
|
//console.log('refreshPos');
|
||||||
|
this.heightSum =
|
||||||
|
this.header.offsetHeight +
|
||||||
|
this.bannerName.offsetHeight +
|
||||||
|
this.bannerDetails.offsetHeight;
|
||||||
|
|
||||||
|
this.anchors.forEach((anchor, i) => {
|
||||||
|
this.items[i].pos = this.findPos(anchor)["y"];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
findPos(element) {
|
||||||
|
let posX = 0,
|
||||||
|
posY = 0;
|
||||||
|
do {
|
||||||
|
posX += element.offsetLeft;
|
||||||
|
posY += element.offsetTop;
|
||||||
|
element = element.offsetParent;
|
||||||
|
} while (element != null);
|
||||||
|
|
||||||
|
let pos = [];
|
||||||
|
pos["x"] = posX;
|
||||||
|
pos["y"] = posY;
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
},
|
||||||
|
handleScroll(event) {
|
||||||
|
let pos = this.findPos(this.stickyNav);
|
||||||
|
let top = this.heightSum + this.top - window.scrollY;
|
||||||
|
//console.log(window.scrollY);
|
||||||
|
|
||||||
|
if (top > this.limit) {
|
||||||
|
this.stickyNav.style.position = "absolute";
|
||||||
|
this.stickyNav.style.left = "10px";
|
||||||
|
} else {
|
||||||
|
this.stickyNav.style.position = "fixed";
|
||||||
|
this.stickyNav.style.left = pos["x"] + "px";
|
||||||
|
}
|
||||||
|
|
||||||
|
this.switchActive();
|
||||||
|
},
|
||||||
|
switchActive() {
|
||||||
|
this.items.forEach((item, i) => {
|
||||||
|
let next = this.items[i + 1] ? this.items[i + 1].pos : "100000";
|
||||||
|
item.active =
|
||||||
|
(window.scrollY >= item.pos) & (window.scrollY < next)
|
||||||
|
? true
|
||||||
|
: false;
|
||||||
|
}, this);
|
||||||
|
|
||||||
|
// last item never switch active because scroll reach bottom of page
|
||||||
|
if (
|
||||||
|
document.body.scrollHeight ==
|
||||||
|
window.scrollY + window.innerHeight
|
||||||
|
) {
|
||||||
|
this.items[this.items.length - 1].active = true;
|
||||||
|
this.items[this.items.length - 2].active = false;
|
||||||
|
} else {
|
||||||
|
this.items[this.items.length - 1].active = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
initItemsMap() {
|
|
||||||
this.anchors.forEach((anchor) => {
|
|
||||||
this.items.push({
|
|
||||||
pos: null,
|
|
||||||
active: false,
|
|
||||||
key: parseInt(anchor.id.slice(8).slice(0, -1)),
|
|
||||||
id: "#" + anchor.id,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
refreshPos() {
|
|
||||||
//console.log('refreshPos');
|
|
||||||
this.heightSum =
|
|
||||||
this.header.offsetHeight +
|
|
||||||
this.bannerName.offsetHeight +
|
|
||||||
this.bannerDetails.offsetHeight;
|
|
||||||
|
|
||||||
this.anchors.forEach((anchor, i) => {
|
|
||||||
this.items[i].pos = this.findPos(anchor)["y"];
|
|
||||||
});
|
|
||||||
},
|
|
||||||
findPos(element) {
|
|
||||||
let posX = 0,
|
|
||||||
posY = 0;
|
|
||||||
do {
|
|
||||||
posX += element.offsetLeft;
|
|
||||||
posY += element.offsetTop;
|
|
||||||
element = element.offsetParent;
|
|
||||||
} while (element != null);
|
|
||||||
|
|
||||||
let pos = [];
|
|
||||||
pos["x"] = posX;
|
|
||||||
pos["y"] = posY;
|
|
||||||
|
|
||||||
return pos;
|
|
||||||
},
|
|
||||||
handleScroll(event) {
|
|
||||||
let pos = this.findPos(this.stickyNav);
|
|
||||||
let top = this.heightSum + this.top - window.scrollY;
|
|
||||||
//console.log(window.scrollY);
|
|
||||||
|
|
||||||
if (top > this.limit) {
|
|
||||||
this.stickyNav.style.position = "absolute";
|
|
||||||
this.stickyNav.style.left = "10px";
|
|
||||||
} else {
|
|
||||||
this.stickyNav.style.position = "fixed";
|
|
||||||
this.stickyNav.style.left = pos["x"] + "px";
|
|
||||||
}
|
|
||||||
|
|
||||||
this.switchActive();
|
|
||||||
},
|
|
||||||
switchActive() {
|
|
||||||
this.items.forEach((item, i) => {
|
|
||||||
let next = this.items[i + 1] ? this.items[i + 1].pos : "100000";
|
|
||||||
item.active =
|
|
||||||
(window.scrollY >= item.pos) & (window.scrollY < next) ? true : false;
|
|
||||||
}, this);
|
|
||||||
|
|
||||||
// last item never switch active because scroll reach bottom of page
|
|
||||||
if (document.body.scrollHeight == window.scrollY + window.innerHeight) {
|
|
||||||
this.items[this.items.length - 1].active = true;
|
|
||||||
this.items[this.items.length - 2].active = false;
|
|
||||||
} else {
|
|
||||||
this.items[this.items.length - 1].active = false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
div#content {
|
div#content {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
div#navmap {
|
div#navmap {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 30px;
|
top: 30px;
|
||||||
left: 10px; //-10%;
|
left: 10px; //-10%;
|
||||||
nav {
|
nav {
|
||||||
font-size: small;
|
font-size: small;
|
||||||
a {
|
a {
|
||||||
display: block;
|
display: block;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin-bottom: -3px;
|
margin-bottom: -3px;
|
||||||
color: #71859669;
|
color: #71859669;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
&.top {
|
&.top {
|
||||||
color: #718596;
|
color: #718596;
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&:hover,
|
||||||
|
&.active {
|
||||||
|
span {
|
||||||
|
display: inline;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
color: #718596b5;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
color: #e2793d; //orange
|
||||||
|
//color: #eec84a; //jaune
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
span {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
&:hover,
|
|
||||||
&.active {
|
|
||||||
span {
|
|
||||||
display: inline;
|
|
||||||
padding-left: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:hover {
|
|
||||||
color: #718596b5;
|
|
||||||
}
|
|
||||||
&.active {
|
|
||||||
color: #e2793d; //orange
|
|
||||||
//color: #eec84a; //jaune
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@media only screen and (max-width: 768px) {
|
@media only screen and (max-width: 768px) {
|
||||||
div#navmap {
|
div#navmap {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,22 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<a v-if="item.key <= 8" :href="item.id" :class="{ active: isActive }">
|
<a v-if="item.key <= 8" :href="item.id" :class="{ active: isActive }">
|
||||||
<i class="fa fa-fw fa-square" />
|
<i class="fa fa-fw fa-square" />
|
||||||
<span>{{ item.key }}</span>
|
<span>{{ item.key }}</span>
|
||||||
</a>
|
</a>
|
||||||
<a v-else-if="step === 'DRAFT'" :href="item.id" :class="{ active: isActive }">
|
<a
|
||||||
<i class="fa fa-fw fa-square" />
|
v-else-if="step === 'DRAFT'"
|
||||||
<span>{{ item.key }}</span>
|
:href="item.id"
|
||||||
</a>
|
:class="{ active: isActive }"
|
||||||
|
>
|
||||||
|
<i class="fa fa-fw fa-square" />
|
||||||
|
<span>{{ item.key }}</span>
|
||||||
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
name: "Item",
|
name: "Item",
|
||||||
props: ["item", "step"],
|
props: ["item", "step"],
|
||||||
computed: {
|
computed: {
|
||||||
isActive() {
|
isActive() {
|
||||||
return this.item.active;
|
return this.item.active;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,146 +1,155 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="vue-component">
|
<div class="vue-component">
|
||||||
<h2>Tests</h2>
|
<h2>Tests</h2>
|
||||||
|
|
||||||
<!-- Modal -->
|
<!-- Modal -->
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li>
|
<li>
|
||||||
<button class="btn btn-create" @click="modal1.showModal = true">
|
<button class="btn btn-create" @click="modal1.showModal = true">
|
||||||
{{ $t("action.show_modal") }}
|
{{ $t("action.show_modal") }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<button class="btn btn-create" @click="modal2.showModal = true">
|
<button class="btn btn-create" @click="modal2.showModal = true">
|
||||||
Ouvrir une seconde modale
|
Ouvrir une seconde modale
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<teleport to="body">
|
<teleport to="body">
|
||||||
<modal
|
<modal
|
||||||
v-if="modal1.showModal"
|
v-if="modal1.showModal"
|
||||||
:modal-dialog-class="modal1.modalDialogClass"
|
:modal-dialog-class="modal1.modalDialogClass"
|
||||||
@close="modal1.showModal = false"
|
@close="modal1.showModal = false"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<h2 class="modal-title">Le titre de ma modale</h2>
|
<h2 class="modal-title">Le titre de ma modale</h2>
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
<p>
|
<p>
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
luctus facilisis suscipit. Cras pulvinar, purus sagittis pulvinar
|
Phasellus luctus facilisis suscipit. Cras pulvinar,
|
||||||
porta, enim ex posuere lacus, in pulvinar lectus magna in odio.
|
purus sagittis pulvinar porta, enim ex posuere lacus, in
|
||||||
Nullam iaculis congue lorem ac suscipit. Proin ut rutrum augue. Ut
|
pulvinar lectus magna in odio. Nullam iaculis congue
|
||||||
vehicula risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
lorem ac suscipit. Proin ut rutrum augue. Ut vehicula
|
||||||
viverra. Morbi dictum placerat suscipit.
|
risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
||||||
</p>
|
viverra. Morbi dictum placerat suscipit.
|
||||||
<p>
|
</p>
|
||||||
Quisque non erat tincidunt, lacinia justo ut, pulvinar nisl. Nunc id
|
<p>
|
||||||
enim ut sem pretium interdum consectetur eu quam. Vestibulum ante
|
Quisque non erat tincidunt, lacinia justo ut, pulvinar
|
||||||
ipsum primis in faucibus orci luctus et ultrices posuere cubilia
|
nisl. Nunc id enim ut sem pretium interdum consectetur
|
||||||
curae; Etiam posuere erat eget augue finibus luctus. Maecenas
|
eu quam. Vestibulum ante ipsum primis in faucibus orci
|
||||||
auctor, tortor non luctus ultrices, neque neque porttitor ex, nec
|
luctus et ultrices posuere cubilia curae; Etiam posuere
|
||||||
lacinia lorem ligula et elit. Sed tempor nulla vitae lorem
|
erat eget augue finibus luctus. Maecenas auctor, tortor
|
||||||
sollicitudin dictum. Vestibulum nec arcu eget elit pulvinar pretium.
|
non luctus ultrices, neque neque porttitor ex, nec
|
||||||
Phasellus facilisis metus sed diam luctus, feugiat scelerisque velit
|
lacinia lorem ligula et elit. Sed tempor nulla vitae
|
||||||
dignissim.
|
lorem sollicitudin dictum. Vestibulum nec arcu eget elit
|
||||||
</p>
|
pulvinar pretium. Phasellus facilisis metus sed diam
|
||||||
<p>
|
luctus, feugiat scelerisque velit dignissim.
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus
|
</p>
|
||||||
luctus facilisis suscipit. Cras pulvinar, purus sagittis pulvinar
|
<p>
|
||||||
porta, enim ex posuere lacus, in pulvinar lectus magna in odio.
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
Nullam iaculis congue lorem ac suscipit. Proin ut rutrum augue. Ut
|
Phasellus luctus facilisis suscipit. Cras pulvinar,
|
||||||
vehicula risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
purus sagittis pulvinar porta, enim ex posuere lacus, in
|
||||||
viverra. Morbi dictum placerat suscipit.
|
pulvinar lectus magna in odio. Nullam iaculis congue
|
||||||
</p>
|
lorem ac suscipit. Proin ut rutrum augue. Ut vehicula
|
||||||
<p>
|
risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
||||||
Quisque non erat tincidunt, lacinia justo ut, pulvinar nisl. Nunc id
|
viverra. Morbi dictum placerat suscipit.
|
||||||
enim ut sem pretium interdum consectetur eu quam. Vestibulum ante
|
</p>
|
||||||
ipsum primis in faucibus orci luctus et ultrices posuere cubilia
|
<p>
|
||||||
curae; Etiam posuere erat eget augue finibus luctus. Maecenas
|
Quisque non erat tincidunt, lacinia justo ut, pulvinar
|
||||||
auctor, tortor non luctus ultrices, neque neque porttitor ex, nec
|
nisl. Nunc id enim ut sem pretium interdum consectetur
|
||||||
lacinia lorem ligula et elit. Sed tempor nulla vitae lorem
|
eu quam. Vestibulum ante ipsum primis in faucibus orci
|
||||||
sollicitudin dictum. Vestibulum nec arcu eget elit pulvinar pretium.
|
luctus et ultrices posuere cubilia curae; Etiam posuere
|
||||||
Phasellus facilisis metus sed diam luctus, feugiat scelerisque velit
|
erat eget augue finibus luctus. Maecenas auctor, tortor
|
||||||
dignissim.
|
non luctus ultrices, neque neque porttitor ex, nec
|
||||||
</p>
|
lacinia lorem ligula et elit. Sed tempor nulla vitae
|
||||||
<p>
|
lorem sollicitudin dictum. Vestibulum nec arcu eget elit
|
||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus
|
pulvinar pretium. Phasellus facilisis metus sed diam
|
||||||
luctus facilisis suscipit. Cras pulvinar, purus sagittis pulvinar
|
luctus, feugiat scelerisque velit dignissim.
|
||||||
porta, enim ex posuere lacus, in pulvinar lectus magna in odio.
|
</p>
|
||||||
Nullam iaculis congue lorem ac suscipit. Proin ut rutrum augue. Ut
|
<p>
|
||||||
vehicula risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||||
viverra. Morbi dictum placerat suscipit.
|
Phasellus luctus facilisis suscipit. Cras pulvinar,
|
||||||
</p>
|
purus sagittis pulvinar porta, enim ex posuere lacus, in
|
||||||
<p>
|
pulvinar lectus magna in odio. Nullam iaculis congue
|
||||||
Quisque non erat tincidunt, lacinia justo ut, pulvinar nisl. Nunc id
|
lorem ac suscipit. Proin ut rutrum augue. Ut vehicula
|
||||||
enim ut sem pretium interdum consectetur eu quam. Vestibulum ante
|
risus nec hendrerit ullamcorper. Ut volutpat eu mi eget
|
||||||
ipsum primis in faucibus orci luctus et ultrices posuere cubilia
|
viverra. Morbi dictum placerat suscipit.
|
||||||
curae; Etiam posuere erat eget augue finibus luctus. Maecenas
|
</p>
|
||||||
auctor, tortor non luctus ultrices, neque neque porttitor ex, nec
|
<p>
|
||||||
lacinia lorem ligula et elit. Sed tempor nulla vitae lorem
|
Quisque non erat tincidunt, lacinia justo ut, pulvinar
|
||||||
sollicitudin dictum. Vestibulum nec arcu eget elit pulvinar pretium.
|
nisl. Nunc id enim ut sem pretium interdum consectetur
|
||||||
Phasellus facilisis metus sed diam luctus, feugiat scelerisque velit
|
eu quam. Vestibulum ante ipsum primis in faucibus orci
|
||||||
dignissim.
|
luctus et ultrices posuere cubilia curae; Etiam posuere
|
||||||
</p>
|
erat eget augue finibus luctus. Maecenas auctor, tortor
|
||||||
</template>
|
non luctus ultrices, neque neque porttitor ex, nec
|
||||||
<template #footer>
|
lacinia lorem ligula et elit. Sed tempor nulla vitae
|
||||||
<button
|
lorem sollicitudin dictum. Vestibulum nec arcu eget elit
|
||||||
class="btn btn-create"
|
pulvinar pretium. Phasellus facilisis metus sed diam
|
||||||
@click="
|
luctus, feugiat scelerisque velit dignissim.
|
||||||
modal1.showModal = false;
|
</p>
|
||||||
modal2.showModal = true;
|
</template>
|
||||||
"
|
<template #footer>
|
||||||
>
|
<button
|
||||||
{{ $t("action.next") }}
|
class="btn btn-create"
|
||||||
</button>
|
@click="
|
||||||
</template>
|
modal1.showModal = false;
|
||||||
</modal>
|
modal2.showModal = true;
|
||||||
</teleport>
|
"
|
||||||
|
>
|
||||||
|
{{ $t("action.next") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
|
|
||||||
<teleport to="body">
|
<teleport to="body">
|
||||||
<modal
|
<modal
|
||||||
v-if="modal2.showModal"
|
v-if="modal2.showModal"
|
||||||
:modal-dialog-class="modal2.modalDialogClass"
|
:modal-dialog-class="modal2.modalDialogClass"
|
||||||
@close="modal2.showModal = false"
|
@close="modal2.showModal = false"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<h2 class="modal-title">Une autre modale</h2>
|
<h2 class="modal-title">Une autre modale</h2>
|
||||||
</template>
|
</template>
|
||||||
<template #body>
|
<template #body>
|
||||||
<p>modal 2</p>
|
<p>modal 2</p>
|
||||||
</template>
|
</template>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<button class="btn btn-create" @click="modal2.showModal = false">
|
<button
|
||||||
{{ $t("action.save") }}
|
class="btn btn-create"
|
||||||
</button>
|
@click="modal2.showModal = false"
|
||||||
</template>
|
>
|
||||||
</modal>
|
{{ $t("action.save") }}
|
||||||
</teleport>
|
</button>
|
||||||
<!-- END Modal -->
|
</template>
|
||||||
</div>
|
</modal>
|
||||||
|
</teleport>
|
||||||
|
<!-- END Modal -->
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
import Modal from "ChillMainAssets/vuejs/_components/Modal";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Test",
|
name: "Test",
|
||||||
components: {
|
components: {
|
||||||
Modal,
|
Modal,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
modal1: {
|
modal1: {
|
||||||
showModal: false,
|
showModal: false,
|
||||||
modalDialogClass: "modal-dialog-scrollable modal-xl", // modal-lg modal-md modal-sm
|
modalDialogClass: "modal-dialog-scrollable modal-xl", // modal-lg modal-md modal-sm
|
||||||
},
|
},
|
||||||
modal2: {
|
modal2: {
|
||||||
showModal: false,
|
showModal: false,
|
||||||
modalDialogClass: "modal-dialog-centered modal-sm", // modal-lg modal-md modal-sm
|
modalDialogClass: "modal-dialog-centered modal-sm", // modal-lg modal-md modal-sm
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "vendor_name/AccompanyingCourse",
|
|
||||||
"description": "description",
|
|
||||||
"minimum-stability": "stable",
|
|
||||||
"license": "proprietary",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "mat",
|
|
||||||
"email": "email@example.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,135 +1,152 @@
|
|||||||
<template>
|
<template>
|
||||||
<h2>{{ $t("pick_social_issue") }}</h2>
|
<h2>{{ $t("pick_social_issue") }}</h2>
|
||||||
|
|
||||||
<div id="awc_create_form">
|
<div id="awc_create_form">
|
||||||
<div id="picking" class="">
|
<div id="picking" class="">
|
||||||
<p>{{ $t("pick_social_issue_linked_with_action") }}</p>
|
<p>{{ $t("pick_social_issue_linked_with_action") }}</p>
|
||||||
<div v-for="si in socialIssues" :key="si.id">
|
<div v-for="si in socialIssues" :key="si.id">
|
||||||
<input
|
<input
|
||||||
type="radio"
|
type="radio"
|
||||||
:value="si.id"
|
:value="si.id"
|
||||||
name="socialIssue"
|
name="socialIssue"
|
||||||
v-model="socialIssuePicked"
|
v-model="socialIssuePicked"
|
||||||
/><span class="badge bg-chill-l-gray text-dark">{{ si.text }}</span>
|
/><span class="badge bg-chill-l-gray text-dark">{{
|
||||||
</div>
|
si.text
|
||||||
<div class="my-3">
|
}}</span>
|
||||||
<div class="col-11">
|
|
||||||
<vue-multiselect
|
|
||||||
name="otherIssues"
|
|
||||||
label="text"
|
|
||||||
track-by="id"
|
|
||||||
open-direction="bottom"
|
|
||||||
:close-on-select="true"
|
|
||||||
:preserve-search="false"
|
|
||||||
:reset-after="true"
|
|
||||||
:hide-selected="true"
|
|
||||||
:taggable="false"
|
|
||||||
:multiple="false"
|
|
||||||
:searchable="true"
|
|
||||||
:allow-empty="true"
|
|
||||||
:show-labels="false"
|
|
||||||
:loading="issueIsLoading"
|
|
||||||
:placeholder="$t('choose_other_social_issue')"
|
|
||||||
:options="socialIssuesOther"
|
|
||||||
@select="addIssueInList"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="hasSocialIssuePicked" class="mb-3">
|
|
||||||
<h2>{{ $t("pick_an_action") }}</h2>
|
|
||||||
<div class="col-11">
|
|
||||||
<vue-multiselect
|
|
||||||
v-model="socialActionPicked"
|
|
||||||
label="text"
|
|
||||||
:options="socialActionsReachables"
|
|
||||||
:searchable="true"
|
|
||||||
:close-on-select="true"
|
|
||||||
:show-labels="true"
|
|
||||||
track-by="id"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="isLoadingSocialActions">
|
|
||||||
<i class="fa fa-circle-o-notch fa-spin fa-fw" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="hasSocialActionPicked" id="persons" class="mb-5">
|
|
||||||
<h2>{{ $t("persons_involved") }}</h2>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li v-for="p in personsReachables" :key="p.id">
|
|
||||||
<div class="form-check">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
|
||||||
:value="p.id"
|
|
||||||
v-model="personsPicked"
|
|
||||||
class="form-check-input"
|
|
||||||
:id="'person_check' + p.id"
|
|
||||||
/>
|
|
||||||
<label class="form-check-label" :for="'person_check' + p.id">
|
|
||||||
<person-text :person="p" />
|
|
||||||
</label>
|
|
||||||
</div>
|
</div>
|
||||||
</li>
|
<div class="my-3">
|
||||||
</ul>
|
<div class="col-11">
|
||||||
</div>
|
<vue-multiselect
|
||||||
</div>
|
name="otherIssues"
|
||||||
<!-- <div v-if="hasSocialActionPicked" id="start_date">
|
label="text"
|
||||||
|
track-by="id"
|
||||||
|
open-direction="bottom"
|
||||||
|
:close-on-select="true"
|
||||||
|
:preserve-search="false"
|
||||||
|
:reset-after="true"
|
||||||
|
:hide-selected="true"
|
||||||
|
:taggable="false"
|
||||||
|
:multiple="false"
|
||||||
|
:searchable="true"
|
||||||
|
:allow-empty="true"
|
||||||
|
:show-labels="false"
|
||||||
|
:loading="issueIsLoading"
|
||||||
|
:placeholder="$t('choose_other_social_issue')"
|
||||||
|
:options="socialIssuesOther"
|
||||||
|
@select="addIssueInList"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="hasSocialIssuePicked" class="mb-3">
|
||||||
|
<h2>{{ $t("pick_an_action") }}</h2>
|
||||||
|
<div class="col-11">
|
||||||
|
<vue-multiselect
|
||||||
|
v-model="socialActionPicked"
|
||||||
|
label="text"
|
||||||
|
:options="socialActionsReachables"
|
||||||
|
:searchable="true"
|
||||||
|
:close-on-select="true"
|
||||||
|
:show-labels="true"
|
||||||
|
track-by="id"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="isLoadingSocialActions">
|
||||||
|
<i class="fa fa-circle-o-notch fa-spin fa-fw" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="hasSocialActionPicked" id="persons" class="mb-5">
|
||||||
|
<h2>{{ $t("persons_involved") }}</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li v-for="p in personsReachables" :key="p.id">
|
||||||
|
<div class="form-check">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:value="p.id"
|
||||||
|
v-model="personsPicked"
|
||||||
|
class="form-check-input"
|
||||||
|
:id="'person_check' + p.id"
|
||||||
|
/>
|
||||||
|
<label
|
||||||
|
class="form-check-label"
|
||||||
|
:for="'person_check' + p.id"
|
||||||
|
>
|
||||||
|
<person-text :person="p" />
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <div v-if="hasSocialActionPicked" id="start_date">
|
||||||
<p><label>{{ $t('startDate') }}</label> <input type="date" v-model="startDate" /></p>
|
<p><label>{{ $t('startDate') }}</label> <input type="date" v-model="startDate" /></p>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div v-if="hasSocialActionPicked" id="start_date" class="mb-3 row">
|
<div v-if="hasSocialActionPicked" id="start_date" class="mb-3 row">
|
||||||
<label class="col-form-label col-sm-4">{{ $t("startDate") }}</label>
|
<label class="col-form-label col-sm-4">{{
|
||||||
<div class="col-sm-8">
|
$t("startDate")
|
||||||
<input class="form-control" type="date" v-model="startDate" />
|
}}</label>
|
||||||
</div>
|
<div class="col-sm-8">
|
||||||
</div>
|
<input
|
||||||
|
class="form-control"
|
||||||
|
type="date"
|
||||||
|
v-model="startDate"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- <div v-if="hasSocialActionPicked" id="end_date">
|
<!-- <div v-if="hasSocialActionPicked" id="end_date">
|
||||||
<p><label>{{ $t('endDate') }}</label> <input type="date" v-model="endDate" /></p>
|
<p><label>{{ $t('endDate') }}</label> <input type="date" v-model="endDate" /></p>
|
||||||
</div> -->
|
</div> -->
|
||||||
<div v-if="hasSocialActionPicked" id="end_date" class="mb-3 row">
|
<div v-if="hasSocialActionPicked" id="end_date" class="mb-3 row">
|
||||||
<label class="col-form-label col-sm-4">{{ $t("endDate") }}</label>
|
<label class="col-form-label col-sm-4">{{
|
||||||
<div class="col-sm-8">
|
$t("endDate")
|
||||||
<input class="form-control" type="date" v-model="endDate" />
|
}}</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input class="form-control" type="date" v-model="endDate" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div id="confirm">
|
||||||
</div>
|
<div v-if="hasErrors">
|
||||||
<div id="confirm">
|
<p>{{ $t("form_has_errors") }}</p>
|
||||||
<div v-if="hasErrors">
|
|
||||||
<p>{{ $t("form_has_errors") }}</p>
|
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="e in errors" :key="e.id">
|
<li v-for="e in errors" :key="e.id">
|
||||||
{{ e }}
|
{{ e }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<li class="cancel">
|
<li class="cancel">
|
||||||
<button class="btn btn-cancel" @click="goToPrevious">
|
<button class="btn btn-cancel" @click="goToPrevious">
|
||||||
{{ $t("action.cancel") }}
|
{{ $t("action.cancel") }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="hasSocialActionPicked">
|
<li v-if="hasSocialActionPicked">
|
||||||
<button
|
<button
|
||||||
class="btn btn-save"
|
class="btn btn-save"
|
||||||
v-show="!isPostingWork"
|
v-show="!isPostingWork"
|
||||||
@click="submit"
|
@click="submit"
|
||||||
>
|
>
|
||||||
{{ $t("action.save") }}
|
{{ $t("action.save") }}
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-save" v-show="isPostingWork" disabled>
|
<button
|
||||||
{{ $t("action.save") }}
|
class="btn btn-save"
|
||||||
</button>
|
v-show="isPostingWork"
|
||||||
</li>
|
disabled
|
||||||
</ul>
|
>
|
||||||
</div>
|
{{ $t("action.save") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -138,127 +155,131 @@ import VueMultiselect from "vue-multiselect";
|
|||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
const i18n = {
|
const i18n = {
|
||||||
messages: {
|
messages: {
|
||||||
fr: {
|
fr: {
|
||||||
startDate: "Date de début",
|
startDate: "Date de début",
|
||||||
endDate: "Date de fin",
|
endDate: "Date de fin",
|
||||||
form_has_errors: "Le formulaire comporte des erreurs",
|
form_has_errors: "Le formulaire comporte des erreurs",
|
||||||
pick_social_issue: "Choisir une problématique sociale",
|
pick_social_issue: "Choisir une problématique sociale",
|
||||||
pick_other_social_issue: "Veuillez choisir un autre problématique",
|
pick_other_social_issue: "Veuillez choisir un autre problématique",
|
||||||
pick_an_action: "Choisir une action d'accompagnement",
|
pick_an_action: "Choisir une action d'accompagnement",
|
||||||
pick_social_issue_linked_with_action:
|
pick_social_issue_linked_with_action:
|
||||||
"Indiquez la problématique sociale liée à l'action d'accompagnement",
|
"Indiquez la problématique sociale liée à l'action d'accompagnement",
|
||||||
persons_involved: "Usagers concernés",
|
persons_involved: "Usagers concernés",
|
||||||
choose_other_social_issue: "Veuillez choisir un autre problématique",
|
choose_other_social_issue:
|
||||||
|
"Veuillez choisir un autre problématique",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
components: {
|
components: {
|
||||||
VueMultiselect,
|
VueMultiselect,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
submit() {
|
|
||||||
this.$store.dispatch("submit").catch(({ name, violations }) => {
|
|
||||||
if (name === "ValidationException" || name === "AccessException") {
|
|
||||||
violations.forEach((violation) =>
|
|
||||||
this.$toast.open({ message: violation }),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
this.$toast.open({ message: "An error occurred" });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
addIssueInList(value) {
|
methods: {
|
||||||
this.$store.commit("addIssueInList", value);
|
submit() {
|
||||||
this.$store.commit("removeIssueInOther", value);
|
this.$store.dispatch("submit").catch(({ name, violations }) => {
|
||||||
this.$store.dispatch("pickSocialIssue", value.id);
|
if (
|
||||||
|
name === "ValidationException" ||
|
||||||
|
name === "AccessException"
|
||||||
|
) {
|
||||||
|
violations.forEach((violation) =>
|
||||||
|
this.$toast.open({ message: violation }),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
this.$toast.open({ message: "An error occurred" });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addIssueInList(value) {
|
||||||
|
this.$store.commit("addIssueInList", value);
|
||||||
|
this.$store.commit("removeIssueInOther", value);
|
||||||
|
this.$store.dispatch("pickSocialIssue", value.id);
|
||||||
|
},
|
||||||
|
goToPrevious() {
|
||||||
|
let params = new URLSearchParams(window.location.search);
|
||||||
|
if (params.has("returnPath")) {
|
||||||
|
window.location.replace(params.get("returnPath"));
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
goToPrevious() {
|
i18n,
|
||||||
let params = new URLSearchParams(window.location.search);
|
computed: {
|
||||||
if (params.has("returnPath")) {
|
...mapState([
|
||||||
window.location.replace(params.get("returnPath"));
|
"socialIssues",
|
||||||
} else {
|
"socialIssuesOther",
|
||||||
return;
|
"socialActionsReachables",
|
||||||
}
|
"errors",
|
||||||
},
|
"personsReachables",
|
||||||
},
|
]),
|
||||||
i18n,
|
...mapGetters([
|
||||||
computed: {
|
"hasSocialIssuePicked",
|
||||||
...mapState([
|
"hasSocialActionPicked",
|
||||||
"socialIssues",
|
"isLoadingSocialActions",
|
||||||
"socialIssuesOther",
|
"isPostingWork",
|
||||||
"socialActionsReachables",
|
"hasErrors",
|
||||||
"errors",
|
]),
|
||||||
"personsReachables",
|
personsPicked: {
|
||||||
]),
|
get() {
|
||||||
...mapGetters([
|
let s = this.$store.state.personsPicked.map((p) => p.id);
|
||||||
"hasSocialIssuePicked",
|
|
||||||
"hasSocialActionPicked",
|
|
||||||
"isLoadingSocialActions",
|
|
||||||
"isPostingWork",
|
|
||||||
"hasErrors",
|
|
||||||
]),
|
|
||||||
personsPicked: {
|
|
||||||
get() {
|
|
||||||
let s = this.$store.state.personsPicked.map((p) => p.id);
|
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
},
|
},
|
||||||
set(v) {
|
set(v) {
|
||||||
this.$store.commit("setPersonsPickedIds", v);
|
this.$store.commit("setPersonsPickedIds", v);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
socialIssuePicked: {
|
socialIssuePicked: {
|
||||||
get() {
|
get() {
|
||||||
let s = this.$store.state.socialIssuePicked;
|
let s = this.$store.state.socialIssuePicked;
|
||||||
|
|
||||||
if (s === null) {
|
if (s === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.id;
|
return s.id;
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.dispatch("pickSocialIssue", value);
|
this.$store.dispatch("pickSocialIssue", value);
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
socialActionPicked: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.socialActionPicked;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit("setSocialAction", value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
startDate: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.startDate;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit("setStartDate", value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
endDate: {
|
||||||
|
get() {
|
||||||
|
return this.$store.state.endDate;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit("setEndDate", value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setSocialIssue: {
|
||||||
|
set() {
|
||||||
|
this.$store.dispatch(
|
||||||
|
"setSocialIssue",
|
||||||
|
socialIssues[socialIssues.length - 1],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
socialActionPicked: {
|
|
||||||
get() {
|
|
||||||
return this.$store.state.socialActionPicked;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.$store.commit("setSocialAction", value);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
startDate: {
|
|
||||||
get() {
|
|
||||||
return this.$store.state.startDate;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.$store.commit("setStartDate", value);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
endDate: {
|
|
||||||
get() {
|
|
||||||
return this.$store.state.endDate;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.$store.commit("setEndDate", value);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
setSocialIssue: {
|
|
||||||
set() {
|
|
||||||
this.$store.dispatch(
|
|
||||||
"setSocialIssue",
|
|
||||||
socialIssues[socialIssues.length - 1],
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -267,46 +288,46 @@ export default {
|
|||||||
@import "ChillPersonAssets/chill/scss/mixins";
|
@import "ChillPersonAssets/chill/scss/mixins";
|
||||||
@import "ChillMainAssets/chill/scss/chill_variables";
|
@import "ChillMainAssets/chill/scss/chill_variables";
|
||||||
span.badge {
|
span.badge {
|
||||||
@include badge_social($social-issue-color);
|
@include badge_social($social-issue-color);
|
||||||
font-size: 95%;
|
font-size: 95%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
#awc_create_form {
|
#awc_create_form {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-areas:
|
grid-template-areas:
|
||||||
"picking picking"
|
"picking picking"
|
||||||
"start_date end_date"
|
"start_date end_date"
|
||||||
"confirm confirm";
|
"confirm confirm";
|
||||||
grid-template-columns: 50% 50%;
|
grid-template-columns: 50% 50%;
|
||||||
column-gap: 1.5rem;
|
column-gap: 1.5rem;
|
||||||
|
|
||||||
#picking {
|
#picking {
|
||||||
grid-area: picking;
|
grid-area: picking;
|
||||||
|
|
||||||
#persons {
|
#persons {
|
||||||
ul {
|
ul {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
#start_date {
|
#start_date {
|
||||||
grid-area: start_date;
|
grid-area: start_date;
|
||||||
}
|
}
|
||||||
|
|
||||||
#end_date {
|
#end_date {
|
||||||
grid-area: end_date;
|
grid-area: end_date;
|
||||||
}
|
}
|
||||||
|
|
||||||
#confirm {
|
#confirm {
|
||||||
grid-area: confirm;
|
grid-area: confirm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,67 +1,70 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
|
||||||
<a id="evaluations"></a>
|
|
||||||
<div class="item-title" :title="evaluation.id || 'no id yet'">
|
|
||||||
<span>{{ localizeString(evaluation.evaluation.title) }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="item-url mt-3 mb-4" v-if="evaluation.evaluation.url">
|
|
||||||
<i class="fa fa-link fa-lg"></i>
|
|
||||||
<a :href="evaluation.evaluation.url" target="_blank">{{
|
|
||||||
evaluation.evaluation.url
|
|
||||||
}}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<form-evaluation
|
<a id="evaluations"></a>
|
||||||
ref="FormEvaluation"
|
<div class="item-title" :title="evaluation.id || 'no id yet'">
|
||||||
:key="evaluation.key"
|
<span>{{ localizeString(evaluation.evaluation.title) }}</span>
|
||||||
:evaluation="evaluation"
|
</div>
|
||||||
:docAnchorId="docAnchorId"
|
|
||||||
></form-evaluation>
|
|
||||||
|
|
||||||
<ul class="record_actions">
|
<div class="item-url mt-3 mb-4" v-if="evaluation.evaluation.url">
|
||||||
<li v-if="evaluation.workflows_availables.length > 0">
|
<i class="fa fa-link fa-lg"></i>
|
||||||
<list-workflow-modal
|
<a :href="evaluation.evaluation.url" target="_blank">{{
|
||||||
:workflows="evaluation.workflows"
|
evaluation.evaluation.url
|
||||||
:allowCreate="true"
|
}}</a>
|
||||||
relatedEntityClass="Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation"
|
</div>
|
||||||
:relatedEntityId="evaluation.id"
|
|
||||||
:workflowsAvailables="evaluation.workflows_availables"
|
<div>
|
||||||
@go-to-generate-workflow="goToGenerateWorkflow"
|
<form-evaluation
|
||||||
></list-workflow-modal>
|
ref="FormEvaluation"
|
||||||
</li>
|
:key="evaluation.key"
|
||||||
<li v-if="canDelete">
|
:evaluation="evaluation"
|
||||||
<a
|
:docAnchorId="docAnchorId"
|
||||||
class="btn btn-delete"
|
></form-evaluation>
|
||||||
@click="modal.showModal = true"
|
|
||||||
:title="$t('action.delete')"
|
<ul class="record_actions">
|
||||||
>{{ $t("delete_evaluation") }}</a
|
<li v-if="evaluation.workflows_availables.length > 0">
|
||||||
>
|
<list-workflow-modal
|
||||||
</li>
|
:workflows="evaluation.workflows"
|
||||||
</ul>
|
:allowCreate="true"
|
||||||
|
relatedEntityClass="Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkEvaluation"
|
||||||
|
:relatedEntityId="evaluation.id"
|
||||||
|
:workflowsAvailables="evaluation.workflows_availables"
|
||||||
|
@go-to-generate-workflow="goToGenerateWorkflow"
|
||||||
|
></list-workflow-modal>
|
||||||
|
</li>
|
||||||
|
<li v-if="canDelete">
|
||||||
|
<a
|
||||||
|
class="btn btn-delete"
|
||||||
|
@click="modal.showModal = true"
|
||||||
|
:title="$t('action.delete')"
|
||||||
|
>{{ $t("delete_evaluation") }}</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<teleport to="body">
|
||||||
|
<modal
|
||||||
|
v-if="modal.showModal"
|
||||||
|
:modalDialogClass="modal.modalDialogClass"
|
||||||
|
@close="modal.showModal = false"
|
||||||
|
>
|
||||||
|
<template v-slot:header>
|
||||||
|
<h2 class="modal-title">{{ $t("delete.sure") }}</h2>
|
||||||
|
</template>
|
||||||
|
<template v-slot:body>
|
||||||
|
<p>{{ $t("delete.sure_description") }}</p>
|
||||||
|
</template>
|
||||||
|
<template v-slot:footer>
|
||||||
|
<button
|
||||||
|
class="btn btn-danger"
|
||||||
|
@click="removeEvaluation(evaluation)"
|
||||||
|
>
|
||||||
|
{{ $t("delete.ok") }}
|
||||||
|
</button>
|
||||||
|
</template>
|
||||||
|
</modal>
|
||||||
|
</teleport>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<teleport to="body">
|
|
||||||
<modal
|
|
||||||
v-if="modal.showModal"
|
|
||||||
:modalDialogClass="modal.modalDialogClass"
|
|
||||||
@close="modal.showModal = false"
|
|
||||||
>
|
|
||||||
<template v-slot:header>
|
|
||||||
<h2 class="modal-title">{{ $t("delete.sure") }}</h2>
|
|
||||||
</template>
|
|
||||||
<template v-slot:body>
|
|
||||||
<p>{{ $t("delete.sure_description") }}</p>
|
|
||||||
</template>
|
|
||||||
<template v-slot:footer>
|
|
||||||
<button class="btn btn-danger" @click="removeEvaluation(evaluation)">
|
|
||||||
{{ $t("delete.ok") }}
|
|
||||||
</button>
|
|
||||||
</template>
|
|
||||||
</modal>
|
|
||||||
</teleport>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -72,112 +75,114 @@ import { buildLinkCreate } from "ChillMainAssets/lib/entity-workflow/api";
|
|||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
|
|
||||||
const i18n = {
|
const i18n = {
|
||||||
messages: {
|
messages: {
|
||||||
fr: {
|
fr: {
|
||||||
no_evaluation_associated: "Aucune évaluation associée",
|
no_evaluation_associated: "Aucune évaluation associée",
|
||||||
add_an_evaluation: "Évaluations disponibles",
|
add_an_evaluation: "Évaluations disponibles",
|
||||||
evaluation_has_no_evaluation: "Aucune évaluation disponible",
|
evaluation_has_no_evaluation: "Aucune évaluation disponible",
|
||||||
startDate: "Date d'ouverture",
|
startDate: "Date d'ouverture",
|
||||||
endDate: "Date de fin",
|
endDate: "Date de fin",
|
||||||
maxDate: "Date d'échéance",
|
maxDate: "Date d'échéance",
|
||||||
warningInterval: "Rappel (jours)",
|
warningInterval: "Rappel (jours)",
|
||||||
comment: "Note publique",
|
comment: "Note publique",
|
||||||
documents: "Documents",
|
documents: "Documents",
|
||||||
delete: {
|
delete: {
|
||||||
sure: "Êtes-vous sûr?",
|
sure: "Êtes-vous sûr?",
|
||||||
sure_description:
|
sure_description:
|
||||||
"Cette évaluation sera supprimée de cette action d'accompagnement",
|
"Cette évaluation sera supprimée de cette action d'accompagnement",
|
||||||
ok: "Supprimer",
|
ok: "Supprimer",
|
||||||
},
|
},
|
||||||
delete_evaluation: "Supprimer l'évaluation",
|
delete_evaluation: "Supprimer l'évaluation",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "AddEvaluation",
|
name: "AddEvaluation",
|
||||||
components: {
|
components: {
|
||||||
FormEvaluation,
|
FormEvaluation,
|
||||||
Modal,
|
Modal,
|
||||||
ListWorkflowModal,
|
ListWorkflowModal,
|
||||||
},
|
|
||||||
props: ["evaluation", "docAnchorId"],
|
|
||||||
i18n,
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
modal: {
|
|
||||||
showModal: false,
|
|
||||||
modalDialogClass: "modal-dialog-centered modal-md",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
pickedEvaluations() {
|
|
||||||
return this.$store.state.evaluationsPicked;
|
|
||||||
},
|
},
|
||||||
canDelete() {
|
props: ["evaluation", "docAnchorId"],
|
||||||
if (this.evaluation.workflows.length > 0) {
|
i18n,
|
||||||
return false;
|
data() {
|
||||||
}
|
return {
|
||||||
|
modal: {
|
||||||
|
showModal: false,
|
||||||
|
modalDialogClass: "modal-dialog-centered modal-md",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
pickedEvaluations() {
|
||||||
|
return this.$store.state.evaluationsPicked;
|
||||||
|
},
|
||||||
|
canDelete() {
|
||||||
|
if (this.evaluation.workflows.length > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
for (let doc of this.evaluation.documents) {
|
for (let doc of this.evaluation.documents) {
|
||||||
if (doc.workflows.length > 0) {
|
if (doc.workflows.length > 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
localizeString,
|
||||||
localizeString,
|
removeEvaluation(e) {
|
||||||
removeEvaluation(e) {
|
this.$store.commit("removeEvaluation", e);
|
||||||
this.$store.commit("removeEvaluation", e);
|
return;
|
||||||
return;
|
},
|
||||||
},
|
toggleEditEvaluation() {
|
||||||
toggleEditEvaluation() {
|
this.$store.commit("toggleEvaluationEdit", {
|
||||||
this.$store.commit("toggleEvaluationEdit", { key: this.evaluation.key });
|
key: this.evaluation.key,
|
||||||
},
|
});
|
||||||
submitForm() {
|
},
|
||||||
this.toggleEditEvaluation();
|
submitForm() {
|
||||||
},
|
this.toggleEditEvaluation();
|
||||||
goToGenerateWorkflow({ workflowName }) {
|
},
|
||||||
const callback = (data) => {
|
goToGenerateWorkflow({ workflowName }) {
|
||||||
let evaluationId = data.accompanyingPeriodWorkEvaluations.find(
|
const callback = (data) => {
|
||||||
(e) => e.key === this.evaluation.key,
|
let evaluationId = data.accompanyingPeriodWorkEvaluations.find(
|
||||||
).id;
|
(e) => e.key === this.evaluation.key,
|
||||||
window.location.assign(
|
).id;
|
||||||
buildLinkCreate(
|
window.location.assign(
|
||||||
workflowName,
|
buildLinkCreate(
|
||||||
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluation",
|
workflowName,
|
||||||
evaluationId,
|
"Chill\\PersonBundle\\Entity\\AccompanyingPeriod\\AccompanyingPeriodWorkEvaluation",
|
||||||
),
|
evaluationId,
|
||||||
);
|
),
|
||||||
};
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return this.$store.dispatch("submit", callback).catch((e) => {
|
return this.$store.dispatch("submit", callback).catch((e) => {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
div.item-title {
|
div.item-title {
|
||||||
.evaluation-title {
|
.evaluation-title {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
&::before {
|
&::before {
|
||||||
content: "";
|
content: "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
div.item-url {
|
div.item-url {
|
||||||
i {
|
i {
|
||||||
color: unset !important;
|
color: unset !important;
|
||||||
margin-left: 1rem;
|
margin-left: 1rem;
|
||||||
margin-right: 0.5rem;
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,167 +1,179 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="hasResult" class="addResult">
|
<div v-if="hasResult" class="addResult">
|
||||||
<p v-if="pickedResults.length === 0" class="chill-no-data-statement">
|
<p v-if="pickedResults.length === 0" class="chill-no-data-statement">
|
||||||
Aucun résultat associé
|
Aucun résultat associé
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul class="list-suggest remove-items">
|
<ul class="list-suggest remove-items">
|
||||||
<li v-for="r in pickedResults" @click="removeResult(r)" :key="r.id">
|
<li v-for="r in pickedResults" @click="removeResult(r)" :key="r.id">
|
||||||
<span>
|
<span>
|
||||||
{{ localizeString(r.title) }}
|
{{ localizeString(r.title) }}
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="accordion" id="expandedSuggestions">
|
<div class="accordion" id="expandedSuggestions">
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header" id="heading_expanded_suggestions">
|
<h2 class="accordion-header" id="heading_expanded_suggestions">
|
||||||
<button
|
<button
|
||||||
v-if="isExpanded"
|
v-if="isExpanded"
|
||||||
class="accordion-button"
|
class="accordion-button"
|
||||||
type="button"
|
type="button"
|
||||||
data-bs-toggle="collapse"
|
data-bs-toggle="collapse"
|
||||||
aria-expanded="true"
|
aria-expanded="true"
|
||||||
@click="toggleSelect"
|
@click="toggleSelect"
|
||||||
>
|
>
|
||||||
Masquer
|
Masquer
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
v-else
|
v-else
|
||||||
class="accordion-button collapsed"
|
class="accordion-button collapsed"
|
||||||
type="button"
|
type="button"
|
||||||
data-bs-toggle="collapse"
|
data-bs-toggle="collapse"
|
||||||
aria-expanded="false"
|
aria-expanded="false"
|
||||||
@click="toggleSelect"
|
@click="toggleSelect"
|
||||||
>
|
>
|
||||||
Résultats et orientations disponibles
|
Résultats et orientations disponibles
|
||||||
</button>
|
</button>
|
||||||
</h2>
|
</h2>
|
||||||
<div
|
<div
|
||||||
class="accordion-collapse"
|
class="accordion-collapse"
|
||||||
id="collapse_expanded_suggestions"
|
id="collapse_expanded_suggestions"
|
||||||
aria-labelledby="heading_expanded_suggestions"
|
aria-labelledby="heading_expanded_suggestions"
|
||||||
data-bs-parent="#expandedSuggestions"
|
data-bs-parent="#expandedSuggestions"
|
||||||
>
|
>
|
||||||
<template v-if="isExpanded">
|
<template v-if="isExpanded">
|
||||||
<ul class="list-suggest add-items">
|
<ul class="list-suggest add-items">
|
||||||
<li
|
<li
|
||||||
v-for="r in availableForCheckResults"
|
v-for="r in availableForCheckResults"
|
||||||
@click="addResult(r)"
|
@click="addResult(r)"
|
||||||
:key="r.id"
|
:key="r.id"
|
||||||
>
|
>
|
||||||
<span>{{ localizeString(r.title) }}</span>
|
<span>{{ localizeString(r.title) }}</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div v-if="!hasResult" class="noResult">
|
||||||
<div v-if="!hasResult" class="noResult">
|
<div class="chill-no-data-statement">
|
||||||
<div class="chill-no-data-statement">
|
{{ $t("goal_has_no_result") }}
|
||||||
{{ $t("goal_has_no_result") }}
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
|
|
||||||
const i18n = {
|
const i18n = {
|
||||||
messages: {
|
messages: {
|
||||||
fr: {
|
fr: {
|
||||||
add_a_result: "Résultat - orientation disponibles",
|
add_a_result: "Résultat - orientation disponibles",
|
||||||
goal_has_no_result: "Aucun résultat - orientation disponible",
|
goal_has_no_result: "Aucun résultat - orientation disponible",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "AddResult",
|
name: "AddResult",
|
||||||
props: ["destination", "goal", "availableResults"],
|
props: ["destination", "goal", "availableResults"],
|
||||||
i18n,
|
i18n,
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isExpanded: false,
|
isExpanded: false,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
hasResult() {
|
hasResult() {
|
||||||
if (this.destination === "action") {
|
if (this.destination === "action") {
|
||||||
return this.$store.state.resultsForAction.length > 0;
|
return this.$store.state.resultsForAction.length > 0;
|
||||||
} else if (this.destination === "goal") {
|
} else if (this.destination === "goal") {
|
||||||
return this.$store.getters.resultsForGoal(this.goal).length > 0;
|
return this.$store.getters.resultsForGoal(this.goal).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw Error(`this.destination is not implemented: ${this.destination}`);
|
throw Error(
|
||||||
},
|
`this.destination is not implemented: ${this.destination}`,
|
||||||
pickedResults() {
|
);
|
||||||
if (this.destination === "action") {
|
},
|
||||||
return this.$store.state.resultsPicked;
|
pickedResults() {
|
||||||
} else if (this.destination === "goal") {
|
if (this.destination === "action") {
|
||||||
return this.$store.getters.resultsPickedForGoal(this.goal);
|
return this.$store.state.resultsPicked;
|
||||||
}
|
} else if (this.destination === "goal") {
|
||||||
|
return this.$store.getters.resultsPickedForGoal(this.goal);
|
||||||
|
}
|
||||||
|
|
||||||
throw Error(`this.destination is not implemented: ${this.destination}`);
|
throw Error(
|
||||||
},
|
`this.destination is not implemented: ${this.destination}`,
|
||||||
availableForCheckResults() {
|
);
|
||||||
if (this.destination === "action") {
|
},
|
||||||
let pickedIds = this.$store.state.resultsPicked.map((r) => r.id);
|
availableForCheckResults() {
|
||||||
|
if (this.destination === "action") {
|
||||||
|
let pickedIds = this.$store.state.resultsPicked.map(
|
||||||
|
(r) => r.id,
|
||||||
|
);
|
||||||
|
|
||||||
return this.$store.state.resultsForAction.filter(
|
return this.$store.state.resultsForAction.filter(
|
||||||
(r) => !pickedIds.includes(r.id),
|
(r) => !pickedIds.includes(r.id),
|
||||||
);
|
);
|
||||||
} else if (this.destination === "goal") {
|
} else if (this.destination === "goal") {
|
||||||
let pickedIds = this.$store.getters
|
let pickedIds = this.$store.getters
|
||||||
.resultsPickedForGoal(this.goal)
|
.resultsPickedForGoal(this.goal)
|
||||||
.map((r) => r.id);
|
.map((r) => r.id);
|
||||||
|
|
||||||
return this.$store.getters
|
return this.$store.getters
|
||||||
.resultsForGoal(this.goal)
|
.resultsForGoal(this.goal)
|
||||||
.filter((r) => !pickedIds.includes(r.id));
|
.filter((r) => !pickedIds.includes(r.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
throw Error(`this.destination is not implemented: ${this.destination}`);
|
throw Error(
|
||||||
|
`this.destination is not implemented: ${this.destination}`,
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
localizeString,
|
||||||
localizeString,
|
toggleSelect() {
|
||||||
toggleSelect() {
|
this.isExpanded = !this.isExpanded;
|
||||||
this.isExpanded = !this.isExpanded;
|
},
|
||||||
|
addResult(r) {
|
||||||
|
if (this.destination === "action") {
|
||||||
|
this.$store.commit("addResultPicked", r);
|
||||||
|
return;
|
||||||
|
} else if (this.destination === "goal") {
|
||||||
|
this.$store.commit("addResultForGoalPicked", {
|
||||||
|
goal: this.goal,
|
||||||
|
result: r,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw Error(
|
||||||
|
`this.destination is not implemented: ${this.destination}`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
removeResult(r) {
|
||||||
|
if (this.destination === "action") {
|
||||||
|
this.$store.commit("removeResultPicked", r);
|
||||||
|
return;
|
||||||
|
} else if (this.destination === "goal") {
|
||||||
|
this.$store.commit("removeResultForGoalPicked", {
|
||||||
|
goal: this.goal,
|
||||||
|
result: r,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw Error(
|
||||||
|
`this.destination is not implemented: ${this.destination}`,
|
||||||
|
);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
addResult(r) {
|
|
||||||
if (this.destination === "action") {
|
|
||||||
this.$store.commit("addResultPicked", r);
|
|
||||||
return;
|
|
||||||
} else if (this.destination === "goal") {
|
|
||||||
this.$store.commit("addResultForGoalPicked", {
|
|
||||||
goal: this.goal,
|
|
||||||
result: r,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
throw Error(`this.destination is not implemented: ${this.destination}`);
|
|
||||||
},
|
|
||||||
removeResult(r) {
|
|
||||||
if (this.destination === "action") {
|
|
||||||
this.$store.commit("removeResultPicked", r);
|
|
||||||
return;
|
|
||||||
} else if (this.destination === "goal") {
|
|
||||||
this.$store.commit("removeResultForGoalPicked", {
|
|
||||||
goal: this.goal,
|
|
||||||
result: r,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
throw Error(`this.destination is not implemented: ${this.destination}`);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.accordion-button {
|
.accordion-button {
|
||||||
padding: 0.25rem;
|
padding: 0.25rem;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,447 +1,445 @@
|
|||||||
<template>
|
<template>
|
||||||
<fieldset class="mb-3" id="actionType">
|
<fieldset class="mb-3" id="actionType">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<legend class="col-sm-4 col-form-label">
|
<legend class="col-sm-4 col-form-label">
|
||||||
{{ $t("action.label") }}
|
{{ $t("action.label") }}
|
||||||
</legend>
|
</legend>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
v-model="action"
|
v-model="action"
|
||||||
:options="actions.options"
|
:options="actions.options"
|
||||||
@select="selectAction"
|
@select="selectAction"
|
||||||
@remove="unselectAction"
|
@remove="unselectAction"
|
||||||
:multiple="true"
|
:multiple="true"
|
||||||
:close-on-select="false"
|
:close-on-select="false"
|
||||||
:placeholder="$t('action.placeholder')"
|
:placeholder="$t('action.placeholder')"
|
||||||
:custom-label="formatSocialAction"
|
:custom-label="formatSocialAction"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset class="mb-3" id="goal">
|
<fieldset class="mb-3" id="goal">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<legend class="col-sm-4 col-form-label">
|
<legend class="col-sm-4 col-form-label">
|
||||||
{{ $t("goal.label") }}
|
{{ $t("goal.label") }}
|
||||||
</legend>
|
</legend>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
v-model="goal"
|
v-model="goal"
|
||||||
:options="goals.options"
|
:options="goals.options"
|
||||||
@select="selectGoal"
|
@select="selectGoal"
|
||||||
@remove="unselectGoal"
|
@remove="unselectGoal"
|
||||||
:multiple="true"
|
:multiple="true"
|
||||||
:close-on-select="false"
|
:close-on-select="false"
|
||||||
:placeholder="$t('goal.placeholder')"
|
:placeholder="$t('goal.placeholder')"
|
||||||
label="title"
|
label="title"
|
||||||
:custom-label="transTitle"
|
:custom-label="transTitle"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset class="mb-3" id="result">
|
<fieldset class="mb-3" id="result">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<legend class="col-sm-4 col-form-label">
|
<legend class="col-sm-4 col-form-label">
|
||||||
{{ $t("result.label") }}
|
{{ $t("result.label") }}
|
||||||
</legend>
|
</legend>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<VueMultiselect
|
<VueMultiselect
|
||||||
v-model="result"
|
v-model="result"
|
||||||
:options="results.options"
|
:options="results.options"
|
||||||
@select="selectResult"
|
@select="selectResult"
|
||||||
@remove="unselectResult"
|
@remove="unselectResult"
|
||||||
:multiple="true"
|
:multiple="true"
|
||||||
:close-on-select="false"
|
:close-on-select="false"
|
||||||
:placeholder="$t('result.placeholder')"
|
:placeholder="$t('result.placeholder')"
|
||||||
label="title"
|
label="title"
|
||||||
:custom-label="transTitle"
|
:custom-label="transTitle"
|
||||||
track-by="id"
|
track-by="id"
|
||||||
:searchable="true"
|
:searchable="true"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import VueMultiselect from "vue-multiselect";
|
import VueMultiselect from "vue-multiselect";
|
||||||
import {
|
import {
|
||||||
getSocialActions,
|
getSocialActions,
|
||||||
getGoalByAction,
|
getGoalByAction,
|
||||||
getResultByAction,
|
getResultByAction,
|
||||||
getResultByGoal,
|
getResultByGoal,
|
||||||
} from "./api";
|
} from "./api";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
components: {
|
components: {
|
||||||
VueMultiselect,
|
VueMultiselect,
|
||||||
},
|
},
|
||||||
i18n: {
|
i18n: {
|
||||||
messages: {
|
messages: {
|
||||||
fr: {
|
fr: {
|
||||||
|
action: {
|
||||||
|
label: "Types d'actions",
|
||||||
|
placeholder: "Choisissez une ou plusieurs actions",
|
||||||
|
},
|
||||||
|
goal: {
|
||||||
|
label: "Objectifs",
|
||||||
|
placeholder: "Choisissez un ou plusieurs objectifs",
|
||||||
|
},
|
||||||
|
result: {
|
||||||
|
label: "Résultats",
|
||||||
|
placeholder: "Choisissez un ou plusieurs résultats",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
actions: {
|
||||||
|
options: [], // array with multiselect options
|
||||||
|
value: [], // array with selected values
|
||||||
|
hiddenField: document.getElementById(
|
||||||
|
"export_filters_social_work_type_filter_form_actionType",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
goals: {
|
||||||
|
options: [],
|
||||||
|
value: [],
|
||||||
|
hiddenField: document.getElementById(
|
||||||
|
"export_filters_social_work_type_filter_form_goal",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
results: {
|
||||||
|
options: [],
|
||||||
|
value: [],
|
||||||
|
hiddenField: document.getElementById(
|
||||||
|
"export_filters_social_work_type_filter_form_result",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
action: {
|
action: {
|
||||||
label: "Types d'actions",
|
get() {
|
||||||
placeholder: "Choisissez une ou plusieurs actions",
|
return this.actions.value;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.actions.value = value;
|
||||||
|
this.rebuildHiddenFieldValues("actions");
|
||||||
|
},
|
||||||
},
|
},
|
||||||
goal: {
|
goal: {
|
||||||
label: "Objectifs",
|
get() {
|
||||||
placeholder: "Choisissez un ou plusieurs objectifs",
|
return this.goals.value;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.goals.value = value;
|
||||||
|
this.rebuildHiddenFieldValues("goals");
|
||||||
|
},
|
||||||
},
|
},
|
||||||
result: {
|
result: {
|
||||||
label: "Résultats",
|
get() {
|
||||||
placeholder: "Choisissez un ou plusieurs résultats",
|
return this.results.value;
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
this.results.value = value;
|
||||||
|
this.rebuildHiddenFieldValues("results");
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
async mounted() {
|
||||||
data() {
|
await this.getSocialActionsList();
|
||||||
return {
|
|
||||||
actions: {
|
|
||||||
options: [], // array with multiselect options
|
|
||||||
value: [], // array with selected values
|
|
||||||
hiddenField: document.getElementById(
|
|
||||||
"export_filters_social_work_type_filter_form_actionType",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
goals: {
|
|
||||||
options: [],
|
|
||||||
value: [],
|
|
||||||
hiddenField: document.getElementById(
|
|
||||||
"export_filters_social_work_type_filter_form_goal",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
results: {
|
|
||||||
options: [],
|
|
||||||
value: [],
|
|
||||||
hiddenField: document.getElementById(
|
|
||||||
"export_filters_social_work_type_filter_form_result",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
action: {
|
|
||||||
get() {
|
|
||||||
return this.actions.value;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.actions.value = value;
|
|
||||||
this.rebuildHiddenFieldValues("actions");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
goal: {
|
|
||||||
get() {
|
|
||||||
return this.goals.value;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.goals.value = value;
|
|
||||||
this.rebuildHiddenFieldValues("goals");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
result: {
|
|
||||||
get() {
|
|
||||||
return this.results.value;
|
|
||||||
},
|
|
||||||
set(value) {
|
|
||||||
this.results.value = value;
|
|
||||||
this.rebuildHiddenFieldValues("results");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
async mounted() {
|
|
||||||
await this.getSocialActionsList();
|
|
||||||
|
|
||||||
if ("" !== this.actions.hiddenField.value) {
|
if ("" !== this.actions.hiddenField.value) {
|
||||||
const actionIds = this.actions.hiddenField.value.split(",");
|
const actionIds = this.actions.hiddenField.value.split(",");
|
||||||
for (const aid of actionIds) {
|
for (const aid of actionIds) {
|
||||||
let action = this.actions.options.find(
|
let action = this.actions.options.find(
|
||||||
(a) => Number.parseInt(aid) === a.id,
|
(a) => Number.parseInt(aid) === a.id,
|
||||||
);
|
);
|
||||||
if (undefined !== action) {
|
if (undefined !== action) {
|
||||||
this.action.push(action);
|
this.action.push(action);
|
||||||
await this.selectAction(action);
|
await this.selectAction(action);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ("" !== this.goals.hiddenField.value) {
|
|
||||||
const goalsIds = this.goals.hiddenField.value
|
|
||||||
.split(",")
|
|
||||||
.map((s) => Number.parseInt(s));
|
|
||||||
for (const gid of goalsIds) {
|
|
||||||
let goal = this.goals.options.find((g) => gid === g.id);
|
|
||||||
if (undefined !== goal) {
|
|
||||||
this.goal.push(goal);
|
|
||||||
await this.selectGoal(goal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ("" !== this.results.hiddenField.value) {
|
|
||||||
const resultsIds = this.results.hiddenField.value
|
|
||||||
.split(",")
|
|
||||||
.map((s) => Number.parseInt(s));
|
|
||||||
for (const rid of resultsIds) {
|
|
||||||
let result = this.results.options.find((r) => rid === r.id);
|
|
||||||
if (undefined !== result) {
|
|
||||||
this.result.push(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
async getSocialActionsList() {
|
|
||||||
let actions = await getSocialActions();
|
|
||||||
this.actions.options = actions.toSorted(function (a, b) {
|
|
||||||
if (a.issue.ordering === b.issue.ordering) {
|
|
||||||
if (a.ordering === b.ordering) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (a.ordering < b.ordering) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (a.issue.ordering < b.issue.ordering) {
|
if ("" !== this.goals.hiddenField.value) {
|
||||||
return -1;
|
const goalsIds = this.goals.hiddenField.value
|
||||||
|
.split(",")
|
||||||
|
.map((s) => Number.parseInt(s));
|
||||||
|
for (const gid of goalsIds) {
|
||||||
|
let goal = this.goals.options.find((g) => gid === g.id);
|
||||||
|
if (undefined !== goal) {
|
||||||
|
this.goal.push(goal);
|
||||||
|
await this.selectGoal(goal);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
if ("" !== this.results.hiddenField.value) {
|
||||||
});
|
const resultsIds = this.results.hiddenField.value
|
||||||
|
.split(",")
|
||||||
return Promise.resolve();
|
.map((s) => Number.parseInt(s));
|
||||||
|
for (const rid of resultsIds) {
|
||||||
|
let result = this.results.options.find((r) => rid === r.id);
|
||||||
|
if (undefined !== result) {
|
||||||
|
this.result.push(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
async getSocialActionsList() {
|
||||||
|
let actions = await getSocialActions();
|
||||||
|
this.actions.options = actions.toSorted(function (a, b) {
|
||||||
|
if (a.issue.ordering === b.issue.ordering) {
|
||||||
|
if (a.ordering === b.ordering) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (a.ordering < b.ordering) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
formatSocialAction({ text, issue }) {
|
if (a.issue.ordering < b.issue.ordering) {
|
||||||
return text + " (" + issue.text + ")";
|
return -1;
|
||||||
},
|
}
|
||||||
|
|
||||||
/**
|
return 1;
|
||||||
* Select/unselect in Action Multiselect
|
});
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
async selectAction(value) {
|
|
||||||
//console.log('----'); console.log('select action', value.id);
|
|
||||||
let children = this.getChildrensFromParent(value);
|
|
||||||
this.addSelectedElement("actions", children);
|
|
||||||
|
|
||||||
let parentAndChildren = [...[value], ...children];
|
|
||||||
const promises = [];
|
|
||||||
parentAndChildren.forEach((elem) => {
|
|
||||||
promises.push(
|
|
||||||
getGoalByAction(elem.id).then((goals) => {
|
|
||||||
this.addElementInData("goals", goals);
|
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}),
|
},
|
||||||
);
|
|
||||||
promises.push(
|
formatSocialAction({ text, issue }) {
|
||||||
getResultByAction(elem.id).then((results) => {
|
return text + " (" + issue.text + ")";
|
||||||
this.addElementInData("results", results);
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select/unselect in Action Multiselect
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
async selectAction(value) {
|
||||||
|
//console.log('----'); console.log('select action', value.id);
|
||||||
|
let children = this.getChildrensFromParent(value);
|
||||||
|
this.addSelectedElement("actions", children);
|
||||||
|
|
||||||
|
let parentAndChildren = [...[value], ...children];
|
||||||
|
const promises = [];
|
||||||
|
parentAndChildren.forEach((elem) => {
|
||||||
|
promises.push(
|
||||||
|
getGoalByAction(elem.id).then((goals) => {
|
||||||
|
this.addElementInData("goals", goals);
|
||||||
|
return Promise.resolve();
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
promises.push(
|
||||||
|
getResultByAction(elem.id).then((results) => {
|
||||||
|
this.addElementInData("results", results);
|
||||||
|
return Promise.resolve();
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
await Promise.all(promises);
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}),
|
},
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
await Promise.all(promises);
|
unselectAction(value) {
|
||||||
return Promise.resolve();
|
getGoalByAction(value.id).then((goals) => {
|
||||||
|
[this.results.options, this.results.value] =
|
||||||
|
this.removeElementInData("goals", goals);
|
||||||
|
});
|
||||||
|
getResultByAction(value.id).then((results) => {
|
||||||
|
[this.results.options, this.results.value] =
|
||||||
|
this.removeElementInData("results", results);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select/unselect in Goal Multiselect
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
async selectGoal(value) {
|
||||||
|
return getResultByGoal(value.id).then((results) => {
|
||||||
|
this.addElementInData("results", results);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
unselectGoal(value) {
|
||||||
|
getResultByGoal(value.id).then(
|
||||||
|
(results) =>
|
||||||
|
([this.results.options, this.results.value] =
|
||||||
|
this.removeElementInData("results", results)),
|
||||||
|
).catch;
|
||||||
|
},
|
||||||
|
|
||||||
|
// selectResult(value) {
|
||||||
|
//console.log('----'); console.log('select result', value.id);
|
||||||
|
// },
|
||||||
|
|
||||||
|
// unselectResult(value) {
|
||||||
|
//console.log('----'); console.log('unselect result', value.id);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Choose parent action will involve retaining the "children" actions.
|
||||||
|
* @param value
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
getChildrensFromParent(value) {
|
||||||
|
if (null === value.parent) {
|
||||||
|
let excludeParent = this.actions.options.filter(
|
||||||
|
(o) => o.parent !== null,
|
||||||
|
);
|
||||||
|
let children = excludeParent.filter(
|
||||||
|
(o) => o.parent.id === value.id,
|
||||||
|
);
|
||||||
|
//console.log("get childrens", children.map(e => e.id));
|
||||||
|
return children;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add response elements in data target
|
||||||
|
* @param target string -> 'actions', 'goals' or 'results'
|
||||||
|
* @param response array of objects with fetch results
|
||||||
|
*/
|
||||||
|
addElementInData(target, response) {
|
||||||
|
let data = this[target];
|
||||||
|
let dump = [];
|
||||||
|
response.forEach((elem) => {
|
||||||
|
let found = data.options.some((e) => e.id === elem.id);
|
||||||
|
if (!found) {
|
||||||
|
data.options.push(elem);
|
||||||
|
dump.push(elem.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (dump.length > 0) {
|
||||||
|
//console.log('push ' + dump.length + ' elems in', target, dump);
|
||||||
|
}
|
||||||
|
data.options.sort();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove response elements from data target
|
||||||
|
* @param target string -> 'actions', 'goals' or 'results'
|
||||||
|
* @param response array of objects with fetch results
|
||||||
|
* @returns data.<target>.options
|
||||||
|
*/
|
||||||
|
removeElementInData(target, response) {
|
||||||
|
let data = this[target];
|
||||||
|
let dump = [];
|
||||||
|
response.forEach((elem) => {
|
||||||
|
let found = data.options.some((e) => e.id === elem.id);
|
||||||
|
if (found) {
|
||||||
|
data.options = data.options.filter((e) => e.id !== elem.id);
|
||||||
|
dump.push(elem.id);
|
||||||
|
|
||||||
|
this.removeSelectedElement(target, elem);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (dump.length > 0) {
|
||||||
|
//console.log('remove ' + dump.length + ' elems from ' + target + ' options', dump);
|
||||||
|
}
|
||||||
|
return [data.options, data.value];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param target
|
||||||
|
* @param elements
|
||||||
|
*/
|
||||||
|
addSelectedElement(target, elements) {
|
||||||
|
let data = this[target];
|
||||||
|
let dump = [];
|
||||||
|
elements.forEach((elem) => {
|
||||||
|
let selected = data.value.some((e) => e.id === elem.id);
|
||||||
|
if (!selected) {
|
||||||
|
data.value.push(elem);
|
||||||
|
dump.push(elem.id);
|
||||||
|
|
||||||
|
// add in hiddenField
|
||||||
|
this.rebuildHiddenFieldValues(target);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (dump.length > 0) {
|
||||||
|
//console.log('add ' + dump.length + ' selected elems in', target, dump);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove element from selected and from hiddenField
|
||||||
|
* @param target
|
||||||
|
* @param elem
|
||||||
|
*/
|
||||||
|
removeSelectedElement(target, elem) {
|
||||||
|
let data = this[target];
|
||||||
|
let selected = data.value.some((e) => e.id === elem.id);
|
||||||
|
if (selected) {
|
||||||
|
// remove from selected
|
||||||
|
data.value = data.value.filter((e) => e.id !== elem.id);
|
||||||
|
//console.log('remove ' + elem.id + ' from selected ' + target);
|
||||||
|
|
||||||
|
// remove from hiddenField
|
||||||
|
this.rebuildHiddenFieldValues(target);
|
||||||
|
|
||||||
|
// in any cases, remove should be recursive
|
||||||
|
this.unselectToNextField(target, elem);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When unselect Action, it could remove elements in goals multiselect.
|
||||||
|
* In that case, we have to unselect Goal to remove elements in results too.
|
||||||
|
* @param target
|
||||||
|
* @param elem
|
||||||
|
*/
|
||||||
|
unselectToNextField(target, elem) {
|
||||||
|
if (target === "goals") {
|
||||||
|
//console.log('!!!! target is goal: unselect goal', elem.id);
|
||||||
|
this.unselectGoal(elem);
|
||||||
|
//console.log('!!!! done');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rebuild values serie (string) in target HiddenField
|
||||||
|
* @param target
|
||||||
|
*/
|
||||||
|
rebuildHiddenFieldValues(target) {
|
||||||
|
let data = this[target];
|
||||||
|
//console.log('rebuild hiddenFields ' + target + ' values :');
|
||||||
|
data.hiddenField.value = ""; // reset
|
||||||
|
data.value.forEach((elem) => {
|
||||||
|
data.hiddenField.value = this.addIdToValue(
|
||||||
|
data.hiddenField.value,
|
||||||
|
elem.id,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
//console.log(data.hiddenField);
|
||||||
|
},
|
||||||
|
|
||||||
|
addIdToValue(string, id) {
|
||||||
|
let array = string ? string.split(",") : [];
|
||||||
|
array.push(id.toString());
|
||||||
|
let str = array.join();
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
|
||||||
|
transTitle({ title }) {
|
||||||
|
return title.fr; //TODO multilang
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
unselectAction(value) {
|
|
||||||
getGoalByAction(value.id).then((goals) => {
|
|
||||||
[this.results.options, this.results.value] = this.removeElementInData(
|
|
||||||
"goals",
|
|
||||||
goals,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
getResultByAction(value.id).then((results) => {
|
|
||||||
[this.results.options, this.results.value] = this.removeElementInData(
|
|
||||||
"results",
|
|
||||||
results,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Select/unselect in Goal Multiselect
|
|
||||||
* @param value
|
|
||||||
*/
|
|
||||||
async selectGoal(value) {
|
|
||||||
return getResultByGoal(value.id).then((results) => {
|
|
||||||
this.addElementInData("results", results);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
unselectGoal(value) {
|
|
||||||
getResultByGoal(value.id).then(
|
|
||||||
(results) =>
|
|
||||||
([this.results.options, this.results.value] =
|
|
||||||
this.removeElementInData("results", results)),
|
|
||||||
).catch;
|
|
||||||
},
|
|
||||||
|
|
||||||
// selectResult(value) {
|
|
||||||
//console.log('----'); console.log('select result', value.id);
|
|
||||||
// },
|
|
||||||
|
|
||||||
// unselectResult(value) {
|
|
||||||
//console.log('----'); console.log('unselect result', value.id);
|
|
||||||
// },
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Choose parent action will involve retaining the "children" actions.
|
|
||||||
* @param value
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
getChildrensFromParent(value) {
|
|
||||||
if (null === value.parent) {
|
|
||||||
let excludeParent = this.actions.options.filter(
|
|
||||||
(o) => o.parent !== null,
|
|
||||||
);
|
|
||||||
let children = excludeParent.filter((o) => o.parent.id === value.id);
|
|
||||||
//console.log("get childrens", children.map(e => e.id));
|
|
||||||
return children;
|
|
||||||
}
|
|
||||||
return [];
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add response elements in data target
|
|
||||||
* @param target string -> 'actions', 'goals' or 'results'
|
|
||||||
* @param response array of objects with fetch results
|
|
||||||
*/
|
|
||||||
addElementInData(target, response) {
|
|
||||||
let data = this[target];
|
|
||||||
let dump = [];
|
|
||||||
response.forEach((elem) => {
|
|
||||||
let found = data.options.some((e) => e.id === elem.id);
|
|
||||||
if (!found) {
|
|
||||||
data.options.push(elem);
|
|
||||||
dump.push(elem.id);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (dump.length > 0) {
|
|
||||||
//console.log('push ' + dump.length + ' elems in', target, dump);
|
|
||||||
}
|
|
||||||
data.options.sort();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove response elements from data target
|
|
||||||
* @param target string -> 'actions', 'goals' or 'results'
|
|
||||||
* @param response array of objects with fetch results
|
|
||||||
* @returns data.<target>.options
|
|
||||||
*/
|
|
||||||
removeElementInData(target, response) {
|
|
||||||
let data = this[target];
|
|
||||||
let dump = [];
|
|
||||||
response.forEach((elem) => {
|
|
||||||
let found = data.options.some((e) => e.id === elem.id);
|
|
||||||
if (found) {
|
|
||||||
data.options = data.options.filter((e) => e.id !== elem.id);
|
|
||||||
dump.push(elem.id);
|
|
||||||
|
|
||||||
this.removeSelectedElement(target, elem);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (dump.length > 0) {
|
|
||||||
//console.log('remove ' + dump.length + ' elems from ' + target + ' options', dump);
|
|
||||||
}
|
|
||||||
return [data.options, data.value];
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param target
|
|
||||||
* @param elements
|
|
||||||
*/
|
|
||||||
addSelectedElement(target, elements) {
|
|
||||||
let data = this[target];
|
|
||||||
let dump = [];
|
|
||||||
elements.forEach((elem) => {
|
|
||||||
let selected = data.value.some((e) => e.id === elem.id);
|
|
||||||
if (!selected) {
|
|
||||||
data.value.push(elem);
|
|
||||||
dump.push(elem.id);
|
|
||||||
|
|
||||||
// add in hiddenField
|
|
||||||
this.rebuildHiddenFieldValues(target);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (dump.length > 0) {
|
|
||||||
//console.log('add ' + dump.length + ' selected elems in', target, dump);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove element from selected and from hiddenField
|
|
||||||
* @param target
|
|
||||||
* @param elem
|
|
||||||
*/
|
|
||||||
removeSelectedElement(target, elem) {
|
|
||||||
let data = this[target];
|
|
||||||
let selected = data.value.some((e) => e.id === elem.id);
|
|
||||||
if (selected) {
|
|
||||||
// remove from selected
|
|
||||||
data.value = data.value.filter((e) => e.id !== elem.id);
|
|
||||||
//console.log('remove ' + elem.id + ' from selected ' + target);
|
|
||||||
|
|
||||||
// remove from hiddenField
|
|
||||||
this.rebuildHiddenFieldValues(target);
|
|
||||||
|
|
||||||
// in any cases, remove should be recursive
|
|
||||||
this.unselectToNextField(target, elem);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* When unselect Action, it could remove elements in goals multiselect.
|
|
||||||
* In that case, we have to unselect Goal to remove elements in results too.
|
|
||||||
* @param target
|
|
||||||
* @param elem
|
|
||||||
*/
|
|
||||||
unselectToNextField(target, elem) {
|
|
||||||
if (target === "goals") {
|
|
||||||
//console.log('!!!! target is goal: unselect goal', elem.id);
|
|
||||||
this.unselectGoal(elem);
|
|
||||||
//console.log('!!!! done');
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rebuild values serie (string) in target HiddenField
|
|
||||||
* @param target
|
|
||||||
*/
|
|
||||||
rebuildHiddenFieldValues(target) {
|
|
||||||
let data = this[target];
|
|
||||||
//console.log('rebuild hiddenFields ' + target + ' values :');
|
|
||||||
data.hiddenField.value = ""; // reset
|
|
||||||
data.value.forEach((elem) => {
|
|
||||||
data.hiddenField.value = this.addIdToValue(
|
|
||||||
data.hiddenField.value,
|
|
||||||
elem.id,
|
|
||||||
);
|
|
||||||
});
|
|
||||||
//console.log(data.hiddenField);
|
|
||||||
},
|
|
||||||
|
|
||||||
addIdToValue(string, id) {
|
|
||||||
let array = string ? string.split(",") : [];
|
|
||||||
array.push(id.toString());
|
|
||||||
let str = array.join();
|
|
||||||
return str;
|
|
||||||
},
|
|
||||||
|
|
||||||
transTitle({ title }) {
|
|
||||||
return title.fr; //TODO multilang
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,53 +1,53 @@
|
|||||||
<template>
|
<template>
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li
|
<li
|
||||||
v-for="s in steps"
|
v-for="s in steps"
|
||||||
:key="s"
|
:key="s"
|
||||||
class="breadcrumb-item"
|
class="breadcrumb-item"
|
||||||
:class="{ active: step === s }"
|
:class="{ active: step === s }"
|
||||||
>
|
>
|
||||||
{{ $t("household_members_editor.app.steps." + s) }}
|
{{ $t("household_members_editor.app.steps." + s) }}
|
||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
<concerned v-if="step === 'concerned'" />
|
<concerned v-if="step === 'concerned'" />
|
||||||
<household v-if="step === 'household'" @ready-to-go="goToNext" />
|
<household v-if="step === 'household'" @ready-to-go="goToNext" />
|
||||||
<household-address v-if="step === 'household_address'" />
|
<household-address v-if="step === 'household_address'" />
|
||||||
<positioning v-if="step === 'positioning'" />
|
<positioning v-if="step === 'positioning'" />
|
||||||
<dates v-if="step === 'confirm'" />
|
<dates v-if="step === 'confirm'" />
|
||||||
<confirmation v-if="step === 'confirm'" />
|
<confirmation v-if="step === 'confirm'" />
|
||||||
|
|
||||||
<ul class="record_actions sticky-form-buttons">
|
<ul class="record_actions sticky-form-buttons">
|
||||||
<li class="cancel" v-if="step !== 'concerned'">
|
<li class="cancel" v-if="step !== 'concerned'">
|
||||||
<button class="btn btn-cancel" @click="goToPrevious">
|
<button class="btn btn-cancel" @click="goToPrevious">
|
||||||
{{ $t("household_members_editor.app.previous") }}
|
{{ $t("household_members_editor.app.previous") }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li class="cancel" v-else-if="hasReturnPath">
|
<li class="cancel" v-else-if="hasReturnPath">
|
||||||
<button class="btn btn-cancel" @click="goToPrevious">
|
<button class="btn btn-cancel" @click="goToPrevious">
|
||||||
{{ $t("household_members_editor.app.cancel") }}
|
{{ $t("household_members_editor.app.cancel") }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="step !== 'confirm'">
|
<li v-if="step !== 'confirm'">
|
||||||
<button
|
<button
|
||||||
class="btn btn-action"
|
class="btn btn-action"
|
||||||
@click="goToNext"
|
@click="goToNext"
|
||||||
:disabled="!isNextAllowed"
|
:disabled="!isNextAllowed"
|
||||||
>
|
>
|
||||||
{{ $t("household_members_editor.app.next") }} <i
|
{{ $t("household_members_editor.app.next") }} <i
|
||||||
class="fa fa-arrow-right"
|
class="fa fa-arrow-right"
|
||||||
/>
|
/>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li v-else>
|
<li v-else>
|
||||||
<button
|
<button
|
||||||
class="btn btn-save"
|
class="btn btn-save"
|
||||||
@click="confirm"
|
@click="confirm"
|
||||||
:disabled="hasWarnings || !lastStepIsSaveAllowed"
|
:disabled="hasWarnings || !lastStepIsSaveAllowed"
|
||||||
>
|
>
|
||||||
{{ $t("household_members_editor.app.save") }}
|
{{ $t("household_members_editor.app.save") }}
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -60,123 +60,123 @@ import Confirmation from "./components/Confirmation.vue";
|
|||||||
import Positioning from "./components/Positioning";
|
import Positioning from "./components/Positioning";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
components: {
|
components: {
|
||||||
Positioning,
|
Positioning,
|
||||||
Concerned,
|
Concerned,
|
||||||
Household,
|
Household,
|
||||||
HouseholdAddress,
|
HouseholdAddress,
|
||||||
Dates,
|
Dates,
|
||||||
Confirmation,
|
Confirmation,
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
step: "concerned",
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState({
|
|
||||||
hasWarnings: (state) =>
|
|
||||||
state.warnings.length > 0 || state.errors.length > 0,
|
|
||||||
}),
|
|
||||||
steps() {
|
|
||||||
let s = ["concerned", "household"];
|
|
||||||
|
|
||||||
if (this.$store.getters.isHouseholdNew) {
|
|
||||||
s.push("household_address");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.$store.getters.isModeLeave) {
|
|
||||||
s.push("positioning");
|
|
||||||
}
|
|
||||||
|
|
||||||
s.push("confirm");
|
|
||||||
|
|
||||||
return s;
|
|
||||||
},
|
},
|
||||||
hasReturnPath() {
|
data() {
|
||||||
let params = new URLSearchParams(window.location.search);
|
return {
|
||||||
|
step: "concerned",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
hasWarnings: (state) =>
|
||||||
|
state.warnings.length > 0 || state.errors.length > 0,
|
||||||
|
}),
|
||||||
|
steps() {
|
||||||
|
let s = ["concerned", "household"];
|
||||||
|
|
||||||
return params.has("returnPath");
|
if (this.$store.getters.isHouseholdNew) {
|
||||||
},
|
s.push("household_address");
|
||||||
// return true if the next step is allowed
|
}
|
||||||
isNextAllowed() {
|
|
||||||
switch (this.$data.step) {
|
|
||||||
case "concerned":
|
|
||||||
return this.$store.state.concerned.length > 0;
|
|
||||||
case "household":
|
|
||||||
return this.$store.state.mode !== null;
|
|
||||||
case "household_address":
|
|
||||||
return (
|
|
||||||
this.$store.getters.hasHouseholdAddress ||
|
|
||||||
this.$store.getters.isHouseholdForceNoAddress
|
|
||||||
);
|
|
||||||
case "positioning":
|
|
||||||
return (
|
|
||||||
this.$store.getters.hasHouseholdOrLeave &&
|
|
||||||
this.$store.getters.hasPersonsWellPositionnated
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
if (!this.$store.getters.isModeLeave) {
|
||||||
},
|
s.push("positioning");
|
||||||
lastStepIsSaveAllowed() {
|
}
|
||||||
let r =
|
|
||||||
!this.$store.getters.isHouseholdNew ||
|
|
||||||
(this.$store.state.numberOfChildren !== null &&
|
|
||||||
this.$store.state.householdCompositionType !== null);
|
|
||||||
console.log("is saved allowed ?", r);
|
|
||||||
|
|
||||||
return r;
|
s.push("confirm");
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
goToNext() {
|
|
||||||
console.log("go to next");
|
|
||||||
switch (this.$data.step) {
|
|
||||||
case "concerned":
|
|
||||||
this.$data.step = "household";
|
|
||||||
break;
|
|
||||||
case "household":
|
|
||||||
if (this.$store.getters.isHouseholdNew) {
|
|
||||||
this.$data.step = "household_address";
|
|
||||||
break;
|
|
||||||
} else if (this.$store.getters.isModeLeave) {
|
|
||||||
this.$data.step = "confirm";
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
this.$data.step = "positioning";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "household_address":
|
|
||||||
this.$data.step = "positioning";
|
|
||||||
break;
|
|
||||||
case "positioning":
|
|
||||||
this.$data.step = "confirm";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
goToPrevious() {
|
|
||||||
if (this.$data.step === "concerned") {
|
|
||||||
let params = new URLSearchParams(window.location.search);
|
|
||||||
if (params.has("returnPath")) {
|
|
||||||
window.location.replace(params.get("returnPath"));
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let s = this.steps;
|
return s;
|
||||||
let index = s.indexOf(this.$data.step);
|
},
|
||||||
if (s[index - 1] === undefined) {
|
hasReturnPath() {
|
||||||
throw Error("step not found");
|
let params = new URLSearchParams(window.location.search);
|
||||||
}
|
|
||||||
|
|
||||||
this.$data.step = s[index - 1];
|
return params.has("returnPath");
|
||||||
|
},
|
||||||
|
// return true if the next step is allowed
|
||||||
|
isNextAllowed() {
|
||||||
|
switch (this.$data.step) {
|
||||||
|
case "concerned":
|
||||||
|
return this.$store.state.concerned.length > 0;
|
||||||
|
case "household":
|
||||||
|
return this.$store.state.mode !== null;
|
||||||
|
case "household_address":
|
||||||
|
return (
|
||||||
|
this.$store.getters.hasHouseholdAddress ||
|
||||||
|
this.$store.getters.isHouseholdForceNoAddress
|
||||||
|
);
|
||||||
|
case "positioning":
|
||||||
|
return (
|
||||||
|
this.$store.getters.hasHouseholdOrLeave &&
|
||||||
|
this.$store.getters.hasPersonsWellPositionnated
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
lastStepIsSaveAllowed() {
|
||||||
|
let r =
|
||||||
|
!this.$store.getters.isHouseholdNew ||
|
||||||
|
(this.$store.state.numberOfChildren !== null &&
|
||||||
|
this.$store.state.householdCompositionType !== null);
|
||||||
|
console.log("is saved allowed ?", r);
|
||||||
|
|
||||||
|
return r;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
confirm() {
|
methods: {
|
||||||
this.$store.dispatch("confirm");
|
goToNext() {
|
||||||
|
console.log("go to next");
|
||||||
|
switch (this.$data.step) {
|
||||||
|
case "concerned":
|
||||||
|
this.$data.step = "household";
|
||||||
|
break;
|
||||||
|
case "household":
|
||||||
|
if (this.$store.getters.isHouseholdNew) {
|
||||||
|
this.$data.step = "household_address";
|
||||||
|
break;
|
||||||
|
} else if (this.$store.getters.isModeLeave) {
|
||||||
|
this.$data.step = "confirm";
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
this.$data.step = "positioning";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "household_address":
|
||||||
|
this.$data.step = "positioning";
|
||||||
|
break;
|
||||||
|
case "positioning":
|
||||||
|
this.$data.step = "confirm";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
goToPrevious() {
|
||||||
|
if (this.$data.step === "concerned") {
|
||||||
|
let params = new URLSearchParams(window.location.search);
|
||||||
|
if (params.has("returnPath")) {
|
||||||
|
window.location.replace(params.get("returnPath"));
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let s = this.steps;
|
||||||
|
let index = s.indexOf(this.$data.step);
|
||||||
|
if (s[index - 1] === undefined) {
|
||||||
|
throw Error("step not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$data.step = s[index - 1];
|
||||||
|
},
|
||||||
|
confirm() {
|
||||||
|
this.$store.dispatch("confirm");
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,74 +1,88 @@
|
|||||||
<template>
|
<template>
|
||||||
<h2 class="mt-4">
|
<h2 class="mt-4">
|
||||||
{{ $t("household_members_editor.concerned.title") }}
|
{{ $t("household_members_editor.concerned.title") }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div v-if="noPerson">
|
<div v-if="noPerson">
|
||||||
<div class="alert alert-info">
|
<div class="alert alert-info">
|
||||||
{{ $t("household_members_editor.concerned.add_at_least_onePerson") }}
|
{{
|
||||||
|
$t("household_members_editor.concerned.add_at_least_onePerson")
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div v-else>
|
||||||
<div v-else>
|
<p>
|
||||||
<p>
|
{{
|
||||||
{{
|
$t("household_members_editor.concerned.persons_will_be_moved")
|
||||||
$t("household_members_editor.concerned.persons_will_be_moved")
|
}} :
|
||||||
}} :
|
</p>
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul class="list-suggest remove-items inline">
|
<ul class="list-suggest remove-items inline">
|
||||||
<li v-for="c in concerned" :key="c.person.id" @click="removeConcerned(c)">
|
<li
|
||||||
<span><person-text :person="c.person" /></span>
|
v-for="c in concerned"
|
||||||
</li>
|
:key="c.person.id"
|
||||||
</ul>
|
@click="removeConcerned(c)"
|
||||||
|
>
|
||||||
|
<span><person-text :person="c.person" /></span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="alert alert-info"
|
class="alert alert-info"
|
||||||
v-if="concernedPersonsWithHouseholds.length > 0"
|
v-if="concernedPersonsWithHouseholds.length > 0"
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
{{ $t("household_members_editor.concerned.persons_with_household") }}
|
{{
|
||||||
</p>
|
$t(
|
||||||
<ul v-for="c in concernedPersonsWithHouseholds" :key="c.person.id">
|
"household_members_editor.concerned.persons_with_household",
|
||||||
<li>
|
)
|
||||||
{{ c.person.text }}
|
}}
|
||||||
{{
|
</p>
|
||||||
$t(
|
<ul v-for="c in concernedPersonsWithHouseholds" :key="c.person.id">
|
||||||
"household_members_editor.concerned.already_belongs_to_household",
|
<li>
|
||||||
)
|
{{ c.person.text }}
|
||||||
}}
|
{{
|
||||||
<a
|
$t(
|
||||||
target="_blank"
|
"household_members_editor.concerned.already_belongs_to_household",
|
||||||
:href="this.makeHouseholdLink(c.person.current_household_id)"
|
)
|
||||||
>{{ c.person.current_household_id }}</a
|
}}
|
||||||
>.
|
<a
|
||||||
|
target="_blank"
|
||||||
|
:href="
|
||||||
|
this.makeHouseholdLink(
|
||||||
|
c.person.current_household_id,
|
||||||
|
)
|
||||||
|
"
|
||||||
|
>{{ c.person.current_household_id }}</a
|
||||||
|
>.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li class="add-persons">
|
||||||
|
<add-persons
|
||||||
|
button-title="household_members_editor.concerned.add_persons"
|
||||||
|
modal-title="household_members_editor.concerned.search"
|
||||||
|
:key="addPersons.key"
|
||||||
|
:options="addPersons.options"
|
||||||
|
@add-new-persons="addNewPersons"
|
||||||
|
ref="addPersons"
|
||||||
|
>
|
||||||
|
<!-- to cast child method -->
|
||||||
|
</add-persons>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li class="add-persons">
|
|
||||||
<add-persons
|
|
||||||
button-title="household_members_editor.concerned.add_persons"
|
|
||||||
modal-title="household_members_editor.concerned.search"
|
|
||||||
:key="addPersons.key"
|
|
||||||
:options="addPersons.options"
|
|
||||||
@add-new-persons="addNewPersons"
|
|
||||||
ref="addPersons"
|
|
||||||
>
|
|
||||||
<!-- to cast child method -->
|
|
||||||
</add-persons>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.move_to {
|
.move_to {
|
||||||
.move_hint {
|
.move_hint {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 0.4rem 0.5rem;
|
padding: 0.4rem 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@@ -78,61 +92,62 @@ import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons.vue";
|
|||||||
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
import PersonText from "ChillPersonAssets/vuejs/_components/Entity/PersonText.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Concerned",
|
name: "Concerned",
|
||||||
components: {
|
components: {
|
||||||
AddPersons,
|
AddPersons,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(["concerned", "household"]),
|
|
||||||
...mapGetters(["persons"]),
|
|
||||||
noPerson() {
|
|
||||||
return this.$store.getters.persons.length === 0;
|
|
||||||
},
|
},
|
||||||
concernedPersonsWithHouseholds() {
|
computed: {
|
||||||
if (this.$store.state.household) {
|
...mapState(["concerned", "household"]),
|
||||||
return this.$store.state.concerned.filter(
|
...mapGetters(["persons"]),
|
||||||
(c) =>
|
noPerson() {
|
||||||
c.person.current_household_id !== null &&
|
return this.$store.getters.persons.length === 0;
|
||||||
c.person.current_household_id !== this.$store.state.household.id,
|
},
|
||||||
);
|
concernedPersonsWithHouseholds() {
|
||||||
} else {
|
if (this.$store.state.household) {
|
||||||
return [];
|
return this.$store.state.concerned.filter(
|
||||||
}
|
(c) =>
|
||||||
},
|
c.person.current_household_id !== null &&
|
||||||
},
|
c.person.current_household_id !==
|
||||||
data() {
|
this.$store.state.household.id,
|
||||||
return {
|
);
|
||||||
addPersons: {
|
} else {
|
||||||
key: "household_members_editor_concerned",
|
return [];
|
||||||
options: {
|
}
|
||||||
type: ["person"],
|
|
||||||
priority: null,
|
|
||||||
uniq: false,
|
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
addNewPersons({ selected, modal }) {
|
|
||||||
selected.forEach(function (item) {
|
|
||||||
this.$store.dispatch("addConcerned", item.result);
|
|
||||||
}, this);
|
|
||||||
this.$refs.addPersons.resetSearch(); // to cast child method
|
|
||||||
modal.showModal = false;
|
|
||||||
},
|
},
|
||||||
removeConcerned(concerned) {
|
data() {
|
||||||
console.log("removedconcerned", concerned);
|
return {
|
||||||
|
addPersons: {
|
||||||
|
key: "household_members_editor_concerned",
|
||||||
|
options: {
|
||||||
|
type: ["person"],
|
||||||
|
priority: null,
|
||||||
|
uniq: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
addNewPersons({ selected, modal }) {
|
||||||
|
selected.forEach(function (item) {
|
||||||
|
this.$store.dispatch("addConcerned", item.result);
|
||||||
|
}, this);
|
||||||
|
this.$refs.addPersons.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
},
|
||||||
|
removeConcerned(concerned) {
|
||||||
|
console.log("removedconcerned", concerned);
|
||||||
|
|
||||||
if (!concerned.allowRemove) {
|
if (!concerned.allowRemove) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$store.dispatch("removePerson", concerned.person);
|
this.$store.dispatch("removePerson", concerned.person);
|
||||||
|
},
|
||||||
|
makeHouseholdLink(id) {
|
||||||
|
return `/fr/person/household/${id}/summary`;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
makeHouseholdLink(id) {
|
|
||||||
return `/fr/person/household/${id}/summary`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="hasWarning" class="alert alert-warning">
|
<div v-if="hasWarning" class="alert alert-warning">
|
||||||
{{ $t("household_members_editor.confirmation.there_are_warnings") }}
|
{{ $t("household_members_editor.confirmation.there_are_warnings") }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p v-if="hasWarning">
|
<p v-if="hasWarning">
|
||||||
{{ $t("household_members_editor.confirmation.check_those_items") }}
|
{{ $t("household_members_editor.confirmation.check_those_items") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(msg, i) in warnings" class="warning" :key="i">
|
<li v-for="(msg, i) in warnings" class="warning" :key="i">
|
||||||
{{ $t(msg.m, msg.a) }}
|
{{ $t(msg.m, msg.a) }}
|
||||||
</li>
|
</li>
|
||||||
<li v-for="(msg, i) in errors" class="error" :key="i">
|
<li v-for="(msg, i) in errors" class="error" :key="i">
|
||||||
{{ msg }}
|
{{ msg }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
@@ -23,14 +23,14 @@
|
|||||||
import { mapState } from "vuex";
|
import { mapState } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Confirmation",
|
name: "Confirmation",
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
hasWarnings: (state) =>
|
hasWarnings: (state) =>
|
||||||
state.warnings.length > 0 || state.errors.length > 0,
|
state.warnings.length > 0 || state.errors.length > 0,
|
||||||
warnings: (state) => state.warnings,
|
warnings: (state) => state.warnings,
|
||||||
errors: (state) => state.errors,
|
errors: (state) => state.errors,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,35 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex-table mb-5" v-if="hasHousehold">
|
<div class="flex-table mb-5" v-if="hasHousehold">
|
||||||
<div class="item-bloc">
|
<div class="item-bloc">
|
||||||
<household-render-box :household="fakeHouseholdWithConcerned" />
|
<household-render-box :household="fakeHouseholdWithConcerned" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-table" v-if="isModeLeave">
|
<div class="flex-table" v-if="isModeLeave">
|
||||||
<div class="item-bloc">
|
<div class="item-bloc">
|
||||||
<section>
|
<section>
|
||||||
<div class="item-row">
|
<div class="item-row">
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
<div class="h4">
|
<div class="h4">
|
||||||
<span class="fa-stack fa-lg">
|
<span class="fa-stack fa-lg">
|
||||||
<i class="fa fa-home fa-stack-1x" />
|
<i class="fa fa-home fa-stack-1x" />
|
||||||
<i class="fa fa-ban fa-stack-2x text-danger" />
|
<i class="fa fa-ban fa-stack-2x text-danger" />
|
||||||
</span>
|
</span>
|
||||||
{{
|
{{
|
||||||
$t("household_members_editor.household.leave_without_household")
|
$t(
|
||||||
}}
|
"household_members_editor.household.leave_without_household",
|
||||||
</div>
|
)
|
||||||
</div>
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-row">
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"household_members_editor.household.will_leave_any_household_explanation",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<div class="item-row">
|
|
||||||
{{
|
|
||||||
$t(
|
|
||||||
"household_members_editor.household.will_leave_any_household_explanation",
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -37,17 +39,17 @@ import { mapGetters } from "vuex";
|
|||||||
import HouseholdRenderBox from "ChillPersonAssets/vuejs/_components/Entity/HouseholdRenderBox.vue";
|
import HouseholdRenderBox from "ChillPersonAssets/vuejs/_components/Entity/HouseholdRenderBox.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "CurrentHousehold",
|
name: "CurrentHousehold",
|
||||||
components: {
|
components: {
|
||||||
HouseholdRenderBox,
|
HouseholdRenderBox,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
"hasHousehold",
|
"hasHousehold",
|
||||||
"fakeHouseholdWithConcerned",
|
"fakeHouseholdWithConcerned",
|
||||||
"isModeLeave",
|
"isModeLeave",
|
||||||
]),
|
]),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,83 +1,83 @@
|
|||||||
<template>
|
<template>
|
||||||
<current-household />
|
<current-household />
|
||||||
|
|
||||||
<h2>{{ $t("household_members_editor.dates.dates_title") }}</h2>
|
<h2>{{ $t("household_members_editor.dates.dates_title") }}</h2>
|
||||||
|
|
||||||
<div class="mb-3 row">
|
|
||||||
<label for="start_date" class="col-form-label col-sm-4 required">
|
|
||||||
{{ $t("household_members_editor.dates.start_date") }}
|
|
||||||
</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input type="date" v-model="startDate" class="form-control" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div v-if="this.isHouseholdNew">
|
|
||||||
<h2>{{ $t("household_members_editor.composition.composition") }}</h2>
|
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label class="col-form-label col-sm-4 required">{{
|
<label for="start_date" class="col-form-label col-sm-4 required">
|
||||||
$t("household_members_editor.composition.household_composition")
|
{{ $t("household_members_editor.dates.start_date") }}
|
||||||
}}</label>
|
</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<select
|
<input type="date" v-model="startDate" class="form-control" />
|
||||||
v-model="householdCompositionType"
|
</div>
|
||||||
class="form-select form-control"
|
|
||||||
>
|
|
||||||
<option
|
|
||||||
v-for="t in householdCompositionTypes"
|
|
||||||
:key="t.id"
|
|
||||||
:value="t.id"
|
|
||||||
>
|
|
||||||
{{ localizeString(t.label) }}
|
|
||||||
</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="mb-3 row">
|
|
||||||
<label class="col-form-label col-sm-4 required">{{
|
<div v-if="this.isHouseholdNew">
|
||||||
$t("household_members_editor.composition.number_of_children")
|
<h2>{{ $t("household_members_editor.composition.composition") }}</h2>
|
||||||
}}</label>
|
<div class="mb-3 row">
|
||||||
<div class="col-sm-8">
|
<label class="col-form-label col-sm-4 required">{{
|
||||||
<input
|
$t("household_members_editor.composition.household_composition")
|
||||||
type="number"
|
}}</label>
|
||||||
v-model="numberOfChildren"
|
<div class="col-sm-8">
|
||||||
min="0"
|
<select
|
||||||
max="30"
|
v-model="householdCompositionType"
|
||||||
class="form-control"
|
class="form-select form-control"
|
||||||
/>
|
>
|
||||||
</div>
|
<option
|
||||||
|
v-for="t in householdCompositionTypes"
|
||||||
|
:key="t.id"
|
||||||
|
:value="t.id"
|
||||||
|
>
|
||||||
|
{{ localizeString(t.label) }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label class="col-form-label col-sm-4 required">{{
|
||||||
|
$t("household_members_editor.composition.number_of_children")
|
||||||
|
}}</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
v-model="numberOfChildren"
|
||||||
|
min="0"
|
||||||
|
max="30"
|
||||||
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="this.displayDependents" class="mb-3 row">
|
||||||
|
<label class="col-form-label col-sm-4 required">{{
|
||||||
|
$t("household_members_editor.composition.number_of_dependents")
|
||||||
|
}}</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
v-model="numberOfDependents"
|
||||||
|
min="0"
|
||||||
|
max="30"
|
||||||
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-if="this.displayDependents" class="mb-3 row">
|
||||||
|
<label class="col-form-label col-sm-4 required">{{
|
||||||
|
$t(
|
||||||
|
"household_members_editor.composition.number_of_dependents_with_disabilities",
|
||||||
|
)
|
||||||
|
}}</label>
|
||||||
|
<div class="col-sm-8">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
v-model="numberOfDependentsWithDisabilities"
|
||||||
|
min="0"
|
||||||
|
max="30"
|
||||||
|
class="form-control"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="this.displayDependents" class="mb-3 row">
|
|
||||||
<label class="col-form-label col-sm-4 required">{{
|
|
||||||
$t("household_members_editor.composition.number_of_dependents")
|
|
||||||
}}</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input
|
|
||||||
type="number"
|
|
||||||
v-model="numberOfDependents"
|
|
||||||
min="0"
|
|
||||||
max="30"
|
|
||||||
class="form-control"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="this.displayDependents" class="mb-3 row">
|
|
||||||
<label class="col-form-label col-sm-4 required">{{
|
|
||||||
$t(
|
|
||||||
"household_members_editor.composition.number_of_dependents_with_disabilities",
|
|
||||||
)
|
|
||||||
}}</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input
|
|
||||||
type="number"
|
|
||||||
v-model="numberOfDependentsWithDisabilities"
|
|
||||||
min="0"
|
|
||||||
max="30"
|
|
||||||
class="form-control"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -86,71 +86,74 @@ import { mapGetters, mapState } from "vuex";
|
|||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Dates",
|
name: "Dates",
|
||||||
methods: { localizeString },
|
methods: { localizeString },
|
||||||
components: {
|
components: {
|
||||||
CurrentHousehold,
|
CurrentHousehold,
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(["householdCompositionTypes"]),
|
|
||||||
...mapGetters(["isHouseholdNew"]),
|
|
||||||
displayDependents: {
|
|
||||||
get() {
|
|
||||||
return window.household_members_editor_data.displayDependents;
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
householdCompositionType: {
|
computed: {
|
||||||
get() {
|
...mapState(["householdCompositionTypes"]),
|
||||||
if (this.$store.state.householdCompositionType !== null) {
|
...mapGetters(["isHouseholdNew"]),
|
||||||
return this.$store.state.householdCompositionType.id;
|
displayDependents: {
|
||||||
}
|
get() {
|
||||||
return null;
|
return window.household_members_editor_data.displayDependents;
|
||||||
},
|
},
|
||||||
set(value) {
|
},
|
||||||
this.$store.dispatch("setHouseholdCompositionType", value);
|
householdCompositionType: {
|
||||||
},
|
get() {
|
||||||
},
|
if (this.$store.state.householdCompositionType !== null) {
|
||||||
numberOfChildren: {
|
return this.$store.state.householdCompositionType.id;
|
||||||
get() {
|
}
|
||||||
return this.$store.state.numberOfChildren;
|
return null;
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.commit("setNumberOfChildren", value);
|
this.$store.dispatch("setHouseholdCompositionType", value);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
numberOfDependents: {
|
numberOfChildren: {
|
||||||
get() {
|
get() {
|
||||||
return this.$store.state.numberOfDependents;
|
return this.$store.state.numberOfChildren;
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.commit("setNumberOfDependents", value);
|
this.$store.commit("setNumberOfChildren", value);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
numberOfDependentsWithDisabilities: {
|
numberOfDependents: {
|
||||||
get() {
|
get() {
|
||||||
return this.$store.state.numberOfDependentsWithDisabilities;
|
return this.$store.state.numberOfDependents;
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
this.$store.commit("setNumberOfDependentsWithDisabilities", value);
|
this.$store.commit("setNumberOfDependents", value);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
startDate: {
|
numberOfDependentsWithDisabilities: {
|
||||||
get() {
|
get() {
|
||||||
return this.$store.state.startDate;
|
return this.$store.state.numberOfDependentsWithDisabilities;
|
||||||
// return [
|
},
|
||||||
// this.$store.state.startDate.getFullYear(),
|
set(value) {
|
||||||
// (this.$store.state.startDate.getMonth() + 1).toString().padStart(2, '0'),
|
this.$store.commit(
|
||||||
// this.$store.state.startDate.getDate().toString().padStart(2, '0')
|
"setNumberOfDependentsWithDisabilities",
|
||||||
// ].join('-');
|
value,
|
||||||
},
|
);
|
||||||
set(value) {
|
},
|
||||||
// let
|
},
|
||||||
// [year, month, day] = value.split('-'),
|
startDate: {
|
||||||
// dValue = new Date(year, month-1, day);
|
get() {
|
||||||
|
return this.$store.state.startDate;
|
||||||
|
// return [
|
||||||
|
// this.$store.state.startDate.getFullYear(),
|
||||||
|
// (this.$store.state.startDate.getMonth() + 1).toString().padStart(2, '0'),
|
||||||
|
// this.$store.state.startDate.getDate().toString().padStart(2, '0')
|
||||||
|
// ].join('-');
|
||||||
|
},
|
||||||
|
set(value) {
|
||||||
|
// let
|
||||||
|
// [year, month, day] = value.split('-'),
|
||||||
|
// dValue = new Date(year, month-1, day);
|
||||||
|
|
||||||
this.$store.dispatch("setStartDate", value);
|
this.$store.dispatch("setStartDate", value);
|
||||||
},
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,116 +1,130 @@
|
|||||||
<template>
|
<template>
|
||||||
<h2 class="mt-4">
|
<h2 class="mt-4">
|
||||||
{{ $t("household_members_editor.household_part") }}
|
{{ $t("household_members_editor.household_part") }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div class="alert alert-info" v-if="!hasHousehold">
|
<div class="alert alert-info" v-if="!hasHousehold">
|
||||||
{{ $t("household_members_editor.household.no_household_choose_one") }}
|
{{ $t("household_members_editor.household.no_household_choose_one") }}
|
||||||
</div>
|
|
||||||
<template v-else>
|
|
||||||
<current-household />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<div v-if="hasHouseholdSuggestion" class="householdSuggestions my-5">
|
|
||||||
<h4 class="mb-3">
|
|
||||||
{{ $t("household_members_editor.household.household_suggested") }}
|
|
||||||
</h4>
|
|
||||||
<p>
|
|
||||||
{{
|
|
||||||
$t("household_members_editor.household.household_suggested_explanation")
|
|
||||||
}}
|
|
||||||
</p>
|
|
||||||
<div class="accordion" id="householdSuggestions">
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header" id="heading_household_suggestions">
|
|
||||||
<button
|
|
||||||
v-if="!showHouseholdSuggestion"
|
|
||||||
class="accordion-button collapsed"
|
|
||||||
type="button"
|
|
||||||
data-bs-toggle="collapse"
|
|
||||||
aria-expanded="false"
|
|
||||||
@click="toggleHouseholdSuggestion"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
$tc(
|
|
||||||
"household_members_editor.show_household_suggestion",
|
|
||||||
countHouseholdSuggestion,
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
v-if="showHouseholdSuggestion"
|
|
||||||
class="accordion-button"
|
|
||||||
type="button"
|
|
||||||
data-bs-toggle="collapse"
|
|
||||||
aria-expanded="true"
|
|
||||||
@click="toggleHouseholdSuggestion"
|
|
||||||
>
|
|
||||||
{{ $t("household_members_editor.hide_household_suggestion") }}
|
|
||||||
</button>
|
|
||||||
<!-- disabled bootstrap behaviour: data-bs-target="#collapse_household_suggestions" aria-controls="collapse_household_suggestions" -->
|
|
||||||
</h2>
|
|
||||||
<div
|
|
||||||
class="accordion-collapse"
|
|
||||||
id="collapse_household_suggestions"
|
|
||||||
aria-labelledby="heading_household_suggestions"
|
|
||||||
data-bs-parent="#householdSuggestions"
|
|
||||||
>
|
|
||||||
<div v-if="showHouseholdSuggestion">
|
|
||||||
<div class="flex-table householdSuggestionList">
|
|
||||||
<div
|
|
||||||
v-for="(s, i) in getSuggestions"
|
|
||||||
class="item-bloc"
|
|
||||||
:key="`householdSuggestions-${i}`"
|
|
||||||
>
|
|
||||||
<household-render-box :household="s.household" />
|
|
||||||
<ul class="record_actions">
|
|
||||||
<li>
|
|
||||||
<button
|
|
||||||
class="btn btn-sm btn-choose"
|
|
||||||
@click="selectHousehold(s.household)"
|
|
||||||
>
|
|
||||||
{{ $t("household_members_editor.select_household") }}
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<template v-else>
|
||||||
|
<current-household />
|
||||||
|
</template>
|
||||||
|
|
||||||
<ul class="record_actions">
|
<div v-if="hasHouseholdSuggestion" class="householdSuggestions my-5">
|
||||||
<li v-if="hasHousehold">
|
<h4 class="mb-3">
|
||||||
<button @click="resetMode" class="btn btn-sm btn-misc">
|
{{ $t("household_members_editor.household.household_suggested") }}
|
||||||
{{ $t("household_members_editor.household.reset_mode") }}
|
</h4>
|
||||||
</button>
|
<p>
|
||||||
</li>
|
{{
|
||||||
<li v-if="!hasHousehold" class="add-persons">
|
$t(
|
||||||
<add-persons
|
"household_members_editor.household.household_suggested_explanation",
|
||||||
modal-title="Chercher un ménage existant"
|
)
|
||||||
button-title="Chercher un ménage existant"
|
}}
|
||||||
:key="addPersons.key"
|
</p>
|
||||||
:options="addPersons.options"
|
<div class="accordion" id="householdSuggestions">
|
||||||
@add-new-persons="pickHouseholdFound"
|
<div class="accordion-item">
|
||||||
ref="pickHousehold"
|
<h2 class="accordion-header" id="heading_household_suggestions">
|
||||||
>
|
<button
|
||||||
<!-- to cast child method -->
|
v-if="!showHouseholdSuggestion"
|
||||||
</add-persons>
|
class="accordion-button collapsed"
|
||||||
</li>
|
type="button"
|
||||||
<li v-if="!hasHousehold">
|
data-bs-toggle="collapse"
|
||||||
<button @click="setModeNew" class="btn btn-sm btn-create">
|
aria-expanded="false"
|
||||||
{{ $t("household_members_editor.household.create_household") }}
|
@click="toggleHouseholdSuggestion"
|
||||||
</button>
|
>
|
||||||
</li>
|
{{
|
||||||
<li v-if="isModeLeaveAllowed && !hasHousehold">
|
$tc(
|
||||||
<button @click="setModeLeave" class="btn btn-sm btn-misc">
|
"household_members_editor.show_household_suggestion",
|
||||||
<i class="fa fa-sign-out" />
|
countHouseholdSuggestion,
|
||||||
{{ $t("household_members_editor.household.leave") }}
|
)
|
||||||
</button>
|
}}
|
||||||
</li>
|
</button>
|
||||||
</ul>
|
<button
|
||||||
|
v-if="showHouseholdSuggestion"
|
||||||
|
class="accordion-button"
|
||||||
|
type="button"
|
||||||
|
data-bs-toggle="collapse"
|
||||||
|
aria-expanded="true"
|
||||||
|
@click="toggleHouseholdSuggestion"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"household_members_editor.hide_household_suggestion",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</button>
|
||||||
|
<!-- disabled bootstrap behaviour: data-bs-target="#collapse_household_suggestions" aria-controls="collapse_household_suggestions" -->
|
||||||
|
</h2>
|
||||||
|
<div
|
||||||
|
class="accordion-collapse"
|
||||||
|
id="collapse_household_suggestions"
|
||||||
|
aria-labelledby="heading_household_suggestions"
|
||||||
|
data-bs-parent="#householdSuggestions"
|
||||||
|
>
|
||||||
|
<div v-if="showHouseholdSuggestion">
|
||||||
|
<div class="flex-table householdSuggestionList">
|
||||||
|
<div
|
||||||
|
v-for="(s, i) in getSuggestions"
|
||||||
|
class="item-bloc"
|
||||||
|
:key="`householdSuggestions-${i}`"
|
||||||
|
>
|
||||||
|
<household-render-box
|
||||||
|
:household="s.household"
|
||||||
|
/>
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li>
|
||||||
|
<button
|
||||||
|
class="btn btn-sm btn-choose"
|
||||||
|
@click="
|
||||||
|
selectHousehold(s.household)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
"household_members_editor.select_household",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ul class="record_actions">
|
||||||
|
<li v-if="hasHousehold">
|
||||||
|
<button @click="resetMode" class="btn btn-sm btn-misc">
|
||||||
|
{{ $t("household_members_editor.household.reset_mode") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
<li v-if="!hasHousehold" class="add-persons">
|
||||||
|
<add-persons
|
||||||
|
modal-title="Chercher un ménage existant"
|
||||||
|
button-title="Chercher un ménage existant"
|
||||||
|
:key="addPersons.key"
|
||||||
|
:options="addPersons.options"
|
||||||
|
@add-new-persons="pickHouseholdFound"
|
||||||
|
ref="pickHousehold"
|
||||||
|
>
|
||||||
|
<!-- to cast child method -->
|
||||||
|
</add-persons>
|
||||||
|
</li>
|
||||||
|
<li v-if="!hasHousehold">
|
||||||
|
<button @click="setModeNew" class="btn btn-sm btn-create">
|
||||||
|
{{ $t("household_members_editor.household.create_household") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
<li v-if="isModeLeaveAllowed && !hasHousehold">
|
||||||
|
<button @click="setModeLeave" class="btn btn-sm btn-misc">
|
||||||
|
<i class="fa fa-sign-out" />
|
||||||
|
{{ $t("household_members_editor.household.leave") }}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -120,154 +134,156 @@ import CurrentHousehold from "./CurrentHousehold";
|
|||||||
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons";
|
import AddPersons from "ChillPersonAssets/vuejs/_components/AddPersons";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Household",
|
name: "Household",
|
||||||
components: {
|
components: {
|
||||||
AddPersons,
|
AddPersons,
|
||||||
CurrentHousehold,
|
CurrentHousehold,
|
||||||
HouseholdRenderBox,
|
HouseholdRenderBox,
|
||||||
},
|
},
|
||||||
emits: ["readyToGo"],
|
emits: ["readyToGo"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addPersons: {
|
addPersons: {
|
||||||
key: "household_find",
|
key: "household_find",
|
||||||
options: {
|
options: {
|
||||||
type: ["household"],
|
type: ["household"],
|
||||||
priority: null,
|
priority: null,
|
||||||
uniq: true,
|
uniq: true,
|
||||||
button: {
|
button: {
|
||||||
size: "btn-sm",
|
size: "btn-sm",
|
||||||
type: "btn-search",
|
type: "btn-search",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
addAddress: {
|
|
||||||
key: "household_new",
|
|
||||||
options: {
|
|
||||||
useDate: {
|
|
||||||
validFrom: false,
|
|
||||||
validTo: false,
|
|
||||||
},
|
|
||||||
onlyButton: true,
|
|
||||||
button: {
|
|
||||||
text: {
|
|
||||||
create: "household_members_editor.household.set_address",
|
|
||||||
edit: "household_members_editor.household.update_address",
|
|
||||||
},
|
},
|
||||||
},
|
addAddress: {
|
||||||
title: {
|
key: "household_new",
|
||||||
create: "household_members_editor.household.create_new_address",
|
options: {
|
||||||
edit: "household_members_editor.household.update_address_title",
|
useDate: {
|
||||||
},
|
validFrom: false,
|
||||||
|
validTo: false,
|
||||||
|
},
|
||||||
|
onlyButton: true,
|
||||||
|
button: {
|
||||||
|
text: {
|
||||||
|
create: "household_members_editor.household.set_address",
|
||||||
|
edit: "household_members_editor.household.update_address",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
create: "household_members_editor.household.create_new_address",
|
||||||
|
edit: "household_members_editor.household.update_address_title",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters([
|
||||||
|
"isModeNewAllowed",
|
||||||
|
"isModeLeaveAllowed",
|
||||||
|
"getSuggestions",
|
||||||
|
"hasHousehold",
|
||||||
|
"isHouseholdNew",
|
||||||
|
"hasHouseholdSuggestion",
|
||||||
|
"countHouseholdSuggestion",
|
||||||
|
"filterHouseholdSuggestionByAccompanyingPeriod",
|
||||||
|
"hasAddressSuggestion",
|
||||||
|
"countAddressSuggestion",
|
||||||
|
"filterAddressesSuggestion",
|
||||||
|
"hasHouseholdAddress",
|
||||||
|
"isModeLeave",
|
||||||
|
"getAddressContext",
|
||||||
|
]),
|
||||||
|
...mapState([
|
||||||
|
"household",
|
||||||
|
"showHouseholdSuggestion",
|
||||||
|
"showAddressSuggestion",
|
||||||
|
"mode",
|
||||||
|
]),
|
||||||
|
household() {
|
||||||
|
return this.$store.state.household;
|
||||||
|
},
|
||||||
|
allowHouseholdSearch() {
|
||||||
|
return false;
|
||||||
|
return (
|
||||||
|
this.$store.state.allowHouseholdSearch &&
|
||||||
|
!this.$store.getters.hasHousehold
|
||||||
|
);
|
||||||
|
},
|
||||||
|
isHouseholdNewDesactivated() {
|
||||||
|
return (
|
||||||
|
this.$store.state.mode !== null &&
|
||||||
|
!this.$store.getters.isHouseholdNew
|
||||||
|
);
|
||||||
|
},
|
||||||
|
isHouseholdLeaveDesactivated() {
|
||||||
|
return (
|
||||||
|
this.$store.state.mode !== null &&
|
||||||
|
this.$store.state.mode !== "leave"
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapGetters([
|
|
||||||
"isModeNewAllowed",
|
|
||||||
"isModeLeaveAllowed",
|
|
||||||
"getSuggestions",
|
|
||||||
"hasHousehold",
|
|
||||||
"isHouseholdNew",
|
|
||||||
"hasHouseholdSuggestion",
|
|
||||||
"countHouseholdSuggestion",
|
|
||||||
"filterHouseholdSuggestionByAccompanyingPeriod",
|
|
||||||
"hasAddressSuggestion",
|
|
||||||
"countAddressSuggestion",
|
|
||||||
"filterAddressesSuggestion",
|
|
||||||
"hasHouseholdAddress",
|
|
||||||
"isModeLeave",
|
|
||||||
"getAddressContext",
|
|
||||||
]),
|
|
||||||
...mapState([
|
|
||||||
"household",
|
|
||||||
"showHouseholdSuggestion",
|
|
||||||
"showAddressSuggestion",
|
|
||||||
"mode",
|
|
||||||
]),
|
|
||||||
household() {
|
|
||||||
return this.$store.state.household;
|
|
||||||
},
|
},
|
||||||
allowHouseholdSearch() {
|
methods: {
|
||||||
return false;
|
setModeNew() {
|
||||||
return (
|
this.$store.dispatch("createHousehold");
|
||||||
this.$store.state.allowHouseholdSearch &&
|
this.$emit("readyToGo");
|
||||||
!this.$store.getters.hasHousehold
|
},
|
||||||
);
|
setModeLeave() {
|
||||||
|
this.$store.dispatch("forceLeaveWithoutHousehold");
|
||||||
|
this.$emit("readyToGo");
|
||||||
|
},
|
||||||
|
resetMode() {
|
||||||
|
this.$store.commit("resetMode");
|
||||||
|
},
|
||||||
|
addressChanged(payload) {
|
||||||
|
console.log("addressChanged", payload);
|
||||||
|
this.$store.dispatch("setHouseholdNewAddress", payload.address);
|
||||||
|
},
|
||||||
|
selectHousehold(h) {
|
||||||
|
this.$store.dispatch("selectHousehold", h);
|
||||||
|
this.$emit("readyToGo");
|
||||||
|
},
|
||||||
|
pickHouseholdFound({ selected, modal }) {
|
||||||
|
selected.forEach(function (item) {
|
||||||
|
this.selectHousehold(item.result);
|
||||||
|
}, this);
|
||||||
|
this.$refs.pickHousehold.resetSearch(); // to cast child method
|
||||||
|
modal.showModal = false;
|
||||||
|
},
|
||||||
|
removeHouseholdAddress() {
|
||||||
|
this.$store.commit("removeHouseholdAddress");
|
||||||
|
},
|
||||||
|
toggleHouseholdSuggestion() {
|
||||||
|
this.$store.commit("toggleHouseholdSuggestion");
|
||||||
|
},
|
||||||
},
|
},
|
||||||
isHouseholdNewDesactivated() {
|
|
||||||
return (
|
|
||||||
this.$store.state.mode !== null && !this.$store.getters.isHouseholdNew
|
|
||||||
);
|
|
||||||
},
|
|
||||||
isHouseholdLeaveDesactivated() {
|
|
||||||
return (
|
|
||||||
this.$store.state.mode !== null && this.$store.state.mode !== "leave"
|
|
||||||
);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
setModeNew() {
|
|
||||||
this.$store.dispatch("createHousehold");
|
|
||||||
this.$emit("readyToGo");
|
|
||||||
},
|
|
||||||
setModeLeave() {
|
|
||||||
this.$store.dispatch("forceLeaveWithoutHousehold");
|
|
||||||
this.$emit("readyToGo");
|
|
||||||
},
|
|
||||||
resetMode() {
|
|
||||||
this.$store.commit("resetMode");
|
|
||||||
},
|
|
||||||
addressChanged(payload) {
|
|
||||||
console.log("addressChanged", payload);
|
|
||||||
this.$store.dispatch("setHouseholdNewAddress", payload.address);
|
|
||||||
},
|
|
||||||
selectHousehold(h) {
|
|
||||||
this.$store.dispatch("selectHousehold", h);
|
|
||||||
this.$emit("readyToGo");
|
|
||||||
},
|
|
||||||
pickHouseholdFound({ selected, modal }) {
|
|
||||||
selected.forEach(function (item) {
|
|
||||||
this.selectHousehold(item.result);
|
|
||||||
}, this);
|
|
||||||
this.$refs.pickHousehold.resetSearch(); // to cast child method
|
|
||||||
modal.showModal = false;
|
|
||||||
},
|
|
||||||
removeHouseholdAddress() {
|
|
||||||
this.$store.commit("removeHouseholdAddress");
|
|
||||||
},
|
|
||||||
toggleHouseholdSuggestion() {
|
|
||||||
this.$store.commit("toggleHouseholdSuggestion");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.filtered {
|
.filtered {
|
||||||
filter: grayscale(1) opacity(0.6);
|
filter: grayscale(1) opacity(0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.filteredButActive {
|
.filteredButActive {
|
||||||
filter: grayscale(1) opacity(0.6);
|
filter: grayscale(1) opacity(0.6);
|
||||||
&:hover {
|
&:hover {
|
||||||
filter: unset;
|
filter: unset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div#household_members_editor div,
|
div#household_members_editor div,
|
||||||
div.householdSuggestionList {
|
div.householdSuggestionList {
|
||||||
&.flex-table {
|
&.flex-table {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
div.item-bloc div.item-row div.item-col {
|
div.item-bloc div.item-row div.item-col {
|
||||||
&:first-child {
|
&:first-child {
|
||||||
width: 25%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
&:last-child {
|
&:last-child {
|
||||||
display: initial;
|
display: initial;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,26 +1,30 @@
|
|||||||
<template>
|
<template>
|
||||||
<current-household />
|
<current-household />
|
||||||
|
|
||||||
<ul class="record_actions">
|
<ul class="record_actions">
|
||||||
<!-- <li v-if="!hasHouseholdAddress && !isHouseholdForceAddress">
|
<!-- <li v-if="!hasHouseholdAddress && !isHouseholdForceAddress">
|
||||||
<button class="btn btn-misc" @click="markNoAddress">
|
<button class="btn btn-misc" @click="markNoAddress">
|
||||||
{{ $t('household_members_editor.household_address.mark_no_address') }}
|
{{ $t('household_members_editor.household_address.mark_no_address') }}
|
||||||
</button>
|
</button>
|
||||||
</li> -->
|
</li> -->
|
||||||
<li v-if="!hasHouseholdAddress">
|
<li v-if="!hasHouseholdAddress">
|
||||||
<add-address
|
<add-address
|
||||||
:context="getAddressContext"
|
:context="getAddressContext"
|
||||||
:key="addAddress.key"
|
:key="addAddress.key"
|
||||||
:options="addAddress.options"
|
:options="addAddress.options"
|
||||||
:address-changed-callback="addressChanged"
|
:address-changed-callback="addressChanged"
|
||||||
/>
|
/>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="hasHouseholdAddress">
|
<li v-if="hasHouseholdAddress">
|
||||||
<button class="btn btn-remove" @click="removeHouseholdAddress">
|
<button class="btn btn-remove" @click="removeHouseholdAddress">
|
||||||
{{ $t("household_members_editor.household_address.remove_address") }}
|
{{
|
||||||
</button>
|
$t(
|
||||||
</li>
|
"household_members_editor.household_address.remove_address",
|
||||||
</ul>
|
)
|
||||||
|
}}
|
||||||
|
</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -29,56 +33,55 @@ import CurrentHousehold from "./CurrentHousehold";
|
|||||||
import { mapGetters } from "vuex";
|
import { mapGetters } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "HouseholdAddress.vue",
|
name: "HouseholdAddress.vue",
|
||||||
components: {
|
components: {
|
||||||
CurrentHousehold,
|
CurrentHousehold,
|
||||||
AddAddress,
|
AddAddress,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addAddress: {
|
addAddress: {
|
||||||
key: "household_new",
|
key: "household_new",
|
||||||
options: {
|
options: {
|
||||||
useDate: {
|
useDate: {
|
||||||
validFrom: false,
|
validFrom: false,
|
||||||
validTo: false,
|
validTo: false,
|
||||||
},
|
},
|
||||||
onlyButton: true,
|
onlyButton: true,
|
||||||
button: {
|
button: {
|
||||||
text: {
|
text: {
|
||||||
create: "household_members_editor.household_address.set_address",
|
create: "household_members_editor.household_address.set_address",
|
||||||
edit: "household_members_editor.household_address.update_address",
|
edit: "household_members_editor.household_address.update_address",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
create: "household_members_editor.household_address.create_new_address",
|
||||||
|
edit: "household_members_editor.household_address.update_address_title",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
};
|
||||||
title: {
|
},
|
||||||
create:
|
computed: {
|
||||||
"household_members_editor.household_address.create_new_address",
|
...mapGetters([
|
||||||
edit: "household_members_editor.household_address.update_address_title",
|
"isHouseholdNew",
|
||||||
},
|
"hasHouseholdAddress",
|
||||||
|
"getAddressContext",
|
||||||
|
"isHouseholdForceNoAddress",
|
||||||
|
]),
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
addressChanged(payload) {
|
||||||
|
console.log("addressChanged", payload);
|
||||||
|
this.$store.dispatch("setHouseholdNewAddress", payload.address);
|
||||||
|
},
|
||||||
|
markNoAddress() {
|
||||||
|
this.$store.commit("markHouseholdNoAddress");
|
||||||
|
},
|
||||||
|
removeHouseholdAddress() {
|
||||||
|
this.$store.commit("removeHouseholdAddress");
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapGetters([
|
|
||||||
"isHouseholdNew",
|
|
||||||
"hasHouseholdAddress",
|
|
||||||
"getAddressContext",
|
|
||||||
"isHouseholdForceNoAddress",
|
|
||||||
]),
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
addressChanged(payload) {
|
|
||||||
console.log("addressChanged", payload);
|
|
||||||
this.$store.dispatch("setHouseholdNewAddress", payload.address);
|
|
||||||
},
|
},
|
||||||
markNoAddress() {
|
|
||||||
this.$store.commit("markHouseholdNoAddress");
|
|
||||||
},
|
|
||||||
removeHouseholdAddress() {
|
|
||||||
this.$store.commit("removeHouseholdAddress");
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,97 +1,104 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="item-bloc">
|
<div class="item-bloc">
|
||||||
<div class="item-row">
|
<div class="item-row">
|
||||||
<div class="item-col">
|
<div class="item-col">
|
||||||
<div>
|
<div>
|
||||||
<person-render-box
|
<person-render-box
|
||||||
render="badge"
|
render="badge"
|
||||||
:options="{}"
|
:options="{}"
|
||||||
:person="conc.person"
|
:person="conc.person"
|
||||||
/>
|
/>
|
||||||
<span v-if="isHolder" class="badge bg-primary holder">
|
<span v-if="isHolder" class="badge bg-primary holder">
|
||||||
{{ $t("household_members_editor.holder") }}
|
{{ $t("household_members_editor.holder") }}
|
||||||
</span>
|
</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="conc.person.birthdate !== null">
|
||||||
|
{{
|
||||||
|
$t("person.born", {
|
||||||
|
gender: conc.person.gender.genderTranslation,
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-col">
|
||||||
|
<ul class="list-content fa-ul">
|
||||||
|
<li>
|
||||||
|
<i class="fa fa-li fa-map-marker" />
|
||||||
|
<span class="chill-no-data-statement"
|
||||||
|
>Sans adresse</span
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="conc.person.birthdate !== null">
|
|
||||||
{{
|
<div class="item-row comment">
|
||||||
$t("person.born", { gender: conc.person.gender.genderTranslation })
|
<comment-editor v-model="comment" />
|
||||||
}}
|
</div>
|
||||||
|
|
||||||
|
<div class="item-row participation-details">
|
||||||
|
<div v-if="conc.position.allowHolder" class="action">
|
||||||
|
<button
|
||||||
|
class="btn"
|
||||||
|
:class="{
|
||||||
|
'btn-primary': isHolder,
|
||||||
|
'btn-secondary': !isHolder,
|
||||||
|
}"
|
||||||
|
@click="toggleHolder"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t(
|
||||||
|
isHolder
|
||||||
|
? "household_members_editor.is_holder"
|
||||||
|
: "household_members_editor.is_not_holder",
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<button @click="removePosition" class="btn btn-outline-primary">
|
||||||
|
{{
|
||||||
|
$t("household_members_editor.remove_position", {
|
||||||
|
position: conc.position.label.fr,
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
v-if="conc.allowRemove"
|
||||||
|
@click="removeConcerned"
|
||||||
|
class="btn btn-primary"
|
||||||
|
>
|
||||||
|
{{ $t("household_members_editor.remove_concerned") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="item-col">
|
|
||||||
<ul class="list-content fa-ul">
|
|
||||||
<li>
|
|
||||||
<i class="fa fa-li fa-map-marker" />
|
|
||||||
<span class="chill-no-data-statement">Sans adresse</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="item-row comment">
|
|
||||||
<comment-editor v-model="comment" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="item-row participation-details">
|
|
||||||
<div v-if="conc.position.allowHolder" class="action">
|
|
||||||
<button
|
|
||||||
class="btn"
|
|
||||||
:class="{ 'btn-primary': isHolder, 'btn-secondary': !isHolder }"
|
|
||||||
@click="toggleHolder"
|
|
||||||
>
|
|
||||||
{{
|
|
||||||
$t(
|
|
||||||
isHolder
|
|
||||||
? "household_members_editor.is_holder"
|
|
||||||
: "household_members_editor.is_not_holder",
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button @click="removePosition" class="btn btn-outline-primary">
|
|
||||||
{{
|
|
||||||
$t("household_members_editor.remove_position", {
|
|
||||||
position: conc.position.label.fr,
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button
|
|
||||||
v-if="conc.allowRemove"
|
|
||||||
@click="removeConcerned"
|
|
||||||
class="btn btn-primary"
|
|
||||||
>
|
|
||||||
{{ $t("household_members_editor.remove_concerned") }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.drag-icon {
|
.drag-icon {
|
||||||
height: 1.1em;
|
height: 1.1em;
|
||||||
margin-right: 0.5em;
|
margin-right: 0.5em;
|
||||||
}
|
}
|
||||||
div.participation-details {
|
div.participation-details {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row !important;
|
flex-direction: row !important;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
|
||||||
.action {
|
.action {
|
||||||
align-self: flex-start;
|
align-self: flex-start;
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.holder {
|
.holder {
|
||||||
display: inline;
|
display: inline;
|
||||||
vertical-align: super;
|
vertical-align: super;
|
||||||
font-size: 0.6em;
|
font-size: 0.6em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
@@ -101,41 +108,44 @@ import PersonRenderBox from "ChillPersonAssets/vuejs/_components/Entity/PersonRe
|
|||||||
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "MemberDetails",
|
name: "MemberDetails",
|
||||||
components: {
|
components: {
|
||||||
PersonRenderBox,
|
PersonRenderBox,
|
||||||
CommentEditor,
|
CommentEditor,
|
||||||
},
|
|
||||||
props: ["conc"],
|
|
||||||
computed: {
|
|
||||||
...mapGetters(["concByPersonId"]),
|
|
||||||
classicEditor: () => ClassicEditor,
|
|
||||||
editorConfig: () => classicEditorConfig,
|
|
||||||
isHolder() {
|
|
||||||
return this.conc.holder;
|
|
||||||
},
|
},
|
||||||
comment: {
|
props: ["conc"],
|
||||||
get() {
|
computed: {
|
||||||
return this.conc.comment;
|
...mapGetters(["concByPersonId"]),
|
||||||
},
|
classicEditor: () => ClassicEditor,
|
||||||
set(text) {
|
editorConfig: () => classicEditorConfig,
|
||||||
console.log("set comment");
|
isHolder() {
|
||||||
console.log("comment", text);
|
return this.conc.holder;
|
||||||
|
},
|
||||||
|
comment: {
|
||||||
|
get() {
|
||||||
|
return this.conc.comment;
|
||||||
|
},
|
||||||
|
set(text) {
|
||||||
|
console.log("set comment");
|
||||||
|
console.log("comment", text);
|
||||||
|
|
||||||
this.$store.dispatch("setComment", { conc: this.conc, comment: text });
|
this.$store.dispatch("setComment", {
|
||||||
},
|
conc: this.conc,
|
||||||
|
comment: text,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
toggleHolder() {
|
||||||
toggleHolder() {
|
this.$store.dispatch("toggleHolder", this.conc);
|
||||||
this.$store.dispatch("toggleHolder", this.conc);
|
},
|
||||||
|
removePosition() {
|
||||||
|
this.$store.dispatch("removePosition", this.conc);
|
||||||
|
},
|
||||||
|
removeConcerned() {
|
||||||
|
this.$store.dispatch("removeConcerned", this.conc);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
removePosition() {
|
|
||||||
this.$store.dispatch("removePosition", this.conc);
|
|
||||||
},
|
|
||||||
removeConcerned() {
|
|
||||||
this.$store.dispatch("removeConcerned", this.conc);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,30 +1,30 @@
|
|||||||
<template>
|
<template>
|
||||||
<comment-editor v-model="content" />
|
<comment-editor v-model="content" />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
import CommentEditor from "ChillMainAssets/vuejs/_components/CommentEditor/CommentEditor.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "PersonComment.vue",
|
name: "PersonComment.vue",
|
||||||
components: {
|
components: {
|
||||||
CommentEditor,
|
CommentEditor,
|
||||||
},
|
},
|
||||||
props: ["conc"],
|
props: ["conc"],
|
||||||
computed: {
|
computed: {
|
||||||
content: {
|
content: {
|
||||||
get() {
|
get() {
|
||||||
return this.$props.conc.comment || "";
|
return this.$props.conc.comment || "";
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
console.log("set content", value);
|
console.log("set content", value);
|
||||||
this.$store.commit("setComment", {
|
this.$store.commit("setComment", {
|
||||||
conc: this.$props.conc,
|
conc: this.$props.conc,
|
||||||
comment: value,
|
comment: value,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -1,55 +1,57 @@
|
|||||||
<template>
|
<template>
|
||||||
<current-household />
|
<current-household />
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
{{ $t("household_members_editor.positioning.persons_to_positionnate") }}
|
{{ $t("household_members_editor.positioning.persons_to_positionnate") }}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<div class="list-household-members flex-table">
|
<div class="list-household-members flex-table">
|
||||||
<div v-for="conc in concerned" class="item-bloc" :key="conc.person.id">
|
<div v-for="conc in concerned" class="item-bloc" :key="conc.person.id">
|
||||||
<div class="pick-position item-row">
|
<div class="pick-position item-row">
|
||||||
<div class="person">
|
<div class="person">
|
||||||
<!-- <h3>{{ conc.person.text }}</h3> -->
|
<!-- <h3>{{ conc.person.text }}</h3> -->
|
||||||
<h3><person-text :person="conc.person" /></h3>
|
<h3><person-text :person="conc.person" /></h3>
|
||||||
|
</div>
|
||||||
|
<div class="holder">
|
||||||
|
<button
|
||||||
|
class="btn"
|
||||||
|
:disabled="!allowHolderForConcerned(conc)"
|
||||||
|
:class="{
|
||||||
|
'btn-outline-chill-green': !conc.holder,
|
||||||
|
'btn-chill-green': conc.holder,
|
||||||
|
}"
|
||||||
|
@click="toggleHolder(conc)"
|
||||||
|
>
|
||||||
|
{{ $t("household_members_editor.positioning.holder") }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-for="(position, i) in positions"
|
||||||
|
:key="`position-${i}`"
|
||||||
|
class="position"
|
||||||
|
>
|
||||||
|
<button
|
||||||
|
class="btn"
|
||||||
|
:class="{
|
||||||
|
'btn-primary': conc.position === position,
|
||||||
|
'btn-outline-primary': conc.position !== position,
|
||||||
|
}"
|
||||||
|
@click="moveToPosition(conc.person.id, position.id)"
|
||||||
|
>
|
||||||
|
{{ localizeString(position.label) }}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item-row">
|
||||||
|
<div class="col-12">
|
||||||
|
<h6>
|
||||||
|
{{ $t("household_members_editor.positioning.comment") }}
|
||||||
|
</h6>
|
||||||
|
<person-comment :conc="conc" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="holder">
|
|
||||||
<button
|
|
||||||
class="btn"
|
|
||||||
:disabled="!allowHolderForConcerned(conc)"
|
|
||||||
:class="{
|
|
||||||
'btn-outline-chill-green': !conc.holder,
|
|
||||||
'btn-chill-green': conc.holder,
|
|
||||||
}"
|
|
||||||
@click="toggleHolder(conc)"
|
|
||||||
>
|
|
||||||
{{ $t("household_members_editor.positioning.holder") }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
v-for="(position, i) in positions"
|
|
||||||
:key="`position-${i}`"
|
|
||||||
class="position"
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
class="btn"
|
|
||||||
:class="{
|
|
||||||
'btn-primary': conc.position === position,
|
|
||||||
'btn-outline-primary': conc.position !== position,
|
|
||||||
}"
|
|
||||||
@click="moveToPosition(conc.person.id, position.id)"
|
|
||||||
>
|
|
||||||
{{ localizeString(position.label) }}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="item-row">
|
|
||||||
<div class="col-12">
|
|
||||||
<h6>{{ $t("household_members_editor.positioning.comment") }}</h6>
|
|
||||||
<person-comment :conc="conc" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -60,61 +62,61 @@ import PersonText from "../../_components/Entity/PersonText.vue";
|
|||||||
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
import { localizeString } from "ChillMainAssets/lib/localizationHelper/localizationHelper";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Positioning",
|
name: "Positioning",
|
||||||
components: {
|
components: {
|
||||||
CurrentHousehold,
|
CurrentHousehold,
|
||||||
PersonComment,
|
PersonComment,
|
||||||
PersonText,
|
PersonText,
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
...mapState(["concerned"]),
|
|
||||||
...mapGetters([
|
|
||||||
"persons",
|
|
||||||
"concUnpositionned",
|
|
||||||
"positions",
|
|
||||||
"concByPosition",
|
|
||||||
]),
|
|
||||||
allPersonsPositionnated() {
|
|
||||||
return (
|
|
||||||
this.$store.getters.persons.length > 0 &&
|
|
||||||
this.$store.getters.concUnpositionned.length === 0
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
allowHolderForConcerned: () => (conc) => {
|
computed: {
|
||||||
console.log("allow holder for concerned", conc);
|
...mapState(["concerned"]),
|
||||||
if (conc.position === null) {
|
...mapGetters([
|
||||||
return false;
|
"persons",
|
||||||
}
|
"concUnpositionned",
|
||||||
|
"positions",
|
||||||
|
"concByPosition",
|
||||||
|
]),
|
||||||
|
allPersonsPositionnated() {
|
||||||
|
return (
|
||||||
|
this.$store.getters.persons.length > 0 &&
|
||||||
|
this.$store.getters.concUnpositionned.length === 0
|
||||||
|
);
|
||||||
|
},
|
||||||
|
allowHolderForConcerned: () => (conc) => {
|
||||||
|
console.log("allow holder for concerned", conc);
|
||||||
|
if (conc.position === null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return conc.position.allowHolder;
|
return conc.position.allowHolder;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
methods: {
|
||||||
methods: {
|
localizeString,
|
||||||
localizeString,
|
moveToPosition(person_id, position_id) {
|
||||||
moveToPosition(person_id, position_id) {
|
this.$store.dispatch("markPosition", { person_id, position_id });
|
||||||
this.$store.dispatch("markPosition", { person_id, position_id });
|
},
|
||||||
|
toggleHolder(conc) {
|
||||||
|
console.log("toggle holder", conc);
|
||||||
|
this.$store.dispatch("toggleHolder", conc);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
toggleHolder(conc) {
|
|
||||||
console.log("toggle holder", conc);
|
|
||||||
this.$store.dispatch("toggleHolder", conc);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.pick-position {
|
.pick-position {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.person {
|
.person {
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
.holder {
|
.holder {
|
||||||
margin-right: 1.2rem;
|
margin-right: 1.2rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user