From e52ac9f05c56b74a0f23eb24e4467f8934873b23 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Fri, 24 Mar 2023 16:20:20 +0100 Subject: [PATCH] registration fixes --- .github/dev_bug_report.md | 35 + .github/dev_feature_request.md | 18 + .github/user_bug_report.md | 34 + .github/user_feature_request.md | 18 + .github/workflows/greetings.yml | 13 + .github/workflows/image.yml | 24 + .github/workflows/main.yml | 281 ++ .gitignore | 1 + Admin/Install/db.json | 234 + Admin/Installer.php | 36 + Admin/Routes/Web/Api.php | 21 + Admin/Routes/Web/Backend.php | 22 + Admin/Status.php | 36 + Admin/Uninstaller.php | 36 + Admin/Updater.php | 29 + CODE_OF_CONDUCT.md | 46 + CONTRIBUTING.md | 82 + Controller/ApiController.php | 417 ++ Controller/BackendController.php | 34 + Controller/Controller.php | 76 + Docs/Dev/en/SUMMARY.md | 3 + Docs/Dev/en/structure.md | 5 + Docs/Dev/img/er.png | Bin 0 -> 153052 bytes Docs/introduction.md | 58 + ICAL.txt | 49 + LICENSE.txt | 48 + Models/Attribute.php | 102 + Models/AttributeMapper.php | 74 + Models/AttributeType.php | 225 + Models/AttributeTypeL11nMapper.php | 66 + Models/AttributeTypeMapper.php | 82 + Models/AttributeValue.php | 230 + Models/AttributeValueL11nMapper.php | 66 + Models/AttributeValueMapper.php | 77 + Models/AttributeValueType.php | 40 + Models/NullAttribute.php | 47 + Models/NullAttributeType.php | 46 + Models/NullAttributeValue.php | 46 + Models/PermissionCategory.php | 32 + README.md | 2 +- Theme/Backend/Lang/Navigation.en.lang.php | 20 + Theme/Backend/Lang/en.lang.php | 17 + composer.json | 20 + composer.lock | 4802 +++++++++++++++++++++ img/module_teaser_small.png | Bin 0 -> 90210 bytes info.json | 48 + tests/Admin/AdminTest.php | 27 + tests/Autoloader.php | 94 + tests/Bootstrap.php | 415 ++ tests/Controller/ApiControllerTest.php | 82 + tests/phpunit_default.xml | 57 + 51 files changed, 8372 insertions(+), 1 deletion(-) create mode 100755 .github/dev_bug_report.md create mode 100755 .github/dev_feature_request.md create mode 100755 .github/user_bug_report.md create mode 100755 .github/user_feature_request.md create mode 100755 .github/workflows/greetings.yml create mode 100755 .github/workflows/image.yml create mode 100755 .github/workflows/main.yml create mode 100755 .gitignore create mode 100755 Admin/Install/db.json create mode 100755 Admin/Installer.php create mode 100755 Admin/Routes/Web/Api.php create mode 100755 Admin/Routes/Web/Backend.php create mode 100755 Admin/Status.php create mode 100755 Admin/Uninstaller.php create mode 100755 Admin/Updater.php create mode 100755 CODE_OF_CONDUCT.md create mode 100755 CONTRIBUTING.md create mode 100755 Controller/ApiController.php create mode 100755 Controller/BackendController.php create mode 100755 Controller/Controller.php create mode 100755 Docs/Dev/en/SUMMARY.md create mode 100755 Docs/Dev/en/structure.md create mode 100755 Docs/Dev/img/er.png create mode 100755 Docs/introduction.md create mode 100755 ICAL.txt create mode 100755 LICENSE.txt create mode 100755 Models/Attribute.php create mode 100755 Models/AttributeMapper.php create mode 100755 Models/AttributeType.php create mode 100755 Models/AttributeTypeL11nMapper.php create mode 100755 Models/AttributeTypeMapper.php create mode 100755 Models/AttributeValue.php create mode 100755 Models/AttributeValueL11nMapper.php create mode 100755 Models/AttributeValueMapper.php create mode 100755 Models/AttributeValueType.php create mode 100755 Models/NullAttribute.php create mode 100755 Models/NullAttributeType.php create mode 100755 Models/NullAttributeValue.php create mode 100755 Models/PermissionCategory.php mode change 100644 => 100755 README.md create mode 100755 Theme/Backend/Lang/Navigation.en.lang.php create mode 100755 Theme/Backend/Lang/en.lang.php create mode 100755 composer.json create mode 100755 composer.lock create mode 100755 img/module_teaser_small.png create mode 100755 info.json create mode 100755 tests/Admin/AdminTest.php create mode 100755 tests/Autoloader.php create mode 100755 tests/Bootstrap.php create mode 100755 tests/Controller/ApiControllerTest.php create mode 100755 tests/phpunit_default.xml diff --git a/.github/dev_bug_report.md b/.github/dev_bug_report.md new file mode 100755 index 0000000..ef93e56 --- /dev/null +++ b/.github/dev_bug_report.md @@ -0,0 +1,35 @@ +--- +name: Dev Bug Report +about: Create a report to help us improve +title: '' +labels: stat_backlog, type_bug +assignees: '' + +--- + +# Bug Description +A clear and concise description of what the bug is. + +# How to Reproduce + +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +## Minimal Code Example + +``` +// your code ... +``` + +# Expected Behavior +A clear and concise description of what you expected to happen. + +# Screenshots +If applicable, add screenshots to help explain your problem. + +# Additional Information +Add any other context about the problem here. diff --git a/.github/dev_feature_request.md b/.github/dev_feature_request.md new file mode 100755 index 0000000..9573c35 --- /dev/null +++ b/.github/dev_feature_request.md @@ -0,0 +1,18 @@ +--- +name: Dev Feature Request +about: Suggest an idea for this project +title: '' +labels: stat_backlog, type_feature +assignees: '' + +--- + +# What is the feature you request +* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +* A clear and concise description of what you want to happen. + +# Alternatives +A clear and concise description of any alternative solutions or features you've considered. + +# Additional Information +Add any other context or screenshots about the feature request here. diff --git a/.github/user_bug_report.md b/.github/user_bug_report.md new file mode 100755 index 0000000..9e5f2a5 --- /dev/null +++ b/.github/user_bug_report.md @@ -0,0 +1,34 @@ +--- +name: User Bug Report +about: Create a report to help us improve +title: '' +labels: stat_backlog, type_bug +assignees: '' + +--- + +# Bug Description +A clear and concise description of what the bug is. + +# How to Reproduce +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +# Expected Behavior +A clear and concise description of what you expected to happen. + +# Screenshots +If applicable, add screenshots to help explain your problem. + +# System Information + - System: [e.g. PC or iPhone11, ...] + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - KarakaVersion [e.g. 22] + +# Additional Information +Add any other context about the problem here. diff --git a/.github/user_feature_request.md b/.github/user_feature_request.md new file mode 100755 index 0000000..6eb8ddc --- /dev/null +++ b/.github/user_feature_request.md @@ -0,0 +1,18 @@ +--- +name: User Feature Request +about: Suggest an idea for this project +title: '' +labels: stat_backlog, type_feature +assignees: '' + +--- + +# What is the feature you request +* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] +* A clear and concise description of what you want to happen. + +# Alternatives +A clear and concise description of any alternative solutions or features you've considered. + +# Additional Information +Add any other context or screenshots about the feature request here. diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100755 index 0000000..adb8716 --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,13 @@ +name: Greetings + +on: [pull_request, issues] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: 'Thank you for createing this issue. We will check it as soon as possible.' + pr-message: 'Thank you for your pull request. We will check it as soon as possible.' diff --git a/.github/workflows/image.yml b/.github/workflows/image.yml new file mode 100755 index 0000000..d079329 --- /dev/null +++ b/.github/workflows/image.yml @@ -0,0 +1,24 @@ +name: Compress images +on: + push: + paths: + - '**.jpg' + - '**.png' + - '**.webp' + pull_request: + paths: + - '**.jpg' + - '**.png' + - '**.webp' +jobs: + build: + name: calibreapp/image-actions + runs-on: ubuntu-latest + steps: + - name: Checkout Repo + uses: actions/checkout@main + + - name: Compress Images + uses: calibreapp/image-actions@main + with: + githubToken: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100755 index 0000000..6dcd721 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,281 @@ +name: CI + +on: [push, pull_request] + +jobs: + autoformat: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + steps: + - name: Checkout Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: Autoformat + run: 'vendor/bin/php-cs-fixer fix ./ --rules=''{"array_syntax": {"syntax": "short"}, "blank_line_after_namespace": true, "global_namespace_import": {"import_classes": false, "import_constants": false, "import_functions": false}, "binary_operator_spaces": {"operators": {"=": "align", ".=": "align", "+=": "align", "-=": "align", "*=": "align", "/=": "align", "|=": "align", "&=": "align", "=>": "align", "??=": "align"}}, "cast_spaces": {"space": "single"}, "class_attributes_separation": { "elements": {"const": "one", "method": "one", "property": "one"} }, "combine_consecutive_issets": true, "compact_nullable_typehint": true, "declare_strict_types": true, "declare_equal_normalize": {"space": "none"}, "elseif": true, "encoding": true, "explicit_indirect_variable": true, "explicit_string_variable": true, "function_to_constant": true, "implode_call": true, "increment_style": {"style": "pre"}, "is_null": true, "yoda_style": {"equal": false, "identical": false, "less_and_greater": false}, "line_ending": true, "logical_operators": true, "lowercase_cast": true, "constant_case": {"case": "lower"}, "lowercase_keywords": true, "modernize_types_casting": true, "native_constant_invocation": true, "native_function_casing": true, "native_function_invocation": {"include": ["@all"]}, "new_with_braces": true, "no_extra_blank_lines": {"tokens": ["break", "case", "continue", "curly_brace_block", "extra", "return", "switch", "throw", "use"]}, "no_spaces_after_function_name": true, "no_alias_functions": true, "no_closing_tag": true, "no_empty_comment": true, "no_empty_phpdoc": true, "no_empty_statement": true, "no_homoglyph_names": true, "no_mixed_echo_print": {"use": "echo"}, "no_php4_constructor": true, "no_singleline_whitespace_before_semicolons": true, "no_spaces_inside_parenthesis": true, "no_trailing_whitespace": true, "no_unneeded_final_method": true, "no_unused_imports": true, "no_useless_return": true, "no_whitespace_before_comma_in_array": true, "no_whitespace_in_blank_line": true, "non_printable_character": true, "normalize_index_brace": true, "ordered_imports": {"sort_algorithm": "alpha"}, "ordered_interfaces": {"order": "alpha"}, "php_unit_construct": true, "php_unit_internal_class": true, "php_unit_set_up_tear_down_visibility": true, "phpdoc_indent": true, "phpdoc_align": {"align": "vertical"}, "phpdoc_annotation_without_dot": true, "phpdoc_scalar": true, "phpdoc_return_self_reference": {"replacements": {"this": "self"}}, "phpdoc_trim": true, "phpdoc_trim_consecutive_blank_line_separation": true, "random_api_migration": true, "self_accessor": true, "return_type_declaration": {"space_before": "one"}, "semicolon_after_instruction": true, "set_type_to_cast": true, "short_scalar_cast": true, "single_blank_line_at_eof": true, "single_line_after_imports": true, "standardize_increment": true, "trailing_comma_in_multiline": true, "trim_array_spaces": true, "visibility_required": true, "void_return": true}'' --allow-risky=yes' + - name: Check for modified files + id: git-check + run: echo ::set-output name=modified::$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi) + - name: Push changes + if: steps.git-check.outputs.modified == 'true' + run: | + git config --global user.name 'Formatter Bot' + git config --global user.email 'formatter.bot@karaka.app' + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + git commit -am "Automated formatting changes" + git push + code-tests: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ALLOW_EMPTY_PASSWORD: false + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: oms + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + postgres: + image: postgres:10.8 + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: root + POSTGRES_DB: oms + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 3 + redis: + image: redis + ports: + - 6379:6379 + options: --entrypoint redis-server + memcached: + image: memcached + ports: + - 11211:11211 + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.1'] + steps: + - name: Checkout Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + - name: Checkout Build Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Build + path: Build + - name: Checkout Resource Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Resources + path: Resources + - name: Checkout phpOMS Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/phpOMS + path: phpOMS + token: ${{ secrets.GH_PAT }} + - name: Checkout Karaka Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Karaka + path: Karaka + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + coverage: pcov + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: phpunit + run: vendor/bin/phpunit --coverage-clover tests/coverage.xml --configuration tests/phpunit_default.xml + static-tests: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.1'] + steps: + - name: Checkout Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + submodules: recursive + token: ${{ secrets.GH_PAT }} + - name: Checkout Build Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Build + path: Build + - name: Checkout phpOMS Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/phpOMS + path: phpOMS + token: ${{ secrets.GH_PAT }} + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: phpstan + run: vendor/bin/phpstan analyse -a phpOMS/Autoloader.php --no-progress -l 9 -c Build/Config/phpstan.neon ./ + codestyle-tests: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.1'] + steps: + - name: Checkout Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + submodules: recursive + token: ${{ secrets.GH_PAT }} + - name: Checkout Build Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Build + path: Build + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: phpcs + run: vendor/bin/phpcs --severity=1 ./ --standard="Build/Config/phpcs.xml" -s --report=full + - name: Install NPM + uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'npm' + - run: npm install + - name: eslint + run: npx eslint ./ -c Build/Config/.eslintrc.json +# linting: +# runs-on: ubuntu-latest +# if: "!contains(github.event.head_commit.message, 'NO_CI')" +# strategy: +# fail-fast: false +# max-parallel: 3 +# steps: +# - name: Checkout Repository +# uses: actions/checkout@main +# with: +# fetch-depth: 0 +# submodules: recursive +# token: ${{ secrets.GH_TOKEN }} +# - name: Lint Code Base +# uses: github/super-linter/slim@v4 +# env: +# VALIDATE_ALL_CODEBASE: false +# VALIDATE_PHP: true +# VALIDATE_PHP_BUILTIN: true +# DEFAULT_BRANCH: develop +# GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + custom: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.1'] + steps: + - name: Checkout Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + - name: Checkout Build Repository + uses: actions/checkout@main + with: + fetch-depth: 1 + ref: develop + repository: Karaka-Management/Build + path: Build + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + - name: PHP linting + run: | + find ./ -type f \ + -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" ) + - name: Php strict + run: if [[ $(grep -r -L "declare(strict_types=1);" --include=*.php --exclude={*.tpl.php,*Hooks.php,*Routes.php,*SearchCommands.php} ./) -ne "" ]]; then exit 1; fi diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..22d0d82 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/Admin/Install/db.json b/Admin/Install/db.json new file mode 100755 index 0000000..41bce14 --- /dev/null +++ b/Admin/Install/db.json @@ -0,0 +1,234 @@ +{ + "attribute_attr_type": { + "name": "attribute_attr_type", + "fields": { + "attribute_attr_type_id": { + "name": "attribute_attr_type_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_type_model": { + "name": "attribute_attr_type_model", + "type": "INT", + "null": false + }, + "attribute_attr_type_name": { + "name": "attribute_attr_type_name", + "type": "VARCHAR(255)", + "null": false, + "unique": true + }, + "attribute_attr_type_datatype": { + "name": "attribute_attr_type_datatype", + "type": "INT(11)", + "null": false + }, + "attribute_attr_type_fields": { + "name": "attribute_attr_type_fields", + "type": "INT(11)", + "null": false + }, + "attribute_attr_type_custom": { + "name": "attribute_attr_type_custom", + "type": "TINYINT(1)", + "null": false + }, + "attribute_attr_type_required": { + "description": "Every element must have this attribute type if set to true.", + "name": "attribute_attr_type_required", + "type": "TINYINT(1)", + "null": false + }, + "attribute_attr_type_pattern": { + "description": "This is a regex validation pattern.", + "name": "attribute_attr_type_pattern", + "type": "VARCHAR(255)", + "null": false + } + } + }, + "attribute_attr_type_l11n": { + "name": "attribute_attr_type_l11n", + "fields": { + "attribute_attr_type_l11n_id": { + "name": "attribute_attr_type_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_type_l11n_title": { + "name": "attribute_attr_type_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "attribute_attr_type_l11n_type": { + "name": "attribute_attr_type_l11n_type", + "type": "INT(11)", + "null": false, + "foreignTable": "attribute_attr_type", + "foreignKey": "attribute_attr_type_id" + }, + "attribute_attr_type_l11n_lang": { + "name": "attribute_attr_type_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "attribute_attr_value": { + "name": "attribute_attr_value", + "fields": { + "attribute_attr_value_id": { + "name": "attribute_attr_value_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_value_default": { + "name": "attribute_attr_value_default", + "type": "TINYINT(1)", + "null": false + }, + "attribute_attr_value_valueStr": { + "name": "attribute_attr_value_valueStr", + "type": "VARCHAR(255)", + "null": true, + "default": null + }, + "attribute_attr_value_valueInt": { + "name": "attribute_attr_value_valueInt", + "type": "INT(11)", + "null": true, + "default": null + }, + "attribute_attr_value_valueDec": { + "name": "attribute_attr_value_valueDec", + "type": "DECIMAL(19,5)", + "null": true, + "default": null + }, + "attribute_attr_value_valueDat": { + "name": "attribute_attr_value_valueDat", + "type": "DATETIME", + "null": true, + "default": null + }, + "attribute_attr_value_unit": { + "name": "attribute_attr_value_unit", + "type": "VARCHAR(255)", + "null": false + }, + "attribute_attr_value_deptype": { + "name": "attribute_attr_value_deptype", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "attribute_attr_type", + "foreignKey": "attribute_attr_type_id" + }, + "attribute_attr_value_depvalue": { + "name": "attribute_attr_value_depvalue", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "attribute_attr_value", + "foreignKey": "attribute_attr_value_id" + } + } + }, + "attribute_attr_value_l11n": { + "name": "attribute_attr_value_l11n", + "fields": { + "attribute_attr_value_l11n_id": { + "name": "attribute_attr_value_l11n_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_value_l11n_title": { + "name": "attribute_attr_value_l11n_title", + "type": "VARCHAR(255)", + "null": false + }, + "attribute_attr_value_l11n_value": { + "name": "attribute_attr_value_l11n_value", + "type": "INT(11)", + "null": false, + "foreignTable": "attribute_attr_value", + "foreignKey": "attribute_attr_value_id" + }, + "attribute_attr_value_l11n_lang": { + "name": "attribute_attr_value_l11n_lang", + "type": "VARCHAR(2)", + "null": false, + "foreignTable": "language", + "foreignKey": "language_639_1" + } + } + }, + "attribute_attr_default": { + "name": "attribute_attr_default", + "fields": { + "attribute_attr_default_id": { + "name": "attribute_attr_default_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_default_type": { + "name": "attribute_attr_default_type", + "type": "INT(11)", + "null": false, + "foreignTable": "attribute_attr_type", + "foreignKey": "attribute_attr_type_id" + }, + "attribute_attr_default_value": { + "name": "attribute_attr_default_value", + "type": "INT(11)", + "null": false, + "foreignTable": "attribute_attr_value", + "foreignKey": "attribute_attr_value_id" + } + } + }, + "attribute_attr": { + "name": "attribute_attr", + "fields": { + "attribute_attr_id": { + "name": "attribute_attr_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "attribute_attr_ref": { + "name": "attribute_attr_ref", + "type": "INT(11)", + "null": false + }, + "attribute_attr_type": { + "name": "attribute_attr_type", + "type": "INT(11)", + "null": false, + "foreignTable": "attribute_attr_type", + "foreignKey": "attribute_attr_type_id" + }, + "attribute_attr_value": { + "name": "attribute_attr_value", + "type": "INT(11)", + "null": true, + "default": null, + "foreignTable": "attribute_attr_value", + "foreignKey": "attribute_attr_value_id" + } + } + } +} \ No newline at end of file diff --git a/Admin/Installer.php b/Admin/Installer.php new file mode 100755 index 0000000..800adb8 --- /dev/null +++ b/Admin/Installer.php @@ -0,0 +1,36 @@ +validateAttributeCreate($request))) { + $response->set('attribute_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attribute = $this->createAttributeFromRequest($request); + $this->createModel($request->header->account, $attribute, AttributeMapper::class, 'attribute', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute', 'Attribute successfully created', $attribute); + } + + /** + * Method to create item attribute from request. + * + * @param RequestAbstract $request Request + * + * @return Attribute + * + * @since 1.0.0 + */ + private function createAttributeFromRequest(RequestAbstract $request) : Attribute + { + $attribute = new Attribute(); + $attribute->ref = (int) $request->getData('ref'); + $attribute->type = new NullAttributeType((int) $request->getData('type')); + + if ($request->hasData('value')) { + $attribute->value = new NullAttributeValue((int) $request->getData('value')); + } else { + $newRequest = clone $request; + $newRequest->setData('value', $request->getData('custom'), true); + + $value = $this->createAttributeValueFromRequest($newRequest); + + $attribute->value = $value; + } + + return $attribute; + } + + /** + * Validate attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateAttributeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = empty($request->getData('type'))) + || ($val['value'] = (empty($request->getData('value')) && empty($request->getData('custom')))) + || ($val['ref'] = empty($request->getData('ref'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiAttributeTypeL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeL11nCreate($request))) { + $response->set('attr_type_l11n_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeTypeL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, AttributeTypeL11nMapper::class, 'attr_type_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createAttributeTypeL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('type') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->getLanguage() + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateAttributeTypeL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['type'] = empty($request->getData('type'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create attribute type + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiAttributeTypeCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeTypeCreate($request))) { + $response->set('attr_type_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrType = $this->createAttributeTypeFromRequest($request); + $this->createModel($request->header->account, $attrType, AttributeTypeMapper::class, 'attr_type', $request->getOrigin()); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute type', 'Attribute type successfully created', $attrType); + } + + /** + * Method to create attribute from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeType + * + * @since 1.0.0 + */ + private function createAttributeTypeFromRequest(RequestAbstract $request) : AttributeType + { + $attrType = new AttributeType($request->getDataString('name') ?? ''); + $attrType->datatype = $request->getDataInt('datatype') ?? 0; + $attrType->custom = $request->getDataBool('custom') ?? false; + $attrType->isRequired = (bool) ($request->getData('is_required') ?? false); + $attrType->validationPattern = $request->getDataString('validation_pattern') ?? ''; + $attrType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + $attrType->setFields($request->getDataInt('fields') ?? 0); + + return $attrType; + } + + /** + * Validate attribute create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateAttributeTypeCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['name'] = empty($request->getData('name'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create attribute value + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiAttributeValueCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueCreate($request))) { + $response->set('attr_value_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrValue = $this->createAttributeValueFromRequest($request); + $this->createModel($request->header->account, $attrValue, AttributeValueMapper::class, 'attr_value', $request->getOrigin()); + + if ($attrValue->isDefault) { + $this->createModelRelation( + $request->header->account, + (int) $request->getData('type'), + $attrValue->getId(), + AttributeTypeMapper::class, 'defaults', '', $request->getOrigin() + ); + } + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Attribute value', 'Attribute value successfully created', $attrValue); + } + + /** + * Method to create attribute value from request. + * + * @param RequestAbstract $request Request + * + * @return AttributeValue + * + * @since 1.0.0 + */ + private function createAttributeValueFromRequest(RequestAbstract $request) : AttributeValue + { + /** @var AttributeType $type */ + $type = AttributeTypeMapper::get() + ->where('id', $request->getDataInt('type') ?? 0) + ->execute(); + + $attrValue = new AttributeValue(); + $attrValue->isDefault = $request->getDataBool('default') ?? false; + $attrValue->setValue($request->getData('value'), $type->datatype); + + if ($request->hasData('title')) { + $attrValue->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN); + } + + return $attrValue; + } + + /** + * Validate attribute value create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateAttributeValueCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['type'] = empty($request->getData('type'))) + || ($val['value'] = empty($request->getData('value'))) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiAttributeValueL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void + { + if (!empty($val = $this->validateAttributeValueL11nCreate($request))) { + $response->set('attr_value_l11n_create', new FormValidation($val)); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $attrL11n = $this->createAttributeValueL11nFromRequest($request); + $this->createModel($request->header->account, $attrL11n, AttributeValueL11nMapper::class, 'attr_value_l11n', $request->getOrigin()); + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $attrL11n); + } + + /** + * Method to create attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createAttributeValueL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $attrL11n = new BaseStringL11n(); + $attrL11n->ref = $request->getDataInt('value') ?? 0; + $attrL11n->setLanguage( + $request->getDataString('language') ?? $request->getLanguage() + ); + $attrL11n->content = $request->getDataString('title') ?? ''; + + return $attrL11n; + } + + /** + * Validate attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateAttributeValueL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['title'] = empty($request->getData('title'))) + || ($val['value'] = empty($request->getData('value'))) + ) { + return $val; + } + + return []; + } +} diff --git a/Controller/BackendController.php b/Controller/BackendController.php new file mode 100755 index 0000000..6450f4c --- /dev/null +++ b/Controller/BackendController.php @@ -0,0 +1,34 @@ +P(cupkW>^=TDnn0Is`#Lx}>{XLwW5buj}3aY}l;5SnC&ajycAd%jdb2@U^Q%R}l!rHBk{kSp?!j2?B9Z z>M|O9f)lZ`25%Rw1VrU7!^`=yjyD2v8zCzAM9w~TdDKBszW20oV-F|j3FXtb=g~=8 zE)pj2#su;e9Z8UtJiIcm(x9ODEGK8;@~`-wZ8vf|KF?Gv=myDlZVbeX*y}= zi*neCXriRD2h=1_iIZ-?^_LW(&RTc%CR>f?aG;~iTN(-qiasIHY;SM82gbjD)5`j; zq9j-+w(a`$ZT+V7-hIW)BWtrCNYY>!s3zVN<`N2u`o}{#4d;tSk4J@w-h1ZSPn-`R z^O>kx>XWTfdLtEQ2#bQ zbozt0qEC4^If1RgW_quBzDpw(;&o@7_?m)xO>b{l%)-KVgWeC{8YDT~PI)#qHfYsK zLkmq_7rPlIJzM1U>X3zM1)V!)cgf;&V%@0dASG4No_%6HISe~NVkLPbQ zGikZ37vF72_aD4IJ)}Y0x^)Z2Xnbu>_{4E%pwb213yZwr#D~g$(uZn&YfHB;mNQb~ z{@3z7GIcs70pwVPQq}8gIoPfqbjn3zT|B5Q_IqG2ggoqA{Bf_?;b3Ol0MQcW6dD;x z=xee|%JIgGl>Dv7`2+J=2_|OdLAP;49GC4Exinc4UfZ^j-L@!ZKVQFTm2S?`il6eR zmFqq7==Y#~8WLuht~eeLP&I9h*|J>drtC8ts2({?>Ell1}U+rNxSx$KS92@W9QV zO)V{n^24?)CL6Q{1_t=U5|JE1L~3KS>ba9-!c=Zv-g9N&?2wg5r0?NOJgBA7^fXD( z=f=DD@2=zDcpF!7a)Kqi>YnUdH5oNNe!f8Un>mhe1a14v*DOQ}KOerOQ!b2drB|<% z*o$!7+@#5QwMg{4>k-BIq%M7nGS>@evJCe^X%w<`Xpp&9R1;alIyAoi{<`B! z9;pO3KIFKm4%s;e=(a}0EX5RIro4|Rs_$Rrb^5@vYK0SL<;;(G>UB+T@%zHyVGOI2 zRJK)HmXx62^b=HOAfrwa4$u&owig>3P|Re|{K;?BS9d?+#JD-W!pSO>PPGtI7#*F6 z-SlF0b4bek$j&7RB_;f$ri@C1koyB+dD?@UBMMi(Bqwj|PCs;La5&z#P_xfP?@gE2 z-uU6^T(zN$hV2-~N$%42{T4GqvBL5a`tIsP^%!q)Y3b&v(^@n?`lU;F29QdECI!xj zZw47VFQGBoH(jq(`S$VWd;e78n{DejcT0leO--$4TJYWn5{iy9@4#)hpgwj!U_vld zZBnzAm-_?+oYR1<+q1qo8-;dfb|t}gUg8>qnd`v}3%T3o70H;QPlY+;?eQkfM=w%l ziPhn6rlX~os&lm)4Uik0hDV1Rh6$CC5?{+s!kS!q%5^!AW z8JS5L3kQ<6er=EOiDvPEW#G(XMuzakXZYH>71w@ZvcFqZ{z(72$^z-$_kc?rOIC=PDe>=a^M_S~Q z^+GoXC+EcU^t&33>aLoaX zeyE%cjk7D}+tSU%#W}Rqd$Jn!Zw5}7osWzNC*#<^fI!8$j*fuV2nMUeZG-OaZf{@0Y|M|0^X&zvy`LF+(lYE@8tN9Dfs?NSK(IB5&f=ch{>wdcFMs5pcYH*Zk zq7jSq^0g~9?d|^OP7Z^dC(buFH*;`t$^K|S@5MJp2pUU`{>xDi83KyowvIhLv5{T&Hb)i z(K~lJRha-bJSN(OCr{k%<}f~@%feo6UuzAg!>Ha-S^XXtZ0Qb*Vbu|nKCtAY^TgYF zu8?NIC?;J(X2W~Fm9HcqhogDa$kwV9GQ5(wM21?kgs3%(&v_F5IP^i#NrDg3tZ8a- zQB1@GZBR|OCA6lY;r*LZ8_^2Kur=4R@I2eBS3TLPF-gLKn^S@O=ZYd&xw*LVoSSdl zmx_Emn5P@X>BM$|hDB?g>2}(AtUiUeq-AENFkT1=|3^pm_zFf#&6v9~yV>mE{c>IL z#r}-OfhLi>Q)^rr1$G6%92~d_8Wv^y?=Di?+u!6Y9BH`pt*D5KnVGqf4d!HEXb9gy z0^$+6|0(+e3eQcQ9jbE=UX-%r>$x`RZShUyJ0vjfob0WqsS>}@duxU~v03Ufk;_yJ zvYcs|P)NbrxN@bgzFsEl6|0J>s%WLTyK<3fS3&Dm=0T@nOE_Jt`vv}w(T)X=bM5Vm zFBIh*RU9aHTda@Ql=131h=ei{Hnkj1y?T`*94k`s>YH{NWA>M?lhfNGl`HrC$c15! zx2lf2Rc7bMADchFPV+Lmt;_Yy{ldNb_q)Go)^dO7>@G&g^YHrc;>2XN>9gE$n!Fev zAGW6d`;J7Lk4WEm^Qe@U8*WONGdk_9Bq{morO75=ji6V*Pexlhq zQ?|=7Fl=?$7WMmvip$FKZH8@Meb;w4X%3bjo+hf|!CdK`P?zTs>wf8k9w?=T{5$K(&6iVEJdDzOr#ldm7J};5& zeRF6zio83^NCAOG##L8f)US`s&MK)C@+aasoKGV37jiZ{LX4}n5{ERuYt~^xx|cZa zECP1(EH37df{E=%CY0pA#@m1O;|8S|qtmQcPqw^oXy{EIUfzT83cIyU;~C9IpWOI^ zgM;-)zTe8IRP!$?Vh5le%OSJQZ96wNurZ~ht2?nWBmZgF#c8i2T>pGercwx{FTN!} z}c4fG#0aLt5oFey6rs1b*2UN* zR~1o7-)G&SUXzS+RyfQTqSPC!#4R)MUULZmc=drM4#F(Dl#mcwfy;?y`E1+CysOuJ z?5I!pnHme^(26mzCwSY13|OJqilTDua@|Kk(gu4fLVF;Xk26 z?5sbLo(c+O%^gX`tZE7d6Re>Ac?rR9*r!?Z;~A}59*goIB&H1sbMx#StrJ+1q+HLw z>9)Q^?5-fC>$X(aH?~p?eDw|tHzti&g#B+ly~eO+oRbhhM)&*#ki`Naj(eB>cS7;1 za~IM8=!DTIy4S{C>`RYVR-H zM|bLvNy-+R_Uo(Ol3Cv}XGzDSA}&-|^Mt{6c(6QJ#x5M??=Kk-ml#g3{65L!0_>y7 zp#mcb=cR=5?j>C|m!hBz?Z)-hBXS*XHd$GEraP8A0N)-}8SfU#a`QV#v*Yj@4>i3GVRB}Z228}u92HG6B-EaJ zNT>c|&Ib=tMWz6Q-y{G^;$F-wUF~3{Hu|XgqEBD~f7Wn8XZXDl5ox{U;*FkbSHHUI z6Xwsh)#xyt`EaX zR&&Ad#Xw|0mhE7841sRuGhc#VGY1`rP&(ys8|1Oq%ZUk|*-3$<_tzZmb3}TeV@Dm8 zd<+(t`4DDqX~|S|daNz_7i>i8b&~Na7P<0r+pe}1v^$YYBwHj2VG?s)l-=p-#y7QI*fB?_x#;NVSRQsmyn*Fe z-`9u#hSQ3FQl0s0zD2F$`)j0PGc943{(8p)xjmb^ueY0UNCwKh)Oeln)A_23ee=UR z3pJ+f+>Wb1MnyIEnG75BQj;Lih0z@=w{M`Zl)(%B@eqduODG$xjwbF3b!VFpv$>s- zs;RNM5A%z~@;C$o=c3oUIWv3j<~VX|j`@>Y6$~!p`zlVT>oY0*!_0SSsifl*H5DUE z{A)Ct*s8vKxku*mJ@#NLSvzN!fT@hb(f^~nke7|(V5mY0SejA z!x*YQvDbA^E#^8+zoa15WJecDNNn8Q&)M7Ce=`|o^L3e{`~!!D1n+Spa2(dHmw&qd z{CFLKw!PG-mv9y{J*~66LaJD$c|p1I42zweo%&^_NJK}RQkf|)P8=5w31M9X2EG@|eGBnO#@0%u`nm`;UNqN^F+!?^h2F-hwZWjErphHFk9c-C$!I7#y6M zo|c{?HDFZW}&qg&kMO0_jwULqM*DYZD!?KHLf(z6MrJ< z4L2%j+5Fj+cZE+*4!@iAcZ?umIQCtCy{=TtjRlB&=}n5Bu9b_|?ur$OG6B6xb$ff( zPi<0e+t{mk)X%d=$VHbERtC!=rZEWgN7KVfj5{);bZ+H8P#p^L@WR@HY7egMSE1z6 z`Q8Wybuw%_J6A5p&_;4Mp2o;Ok*yiKYa>*BgzT>+3J<5Znjy8q!011k{eZ{A5fiDO zOV4odcaT2)WtO3QYTCW;(1B{_QJvfU@IJ}Y2o9O z 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 =R{qhS~7qkyI!r73_r}Cw76cuFp2paYd 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 literal 0 HcmV?d00001 diff --git a/Docs/introduction.md b/Docs/introduction.md new file mode 100755 index 0000000..7a9212a --- /dev/null +++ b/Docs/introduction.md @@ -0,0 +1,58 @@ +# Introduction + +The **News** module can create articles, headlines and links which can be shown in the intranet, website, blog etc. + +## Target Group + +The target groups for this module are intranet users that want to inform other people about changes or news. The module can also be used for websites or blogs in order to write and show articles to visitors/customers. + +# Setup + +The module can be installed through the integrated module downloader and installer or by uploading the module into the `Modules/` directory and executing the installation through the module installer. + +The module is depending on the **Editor** module which provides most of the writing features. + +# Features + +## Timed Release + +Articles can be written in advanced and stored as a draft for further adjustments. In case an article should be released at a specific date/time this can also be configured. + +## Permissions & Groups + +By assigning permissions and groups to articles it's possible to only make them visible to intended audiences and different pages (e.g. intranet, website, blog etc.). + +## Localization + +News articles can get assigned to a language upon which it will be visible only to those who have the same language configuration. This allows organizations to target news articles not only by groups and permissions but also by localization. + +## Markdown + +The module makes use of an extended markdown version for easy writing and modifications. + +### Extendability + +Modules can provide custom elements which allows them to provide elemnts that normal markdown doesn't support. Some modules that already provide custom elements for articles: + +* Media +* Charts +* Spreadsheets +* Calendar/Events +* Tasks +* Checklists +* Profiles/Contacts + +## Version Control + +Articles can be version controlled which enables to easily see changes made by collaborators. + +## Comments + +One important module that is not required but can be used for better user interaction is the **Comments** module. This module allows to create comments to articles if enabled. + +# Recommendation + +Other modules that work great with this one together are: + +* [Editor](Editor) +* [Comments](Comments) \ No newline at end of file diff --git a/ICAL.txt b/ICAL.txt new file mode 100755 index 0000000..019045f --- /dev/null +++ b/ICAL.txt @@ -0,0 +1,49 @@ +# Individual Contributor License Agreement ("CLA") 1.0 + +Thank you for your interest in Karaka-Management (the "Company"). In order to clarify the intellectual property license granted with Contributions from any person or entity, the Company must provide a Contributor License Agreement ("CLA") on file that has been made available to each Contributor. This license is for your protection as a Contributor as well as the protection of the Company and its users; it does not change your rights to use your own Contributions for any other purpose. + +By contributing to the Company You accept and agree to the following terms and conditions for Your present and future Contributions submitted to the Company. In return, the Company shall not use Your Contributions in a way that is contrary to the public benefit or inconsistent with its bylaws in effect at the time of the Contribution. Except for the license granted herein to the Company and recipients of software distributed by the Company, You reserve all right, title, and interest in and to Your Contributions. + +## Definitions + +**"You" (or "Your")** + +"You" (or "Your") shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with the Company. For legal entities, the entity making a Contribution and all other entities that control, are controlled by, or are under common control with that entity are considered to be a single Contributor. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +**"Contribution"** + +"Contribution" shall mean any original work of authorship, including any modifications or additions to an existing work, that is intentionally submitted by You to the Company for inclusion in, or documentation of, any of the products owned or managed by the Company (the "Work"). This includes but is not limited to technical material, techniques, articles, sketches, drawings, images, models, inventions, know-how, processes, apparatus, equipment, algorithms, software programs, software source documents, and formula related to the current, future and proposed products and services regarding the Company". For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Company or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Company for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution." + +## Grant of Copyright License + +Subject to the terms and conditions of this Agreement, You hereby grant to the Company and to recipients of software distributed by the Company a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sub license, and distribute Your Contributions and such derivative works. + +## Grant of Patent License + +Subject to the terms and conditions of this Agreement, You hereby grant to the Company and to recipients of software distributed by the Company a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by You that are necessarily infringed by Your Contribution(s) alone or by combination of Your Contribution(s) with the Work to which such Contribution(s) was submitted. If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your Contribution, or the Work to which you have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed. + +## Authorization + +You represent that you are legally entitled to grant the above license. If your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to the Company, or that your employer has executed a separate Corporate CLA with the Company. + +You represent that each of Your Contributions is Your original creation (see "Third-party Contribution" for submissions on behalf of others). You represent that Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions. + +## Support + +You are not expected to provide support for Your Contributions, except to the extent You desire to provide support. You may provide support for free, for a fee, or not at all. Unless required by applicable law or agreed to in writing, You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON- INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. + +## Third-party Contribution + +Should You wish to submit work that is not Your original creation, You may submit it to the Company separately from any Contribution, identifying the complete details of its source and of any license or other restriction (including, but not limited to, related patents, trademarks, and license agreements) of which you are personally aware, and conspicuously marking the work as "Submitted on behalf of a third-party: [named here]". + +## Survival + +This Agreement shall govern all communications between the parties. You understand that this Agreement stays active even if the connection with You gets terminated unless the project the Company gets officially canceled by the project manager "Dennis Eichhorn". + +## Governing Law and Jurisdiction + +This Agreement shall be governed exclusively by German law. The courts of Hessen, Germany shall have exclusive jurisdiction. + +## Entire Agreement + +This agreement constitutes the entire agreement and supersedes all prior or contemporaneous oral or written agreements concerning such Contribution. This agreement may only be changed by mutual agreement of authorized representatives of the parties in writing. You agree to notify the Company of any facts or circumstances of which you become aware that would make these representations inaccurate in any respect. \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100755 index 0000000..18d430e --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,48 @@ +The OMS License +Version 2.0 + +1. Definitions + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by this entire document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License + +Subject to the terms and conditions of this License, each Contributor grants to You after purchase a perpetual, worldwide, non-exclusive, irrevocable copyright license to prepare Derivative Works of, publicly display, publicly perform the Work and such Derivative Works in Source or Object form. You are not allowed to sublicense, reproduce, or distribute the Work and such Derivative Works in Source or Object form. + +3. Redistribution. + +You may not reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form. + +4. Submission of Contributions + +Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +5. Trademarks + +This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work. + +6. Disclaimer of Warranty + +Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using the Work and assume any risks associated with Your exercise of permissions under this License. + +7. Limitation of Liability + +In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. diff --git a/Models/Attribute.php b/Models/Attribute.php new file mode 100755 index 0000000..e0d495c --- /dev/null +++ b/Models/Attribute.php @@ -0,0 +1,102 @@ +type = new NullAttributeType(); + $this->value = new NullAttributeValue(); + } + + /** + * Get id + * + * @return int + * + * @since 1.0.0 + */ + public function getId() : int + { + return $this->id; + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + 'ref' => $this->ref, + 'type' => $this->type, + 'value' => $this->value, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/AttributeMapper.php b/Models/AttributeMapper.php new file mode 100755 index 0000000..52e5d20 --- /dev/null +++ b/Models/AttributeMapper.php @@ -0,0 +1,74 @@ + + * @since 1.0.0 + */ + public const COLUMNS = [ + 'attribute_attr_id' => ['name' => 'attribute_attr_id', 'type' => 'int', 'internal' => 'id'], + 'attribute_attr_ref' => ['name' => 'attribute_attr_ref', 'type' => 'int', 'internal' => 'ref'], + 'attribute_attr_type' => ['name' => 'attribute_attr_type', 'type' => 'int', 'internal' => 'type'], + 'attribute_attr_value' => ['name' => 'attribute_attr_value', 'type' => 'int', 'internal' => 'value'], + ]; + + /** + * Has one relation. + * + * @var array + * @since 1.0.0 + */ + public const OWNS_ONE = [ + 'type' => [ + 'mapper' => AttributeTypeMapper::class, + 'external' => 'attribute_attr_type', + ], + 'value' => [ + 'mapper' => AttributeValueMapper::class, + 'external' => 'attribute_attr_value', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'attribute_attr'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'attribute_attr_id'; +} diff --git a/Models/AttributeType.php b/Models/AttributeType.php new file mode 100755 index 0000000..b156a16 --- /dev/null +++ b/Models/AttributeType.php @@ -0,0 +1,225 @@ +name = $name; + } + + /** + * Get id + * + * @return int + * + * @since 1.0.0 + */ + public function getId() : int + { + return $this->id; + } + + /** + * Get the default attribute value by its value + * + * @param mixed $value Value to search for + * + * @return AttributeValue + * + * @since 1.0.0 + */ + public function getDefaultByValue(mixed $value) : AttributeValue + { + foreach ($this->defaults as $default) { + if ($default->getValue() === $value) { + return $default; + } + } + + return new NullAttributeValue(); + } + + /** + * Set l11n + * + * @param string|BaseStringL11n $l11n Tag article l11n + * @param string $lang Language + * + * @return void + * + * @since 1.0.0 + */ + public function setL11n(string | BaseStringL11n $l11n, string $lang = ISO639x1Enum::_EN) : void + { + if ($l11n instanceof BaseStringL11n) { + $this->l11n = $l11n; + } elseif (isset($this->l11n) && $this->l11n instanceof BaseStringL11n) { + $this->l11n->content = $l11n; + $this->l11n->setLanguage($lang); + } else { + $this->l11n = new BaseStringL11n(); + $this->l11n->content = $l11n; + $this->l11n->setLanguage($lang); + } + } + + /** + * @return string + * + * @since 1.0.0 + */ + public function getL11n() : string + { + if (!isset($this->l11n)) { + return ''; + } + + return $this->l11n instanceof BaseStringL11n ? $this->l11n->content : $this->l11n; + } + + /** + * Set fields + * + * @param int $fields Fields + * + * @return void + * + * @since 1.0.0 + */ + public function setFields(int $fields) : void + { + $this->fields = $fields; + } + + /** + * Get default values + * + * @return array + * + * @sicne 1.0.0 + */ + public function getDefaults() : array + { + return $this->defaults; + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + 'name' => $this->name, + 'validationPattern' => $this->validationPattern, + 'custom' => $this->custom, + 'isRequired' => $this->isRequired, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/AttributeTypeL11nMapper.php b/Models/AttributeTypeL11nMapper.php new file mode 100755 index 0000000..1f45111 --- /dev/null +++ b/Models/AttributeTypeL11nMapper.php @@ -0,0 +1,66 @@ + + * @since 1.0.0 + */ + public const COLUMNS = [ + 'attribute_attr_type_l11n_id' => ['name' => 'attribute_attr_type_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'attribute_attr_type_l11n_title' => ['name' => 'attribute_attr_type_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'attribute_attr_type_l11n_type' => ['name' => 'attribute_attr_type_l11n_type', 'type' => 'int', 'internal' => 'ref'], + 'attribute_attr_type_l11n_lang' => ['name' => 'attribute_attr_type_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'attribute_attr_type_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'attribute_attr_type_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/AttributeTypeMapper.php b/Models/AttributeTypeMapper.php new file mode 100755 index 0000000..6f85261 --- /dev/null +++ b/Models/AttributeTypeMapper.php @@ -0,0 +1,82 @@ + + * @since 1.0.0 + */ + public const COLUMNS = [ + 'attribute_attr_type_id' => ['name' => 'attribute_attr_type_id', 'type' => 'int', 'internal' => 'id'], + 'attribute_attr_type_name' => ['name' => 'attribute_attr_type_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true], + 'attribute_attr_type_datatype' => ['name' => 'attribute_attr_type_datatype', 'type' => 'int', 'internal' => 'datatype'], + 'attribute_attr_type_fields' => ['name' => 'attribute_attr_type_fields', 'type' => 'int', 'internal' => 'fields'], + 'attribute_attr_type_custom' => ['name' => 'attribute_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'], + 'attribute_attr_type_pattern' => ['name' => 'attribute_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'], + 'attribute_attr_type_required' => ['name' => 'attribute_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => AttributeTypeL11nMapper::class, + 'table' => 'attribute_attr_type_l11n', + 'self' => 'attribute_attr_type_l11n_type', + 'column' => 'content', + 'external' => null, + ], + 'defaults' => [ + 'mapper' => AttributeValueMapper::class, + 'table' => 'attribute_attr_default', + 'self' => 'attribute_attr_default_type', + 'external' => 'attribute_attr_default_value', + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'attribute_attr_type'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'attribute_attr_type_id'; +} diff --git a/Models/AttributeValue.php b/Models/AttributeValue.php new file mode 100755 index 0000000..7d452ec --- /dev/null +++ b/Models/AttributeValue.php @@ -0,0 +1,230 @@ +id; + } + + /** + * Set l11n + * + * @param string|BaseStringL11n $l11n Tag article l11n + * @param string $lang Language + * + * @return void + * + * @since 1.0.0 + */ + public function setL11n(string | BaseStringL11n $l11n, string $lang = ISO639x1Enum::_EN) : void + { + if ($l11n instanceof BaseStringL11n) { + $this->l11n = $l11n; + } elseif (isset($this->l11n) && $this->l11n instanceof BaseStringL11n) { + $this->l11n->content = $l11n; + $this->l11n->setLanguage($lang); + } else { + $this->l11n = new BaseStringL11n(); + $this->l11n->content = $l11n; + $this->l11n->ref = $this->id; + $this->l11n->setLanguage($lang); + } + } + + /** + * Get localization + * + * @return null|string + * + * @since 1.0.0 + */ + public function getL11n() : ?string + { + return $this->l11n instanceof BaseStringL11n ? $this->l11n->content : $this->l11n; + } + + /** + * Set value + * + * @param int|string|float $value Value + * @param int $datatype Datatype + * + * @return void + * + * @since 1.0.0 + */ + public function setValue(mixed $value, int $datatype) : void + { + if ($datatype === AttributeValueType::_STRING) { + $this->valueStr = (string) $value; + } elseif ($datatype === AttributeValueType::_INT + || $datatype === AttributeValueType::_FLOAT_INT + || $datatype === AttributeValueType::_BOOL + ) { + $this->valueInt = (int) $value; + } elseif ($datatype === AttributeValueType::_FLOAT) { + $this->valueDec = (float) $value; + } elseif ($datatype === AttributeValueType::_DATETIME) { + $this->valueDat = new \DateTime((string) $value); + } + } + + /** + * Get value + * + * @return null|int|string|float|\DateTimeInterface + * + * @since 1.0.0 + */ + public function getValue() : mixed + { + if (!empty($this->valueStr)) { + return $this->valueStr; + } elseif (!empty($this->valueInt)) { + return $this->valueInt; + } elseif (!empty($this->valueDec)) { + return $this->valueDec; + } elseif ($this->valueDat instanceof \DateTimeInterface) { + return $this->valueDat; + } + + return null; + } + + /** + * {@inheritdoc} + */ + public function toArray() : array + { + return [ + 'id' => $this->id, + 'valueInt' => $this->valueInt, + 'valueStr' => $this->valueStr, + 'valueDec' => $this->valueDec, + 'valueDat' => $this->valueDat, + 'isDefault' => $this->isDefault, + ]; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return $this->toArray(); + } +} diff --git a/Models/AttributeValueL11nMapper.php b/Models/AttributeValueL11nMapper.php new file mode 100755 index 0000000..2208130 --- /dev/null +++ b/Models/AttributeValueL11nMapper.php @@ -0,0 +1,66 @@ + + * @since 1.0.0 + */ + public const COLUMNS = [ + 'attribute_attr_value_l11n_id' => ['name' => 'attribute_attr_value_l11n_id', 'type' => 'int', 'internal' => 'id'], + 'attribute_attr_value_l11n_title' => ['name' => 'attribute_attr_value_l11n_title', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true], + 'attribute_attr_value_l11n_value' => ['name' => 'attribute_attr_value_l11n_value', 'type' => 'int', 'internal' => 'ref'], + 'attribute_attr_value_l11n_lang' => ['name' => 'attribute_attr_value_l11n_lang', 'type' => 'string', 'internal' => 'language'], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'attribute_attr_value_l11n'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'attribute_attr_value_l11n_id'; + + /** + * Model to use by the mapper. + * + * @var class-string + * @since 1.0.0 + */ + public const MODEL = BaseStringL11n::class; +} diff --git a/Models/AttributeValueMapper.php b/Models/AttributeValueMapper.php new file mode 100755 index 0000000..f4a6815 --- /dev/null +++ b/Models/AttributeValueMapper.php @@ -0,0 +1,77 @@ + + * @since 1.0.0 + */ + public const COLUMNS = [ + 'attribute_attr_value_id' => ['name' => 'attribute_attr_value_id', 'type' => 'int', 'internal' => 'id'], + 'attribute_attr_value_default' => ['name' => 'attribute_attr_value_default', 'type' => 'bool', 'internal' => 'isDefault'], + 'attribute_attr_value_valueStr' => ['name' => 'attribute_attr_value_valueStr', 'type' => 'string', 'internal' => 'valueStr'], + 'attribute_attr_value_valueInt' => ['name' => 'attribute_attr_value_valueInt', 'type' => 'int', 'internal' => 'valueInt'], + 'attribute_attr_value_valueDec' => ['name' => 'attribute_attr_value_valueDec', 'type' => 'float', 'internal' => 'valueDec'], + 'attribute_attr_value_valueDat' => ['name' => 'attribute_attr_value_valueDat', 'type' => 'DateTime', 'internal' => 'valueDat'], + 'attribute_attr_value_unit' => ['name' => 'attribute_attr_value_unit', 'type' => 'string', 'internal' => 'unit'], + 'attribute_attr_value_deptype' => ['name' => 'attribute_attr_value_deptype', 'type' => 'int', 'internal' => 'dependingAttributeType'], + 'attribute_attr_value_depvalue' => ['name' => 'attribute_attr_value_depvalue', 'type' => 'int', 'internal' => 'dependingAttributeValue'], + ]; + + /** + * Has many relation. + * + * @var array + * @since 1.0.0 + */ + public const HAS_MANY = [ + 'l11n' => [ + 'mapper' => AttributeValueL11nMapper::class, + 'table' => 'attribute_attr_value_l11n', + 'self' => 'attribute_attr_value_l11n_value', + 'external' => null, + ], + ]; + + /** + * Primary table. + * + * @var string + * @since 1.0.0 + */ + public const TABLE = 'attribute_attr_value'; + + /** + * Primary field name. + * + * @var string + * @since 1.0.0 + */ + public const PRIMARYFIELD = 'attribute_attr_value_id'; +} diff --git a/Models/AttributeValueType.php b/Models/AttributeValueType.php new file mode 100755 index 0000000..2358dd3 --- /dev/null +++ b/Models/AttributeValueType.php @@ -0,0 +1,40 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/NullAttributeType.php b/Models/NullAttributeType.php new file mode 100755 index 0000000..5880835 --- /dev/null +++ b/Models/NullAttributeType.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/NullAttributeValue.php b/Models/NullAttributeValue.php new file mode 100755 index 0000000..13315b2 --- /dev/null +++ b/Models/NullAttributeValue.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php new file mode 100755 index 0000000..8c624ee --- /dev/null +++ b/Models/PermissionCategory.php @@ -0,0 +1,32 @@ + [ + 'Archive' => 'Archive', + 'Create' => 'Create', + 'Draft' => 'Draft', + 'News' => 'News', +]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php new file mode 100755 index 0000000..9fa8447 --- /dev/null +++ b/Theme/Backend/Lang/en.lang.php @@ -0,0 +1,17 @@ + [ + 'Accounts/Groups' => 'Accounts/Groups', +]]; diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..6fc1e5d --- /dev/null +++ b/composer.json @@ -0,0 +1,20 @@ +{ + "name": "karaka/module", + "description": "Module for Jingga.", + "authors": [ + { + "name": "Dennis Eichhorn", + "email": "spl1nes.com@googlemail.com" + } + ], + "require-dev": { + "phpunit/phpunit": ">=9.4", + "friendsofphp/php-cs-fixer": ">=3.8", + "squizlabs/php_codesniffer": ">=3.6", + "phpmd/phpmd": ">=2.9", + "phpstan/phpstan": ">=1.8.6", + "phan/phan": ">=3.2.6" + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100755 index 0000000..1885692 --- /dev/null +++ b/composer.lock @@ -0,0 +1,4802 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "83c956950eced6728b0e73b4374aacd7", + "packages": [], + "packages-dev": [ + { + "name": "composer/pcre", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T20:21:48+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-02-28T11:07:21+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.8.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "reference": "cbad1115aac4b5c3c5540e7210d3c9fba2f81fa3", + "shasum": "" + }, + "require": { + "composer/semver": "^3.2", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^1.13", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.8.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2022-03-18T17:20:59+00:00" + }, + { + "name": "microsoft/tolerant-php-parser", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/microsoft/tolerant-php-parser.git", + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/6a965617cf484355048ac6d2d3de7b6ec93abb16", + "reference": "6a965617cf484355048ac6d2d3de7b6ec93abb16", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.15" + }, + "type": "library", + "autoload": { + "psr-4": { + "Microsoft\\PhpParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Lourens", + "email": "roblou@microsoft.com" + } + ], + "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios", + "support": { + "issues": "https://github.com/microsoft/tolerant-php-parser/issues", + "source": "https://github.com/microsoft/tolerant-php-parser/tree/v0.1.1" + }, + "time": "2021-07-16T21:28:12+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + }, + "time": "2020-12-01T19:48:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.13.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", + "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + }, + "time": "2021-11-30T19:35:32+00:00" + }, + { + "name": "pdepend/pdepend", + "version": "2.10.3", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "da3166a06b4a89915920a42444f707122a1584c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/da3166a06b4a89915920a42444f707122a1584c9", + "reference": "da3166a06b4a89915920a42444f707122a1584c9", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3|^4|^5|^6.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0|^1.2.3", + "gregwar/rst": "^1.0", + "phpunit/phpunit": "^4.8.36|^5.7.27", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "support": { + "issues": "https://github.com/pdepend/pdepend/issues", + "source": "https://github.com/pdepend/pdepend/tree/2.10.3" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", + "type": "tidelift" + } + ], + "time": "2022-02-23T07:53:09+00:00" + }, + { + "name": "phan/phan", + "version": "5.3.2", + "source": { + "type": "git", + "url": "https://github.com/phan/phan.git", + "reference": "b7697eb811e912c038f709f8e1c4911c7ada3edc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phan/phan/zipball/b7697eb811e912c038f709f8e1c4911c7ada3edc", + "reference": "b7697eb811e912c038f709f8e1c4911c7ada3edc", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4|^2.0|^3.0", + "composer/xdebug-handler": "^2.0|^3.0", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.4", + "microsoft/tolerant-php-parser": "^0.1.0", + "netresearch/jsonmapper": "^1.6.0|^2.0|^3.0|^4.0", + "php": "^7.2.0|^8.0.0", + "sabre/event": "^5.1.3", + "symfony/console": "^3.2|^4.0|^5.0|^6.0", + "symfony/polyfill-mbstring": "^1.11.0", + "symfony/polyfill-php80": "^1.20.0", + "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.16+ is recommended.", + "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable", + "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8", + "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", + "ext-var_representation": "Suggested for converting values to strings in issue messages" + }, + "bin": [ + "phan", + "phan_client", + "tocheckstyle" + ], + "type": "project", + "autoload": { + "psr-4": { + "Phan\\": "src/Phan" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + }, + { + "name": "Rasmus Lerdorf" + }, + { + "name": "Andrew S. Morrison" + } + ], + "description": "A static analyzer for PHP", + "keywords": [ + "analyzer", + "php", + "static" + ], + "support": { + "issues": "https://github.com/phan/phan/issues", + "source": "https://github.com/phan/phan/tree/5.3.2" + }, + "time": "2022-02-01T00:17:36+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "time": "2020-10-14T08:32:19+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "77a32518733312af16a44300404e945338981de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" + }, + { + "name": "phpmd/phpmd", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/c0b678ba71902f539c27c14332aa0ddcf14388ec", + "reference": "c0b678ba71902f539c27c14332aa0ddcf14388ec", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", + "ext-xml": "*", + "pdepend/pdepend": "^2.10.3", + "php": ">=5.3.9" + }, + "require-dev": { + "easy-doc/easy-doc": "0.0.0 || ^1.3.2", + "ext-json": "*", + "ext-simplexml": "*", + "gregwar/rst": "^1.0", + "mikey179/vfsstream": "^1.6.8", + "phpunit/phpunit": "^4.8.36 || ^5.7.27", + "squizlabs/php_codesniffer": "^2.0" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "https://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "support": { + "irc": "irc://irc.freenode.org/phpmd", + "issues": "https://github.com/phpmd/phpmd/issues", + "source": "https://github.com/phpmd/phpmd/tree/2.12.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", + "type": "tidelift" + } + ], + "time": "2022-03-24T13:33:01+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.5.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "bbf68cae24f6dc023c607ea0f87da55dd9d55c2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bbf68cae24f6dc023c607ea0f87da55dd9d55c2b", + "reference": "bbf68cae24f6dc023c607ea0f87da55dd9d55c2b", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/1.5.4" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpstan", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-04-03T12:39:00+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.15", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.13.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-07T09:28:20+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", + "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.0", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-01T12:37:26+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "sabre/event", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sabre-io/event.git", + "reference": "d7da22897125d34d7eddf7977758191c06a74497" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabre-io/event/zipball/d7da22897125d34d7eddf7977758191c06a74497", + "reference": "d7da22897125d34d7eddf7977758191c06a74497", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.17.1", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + }, + "type": "library", + "autoload": { + "files": [ + "lib/coroutine.php", + "lib/Loop/functions.php", + "lib/Promise/functions.php" + ], + "psr-4": { + "Sabre\\Event\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + } + ], + "description": "sabre/event is a library for lightweight event-based programming", + "homepage": "http://sabre.io/event/", + "keywords": [ + "EventEmitter", + "async", + "coroutine", + "eventloop", + "events", + "hooks", + "plugin", + "promise", + "reactor", + "signal" + ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/event/issues", + "source": "https://github.com/fruux/sabre-event" + }, + "time": "2021-11-04T06:51:17+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-04-03T09:37:03+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T14:18:36+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-03-15T09:54:48+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a", + "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2021-12-12T21:44:58+00:00" + }, + { + "name": "symfony/config", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "22850bfdd2b6090568ad05dece6843c859d933b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/22850bfdd2b6090568ad05dece6843c859d933b7", + "reference": "22850bfdd2b6090568ad05dece6843c859d933b7", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/filesystem": "^5.4|^6.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-php81": "^1.22" + }, + "conflict": { + "symfony/finder": "<4.4" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/messenger": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-22T16:12:04+00:00" + }, + { + "name": "symfony/console", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "reference": "70dcf7b2ca2ea08ad6ebcc475f104a024fb5632e", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-31T17:18:25+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "3e8a405fcc2eaf4eadb25b5e259ad9bf90499848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3e8a405fcc2eaf4eadb25b5e259ad9bf90499848", + "reference": "3e8a405fcc2eaf4eadb25b5e259ad9bf90499848", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php81": "^1.22", + "symfony/service-contracts": "^1.1.6|^2.0|^3.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.4", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-08T15:43:52+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6472ea2dd415e925b90ca82be64b8bc6157f3934", + "reference": "6472ea2dd415e925b90ca82be64b8bc6157f3934", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff", + "reference": "6c9e4c41f2c51dfde3db298594ed9cba55dbf5ff", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-04-01T12:54:51+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8661b74dbabc23223f38c9b99d3f8ade71170430", + "reference": "8661b74dbabc23223f38c9b99d3f8ade71170430", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-26T17:23:29+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/51f7006670febe4cbcbae177cbffe93ff833250d", + "reference": "51f7006670febe4cbcbae177cbffe93ff833250d", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "30885182c981ab175d4d034db0f6f469898070ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", + "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-10-20T20:35:02+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-23T21:10:46+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-11-30T18:21:41+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-04T08:16:47+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.25.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-09-13T13:58:11+00:00" + }, + { + "name": "symfony/process", + "version": "v6.0.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "e13f6757e267d687e20ec5b26ccfcbbe511cd8f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/e13f6757e267d687e20ec5b26ccfcbbe511cd8f4", + "reference": "e13f6757e267d687e20ec5b26ccfcbbe511cd8f4", + "shasum": "" + }, + "require": { + "php": ">=8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.0.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-18T16:21:55+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e517458f278c2131ca9f262f8fbaf01410f2c65c", + "reference": "e517458f278c2131ca9f262f8fbaf01410f2c65c", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.0.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-03-13T20:10:05+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337", + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-02-21T17:15:17+00:00" + }, + { + "name": "symfony/string", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2", + "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.0.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-01-02T09:55:41+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "tysonandre/var_representation_polyfill", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/TysonAndre/var_representation_polyfill.git", + "reference": "0a942e74e18af5514749895507bc6ca7ab96399a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/0a942e74e18af5514749895507bc6ca7ab96399a", + "reference": "0a942e74e18af5514749895507bc6ca7ab96399a", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.2.0|^8.0.0" + }, + "require-dev": { + "phan/phan": "^4.0", + "phpunit/phpunit": "^8.5.0" + }, + "suggest": { + "ext-var_representation": "*" + }, + "type": "library", + "autoload": { + "files": [ + "src/var_representation.php" + ], + "psr-4": { + "VarRepresentation\\": "src/VarRepresentation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tyson Andre" + } + ], + "description": "Polyfill for var_representation: convert a variable to a string in a way that fixes the shortcomings of var_export", + "keywords": [ + "var_export", + "var_representation" + ], + "support": { + "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.1" + }, + "time": "2021-08-16T00:12:50+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.0.0" +} diff --git a/img/module_teaser_small.png b/img/module_teaser_small.png new file mode 100755 index 0000000000000000000000000000000000000000..27d7f3c7175f5db390881b4c82ea1f09b1a063cf GIT binary patch literal 90210 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%0DSFs;1ry|5t9vm^w*!cZD+e3kSNH3g3{$}c|3mrY zc-5IQOu)m?D!7>%Qx)Ix&DcIg1&Nc@dS3*u0Tm+jtp*m>hMC7=!SQA!GQZ>ePn{{P z6^s+=dNh)sMcvYKawL1$jRoBeCRq5o?Ke#cH5m5*NHy>y5pK#49F^Z+lt1=9l>I); zy)&oWNrNkWrx^S#4_3#7nuQ8>6;9cECxVIUMo1BI68~liCwYFx0*^MzER?T9$P!6| zA;MZmXLz_)wWFrMyPfVqa3bI;f$yDN;f5RlqIosMACc&k4BJ2wI&GK14&U361S2~p zlzRfRs%11WKNDd%AamiT0xQeTAG#kp{9lVwd&q5##(8ib+T;yAaH`9gKJnE>(89-B zQ0MJ1oLGyv2+&LCS_gh{^H2YQAjI;#)tSB|b>qyV1-|vKaY&;P@G67K3|%dD`+~ds zY}7S-$SKS$Zvt&Hh*>b8MQ7#QdjOp&GFhVbn>o}h_0`HH_SptxS)z+LoEEBT=>+2r z*JtakS65c1Y2{RFnTeHQ_=(u5l|gCAXw_IO46tWJ!vV1k4rp}4O38O;PHR;$)p!XB zkh;8L^6)U~6*t%3{uPBVthxo$$G>!>rk7v1pP?X__g%0e+QwbQjpp3+6-nv94G531l++UgP1ouh{k&I`b5ER{0GMGsQr~}h8~CfBv!!4ypNa8oLYMi< zy}zD8RTtr;wN;OW!LkUMYCORfIxV%TDtuz*8a_-`7%pv7*G6b!Qp9-_6l<=^#yhke z+&m<;gGSFNu>CJyA0!RXa@F1p4ws8~#V@4-4)yg8OP}K1?BUYPP*bVIa zU@-zgO#d;W@FAacLG#TauNR?ELcq~$E=jG zXqrO$#SV#$3)}6uul+q z`=4-%^?Jk26pxJy+J(ReWIT`DK-R(lMC$seH$r4TI21COSj~~C<1Mv}X)#gP5%`mL zyc~z-$~~96<1DM_00T*`UlbqtOF|kLJFqAWu--CBOb8|UTEg8gQ=kuKIXB9!4WlIA z6gqG391yaE4}d_bOsdII85%IRDTSX!s<@u`USaP0fGx!b?9kV&11mR`G+sQ%@Wy>UeUzGcIrD}~*);LM{zYiyu%UJ9W zMUVMr@u9NfwGwQLpGZ*yB7Wn^{=k-{MV6EyUb);8N{ZrvOv1E*caXYy^gZ2L&aLP1 zJc5>#x?^w4QgI@Nav^TI7PsJdnsx54CRy@e!bm+ENaTpnnVaAb)|)>c5={IpHVv}f zGD1*iod)O)wXtiB%l;XPf|}y_sNAmYl~#N0C54h^REveX>V54I>;E&xI_RDo4ZQqw zWV^-EnutCE1p=wngWl}{YgNJaH%MF0f0-kZWzE1FEUk#(Zp*u0?a;`0XQ;s*3;f_6YX;u>$nVpkbR~lpXf- zS2YsE7USG2W#t*a4GHTK$ggNWc(0LvjDuN6a5X4^_D4+D(0~ReU1X-EB;RyD%s(Bg zZKOlVb2-28$SvwG0ISX2Ps09Frrigh7+=+Lb?u*Rkb0E)^gekHNI|(MA>LR59%77N z&hTvp>$|&grZ)>;c0KuDj(=2;BRNtTxv1XvU}_-!pqc9q=)h|bf(FKa2S=>p+n0=e6aSz8b znzeLncwu%OEXjVF!>#xk!;vfKcd*-%x=CazbsaiqMrQiR;5qQa^{!>88P2jV$mc=; zoE?^gijTK%DOoZ(e^hZd=k(a{4V`{`P*Vs=@Dr>#G>*k>?{ngP$_b6cZcUbei6oe4GKE^&qrkS$wV> z@$lD>G}N(-dJU7KZR8u!rq2ZBTO_TdhxPqR-D_lv$IPQHwh>>7%YVMl=LsR{xknpF zmX?c!FHqtg+Yoj6^(KzRfSh8^|MOl9M%V_@2D{od*tv)fS@5_f6hL;8DZ-RBV+&xl z8l|X0R#|i*?i$%q@da1^(kzo@k-69F-bmzZ(HTW7{8O8!*W8*URB+;LDif3 zff0qcU2VuHZ~8vy_V=se>A~SsCUz!og{omF8DP1CduPBiyp3gugR~^0=cU9J&ml39vz~-Xr|zNY-F4Hrpo6 zS=JXRxOrG4L-$ANOQE^Uf0=B!^=|xTkI!vn92K09WM=X96E$4^(>R$ltA35t7pVV+ zohlC3RZray9Ct5F90(coCh#5vlwgm5{%$dpBcK|C%7)vBE>;P?3;qz23C4zbW%vKDu(KE2{oXOFAsd>C_fZSeOAV4HFZ!r-$a_s}?A<&iT_9-Iwx zR-(C=x>g`|V z0NQNwB%n>)R#}$0N0w;?6}E6! zd3^aPFs)DpG*4EP=w-?Xpkgb04B#*$soKhoRqEb_SZB*r%Ck{pg5RrO2aDcj@y2i! zrN7_P(&4H_qL-!6k@!;Y)lZrFt&+PO{W7(;`JqtaieUPrLE_geitm_m92cbA_im!h zq!Q8f_+Zj#N9}C{Ey%N~Y~LTKw(sjf7;sVCo90x_?Q2?jR#~0u9IUaIt0x?CXq^siI2wjxs)j^YRIKA z=KFC*fUG*w(&{CNK_9ws%Wo0i*q(Q4%O5U8w-Rvkfh*fw|xLP59rix99wOE{44S`F*<2 zVT*FDFh*gTlG9a=dY}x1t4}OwCQ{$@qWg7RBuLHe$oQgKtKb5TdwSm+4B;;LM3!!v zav!KdKW}-JsIG4> zvPNO^wPeusU)DE}rj^^5B2qD6dEge#&h$zRaH+zuo!BNFLF^Qy(S4Wi_)hYt2Knij3fGmlRWV$Wif z2EC-7Qd9wAaV+)|)W*h_kml9e@w!)Yn>H?uIJ8`Yi7uV0RHxFFV)Y+-GO^MK4z`!E zXnaMjrl;3IJZp{$|3y(bhY{xr`^(Q;M zePh;RJ&Fp-4LpY=61M`IZ!t5K zarZMCP?d5-v>seJ5h4O$1u!1>iNzu-ug0Z+d*Hl5;By+flBUYRzb#G_z=&~<_*#!Q zhYLib*v(xqZ>$`I^OXM!^L#mTxU?lG;BQ}6B6Z#Zl-qyXawY0(8=9!zzhi{NN=|MV z{CZn7ps^d8NxL^q*zv~@p>yqP(^x@1cR@#SUKj@gZkr_xL#>~}bixG_Et z_6DPw&F~PT9FVNy{r9gq;QmnWWoZ{{h+@)v>6e-0W z3bg3Wckg|k{D957GdnwH&Ypwe&W~qof%~VDQJw>NgN=C9{PVE}x&wl;FV!?%7TNhj zwwld9WxKKgIQIYE{H29Y=zQUyIrUrQxa%)?#oF)Eyh-*%&8)PW;rh!`65SNxY25Tj zPgHUhY^=T#_^F^CoM~-G(+6pEsa~@0X3hb~9t1!)q5fLJG=AFnQPA#})l&R0h2o{~#;hHTxAU~^Dh<%@Vq zBmW13JMb{+L=CZ2;=1CDYj8EH9JyYOYyM=aoVb7=4ZwD6mruQM`+J}2&Xv=6Faw1> zcsJlO|F8)hvEoct6Dt7~H;udK)*^5;S+XkwR3zb}C4Oe^eHpdiU*?<}K#w8cCUFm4 z^a<56jr4qR8PeQ6Ro3xH{&A~5n6aE{_6Pq=1)vc&*Vkn+Sy{~cM@e2&;NpJw zuq`{}ilZW`Rgaaq5;&+mbYei7_#j7o=0R6A0VKz!y&d%c%MY8_Wx(%bDRgF#45Ee) z=#2}J4F#pu27e@}GjAxPbhCOY^w!d~(X2J7J)FO_ypOu~&fv{sf*#rPcZD87PZsEC z9W>!eAMgQfRnDW0@V$XDxY;j4*-qB6_Z@x>vO1=7iu(7>eT<74Evb($1LBVe%lHCS^uKHd>MqnUqzUeWW@jIp7j z{H>EYTS2N7GGS7GZeD!6HuZ0T8%&40{n)4$TeuL_+`peusquEH->y61)@M-*X4+2G zxCDCqLaFgng$Q}a8gQK%?ridNpn#ni0$lI30OK@x8MQ2pLinE&o+(&f;CwdBKu$w1 zQQe}wlXVi|4L~p)pm~2Qu&%8?NiMwMM}&o9wBgI}Y1^JT)#3|x@U3;t*#?@byBSz7 zUgy8BkspHHaV0c(TMxhLMFZ@Tr>vj>YftXG)uZS$6b%!4sH!>dC$sA-tkSh}DprkS zBO({o8D~|S%VQvRtgvsw{@Q|h3AH-dqt#KH5t|#F&}$ED&@iVT zwWF5T5wmg@jUh89D#d4?oyYTSWDQ7MnPS9Z_wMblSwsP@6>A$tKvi%7dF(S9=Bxe7HF&7J*woj zs>If^(L=u#hjT_BKRCeL<9Z*L`j8Ef95x{{)KCHbX~BvBkXOA=VBBJn;br31t@hq@ zFHRC71`fJv#Ld80^<`P2D24toc-YT6sj0JXyab5#> z1Ps&8H8ONC_k{v#iXV&)M7$eod3K5>Rzo1|^OV>Lc62Ro9fWCD2can98Svs1bnQ6N zSRCFI%f%-|8_xH67S~IEsGOt=@)%WJSF#->+k#`btMov7iV7OS`c5ao_j> zY*p?VOT3h2_03R&&_;TUO!GyS8)74X-K4qc2LMf1X?Bu@j%WZx9d4uWo3z;HZi-Qr zakd0)R^!K=r9VH^0vx!{F(>Z%emd$;^o0bKMc;Fo#p^#6$(ra!!s&)Jmdc^@Jy7p1VJ;% zGv^9k7(vP`Np|xd&Fh{17julfy?~pVPTahVZH>&u4H8|i6t$1%_RMl`<1J9DBp+UWgvw8=W%!V%u%W6`KWd1i`B|Fm1gi z1EL!^flXf&t2r3sDN&Qo*4B!7% zN5u~`11wD}@(F|?<6B}CH>La_gqPlZ`*Da%`wmwK+T6!Q8O7WAS1iAy-6Q)i%pN`* z@;Vj;7~3`14#;O4g#L!LpCA9G)};Ir-C|{L|1hm)AZ}gO!&?TTbwGQ!>2PUDb~sN2 zeR?Y1U0RdS*8L}J6W`ktF4a0LM#)qeO8{sHMpYXNA#V>kkb!u}5WMZ)_Y_8B@_Vbp zT2*PF!}nc#_KURoZ_r{@L{9VvkyJpgXNA5u<{8c%zA6?)NpV~mCp-wQ&^C&6?N z{o>GLG1NCR3w0dRveYxQ(OGg#X}UM^3$dQC8B&p{=J)EUNZf7}x++R8n0tX3NL+DD z8|89XD@+YPa?PxVbkTA=%i5t!#QPS)@QhUXNKVF^p%sj%bpFJb7qY7*_fZS{FcEvC zhc0_p99>-AV~MSIcp^BZ+<_nG|5BXj>98Jea5VfV!;25oE5PF0GZ6ED%`Ze0D5ebV zmO2?flXH7&Bq^1Xts>o9T&Z3dgPQ?*#&yM|R-UL48nHL-PZy#OH8P*&4??inzpG#` zl>#x*spE2f1$b}4B&#A+w@o}ktMcuD@P`)m;TiMB>PXqiDd%V$p0Zrrc(jP*?)iKP zL{+v}hv0*2O92$&S)b!!1xMcn1 z4SniPA_Tnqh>i8RuIYrc%`PQS7IA^3QH?Q+-yLgbALR^huVe;^0J9;x6f>`Ny>Kg3TdWgSW2FzaiJ*TRJK^*qM6sB#i_YGuzR>YKT z$O=@({?giF29$Fm=e{YmJ}F3@^&s}5>m_tLE{{dC_e&hDUVwRpp!AJ8RVEQLtnAXf z9&|J>e6et}yBu`Vnn}?m?Lff~eOMQWg1SE;`-b8eDP+Hwb7!x=Xme6=%g#LIs=L~d zonH@$J}=Njw_p3wZams?6hcqaYK*h@n!R|myB+(eGdaQEzm6r2n4pbdj=v!ac|-HB zu#TPOd^RDr<=y^996zFU?x=`?3kQ_hIEj7!^WtBx;}J18t*_khVt+*MvI45bzMEr} zoiWcv1^-JbX?m&_z3=KraX;F%lCp4h*dKU{m5j)_g`tm*;PU6N(77L4(V6AtOx(sA zDN*nCP5KSQOZ*Jg2blV)!qPCK3~gQTiG>Hd)aS>@VBxz8H06gd&-AJKQ^OAQ1J_S03rO+~bl*N32J9P)}h+LZh9A~>{WL74f& z_r|9yRUx-;C<9me2Os`%eEg*qLTOq6@kmN+t-4uIh!nb$(@}uD>c8Zh^gmP6zQzs= zDPl?$?UT>{Ni$A$Zcl!vGDodF?jjgK>^}|@tW%$osY(Xgpk`_(Ucof{wAi9>*!+^! zF(Pc@;a0NmH*SOYl`bFF(m}!TsK?k^^3Xa}u*|e)FJR=Gt7V(hjPh zZM1UUIx~kDW8NJnYj1N#w#JY$icTT=!O;Nm%}aNQ*O%jv1f1>4Hqas8#?x^~_{y#G zW&2yKkP}yrs-R&yFH_5JRB>=ddcS%6P*~Hl=8c!Sr?qi~3N;nUe2Dj4MuR^$qqsUI zC8ATn9R4F<9uQqeNNa$tyULFs$PUs6FS_oK+4$CIgs`@=6Q{dmePW0q*A{!{<)af` zLSZp;tec}iHE1UD`0<%+DYpc0Vz`Tys3(>-96X+UO*XIPdMY! zK-Wpn83#XB_BjKcjS)9c7L9BM8+#EtL(?jj+_re zm`{~Rb{JV2EN%rWESg_9d$!_v^%Vy{F`~EayurGh&8nXUpt0H$t(i2B7c8z9Dqzy_ z=MTfpSNQt&F2+vN8ENyBE>CG5WIS%FgYjVpcehEC&vhJdikP@w5Uou2;jGJ`YNdJX z=`A8vhA*B0xW*?k$uK}p8QTs!$mebJxt$~2y-^#dGJ9{H_cPI#wkz9-70iP7RlrS? z@Y6s{GCiV66BLPR3yOCyN@T%t&OI+%S@ri%xR)^ZX*UCXfIiOKvE!Ln%w_pPSSro4 z|KHsE!CJ9M+Tm`va4^D}7L~rh6zVw4aNZjghN%7KRT5o#9GlR|{xctGY|Wdyu7ef! zZ5<l2$>B{#CaZ(!`(7B@U9$=q+`xTmV0xc>lz2 zevC7{*OFjP;7oKg5c!+EYAWWmS3efC42Z3F56L@MB~AB+3fM8}AIsHA(MGXbq$|A- zjVJZ|rFE1;(s~_BcA1-&R6>BruI*8+Iq}^`E3O&gV+CfA7(YegKry-^k(>y)E7HF% zkzH0JWtZp`x8t&rEa~&Yxa;H{iRYi}`>R%^^TAt`bATAc2q>0L{VNK);Qf~?ojf2X z8D-SU&`}e=ORIg_h%x!&O-)&l{~^WQ_x1~4nz5=b$Q*PC-&XL9AwZ5TUwaev9vCY; z9Zc)r-Yx=UAQ82=&&{nVu$@GKG-xCboI<07LTx@~F?$*hu!Sa=MA$6z3jVfv`V)LZ z*}~gsI-rq!cilY*dZP;Fc(cq<7=4G>>t8guz6vCQ z^pKC&nzHO5SQ0UI^+diC3pz(2`x<~PtP<{v;gXZYND>z(uFHxj>I1j@dE7G+fOw2+ z9v(mg^L#HD)=Bzwr7lwKM4c6w^f|37HUp2a>BQRlsZDSNSR>Npn{+0ST8%J4Gg-uT z@jDW=K;5ImRnn_oN^aFQOpU$xpW1qwyq)tc=*8j@YpuvO!M_5TDpi~%A43oeUVeR~ z4lA=I7xZ{Z5EjJ(>q8Qhf>E?WcA`hJ5BkXyoVU*^pnlxp^8ExbW(cJ_4_T<>qx+bE zm69lA_x6+B0(h)AE~YV7f{=&_?zif$c<0%M_>w43fGkTHiBLQyt=~mTWffvvEs_-d ztI(^?xUKx4&knuzGWZS-Bex_k+GF!$(rI*Od>rO4P)kuH1qgS!<*DG^|ufE(>eHj5gV zp}n!_6beXVo&lIJ9;ET(*rp-vONwWgLzf~m7r3D-ZU|gdz;1)XQG>;r5zlT;J->nk z9m02{|ID#XAHf8jM9B?PgVm4??nWGXg2`jM56pHS?J(cypkT=5UM^V5y+UypMdjC? zPZ`|{A2xA{WDqy7+?D{mg6w(A252LPddrIxHr{7uV*9PDn&3a3=MfyqO{6-~GsUsz zUvcN-evLTuA%g9|(Jq22B*1BaVz<>w^5XoQmEOylA+68w+W1#$O8?e!V{se!{Jzqp z;c8_|_^taVD$#&;AO)kMy<317uPSF?akB|6&?(`ro zh=WpxZyXy&wi|wSMzrC1(XXycRHdGrJ)(~_V|1W=N_cm~jP>Tr59gYizIbu~Zu!s6 zU@aznONa17ya1^h&HMgG1IITv-we=}b1Bt{JHS4X$vxB_#x0lM;%{n~ZO|_wT`7cO z2zXeB3+jr9!sW1bm{L*X-s|BCSRmdF^%6k5mkQWLuSV)e@M)bqmNYY`9~4vz5KOZ* z^uuzHsFcn@=Z`!DH4;FO1eX3PLZ!#6r>+{b2|+xV1irJ(TXr{Sfv1#yo*%-gZ*Z`~ zxyRi1>ZwkEk%;j3a&^|e#oELUudR5uqC*pMIyLI&Q+-~i9XQUtaIjRWBYV+|X0$Z3 z_b9+~gq;NgtNtc$3deMXEx`8-YS8?l~Vv1`zsl4)J{##r3yi2Fuj#{JZ<&X86MMJh1^ ze`C&i;KQ5#;~MFkAxk1v4%C!qGZaqNn4>9BJV9_yNe}sA2R|@l^n9mu*u{68R@R%C z`4mC${3;DN^D;7{A4!Z*noEnVL+F}|zx3N$@;*8=AA>-$_1M5g=B04H>n^94G80i^ zb3UZy13_glsksG``&+m*dyt&2K%Vm>vu;jF9d=Is^Y=C38cls)ro1|BLnMzmpf9p% z5(IH`sxV6KRd*Y%4bo^Rw}+0g3iYKhRYP^9kJ69JzC{xJ%-mHWgxkVOm!}we#;}69 zHU*2^7X6iV)FdLPeC(bRy12;HVc@UVOUyi<; zHzS$fG*C_aBF^Y-4&Q)q>?^O(+Mr27)n z3Id(TFHFCNQlgxS@Sm_}O{rEonvh#i84J&0j?brrU=#OwZWpI}t8K-dG2L!-s#P+#Z0h6g2nyevd`SXEz*kXXFL}ZPSUsmf$l!n-YtRfo_y0?p z)-2dZWzt}~oAhMZTS&yUX!Q0*>2tFhk8N| zm4b}co6awkTmL9e{hZ-eavQe63bdYT5RAQG&}6CmN(2jyGUGx}<)D{eyx=_sOH|{U z1H-TyFxgE?e#5iO|Krq>wGl%LJjMR; zcMw29@3CERV2fdiHgcNt+bUH-BA23^e3x z$>Hl~RwYnzaoY#Z`)nnKVH%Wtn5ynGmhqk&GqyLAhBG`QlWuRqhqOo8g&KXl2woH= z_rzT~{KUPeeGW1It_{t1YpoM^5_%85c`ww)XZ{Lf7S+#`O>`c9)zw$zaAG1nA-@Y? znBIG~^!IPPlF(H26_y{;U0v;}&MnE}w@p zqITbMN9+(OJ|x4|ahNm;pa|3I*uJad(owN~!7xU%HO>*YDav#yh&5DPw=1}HmFpyB zjs$?Xtm&ueBXQI^YPt*27J=bTY`!GMyitnLT&V5E@W%Xa_(LtvqdVNW;gu~T33(^o z9o*gqV`qi0N-dVIJZ<6oUpJmQc5elPdgnqvfHtx1Cerki`1U;Qj@3O@1t->jbXe4ub;Eo1>f7^x~^p~}w3k(I8* z@y69hA3>U@7QyP=x!mgiZI1MJ~@+3md zA#mDA{#F_)6OPhA*Ytpn`v9Kj4wM4|FjCc0TW%T>cFLN*sJdTOmBxu1XV2?ZS*6*~ z`Bey*(S^s*NlqSub*-Wl)xaIHd&5*Thu8uWGoQB`u&THZuA9`f_0l{~sjW^L!?*m{ z!Dp8tgR>(SIbnBMq^%U-oiI&ljKqG#%|1}?bDCo}Z&L-KiH`?jqo5K4u!`HH_Fh<& z&G9NsU(T^E?1$R2hts-`K77(i7Wx7UIy&?G)9veg?b#N5So2Wo zbWusqln3YiI_#E{+&7LNzw7w$8iI5}qp@t>$Uj=u1$O}Eh%gG@>_s@WY}H`Tr_LBf zX$b$0#?*#BY%I*QWy&IeB~}+QCMFN~VD zY(x95N+0II&bA>bK+6u^vjZ>P;5f7_)TDbDCIwAeh+U1rF|t?M<7n=~l{VQyq>@`z zZM_!Hzu4QkA@kj_jO@-vaHGJ4k*0|*pF?6%4i?zDR%km<=yQHAzDF3syz)mOBk&+! zEs;KdEzz|x+DI32ZH9L^tucieX*z_&dN=@ghQX{vV?@smme5>?%O#|Yikhid7kSjZ zN`f)(@qN>G)xAsE^32Goz2_2VkOCf`bevgic4Ag&PI01jQs2Gt@!&Bd)KYKnDg@XG zh2OPIrI6grBm1th&a%G4KIRAt1Q6^1Zi%$#5m3(Ff6p;Dkb?`k?cp<4&i}3w6+;m* zz1V>dXN46Ym}vaa)2zz8ze-f(R;lW{Q>?$!yul?z#vJem0ezoVPl65qNnCt5jxP8O zwXVDmQ=@=0QDb)N+D~6YDiB>X!0rcXL)1pkr#}k({~bZ_@55@52=}^vZfR|A z(CZ{VDhS*3sy`@^y(mknq3-vMzHQ`cv99CJZxKeJi~P=TyF2h_p-_q$X5EA%aP+iRb*fI?|_v=?%T6y((^u9ngLV#N(kC?*GTD-A`S{OtB)}AE% z3FVritt$olc(kwGly@`2hB#p&V1S!)4h1cnm&z5(zRWE^@n7v5u5jMkRJ}FqYc6|59>1V4Wq;#!jY#j9iP($t z?G4Yr%8kAnji^t++{|>S9k$Z<)WToO6vi_5taVZlg~sxg*tG&x$8bss$oW651%hYraZjI&4le_D^b>8JRgiE6VckXm;jX;dYr2jzs>&5^ z!qp;uqQv#6-4?otmQjWx(e{&2%2h_(Xjw^`R8M$aL~k)?FVH#0R{4SN;nma&Cr*0( zC8L4FVycyVnj90$lbDmik^hHT#Xp`c3tBP}v0eA?%w9PUn(9vLf2^1- zTAWY7YDn>>a^{lN&>2hTxp)oP0lwT3Z!pQ|Ijdsho`zAhDe3!AO?#{)%0|1cuR)-{ z@zbgXJTW^|1UcUf`oKMe_zR+(O$_C-e_NqMo?T<)LaTvA&8}%;^-_gduDg@*OP?OY za`Lc<_|0YYvZkJZ53Qv=DV=n+}0KWw?fF8K~zMo__TS8Y-NT7<1h$KY7`-Z}8dWb5Uo zxb3dKm!TcxbicL{oeh75leGJF?!R3^h^N4H>naZi2)aXZDTe&r?2^qwn|qKugKFoP za;8?QkZU<;Q#^h$D=SZJ4u4cz4q%zHTLb;VWG@mlD)RMpOR}6cTp3rX!1ze6vDr+{ zt_5LU+a&MQ|7}PY4hr9pbx9HWdX5K^$i{~rEm$!(-n*asS1xS*tlPTH3E9aHI_H_J z=p()ii^xXC3iTrNTS__&F<6C|S>EuW)~6>fHfwl)sLx7XG!6}n(vtysRm-Q4egBYG zM~i8M_Ye*Jt=khd+-3-N9jU~fyEY6KCk_7*X(+^rkU2fc+{uh89ALCx$5`>;jsng1y;MR^V=O0tm zKm0hJ;dwH_UQdWT);HxB@)pI8fTGUt=y^Ezhgsdbvvl=MAmoe+En-`5s4GmZbU2UU zZFGqK#;^Tm1w@veBvLksJ`r+tP!01}RG)PT&|fxG7f@%bXhvf*kZY_1b|EBNW--;3 zS?f`nF%jLT7&>83b&{dxq)nahM*{v4#=VEnzlOfXNkjHQ+f+&{QNla9N|3r}*PU1r z>QEB~%nx`i!cVsceS7wqv%P-{Pa24{sY@l{r7baA$sH9P;1tcn@LkrX@@MG}GjOwn zzax^f=q(Zaceo-7VdbYs;5SG5B3QQVCQ;Ck<^gUspmhk74{>T^o=~ln%CHLs%=GEC z2)3VhTmh4neRzn#sk-2-2%umm2HcEYSPc1FoNQ=RWehgoX+B`%om5+;%N2;_R%omRW7djLM)3wXjzS6qZr(Q>| z{a#01NBXp%>c6I!4VPU;TnHoH%LuZW4S~QVM!nJo1kce3J{$)?P`u1oAE=q`tg?kZ zg^;kjfT!+eV@3LI>gzYIa{SJupRAKve||)B+INHxv|nER*dZR$$U8xxZKIK{Z{r`_ zUCmLVC7NU3HXwHzz^!0^pN~dh?SJ2w??4&U-M806ptM_TMhCfxFgL@{4CNdx!VP`X zD)2P{zeT~A02VvNgG`v0yl%we&KeCt}h8WtIasA!0n;zfjaa%5vr-a20|gP?Vy|jZC^ckWJMv><|FtHKjgATEY9{ zQz5_K)@|NK-Lr&#>8_c6fjD0eJnmmd^Jmk4d%--iGkHm4(xNarBR?IJ8$9816naKL$e3Vx zgrZH8q8!XZBGKc<>vSdVM>ytck%1L^Ic3P;E`R7T2V{#MeR#J?i0}V;hM}GodF2s% zCjw-jyn(5LO1*!ABKNhB1`CJ}k(qdYuBCoDQA`;Dv@F%G&=+kvnHH4}N|2GyjGw%q zMA`=RZ4l9^vE8N;f4n-5mDv0mzE2_+0NaC4c{dWL3gJS4MXz&tlSrSQ{Wc@59$&LJ z!i<|qf#mz|YjKBKv>YztO@2v$bw#4vJWV-Ii_4lJo!|{^vEvbW~=wt53dSCtn%^y3)?B!yvOVJMJaaK0Q!Ulv( z1^oryvnghT-eGS&{kOJ|c$1)_jb(TM;+{w`vO&ticBOdJZy5nISOi{j zxH0eZJVAEE5ueI%o+Qb!8z7lKiw@d`-1v#0vMaH7wh$5cP7X~QQ0gK-$()u#OON3I z;6kj+@3;v%-^qQ&YkrW+#)V5njF1`ii$5JqRnQEb+oG-P%GeiULyL40r7dw7oj7op znGO|}`??2p2fAuAoWfaKi1ZlFe^h@6P@M39&g7Kg$F&{>86f0*q;5Av-bSrReLErk zcoOHF@E^RDuHhav*KQPT+)1V{v7w_t(>NA^8~BgA5k^MO%5-0qQ+#n|VfWo|>fr6e zdD*(Ys=-yudd<=?JT(u(MN7mJ0)i!MqHY!3fQAxGi+H6w~+$kL!Gg z&=Iu*%j>Pxg6E$y%zpKj-1i}9PQ=bFB1++e85*LS49Q-9E)?l1RuX*3axB}*yAb^L zSbxv965gHw8xYC3*B7(hZ`|bmXe1|M+W1bO-bMz$9_19{$NgyT5-gMb{H&4+SwT<@ z)IR5rK}=q2Rj&AWFArCwy|KJn@~b9L_V~4)!#)MQHIprv**KW^#)*bN5MG}3e&`zJ zGFMIko+m4^b@taT z0YpEUDV%Hy5UVf1!OSX%tq3b#--BEOw7Sp_ggUtlukX^`#eG&O10n zKp7jqa{H~H!5p^bPd?a-xov_XT(AO1%4x^Zpg(RDF?HS|3bnzkC7SuuE2Gm44M0^3 zES$@>m6SM@wSY5=)CO6Ls1Na~tSdwg7F@s?&N+!XeKK~zTl58@>mXx>f+((@fQYt*#vhF@d{ zBfEPNJ(}}Bp8&C=%3@k<-Ca<%L}@WxL=lAF{a>q7#yz87jf9CpjxA_@sb6;atw&-$ zoq+Z%TpzJC7lQ45YaXNS9MfR19mk?5*?H-L?QXM&>2TEXCDo3IhnC4~tu{(3wX#oh__tsWhmXydP>&tLo%y@_`L&I4{(tdf4LAhfNce%53VDB zUOc_p-IiYU87%Oipn1)>>7-t@YQH5uu^g-BFnHJ-c;hE9u&pr zvM3WL(#NGUiJlyUPUcupI;L;u{`(MtSSy%zjR)$UH^r)SI_?dQa&otR_IH2G9NW6w zl_7I`t7x(ZABTGR;1H=FlF4n)wm*AcXUNQIeL5AYqzNYYP#7$1EQV{zwaN)}PSy+6 zdn*w3Nvs{DKyC#rJ4W8-~OI)@53LI!r9qdRd0%F{)Af9>8p*xd_ZhA!Nh71zN^2pR1LMF z&;}ZJ%vZq^i<heL8_=pMpz^W{nEOrx+V%W@bhXANW2hOuR|Bp2B2OTV~eVcVBh9x%H%T+hwNf zSKWQPa{f@jaO8V(ds1cAe*V1V-fGRGD)O@g$}e3GZz^0uK1-EP#+$KE+Nfg_C4|R< z^_{{rt(fcnp3r46qh$O0IVc=}*=pFJE_hT45Rlp{tI+-ZQ1Rd!rx6h9XGX65eNm&m z1D&(*N^==C3{Ziu7FDVNqbS9Fke6`m2wt|E1uun%!tWSey%890tZX%>YT_2Yg-gVQ zUtboLsJHV$hF`F6Ikj#;e}#5x6>$u%%++_R_`BOJU|$Jx+aFc`KfNHmOq(eYUCP;A z+qE3#m^U!zlL4eR=8ipkrx$UoZPHmnhlANM`4QUy1qO)St<(UU3;th@!*_t9yBoHu z0pwH{bBE!UF^^qloo}p@NGv{Xs^Z69ot|zJFsBY)`sS{0tLp+TJ zNR1QyVKGBuD6{mxa7CimRkPk0I<1V&^>8ESbQG4+{srTjCG2!XwU)6Y(ZkU6>VHrOi%l#p$Z;UV7%L?fi7!RGlT%Y3!Da{xm+mjA6~QyI4b zx=^($%dY^_4LQ#5Rv?P_dGBNFr?&d9sdbWC1&?F*del-VWjsTQ7=mLpx0XBe*^=U` ziTRYS4`&o8S(w2G0X}Vrw*0YM(!!x7QseocY@tdIQnrgk4ym!^&OxhDHFNcJ%yOsq ze65LMgZ}weYq0eB5BPg=jjaxSG&)M;Op|)zca|;eOVdCv-K+7B)LqZ-_4{}V?zwZK zi0n&_VB3zFc;4NyX&>(nWQDN+5LH5b`u2o?@9Q_?w2_`v{gejM@{D9+YQ0O zNiDS_*^+gFWJB-+Km0T%E6t?P0+B)2fi8wPM~X~vV0u+2R{cU{>q7M2m4*#R>d^sR z@W1~wX)zIs!EPAI;&F%8`tr;2$LlW2QdeqyvizKdl4B`Ns#IApQ3wXZ5=iLy~Pz7B(UOE}%*OV0tu2Jc~0Bnl6_iP@jQW<&o)*=>BH2_N@>(t}@x&oLOEWeDwc z#DALVRjMpMVKnJlO%1(Y>mMkey0AZnQB@uMp@19x_`Q4LX!w@XWlTc&@hqqVn&xxm zc3EDi;C^h568s35{M>A{A5Lb%S}x~un!%oj-4?^%8>jG2#YlZ|xLJM&|Fin3O_gA} zdZ=A+PE2@Q{uV|#)fuzS&d&F+v<*caD5{#0P@TD|`m8xE?@6GzKr@oVmfD@Oz%%uk zfAjYH6?=p2J%`Wnx?_#|)9>5FDzxc8D&qavzpO^m)QMm6BuEG0=um@p|NhMF+w#6b zkuHATz;Shq7aU=Op9Zz|1D?bA4$%`WAq6kq=Xxib9$h^i_e8AEn&sFQak|pXdb!E*s?Z++Q~eM%>?ip7k5f?G)9lRIx~r4R;K0Yfk-`D`mx!vOTd6$rW8` z)-@X~0{ETud4iG+xs^L zo3er0U)`i1)s&39%LfXYVo>A$7@gglmt_;>uXZXbj8V1q>dg(Fe;zG-#@e$DIV`3{ z${}>p}lXYMZu3~uFHKtM#OxIFf4Ll z=@rK`vTWFUwpZ6bv&=~*tM$cw$1Gk++Rx_#^vZc=)6j87vvqfro2G>9fJFKWZLn!4 z_8+RPw(O#IxvYrJ%(dVBds*uV8kzKiDP<0d5(+y+l6?1|`lsZkHFO6b-7D2r9efqo z`&T^cjn?6!LX>H8y&c)OV^f&Ed5?>4FGO#DNx+wn+z2y1tP{Ex$pqE-ZF1ZqQbiZQ$dNBkXyB^C^>as#Vif zaCwp4en�JKrjVe!Wcj-Os@}#q^ptsTUiYAC8&K*0n+wdo6`2kcT7|N&oxGwZ?2P zqD1>MfYHHmKHzc4%&D@~a+1lD)sFhtOSl zdqTs_I*KYVBZRc3n4ENH-dwUgGO7BX!m}L%t`lYc!(K! zfM+zk%t^{0d#M&NFY7MX)K!calMaVo;e77k`I;Jh9Gupf+AGtc;PTg+IeJ#XUN}E_ zPm!(Xu7KRs`Bx2h{XB)epzV70SIX```Fq1$kIhd;*}-YtV9|I`J<|_?WkiZh{U_fV zh2{q@3E$Q4io0?(Tv~J8qQUHK4#pC(zD)5GMZVZ&pG;HT^!Y3Hr9aFKW1TslA?0${ z*^?BoaC4^j%FT(~P;mcEO>Ex0hJ2?zlFb}cM;H2PSQtSDXxOnv#a`@m6xsV0y}V7q z^XrnsJ$;8{R_Vyu^NVbtni;3Ud?&VgQLe);?ewR$bRq+$quu8$IU`-tX+vvpl~5ak zB}JAb`yxu2(HD=8<@hK3#1_$-x{Wh6a{gc6luLv4M%ON5I*Zd}*=W8nq8d=@h=wjO zwaotVcjd*(ul30%F32s2MT~Yv6E0KMiQE7B$`JN>GRu7I-E(H}w)cl$^A)qU)IR7P6*O46*Bb zDU1pfink*+wCS#pjE`?*;U^ntrw|K_a#%gbQ3LdtK0YS@lfDeD}f zAU9`GJPnbs#oyMaZU4gYJGX!?LPCNQ^{Np-f}2%(0z8hPj@y&OaIJl+-+>qU_8Wi6 z{9n!&(-uS~#uE#H!ZuBjyTo?{(brxdsiY#Jqct78`LYq1x58(AN9kl(atfrPJCtvs`kHIAZ0AQ|dTJ zhTdwOZ`>r(BkG*O5)dYZk#ofA74@YzJ}jJ2Uv;Cr_B;+!y!v{r>ZNjXGW^nYU!*T1 zI+et<&&!k3s9JukME`~0@(*{7vea-ef!nB+_%ZRm5mO&K%69pUkiO#^k!j?9^y|69HQPj>0#ZU89Mwc~fJiz@-o z)uX8;$1ynvuM1QL<@F-=B|QvY4h+i6k&Y;`Y zk|GXT0 z_9{%~Dr}fRR9s7@qn}`S@2o7K>Bq9T`f8>Fuh56iw#7lfVpp`qLVF5r9Lg_{?>&{N zLmG)fl!=gNG-=GIR@q{%Vz8sW?u8g=igAp_Qs%$%fzlGsFZSw25}{NP&+CX?S+nAC z>U|$qI=3%J#w4-&OFV2x+@P{z>2XmRt^FNc7u@jG+?rEAH}a!)Tg=e30_k zMxD)PO}^5_J2v$Tg7$Kld=Fk*ZxW+WUsqEjZglNwv{%{SEM7KGzGnlak-dmBsLTK& z<+vNWodOqvlGK7z1I-lGTgJ>+%d>D)ERZ4rVK9u=S&S*f#Un-69qKrNG671>q(e}+({E=7a{%5aa0I^|em|4bR=KDTFCC!dvAKMR2kk5rE zZ5j$RDb%zo+^l-QNfyPpqxDY2?o?~ed00w^zo~jRUqW&C9bQlzbfxjl;v%iIhspQg zx35XkUfrq)0Gtgp(`%7)__1 z`TXGdf7W)&8}3tnZcl073m6-vlXDqxne|}%&S4(f(}l8o$mcRmb9^b(tOUSW)u59s z#x5!X-(|z4-{ZB%{#+LZ-e?LtKOp;`eTUc9zg}eum0i8@$J!vEnb}}1e!d&m84`>h zNQz1%t|zZEPLUUj*hz4uq*AdQvq7d>tc51P+Mo&`UybEDzJ4~E!r3y~_!!fcq=DDg zEhXqVTO%xaZfo!qM91Ngveg9T0Ht(TIOXEM$*np4wzgB=@MR8y!)m0EJDy>3Qj!G=?k?|;awzwlu_u;oG7_3dpqd+Pjw!zOd2Q}=}?QDQ`L3NII zR?CDF|E$>caBocNK^_!FWYzWKewO$roZYq^UYry z-Tp73El;K}vrJ{QuzxJ%{+D_vheKrY9ca~jF-R%YtaQLx)!9>G8MyE+C01nD!?$A8 z=0>h)^=Q(!IG|zLGL!A-M{Gn?96PEK^Q^^6Wl;VakTOV=Sa6D@uBnCRpi454ss#lo zoy3AgRT}qtx~0^tnn=~rTwT2t5QGtBm)&hLxzG1s{_}T+*3o_=CsCHY-;;dvv{DX9FCxk zN4{r0MIb7U&XWe8q`9gL=qyU-z?BhKO59V?oEzn8mbFEkt9HDGMyt#sYuhXjaAw?6 zIgH6CZmH_bUyHLHYG>@x&NR9WY@!gjHd3cs9I+PEE#B~k4r#%AEH+Hn{Ho1rg;5rR zJK?#ILQSgLEMC`rDt_^UJ5~|coc%Qgsu^5S)!paRvVdl0#d2tE$ak+}%0o zyF%%9&}|9SOd&3aQ^Z$U5wo}kO=*cWXqLFOOt(ykYB;trl!}Ci4GEw>}gj%J@Vu|xTu^i@~c!S)U0-0`kV2;-}>0f zKUW(x%oQayGSw)fFutzJ@o7Ixp?4FL!@F=n8KsucKMP{_l$Sw?1+hppp2XhF-UwGF z>v}WlG5+t0B(=F=7#MC@+iBCQzBSM@;AX zo!OJGxNGw1uRN7K{pz9Yrc0+r9{+n>SWb>Cb%Ul*lWKMA>f2_Pfqg$(;TD_5x}vHj ztrgm@-m!~wC@({{Q_c_PqVnEsuOD=E+VpJ z>SLKw%oMPzm*Tom;zA-fic&ttYeQ>4smSe)`}0d}k08z>!2~MTRWfY@7?oh}HVNF~mxJ>;5Q3b7Y zSXa;Ad8Fk-Bp?a{l+I#I4y|(w0*hdhbZ$A0MMglPP{fUSJ*Vu=o_fVUyVBVA1=*Y3 zbm`;c-}ygQnGC21oJDNC#~@V-HK|$~Zr=LG@rx%uz4A`3&aS9xx}U1$a#{#%{CqdA zBcwdGe;F2=W8ndaD;8@(VZj#T0Am+&WKERTflKEiTthZig;E-6SU35KTdG9p0<{MLbk9sxLv`ZcnYXh8X zWOj{8Qm>m~vtQUPCFr=-S~NALGKFG(^VJWV?vox255Dkh{+xIGdvW_cyKoW8kIMsK zXO{&?l`4grRQ1xC?}C5-#>zOC24+Pq1!#<4?_&}KMXqyAoZ34%lI&sC-f$c!AIN~8 zMd>!g6=Tpj0v;N@(FxX;YFC41iB^*3cDt@M;8fgFhN-e?-|(W>ect2QlP|x!lBtwC z^~$M{Z)}CA6kFy{arenosZyv()zBsEhChp6{OfPG{>e0}D@s7u-9j@5*mSQ)M2MzF zYs40n`Xef-TAZ2QAhAIl^a3exwOGzqqtibIOf-Jtu9$ zD|~TwrjjdEO4460BF{WD4N-Z_1s;^3w;#O6~6}9QgkKydgC)(Y2$xM@EP#a%2RlH=Ss%yS) z6Uy^y*bZQxK@k@(S;|9sU8w9@@O!`%;_pi}dpW5(v^_Y%@lYnQS~U$Y+%J(_Joxch zKm%kpz79#-7Nkm{CRNLW%{Bk4#lfapt|(dZU8#M8(oL8FB7*UAqlk!P+lkKEK6%tDRTl%TvV@Ffo5i+sODM1ZSCtvw{xacM7vB6bbPR)F0is0wF$aSrYJ9;;CR1W;^ zIQGV0113Lfd6RkJ<=B*Ng-9y^O?+PJh=O+w(FDjl2e*d5zu^<}R|9OjuD!E0-BKs$iduAynkIEQ&3|4Fuh2!dXMJ21w&73Wm4Viv^C+(mm0bs37fg4y zKK`|Hu1pk_Xq6ZcrMyN$&GW#;gIl9}7W3w{zwv0g5T;6@Ce;d4%Ysdfv!a^WxSfe+!F&$_qH@NGhI;j}pUKv2(P|NX(O;j;Rrv|s*fgnNFJu7Rm)rqoiCs&Q(y z+BVB@MIFy8(@HL(fg6?!G}8#S;q~d-m#St;Ej6hcyCh$8d;H?Q54RB5ETvbJEVv)V zE~nPNj^Z4-uJs^}s5nmZo>bB_Q+s=~*ZukI8-H_K$CjH*z`ek|L$|HZi!EQHwD&>a zdZ4SxM;@gNO8JO{)X-Y*D@nQWR{1THt_)NM0t}uP{qaRJ7CRHj(S}wFo zlgui)qKvmPfM)s{8joDpdZwZX7ZmGMoNozoA%Y&#*^cKk7yaVz22X$C#}ZCX&3?<; zkG)o$2Au!dpAnJkl{W7IZfah@QGfx$TK$4A0>3=CH7uqpRjOu%nG|YLHJ{FW7wXJ+ z!9#!0{KvY;UQsenCb9PQiUOMWWF5-$$@LCW8s38qOG!8BCOEXHEV`|4kALc0Z*zxs zd`@+4C}J0GOu6>=4hF;lvG)vZTVp_74^#lBx0#?uX@l6RTWKutJA+%pnv@7{yY!bS zK6hWb?xir3LQSd_uB$%L8m$%<;fgw@MS@y+7Mi0e&hvBRdpA%V-ir%MG&W#JkYFk@ zYtR3@Ir)k^{gZy`nbNnnfen`QDQj;zV1cg#Umw~wV1R390nVDn54@quUAqqe?;YG4 zK2*!2?*D~u%m zWmLA~iOfas`<&@M<*)7GS0=>=%;)Z__e{UVUVsut6Q7?>(^WIxKpS})x0|6MtE@%#Y&qY9eNH| zl+0=#y`o)C^MQ@C__=oI-9Tw%FXC+Nf2j>1)3(E`f8DK_3xDp*cF*HQv1OFW*5#bn z-m?Ee;6dP{L)!+fB(~nX57~y_r5^ea!|JTyT zpF&NlR@^R8o&sNkuL+74PZ_j|E5$af9_-PsC^4sj!gzYcyPW2|QsVIQ9k{TU(%~Ug ztumrqhzJMFzrL0nSOa_% z^W|@i5=O&_jaWC(%agmNcwA2B{ihA`@~$0h-r%vW5P(q-)%kd%l4H%e_o}g7yLJB= zr{Kaj6OI>f&dBJ_%>tIL)(P3pwTQKZlOt6EyQ4Cj zHeUWr@a$bn&TMJ`;5tCN9;eqdz2{X_0%+66f^(5_u3>l-b)}WNa(_qB0H|pnGul4YE4?V_Z z7hk}Ir%Z6cNd<5gq>g~#q9UkAIOE1gD3AOd<9on{nyG`m6c1(T*&L~puiC=ozB7o* zo{YaX$i&`tL`8$noDc4G#MRU^A{r5egz|5xze(%Eob@ecKOl&>Q4UYm4O7BuJehAe@A- z2vGnoaELpIIPeS5ecA)S14KnAkH^5$u}P^*e!YzYKRK1Cm|=2%kBskG!|)3m$n^>N z-fIXaPsIiqqH><7*ak`w6#?2oDU?nuKg|}%BXQN?p7oRzL{rNEn>uGU)fsSpOx%v( z4~Mo5oRz@Mdw>fT4UW?-6Uy^hYjzR0J9x60$70}DzCpP6>2&c+K_-QoR4Y>jKQ0Bo z*dXAHXUH1C2?S2_lj1tgYTHM9E{sDC!idI26e|!HyGfi)tVk}|l$2ny6KLiH z4Pg;=+I4W&yY67$;~k8?+AX86b~F6^8f<{tczFTbyAZ3TIMPor(Mf5f4;w1PosBXv zJ!mrvBpTr65{K4?e0SVV!Imc%-%g>ynN4*Doacd00G}AzHn4dX;Jog5b1SYcJm-Ht z0NgydH5_h*G4KbsP=5K_>EgFoh-nX( zUxX-&5~;6SYEc`%B*5Wjz(Xl;5rjp-24lEr3~_OBG#A3g%RuZuVFMU`F~``R922h< z)VVijDfFGk;g>g}w3CC+oz2**8&Nty`|Cii0YXGP5QPZXPaHF3z{m=Pxs}X$1k!4&YYc)}d_!ClLo2-vnGT_fP1##`AXImcgx|O;?4Lr8U?5 zRyqhN)TCN%${59gk#TshqgxC_| z4%2xObPT>sRE&$WjqZxALS7zq@rU~u-F-TU$ncJhOzc_10weZ;Bamn9>H zQi+96B0x<59~#^mel=YMR+c)>xsHx=(%7REYErFA3E&w`KI`Lq1`*-@XUCc7Jd+FB zhiKR3gW`cdV0=#w8+!7} zw>C4ryMwm1q1tfinM@tHgkYi|rNe!c4)+ljJzTI3Wd>pkPvwu9HTtsvZ2H(7+RKpZ z9-uh9Hy-y&pD1x_v_!24nhhwsZz~r+aPNo63tJF zgPh~7YEIsDQVY}unY(kqh()-d+!29&ZW^A>P}K!k`vTuhHH?o;Gt+sJpX zqd4-~G<2y#|6_>zQ@!TguOXD`mDx1>SJ$F4?Wjx}Zej?PX{YCB?`j3W*#q1G+%dFm z?K-9Ww~K^-Ke#oVXocw*4L!&B5B>t3?OZi$Q0g{Hp(fQT)|bBYrRmo<-+Xh`KG&$Y z`Qj(P^h2I|{zcw%^%mZB<+*gUfr{LW^(Mu@*u51@#L#2Q78gw*b^^Zuedp}O29Fa> z#qSL!A(}#+e!a)(H*~V^N2h`k8Gdmi`yM+R5usya7Wf%NjF;;vWR&R&#}AI<gKi|}C zltN9aRC5B(TzcrChnDntS_x5P5odW~=OhO?z?En9aPGzq+8dDu-g2 [ + 'core' => [ + 'masters' => [ + 'admin' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'insert' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'select' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'update' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'delete' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'schema' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + ], + 'postgresql' => [ + 'admin' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'insert' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'select' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'update' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'delete' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'schema' => [ + 'db' => 'pgsql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '5432', /* db host port */ + 'login' => 'postgres', /* db login name */ + 'password' => 'root', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + ], + 'sqlite' => [ + 'admin' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'insert' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'select' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'update' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'delete' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'schema' => [ + 'db' => 'sqlite', /* db type */ + 'database' => __DIR__ . '/test.sqlite', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + ], + 'mssql' => [ + 'admin' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'insert' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'select' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'update' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'delete' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + 'schema' => [ + 'db' => 'mssql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '1433', /* db host port */ + 'login' => 'sa', /* db login name */ + 'password' => 'R00troot', /* db login password */ + 'database' => 'oms', /* db name */ + 'weight' => 1000, /* db table prefix */ + ], + ], + ], + ], + 'cache' => [ + 'redis' => [ + 'db' => 1, + 'host' => '127.0.0.1', + 'port' => 6379, + ], + 'memcached' => [ + 'host' => '127.0.0.1', + 'port' => 11211, + ], + ], + 'mail' => [ + 'imap' => [ + 'host' => '127.0.0.1', + 'port' => 143, + 'ssl' => false, + 'user' => 'test', + 'password' => '123456', + ], + 'pop3' => [ + 'host' => '127.0.0.1', + 'port' => 25, + 'ssl' => false, + 'user' => 'test', + 'password' => '123456', + ], + ], + 'log' => [ + 'file' => [ + 'path' => __DIR__ . '/Logs', + ], + ], + 'page' => [ + 'root' => '/', + 'https' => false, + ], + 'app' => [ + 'path' => __DIR__, + 'default' => [ + 'app' => 'Backend', + 'id' => 'backend', + 'lang' => 'en', + 'theme' => 'Backend', + 'org' => 1, + ], + 'domains' => [ + '127.0.0.1' => [ + 'app' => 'Backend', + 'id' => 'backend', + 'lang' => 'en', + 'theme' => 'Backend', + 'org' => 1, + ], + ], + ], + 'socket' => [ + 'master' => [ + 'host' => '127.0.0.1', + 'limit' => 300, + 'port' => 4310, + ], + ], + 'language' => [ + 'en', + ], + 'apis' => [ + ], +]; + +// Reset database +if (\defined('RESET') && RESET === '1') { + if (\extension_loaded('pdo_mysql')) { + try { + $db = new \PDO('mysql:host=' . + $CONFIG['db']['core']['masters']['admin']['host'], + $CONFIG['db']['core']['masters']['admin']['login'], + $CONFIG['db']['core']['masters']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); + $db->exec('CREATE DATABASE IF NOT EXISTS ' . $CONFIG['db']['core']['masters']['admin']['database']); + $db = null; + } catch (\Throwable $t) { + echo "\nCouldn't connect to MYSQL DB\n"; + } + } + + if (\extension_loaded('pdo_pgsql')) { + try { + $db = new \PDO('pgsql:host=' . + $CONFIG['db']['core']['postgresql']['admin']['host'], + $CONFIG['db']['core']['postgresql']['admin']['login'], + $CONFIG['db']['core']['postgresql']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['postgresql']['admin']['database']); + $db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['postgresql']['admin']['database']); + $db = null; + } catch (\Throwable $t) { + echo "\nCouldn't connect to POSTGRESQL DB\n"; + } + } + + if (\extension_loaded('pdo_sqlsrv')) { + try { + $db = new \PDO('sqlsrv:Server=' . + $CONFIG['db']['core']['mssql']['admin']['host'], + $CONFIG['db']['core']['mssql']['admin']['login'], + $CONFIG['db']['core']['mssql']['admin']['password'] + ); + $db->exec('DROP DATABASE IF EXISTS ' . $CONFIG['db']['core']['mssql']['admin']['database']); + $db->exec('CREATE DATABASE ' . $CONFIG['db']['core']['mssql']['admin']['database']); + $db = null; + } catch (\Throwable $t) { + echo "\nCouldn't connect to MSSQL DB\n"; + } + } +} + +$httpSession = new HttpSession(); +$GLOBALS['session'] = $httpSession; + +$GLOBALS['dbpool'] = new DatabasePool(); +$GLOBALS['dbpool']->create('admin', $CONFIG['db']['core']['masters']['admin']); +$GLOBALS['dbpool']->create('select', $CONFIG['db']['core']['masters']['select']); +$GLOBALS['dbpool']->create('update', $CONFIG['db']['core']['masters']['update']); +$GLOBALS['dbpool']->create('delete', $CONFIG['db']['core']['masters']['delete']); +$GLOBALS['dbpool']->create('insert', $CONFIG['db']['core']['masters']['insert']); +$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']); + +DataMapperFactory::db($GLOBALS['dbpool']->get()); + +$GLOBALS['frameworkpath'] = '/phpOMS/'; + +function phpServe() : void +{ + // OS detection + $isWindows = \stristr(\php_uname('s'), 'Windows') !== false; + + // Command that starts the built-in web server + if ($isWindows) { + $command = \sprintf( + 'wmic process call create "php -S %s:%d -t %s" | find "ProcessId"', + WEB_SERVER_HOST, + WEB_SERVER_PORT, + __DIR__ . '/../' . WEB_SERVER_DOCROOT + ); + + $killCommand = 'taskkill /f /pid '; + } else { + $command = \sprintf( + 'php -S %s:%d -t %s >/dev/null 2>&1 & echo $!', + WEB_SERVER_HOST, + WEB_SERVER_PORT, + WEB_SERVER_DOCROOT + ); + + $killCommand = 'kill '; + } + + // Execute the command and store the process ID + $output = []; + echo \sprintf('Starting server...') . \PHP_EOL; + echo \sprintf(' Current directory: %s', \getcwd()) . \PHP_EOL; + echo \sprintf(' %s', $command); + \exec($command, $output); + + // Get PID + if ($isWindows) { + $pid = \explode('=', $output[0]); + $pid = \str_replace(' ', '', $pid[1]); + $pid = \str_replace(';', '', $pid); + } else { + $pid = (int) $output[0]; + } + + // Log + echo \sprintf( + ' %s - Web server started on %s:%d with PID %d', + \date('r'), + WEB_SERVER_HOST, + WEB_SERVER_PORT, + $pid + ) . \PHP_EOL; + + // Kill the web server when the process ends + \register_shutdown_function(function() use ($killCommand, $pid) : void { + echo \PHP_EOL . \sprintf('Stopping server...') . \PHP_EOL; + echo \sprintf(' %s - Killing process with ID %d', \date('r'), $pid) . \PHP_EOL; + \exec($killCommand . $pid); + }); +} + +\phpServe(); diff --git a/tests/Controller/ApiControllerTest.php b/tests/Controller/ApiControllerTest.php new file mode 100755 index 0000000..52273b3 --- /dev/null +++ b/tests/Controller/ApiControllerTest.php @@ -0,0 +1,82 @@ +app = new class() extends ApplicationAbstract + { + protected string $appName = 'Api'; + }; + + $this->app->dbPool = $GLOBALS['dbpool']; + $this->app->unitId = 1; + $this->app->accountManager = new AccountManager($GLOBALS['session']); + $this->app->appSettings = new CoreSettings(); + $this->app->moduleManager = new ModuleManager($this->app, __DIR__ . '/../../../Modules/'); + $this->app->dispatcher = new Dispatcher($this->app); + $this->app->eventManager = new EventManager($this->app->dispatcher); + $this->app->eventManager->importFromFile(__DIR__ . '/../../../Web/Api/Hooks.php'); + + $account = new Account(); + TestUtils::setMember($account, 'id', 1); + + $permission = new AccountPermission(); + $permission->setUnit(1); + $permission->setApp('backend'); + $permission->setPermission( + PermissionType::READ + | PermissionType::CREATE + | PermissionType::MODIFY + | PermissionType::DELETE + | PermissionType::PERMISSION + ); + + $account->addPermission($permission); + + $this->app->accountManager->add($account); + $this->app->router = new WebRouter(); + + $this->module = $this->app->moduleManager->get('Attribute'); + + TestUtils::setMember($this->module, 'app', $this->app); + } +} diff --git a/tests/phpunit_default.xml b/tests/phpunit_default.xml new file mode 100755 index 0000000..4db1f21 --- /dev/null +++ b/tests/phpunit_default.xml @@ -0,0 +1,57 @@ + + + + + *vendor* + vendor + ../vendor + ../phpOMS + ../phpOMS* + ../phpOMS/* + ../tests* + ../*/tests* + ../**/tests* + */tests* + ../* + ../* + ../* + ../* + ../* + ../**/test* + ../**/Theme* + ../**/Admin/Routes* + ../**/Admin/Hooks* + ../**/Admin/Install* + ../Media/Files* + + + + + + + + + ../Karaka/Install/tests* + + + ../tests* + + + + + volume + maybe + + + + + + + + + + + + + +