From 87053dc2c338890f3e82cf6ffa9fdf2fc979f7eb Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Thu, 26 Jan 2023 21:54:13 +0100 Subject: [PATCH] org -> unit change, some new functionality --- .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/Navigation.install.json | 49 + Admin/Install/Navigation.php | 43 + Admin/Installer.php | 36 + Admin/Routes/Web/Backend.php | 32 + Admin/Status.php | 36 + Admin/Uninstaller.php | 36 + Admin/Updater.php | 29 + Controller/BackendController.php | 82 + Controller/Controller.php | 76 + Docs/Dev/en/SUMMARY.md | 3 + Docs/Dev/en/structure.md | 5 + ICAL.txt | 49 + Models/PermissionCategory.php | 32 + README.md | 2 +- Theme/Backend/Lang/Navigation.ar.lang.php | 24 + Theme/Backend/Lang/Navigation.cs.lang.php | 24 + Theme/Backend/Lang/Navigation.da.lang.php | 24 + Theme/Backend/Lang/Navigation.de.lang.php | 24 + Theme/Backend/Lang/Navigation.el.lang.php | 24 + Theme/Backend/Lang/Navigation.en.lang.php | 24 + Theme/Backend/Lang/Navigation.es.lang.php | 24 + Theme/Backend/Lang/Navigation.fi.lang.php | 24 + Theme/Backend/Lang/Navigation.fr.lang.php | 24 + Theme/Backend/Lang/Navigation.hu.lang.php | 24 + Theme/Backend/Lang/Navigation.it.lang.php | 24 + Theme/Backend/Lang/Navigation.ja.lang.php | 24 + Theme/Backend/Lang/Navigation.ko.lang.php | 24 + Theme/Backend/Lang/Navigation.no.lang.php | 24 + Theme/Backend/Lang/Navigation.pl.lang.php | 24 + Theme/Backend/Lang/Navigation.pt.lang.php | 24 + Theme/Backend/Lang/Navigation.ru.lang.php | 24 + Theme/Backend/Lang/Navigation.sv.lang.php | 24 + Theme/Backend/Lang/Navigation.th.lang.php | 24 + Theme/Backend/Lang/Navigation.tr.lang.php | 24 + Theme/Backend/Lang/Navigation.uk.lang.php | 24 + Theme/Backend/Lang/Navigation.zh.lang.php | 24 + Theme/Backend/Lang/ar.lang.php | 106 + Theme/Backend/Lang/cs.lang.php | 106 + Theme/Backend/Lang/da.lang.php | 106 + Theme/Backend/Lang/de.lang.php | 106 + Theme/Backend/Lang/el.lang.php | 106 + Theme/Backend/Lang/en.lang.php | 106 + Theme/Backend/Lang/es.lang.php | 106 + Theme/Backend/Lang/fi.lang.php | 106 + Theme/Backend/Lang/fr.lang.php | 106 + Theme/Backend/Lang/hu.lang.php | 106 + Theme/Backend/Lang/it.lang.php | 106 + Theme/Backend/Lang/ja.lang.php | 106 + Theme/Backend/Lang/ko.lang.php | 106 + Theme/Backend/Lang/no.lang.php | 106 + Theme/Backend/Lang/pl.lang.php | 106 + Theme/Backend/Lang/pt.lang.php | 106 + Theme/Backend/Lang/ru.lang.php | 106 + Theme/Backend/Lang/sv.lang.php | 106 + Theme/Backend/Lang/th.lang.php | 106 + Theme/Backend/Lang/tr.lang.php | 106 + Theme/Backend/Lang/uk.lang.php | 106 + Theme/Backend/Lang/zh.lang.php | 106 + .../Backend/sales-analysis-dashboard.tpl.php | 399 ++ composer.json | 20 + composer.lock | 4802 +++++++++++++++++ img/module_teaser_small.png | Bin 0 -> 90210 bytes info.json | 45 + tests/Admin/AdminTest.php | 27 + tests/Autoloader.php | 94 + tests/Bootstrap.php | 415 ++ tests/phpunit_default.xml | 57 + 75 files changed, 9652 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/Navigation.install.json create mode 100755 Admin/Install/Navigation.php create mode 100755 Admin/Installer.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 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 ICAL.txt create mode 100755 Models/PermissionCategory.php create mode 100755 Theme/Backend/Lang/Navigation.ar.lang.php create mode 100755 Theme/Backend/Lang/Navigation.cs.lang.php create mode 100755 Theme/Backend/Lang/Navigation.da.lang.php create mode 100755 Theme/Backend/Lang/Navigation.de.lang.php create mode 100755 Theme/Backend/Lang/Navigation.el.lang.php create mode 100755 Theme/Backend/Lang/Navigation.en.lang.php create mode 100755 Theme/Backend/Lang/Navigation.es.lang.php create mode 100755 Theme/Backend/Lang/Navigation.fi.lang.php create mode 100755 Theme/Backend/Lang/Navigation.fr.lang.php create mode 100755 Theme/Backend/Lang/Navigation.hu.lang.php create mode 100755 Theme/Backend/Lang/Navigation.it.lang.php create mode 100755 Theme/Backend/Lang/Navigation.ja.lang.php create mode 100755 Theme/Backend/Lang/Navigation.ko.lang.php create mode 100755 Theme/Backend/Lang/Navigation.no.lang.php create mode 100755 Theme/Backend/Lang/Navigation.pl.lang.php create mode 100755 Theme/Backend/Lang/Navigation.pt.lang.php create mode 100755 Theme/Backend/Lang/Navigation.ru.lang.php create mode 100755 Theme/Backend/Lang/Navigation.sv.lang.php create mode 100755 Theme/Backend/Lang/Navigation.th.lang.php create mode 100755 Theme/Backend/Lang/Navigation.tr.lang.php create mode 100755 Theme/Backend/Lang/Navigation.uk.lang.php create mode 100755 Theme/Backend/Lang/Navigation.zh.lang.php create mode 100755 Theme/Backend/Lang/ar.lang.php create mode 100755 Theme/Backend/Lang/cs.lang.php create mode 100755 Theme/Backend/Lang/da.lang.php create mode 100755 Theme/Backend/Lang/de.lang.php create mode 100755 Theme/Backend/Lang/el.lang.php create mode 100755 Theme/Backend/Lang/en.lang.php create mode 100755 Theme/Backend/Lang/es.lang.php create mode 100755 Theme/Backend/Lang/fi.lang.php create mode 100755 Theme/Backend/Lang/fr.lang.php create mode 100755 Theme/Backend/Lang/hu.lang.php create mode 100755 Theme/Backend/Lang/it.lang.php create mode 100755 Theme/Backend/Lang/ja.lang.php create mode 100755 Theme/Backend/Lang/ko.lang.php create mode 100755 Theme/Backend/Lang/no.lang.php create mode 100755 Theme/Backend/Lang/pl.lang.php create mode 100755 Theme/Backend/Lang/pt.lang.php create mode 100755 Theme/Backend/Lang/ru.lang.php create mode 100755 Theme/Backend/Lang/sv.lang.php create mode 100755 Theme/Backend/Lang/th.lang.php create mode 100755 Theme/Backend/Lang/tr.lang.php create mode 100755 Theme/Backend/Lang/uk.lang.php create mode 100755 Theme/Backend/Lang/zh.lang.php create mode 100755 Theme/Backend/sales-analysis-dashboard.tpl.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/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/Navigation.install.json b/Admin/Install/Navigation.install.json new file mode 100755 index 0000000..c7ec82c --- /dev/null +++ b/Admin/Install/Navigation.install.json @@ -0,0 +1,49 @@ +[ + { + "id": 1008101001, + "pid": "/", + "type": 2, + "subtype": 0, + "name": "Finance", + "uri": null, + "target": "self", + "icon": "fa fa-book", + "order": 50, + "from": "Finance", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 0, + "children": [ + { + "id": 1008102001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "Analysis", + "uri": "{/lang}/{/app}/sales/analysis?{?}", + "target": "self", + "icon": null, + "order": 15, + "from": "Finance", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1008101001, + "children": [ + { + "id": 1008102002, + "pid": "/sales/analysis", + "type": 3, + "subtype": 1, + "name": "Dashboard", + "uri": "{/lang}/{/app}/sales/analysis?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": "Finance", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1008102001, + "children": [] + } + ] + } + ] + } +] diff --git a/Admin/Install/Navigation.php b/Admin/Install/Navigation.php new file mode 100755 index 0000000..e272499 --- /dev/null +++ b/Admin/Install/Navigation.php @@ -0,0 +1,43 @@ + __DIR__ . '/Navigation.install.json']); + } +} diff --git a/Admin/Installer.php b/Admin/Installer.php new file mode 100755 index 0000000..40c9167 --- /dev/null +++ b/Admin/Installer.php @@ -0,0 +1,36 @@ + [ + [ + 'dest' => '\Modules\Finance\Controller\BackendController:viewDashboard', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ANALYSIS, + ], + ], + ], +]; diff --git a/Admin/Status.php b/Admin/Status.php new file mode 100755 index 0000000..39be78e --- /dev/null +++ b/Admin/Status.php @@ -0,0 +1,36 @@ +get('Content')->getData('head'); + $head->addAsset(AssetType::CSS, 'Resources/chartjs/Chartjs/chart.css'); + $head->addAsset(AssetType::JSLATE, 'Resources/chartjs/Chartjs/chart.js'); + $head->addAsset(AssetType::JSLATE, 'Modules/ClientManagement/Controller.js', ['type' => 'module']); + + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Sales/Theme/Backend/sales-analysis-dashboard'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001602001, $request, $response)); + + ///// + $monthlySalesCustomer = []; + for ($i = 1; $i < 13; ++$i) { + $monthlySalesCustomer[] = [ + 'net_sales' => $sales = \mt_rand(1200000000, 2000000000), + 'customers' => \mt_rand(200, 400), + 'year' => 2020, + 'month' => $i, + ]; + } + + $view->addData('monthlySalesCustomer', $monthlySalesCustomer); + + $annualSalesCustomer = []; + for ($i = 1; $i < 11; ++$i) { + $annualSalesCustomer[] = [ + 'net_sales' => $sales = \mt_rand(1200000000, 2000000000) * 12, + 'customers' => \mt_rand(200, 400) * 6, + 'year' => 2020 - 10 + $i, + ]; + } + + $view->addData('annualSalesCustomer', $annualSalesCustomer); + + return $view; + } +} diff --git a/Controller/Controller.php b/Controller/Controller.php new file mode 100755 index 0000000..00112cc --- /dev/null +++ b/Controller/Controller.php @@ -0,0 +1,76 @@ + [ + 'Analysis' => 'التحليلات', + 'Articles' => 'مقالات', + 'Clients' => 'عملاء', + 'Create' => 'يخلق', + 'Invoice' => 'فاتورة', + 'Invoices' => 'الفواتير', + 'Profile' => 'الملف الشخصي', + 'Sales' => 'مبيعات', +]]; diff --git a/Theme/Backend/Lang/Navigation.cs.lang.php b/Theme/Backend/Lang/Navigation.cs.lang.php new file mode 100755 index 0000000..122765d --- /dev/null +++ b/Theme/Backend/Lang/Navigation.cs.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analýza', + 'Articles' => 'Články', + 'Clients' => 'Klienti', + 'Create' => 'Vytvořit', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'Profile' => 'Profil', + 'Sales' => 'Odbyt', +]]; diff --git a/Theme/Backend/Lang/Navigation.da.lang.php b/Theme/Backend/Lang/Navigation.da.lang.php new file mode 100755 index 0000000..51be112 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.da.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analyse', + 'Articles' => 'Artikler', + 'Clients' => 'Klienter.', + 'Create' => 'skab', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer.', + 'Profile' => 'Profil', + 'Sales' => 'SALG', +]]; diff --git a/Theme/Backend/Lang/Navigation.de.lang.php b/Theme/Backend/Lang/Navigation.de.lang.php new file mode 100755 index 0000000..36660ad --- /dev/null +++ b/Theme/Backend/Lang/Navigation.de.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analyse', + 'Articles' => 'Artikel', + 'Clients' => 'Kunden', + 'Create' => 'Erstellen', + 'Invoice' => 'Rechnung', + 'Invoices' => 'Rechnungen', + 'Profile' => 'Profil', + 'Sales' => 'Der Umsatz', +]]; diff --git a/Theme/Backend/Lang/Navigation.el.lang.php b/Theme/Backend/Lang/Navigation.el.lang.php new file mode 100755 index 0000000..a56adac --- /dev/null +++ b/Theme/Backend/Lang/Navigation.el.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Ανάλυση', + 'Articles' => 'Είδη', + 'Clients' => 'Πελάτες', + 'Create' => 'Δημιουργώ', + 'Invoice' => 'Τιμολόγιο', + 'Invoices' => 'Τιμολόγια', + 'Profile' => 'Προφίλ', + 'Sales' => 'Εκπτώσεις', +]]; diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php new file mode 100755 index 0000000..870da4a --- /dev/null +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analysis', + 'Articles' => 'Articles', + 'Clients' => 'Clients', + 'Create' => 'Create', + 'Invoice' => 'Invoice', + 'Invoices' => 'Invoices', + 'Profile' => 'Profile', + 'Sales' => 'Sales', +]]; diff --git a/Theme/Backend/Lang/Navigation.es.lang.php b/Theme/Backend/Lang/Navigation.es.lang.php new file mode 100755 index 0000000..52ea36d --- /dev/null +++ b/Theme/Backend/Lang/Navigation.es.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Análisis', + 'Articles' => 'Artículos', + 'Clients' => 'Clientela', + 'Create' => 'Crear', + 'Invoice' => 'Factura', + 'Invoices' => 'Facturas', + 'Profile' => 'Perfil', + 'Sales' => 'Ventas', +]]; diff --git a/Theme/Backend/Lang/Navigation.fi.lang.php b/Theme/Backend/Lang/Navigation.fi.lang.php new file mode 100755 index 0000000..b539c16 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.fi.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analyysi', + 'Articles' => 'Artikkelit', + 'Clients' => 'Asiakkaat', + 'Create' => 'Luoda', + 'Invoice' => 'Lasku', + 'Invoices' => 'Laskut', + 'Profile' => 'Profiili', + 'Sales' => 'Myynti', +]]; diff --git a/Theme/Backend/Lang/Navigation.fr.lang.php b/Theme/Backend/Lang/Navigation.fr.lang.php new file mode 100755 index 0000000..0adcb23 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.fr.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analyse', + 'Articles' => 'Des articles', + 'Clients' => 'Clients', + 'Create' => 'Créer', + 'Invoice' => 'Facture d\'achat', + 'Invoices' => 'Factures', + 'Profile' => 'Profil', + 'Sales' => 'Ventes', +]]; diff --git a/Theme/Backend/Lang/Navigation.hu.lang.php b/Theme/Backend/Lang/Navigation.hu.lang.php new file mode 100755 index 0000000..397d1c7 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.hu.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Elemzés', + 'Articles' => 'Árucikkek', + 'Clients' => 'Kliensek', + 'Create' => 'Teremt', + 'Invoice' => 'Számla', + 'Invoices' => 'Számlák', + 'Profile' => 'Profil', + 'Sales' => 'Értékesítés', +]]; diff --git a/Theme/Backend/Lang/Navigation.it.lang.php b/Theme/Backend/Lang/Navigation.it.lang.php new file mode 100755 index 0000000..91f7d1a --- /dev/null +++ b/Theme/Backend/Lang/Navigation.it.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analisi', + 'Articles' => 'Artificio', + 'Clients' => 'Clienti', + 'Create' => 'Creare', + 'Invoice' => 'Fattura', + 'Invoices' => 'Fatture', + 'Profile' => 'Profilo', + 'Sales' => 'Saldi', +]]; diff --git a/Theme/Backend/Lang/Navigation.ja.lang.php b/Theme/Backend/Lang/Navigation.ja.lang.php new file mode 100755 index 0000000..369910e --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ja.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => '分析', + 'Articles' => 'articles', + 'Clients' => 'クライアント', + 'Create' => '作成', + 'Invoice' => '請求書', + 'Invoices' => '請求書', + 'Profile' => 'プロフィール', + 'Sales' => '売り返り', +]]; diff --git a/Theme/Backend/Lang/Navigation.ko.lang.php b/Theme/Backend/Lang/Navigation.ko.lang.php new file mode 100755 index 0000000..07bdb8b --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ko.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => '분석', + 'Articles' => '조항', + 'Clients' => '클라이언트', + 'Create' => '만들다', + 'Invoice' => '송장', + 'Invoices' => '송장', + 'Profile' => '프로필', + 'Sales' => '매상', +]]; diff --git a/Theme/Backend/Lang/Navigation.no.lang.php b/Theme/Backend/Lang/Navigation.no.lang.php new file mode 100755 index 0000000..7fbeea3 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.no.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analyse', + 'Articles' => 'Artikler', + 'Clients' => 'Klienter', + 'Create' => 'Skape', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer', + 'Profile' => 'Profil', + 'Sales' => 'Salg', +]]; diff --git a/Theme/Backend/Lang/Navigation.pl.lang.php b/Theme/Backend/Lang/Navigation.pl.lang.php new file mode 100755 index 0000000..9d0db24 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.pl.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analiza', + 'Articles' => 'Artykuły', + 'Clients' => 'Klienci.', + 'Create' => 'Tworzyć', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'Profile' => 'Profil', + 'Sales' => 'Obroty', +]]; diff --git a/Theme/Backend/Lang/Navigation.pt.lang.php b/Theme/Backend/Lang/Navigation.pt.lang.php new file mode 100755 index 0000000..4501e84 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.pt.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Análise', + 'Articles' => 'Artigos', + 'Clients' => 'Clientes', + 'Create' => 'Crio', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturas', + 'Profile' => 'Perfil', + 'Sales' => 'Vendas', +]]; diff --git a/Theme/Backend/Lang/Navigation.ru.lang.php b/Theme/Backend/Lang/Navigation.ru.lang.php new file mode 100755 index 0000000..5c370b9 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.ru.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Анализ', + 'Articles' => 'Статьи', + 'Clients' => 'Клиенты', + 'Create' => 'Создавать', + 'Invoice' => 'Счет', + 'Invoices' => 'Счета', + 'Profile' => 'Профиль', + 'Sales' => 'Продажи', +]]; diff --git a/Theme/Backend/Lang/Navigation.sv.lang.php b/Theme/Backend/Lang/Navigation.sv.lang.php new file mode 100755 index 0000000..3bd9d37 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.sv.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analys', + 'Articles' => 'Artiklar', + 'Clients' => 'Klienter', + 'Create' => 'Skapa', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturor', + 'Profile' => 'Profil', + 'Sales' => 'Försäljning', +]]; diff --git a/Theme/Backend/Lang/Navigation.th.lang.php b/Theme/Backend/Lang/Navigation.th.lang.php new file mode 100755 index 0000000..3cecbe9 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.th.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'การวิเคราะห์', + 'Articles' => 'บทความ', + 'Clients' => 'ลูกค้า', + 'Create' => 'สร้าง', + 'Invoice' => 'ใบแจ้งหนี้', + 'Invoices' => 'ใบแจ้งหนี้', + 'Profile' => 'ประวัติโดยย่อ', + 'Sales' => 'ฝ่ายขาย', +]]; diff --git a/Theme/Backend/Lang/Navigation.tr.lang.php b/Theme/Backend/Lang/Navigation.tr.lang.php new file mode 100755 index 0000000..0800030 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.tr.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Analiz', + 'Articles' => 'Nesne', + 'Clients' => 'Müşteriler', + 'Create' => 'Yaratmak', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturalar', + 'Profile' => 'Profil', + 'Sales' => 'Satış', +]]; diff --git a/Theme/Backend/Lang/Navigation.uk.lang.php b/Theme/Backend/Lang/Navigation.uk.lang.php new file mode 100755 index 0000000..eb77b2d --- /dev/null +++ b/Theme/Backend/Lang/Navigation.uk.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => 'Аналіз', + 'Articles' => 'Статті', + 'Clients' => 'Клієнти', + 'Create' => 'Створювати', + 'Invoice' => 'Рахунок-фактура', + 'Invoices' => 'Рахунки-фактури', + 'Profile' => 'Профіль', + 'Sales' => 'Продаж', +]]; diff --git a/Theme/Backend/Lang/Navigation.zh.lang.php b/Theme/Backend/Lang/Navigation.zh.lang.php new file mode 100755 index 0000000..7c6ae75 --- /dev/null +++ b/Theme/Backend/Lang/Navigation.zh.lang.php @@ -0,0 +1,24 @@ + [ + 'Analysis' => '分析', + 'Articles' => '文章', + 'Clients' => '客户', + 'Create' => '创建', + 'Invoice' => '发票', + 'Invoices' => '发票', + 'Profile' => '轮廓', + 'Sales' => '销售量', +]]; diff --git a/Theme/Backend/Lang/ar.lang.php b/Theme/Backend/Lang/ar.lang.php new file mode 100755 index 0000000..619ce23 --- /dev/null +++ b/Theme/Backend/Lang/ar.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'الحساب', + 'Active' => 'نشيط', + 'Activity' => 'نشاط', + 'Address' => 'تبوك', + 'All' => 'الجميع', + 'Amount' => 'مقدار', + 'Analysis' => 'التحليلات', + 'Analyze' => '#VALUE!', + 'Area' => 'مساحة', + 'Article' => 'مقالة - سلعة', + 'Articles' => 'مقالات', + 'Available' => 'متوفرة', + 'Calculate' => 'حساب', + 'City' => 'مدينة', + 'Class' => 'فصل', + 'Client' => 'عميل', + 'ClientID' => 'معرف العميل', + 'ClientName' => 'اسم العميل', + 'Clients' => 'عملاء', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'تأكيد', + 'CoreData' => 'البيانات الأساسية', + 'Country' => 'دولة', + 'Created' => 'خلقت', + 'Creator' => 'المنشئ', + 'CreditNote' => 'اشعار دائن', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'تاريخ', + 'DefaultInternational' => 'افتراضي الدولية', + 'DefaultNational' => 'الوضع الوطني الافتراضي', + 'Delivery' => 'توصيل', + 'DeliveryNote' => 'مذكرة تسليم', + 'Description' => 'وصف', + 'Discount' => 'خصم', + 'DiscountP' => 'خصم في٪', + 'Documentation' => 'توثيق', + 'Employee' => 'موظف', + 'End' => '#VALUE!', + 'FAO' => 'الفاو', + 'From' => 'من', + 'Group' => 'مجموعة', + 'Groups' => 'مجموعات', + 'Highest' => 'أعلى', + 'Inactive' => 'غير نشط', + 'Interval' => 'فترة', + 'Invoice' => 'فاتورة', + 'Invoices' => 'الفواتير', + 'IsDefault' => 'افتراضي؟', + 'Language' => 'لغة', + 'Last' => 'الاخير', + 'Localization' => 'الموقع', + 'Loginname' => 'اسم الدخول', + 'Matchcode' => 'رمز مطابق', + 'Media' => 'وسائط', + 'MinPrice' => 'سعر دقيقة', + 'Name' => 'اسم', + 'Name1' => 'الاسم 1.', + 'Name2' => 'الاسم 2.', + 'Name3' => 'الاسم 3.', + 'Offer' => 'عرض', + 'Order' => 'طلب', + 'Ordered' => 'أمر', + 'OrderedBy' => 'أمر من قبل', + 'Orders' => 'الطلب #٪ s', + 'Payment' => 'دفع', + 'Price' => 'السعر', + 'Priority' => 'أفضلية', + 'Profit' => '#VALUE!', + 'Quantity' => 'كمية', + 'Receipt' => 'إيصال', + 'Reference' => 'المرجعي', + 'Sales' => 'مبيعات', + 'Settings' => 'إعدادات', + 'Single' => 'غير مرتبطة', + 'Start' => '#VALUE!', + 'State' => 'ولاية', + 'Statistics' => 'إحصائيات', + 'Status' => 'حالة', + 'Stock' => 'المخزون', + 'Street' => 'شارع', + 'Subgroup' => 'مجموعة فرعية', + 'Tax' => 'ضريبة', + 'Terms' => 'شروط', + 'To' => 'ل', + 'TopArticles' => 'أفضل المقالات', + 'Trend' => 'اتجاه', + 'Turnover' => 'دوران', + 'Type' => 'نوع', + 'ZipCode' => 'رمز بريدي', +]]; diff --git a/Theme/Backend/Lang/cs.lang.php b/Theme/Backend/Lang/cs.lang.php new file mode 100755 index 0000000..bf60de9 --- /dev/null +++ b/Theme/Backend/Lang/cs.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Účet', + 'Active' => 'Aktivní', + 'Activity' => 'Aktivita', + 'Address' => 'Adresa', + 'All' => 'Všechno', + 'Amount' => 'Množství', + 'Analysis' => 'Analýza', + 'Analyze' => '#VALUE!', + 'Area' => 'Plocha', + 'Article' => 'Článek', + 'Articles' => 'Články', + 'Available' => 'Dostupný', + 'Calculate' => 'Vypočítat', + 'City' => 'Město', + 'Class' => 'Třída', + 'Client' => 'Klienta', + 'ClientID' => 'ID klienta', + 'ClientName' => 'jméno klienta', + 'Clients' => 'Klienti', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'potvrzení', + 'CoreData' => 'Základní data', + 'Country' => 'Země', + 'Created' => 'Vytvořený', + 'Creator' => 'Tvůrce', + 'CreditNote' => 'Dobropis', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'datum', + 'DefaultInternational' => 'Výchozí mezinárodní', + 'DefaultNational' => 'Výchozí státní příslušník', + 'Delivery' => 'dodávka', + 'DeliveryNote' => 'Dodací list', + 'Description' => 'Popis', + 'Discount' => 'Sleva', + 'DiscountP' => 'Sleva v%', + 'Documentation' => 'Dokumentace', + 'Employee' => 'Zaměstnanec', + 'End' => '#VALUE!', + 'FAO' => 'Fao.', + 'From' => 'Z', + 'Group' => 'Skupina', + 'Groups' => 'Skupiny', + 'Highest' => 'Nejvyšší', + 'Inactive' => 'Neaktivní', + 'Interval' => 'Interval', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'IsDefault' => 'Je výchozí?', + 'Language' => 'Jazyk', + 'Last' => 'Poslední', + 'Localization' => 'Lokalizace', + 'Loginname' => 'Přihlašovací jméno', + 'Matchcode' => 'MatchCode.', + 'Media' => 'Mediální', + 'MinPrice' => 'Min', + 'Name' => 'název', + 'Name1' => 'Jméno 1.', + 'Name2' => 'Jméno 2.', + 'Name3' => 'Jméno 3.', + 'Offer' => 'Nabídka', + 'Order' => 'Objednat', + 'Ordered' => 'Objednaný', + 'OrderedBy' => 'Objednáno někým', + 'Orders' => 'Objednávky', + 'Payment' => 'Způsob platby', + 'Price' => 'Cena', + 'Priority' => 'Přednost', + 'Profit' => '#VALUE!', + 'Quantity' => 'Množství', + 'Receipt' => 'Účtenka', + 'Reference' => 'Odkaz', + 'Sales' => 'Odbyt', + 'Settings' => 'Nastavení', + 'Single' => 'Singl', + 'Start' => '#VALUE!', + 'State' => 'Stát', + 'Statistics' => 'Statistika', + 'Status' => 'Postavení', + 'Stock' => 'Skladem', + 'Street' => 'ulice', + 'Subgroup' => 'Podskupina', + 'Tax' => 'Daň', + 'Terms' => 'Podmínky', + 'To' => 'Na', + 'TopArticles' => 'Nejlepší články', + 'Trend' => 'Trend', + 'Turnover' => 'Obrat', + 'Type' => 'Typ', + 'ZipCode' => 'PSČ', +]]; diff --git a/Theme/Backend/Lang/da.lang.php b/Theme/Backend/Lang/da.lang.php new file mode 100755 index 0000000..7bb6583 --- /dev/null +++ b/Theme/Backend/Lang/da.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Konto', + 'Active' => 'Aktiv', + 'Activity' => 'Aktivitet', + 'Address' => 'Adresse', + 'All' => 'Alle', + 'Amount' => 'Beløb', + 'Analysis' => 'Analyse', + 'Analyze' => '#VALUE!', + 'Area' => 'Areal', + 'Article' => 'Artikel', + 'Articles' => 'Artikler', + 'Available' => 'Ledig', + 'Calculate' => 'Beregn', + 'City' => 'City.', + 'Class' => 'Klasse', + 'Client' => 'Klient', + 'ClientID' => 'Klient ID.', + 'ClientName' => 'Kundenavn', + 'Clients' => 'Klienter.', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Bekræftelse', + 'CoreData' => 'Kernedata.', + 'Country' => 'Land', + 'Created' => 'Oprettet', + 'Creator' => 'Skaber.', + 'CreditNote' => 'Kreditnota', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Dato', + 'DefaultInternational' => 'Standard International', + 'DefaultNational' => 'Standard National', + 'Delivery' => 'Levering', + 'DeliveryNote' => 'Levering note', + 'Description' => 'Beskrivelse', + 'Discount' => 'Rabat', + 'DiscountP' => 'Rabat i%', + 'Documentation' => 'Dokumentation', + 'Employee' => 'Medarbejder', + 'End' => '#VALUE!', + 'FAO' => 'FAO.', + 'From' => 'Fra', + 'Group' => 'Gruppe', + 'Groups' => 'Grupper.', + 'Highest' => 'Højeste', + 'Inactive' => 'Inaktiv.', + 'Interval' => 'Interval', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer.', + 'IsDefault' => 'Er standard?', + 'Language' => 'Sprog', + 'Last' => 'Sidst', + 'Localization' => 'Lokalisering', + 'Loginname' => 'Login-navn', + 'Matchcode' => 'MatchCode.', + 'Media' => 'Medier', + 'MinPrice' => 'Min', + 'Name' => 'Navn', + 'Name1' => 'Navn 1', + 'Name2' => 'Navn 2.', + 'Name3' => 'Navn 3.', + 'Offer' => 'Tilbud', + 'Order' => 'Bestille', + 'Ordered' => 'Bestilt.', + 'OrderedBy' => 'Bestilt af', + 'Orders' => 'Ordre:% s', + 'Payment' => 'Betaling', + 'Price' => 'Pris', + 'Priority' => 'Prioritet', + 'Profit' => '#VALUE!', + 'Quantity' => 'Antal', + 'Receipt' => 'Kvittering', + 'Reference' => 'Reference', + 'Sales' => 'SALG', + 'Settings' => 'Indstillinger.', + 'Single' => 'Enkelt', + 'Start' => '#VALUE!', + 'State' => 'Stat', + 'Statistics' => 'Statistikker', + 'Status' => 'Status.', + 'Stock' => 'Lager', + 'Street' => 'Gade', + 'Subgroup' => 'Undergruppe', + 'Tax' => 'Skat', + 'Terms' => 'Vilkår', + 'To' => 'Til', + 'TopArticles' => 'Top artikler', + 'Trend' => 'Trend.', + 'Turnover' => 'Omsætning', + 'Type' => 'Type', + 'ZipCode' => 'Postnummer', +]]; diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php new file mode 100755 index 0000000..5d2728e --- /dev/null +++ b/Theme/Backend/Lang/de.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Konto', + 'Active' => 'Aktiv', + 'Activity' => 'Aktivität', + 'Address' => 'Adresse', + 'All' => 'Alle', + 'Amount' => 'Höhe', + 'Analysis' => 'Analyse', + 'Analyze' => '#VALUE!', + 'Area' => 'Bereich', + 'Article' => 'Artikel', + 'Articles' => 'Artikel', + 'Available' => 'Erhältlich', + 'Calculate' => 'Berechnung', + 'City' => 'Stadt', + 'Class' => 'Klasse', + 'Client' => 'Klient', + 'ClientID' => 'Kunden ID', + 'ClientName' => 'Kundenname', + 'Clients' => 'Kunden', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Bestätigung', + 'CoreData' => 'Kerndatei', + 'Country' => 'Land', + 'Created' => 'Erstellt', + 'Creator' => 'Schöpfer', + 'CreditNote' => 'Gutschrift', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Datum', + 'DefaultInternational' => 'Standard-Internationale', + 'DefaultNational' => 'Standardnationalstaat', + 'Delivery' => 'Die Zustellung', + 'DeliveryNote' => 'Lieferschein', + 'Description' => 'Beschreibung', + 'Discount' => 'Rabatt', + 'DiscountP' => 'Rabatt in%', + 'Documentation' => 'Dokumentation', + 'Employee' => 'Mitarbeiter', + 'End' => '#VALUE!', + 'FAO' => 'Fao', + 'From' => 'Von', + 'Group' => 'Gruppe', + 'Groups' => 'Gruppen', + 'Highest' => 'Höchste', + 'Inactive' => 'Inaktiv', + 'Interval' => 'Intervall', + 'Invoice' => 'Rechnung', + 'Invoices' => 'Rechnungen', + 'IsDefault' => 'Ist standardmäßig?', + 'Language' => 'Sprache', + 'Last' => 'Zuletzt', + 'Localization' => 'Lokalisierung', + 'Loginname' => 'Benutzername', + 'Matchcode' => 'Matchcode', + 'Media' => 'Medien', + 'MinPrice' => 'Minster Preis', + 'Name' => 'Name', + 'Name1' => 'Name 1', + 'Name2' => 'Name 2', + 'Name3' => 'Name 3', + 'Offer' => 'Angebot', + 'Order' => 'Befehl', + 'Ordered' => 'Bestellt', + 'OrderedBy' => 'Bestellt durch', + 'Orders' => 'Aufträge', + 'Payment' => 'Zahlung', + 'Price' => 'Preis', + 'Priority' => 'Priorität', + 'Profit' => '#VALUE!', + 'Quantity' => 'Menge', + 'Receipt' => 'Kassenbon', + 'Reference' => 'Bezug', + 'Sales' => 'Der Umsatz', + 'Settings' => 'Einstellungen', + 'Single' => 'Single', + 'Start' => '#VALUE!', + 'State' => 'Zustand', + 'Statistics' => 'Statistiken', + 'Status' => 'Status', + 'Stock' => 'Aktie', + 'Street' => 'Straße', + 'Subgroup' => 'Untergruppe', + 'Tax' => 'Steuer', + 'Terms' => 'Bedingungen', + 'To' => 'Zu', + 'TopArticles' => 'Top-Artikeln', + 'Trend' => 'Trend', + 'Turnover' => 'Umsatz', + 'Type' => 'Typ', + 'ZipCode' => 'Postleitzahl', +]]; diff --git a/Theme/Backend/Lang/el.lang.php b/Theme/Backend/Lang/el.lang.php new file mode 100755 index 0000000..d8079df --- /dev/null +++ b/Theme/Backend/Lang/el.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'λογαριασμός', + 'Active' => 'Ενεργός', + 'Activity' => 'Δραστηριότητα', + 'Address' => 'Διεύθυνση', + 'All' => 'Ολα', + 'Amount' => 'Ποσό', + 'Analysis' => 'Ανάλυση', + 'Analyze' => '#VALUE!', + 'Area' => 'Περιοχή', + 'Article' => 'Αρθρο', + 'Articles' => 'Είδη', + 'Available' => 'Διαθέσιμος', + 'Calculate' => 'Υπολογίζω', + 'City' => 'Πόλη', + 'Class' => 'Τάξη', + 'Client' => 'Πελάτης', + 'ClientID' => 'ταυτότητα πελάτη', + 'ClientName' => 'Όνομα Πελάτη', + 'Clients' => 'Πελάτες', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Επιβεβαίωση', + 'CoreData' => 'Βασικά δεδομένα', + 'Country' => 'Χώρα', + 'Created' => 'Δημιουργήθηκε', + 'Creator' => 'Δημιουργός', + 'CreditNote' => 'Πιστωτικό σημείωμα', + 'Current' => '#VALUE!', + 'DSO' => 'ΔΣΟ', + 'Date' => 'Ημερομηνία', + 'DefaultInternational' => 'Προεπιλογή Διεθνής', + 'DefaultNational' => 'Προεπιλεγμένος Εθνικός', + 'Delivery' => 'Διανομή', + 'DeliveryNote' => 'Δελτίο παράδοσης', + 'Description' => 'Περιγραφή', + 'Discount' => 'Εκπτωση', + 'DiscountP' => 'Έκπτωση σε%', + 'Documentation' => 'Τεκμηρίωση', + 'Employee' => 'Υπάλληλος', + 'End' => '#VALUE!', + 'FAO' => 'Φλυαρία', + 'From' => 'Από', + 'Group' => 'Ομάδα', + 'Groups' => 'Ομάδες', + 'Highest' => 'Υψιστος', + 'Inactive' => 'Αδρανής', + 'Interval' => 'Διάστημα', + 'Invoice' => 'Τιμολόγιο', + 'Invoices' => 'Τιμολόγια', + 'IsDefault' => 'Είναι προεπιλογή;', + 'Language' => 'Γλώσσα', + 'Last' => 'τελευταίος', + 'Localization' => 'Εντοπισμός', + 'Loginname' => 'Ονομα σύνδεσης', + 'Matchcode' => 'Matchcode', + 'Media' => 'Μεσο ΜΑΖΙΚΗΣ ΕΝΗΜΕΡΩΣΗΣ', + 'MinPrice' => 'Ελάχιστη τιμή', + 'Name' => 'Ονομα', + 'Name1' => 'Όνομα 1', + 'Name2' => 'Όνομα 2', + 'Name3' => 'Όνομα 3', + 'Offer' => 'Προσφορά', + 'Order' => 'Σειρά', + 'Ordered' => 'Διέταξε', + 'OrderedBy' => 'Παραγγέλθηκε από', + 'Orders' => 'Εντολές', + 'Payment' => 'Πληρωμή', + 'Price' => 'Τιμή', + 'Priority' => 'Προτεραιότητα', + 'Profit' => '#VALUE!', + 'Quantity' => 'Ποσότητα', + 'Receipt' => 'Παραλαβή', + 'Reference' => 'Αναφορά', + 'Sales' => 'Εκπτώσεις', + 'Settings' => 'Ρυθμίσεις', + 'Single' => 'Μονόκλινο', + 'Start' => '#VALUE!', + 'State' => 'κατάσταση', + 'Statistics' => 'Στατιστική', + 'Status' => 'Κατάσταση', + 'Stock' => 'Στοκ', + 'Street' => 'Δρόμος', + 'Subgroup' => 'Υποομάδα', + 'Tax' => 'Φόρος', + 'Terms' => 'Οροι', + 'To' => 'Προς το', + 'TopArticles' => 'Κορυφαία άρθρα', + 'Trend' => 'Τάση', + 'Turnover' => 'Τζίρος', + 'Type' => 'Τύπος', + 'ZipCode' => 'Ταχυδρομικός κώδικας', +]]; diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php new file mode 100755 index 0000000..0d3b729 --- /dev/null +++ b/Theme/Backend/Lang/en.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Account', + 'Active' => 'Active', + 'Activity' => 'Activity', + 'Address' => 'Address', + 'All' => 'All', + 'Amount' => 'Amount', + 'Analysis' => 'Analysis', + 'Analyze' => 'Analyze', + 'Area' => 'Area', + 'Article' => 'Article', + 'Articles' => 'Articles', + 'Available' => 'Available', + 'Calculate' => 'Calculate', + 'City' => 'City', + 'Class' => 'Class', + 'Client' => 'Client', + 'ClientID' => 'Client ID', + 'ClientName' => 'Client Name', + 'Clients' => 'Clients', + 'Comparison' => 'Comparison', + 'Confirmation' => 'Confirmation', + 'CoreData' => 'Core data', + 'Country' => 'Country', + 'Created' => 'Created', + 'Creator' => 'Creator', + 'CreditNote' => 'Credit Note', + 'Current' => 'Current', + 'DSO' => 'DSO', + 'Date' => 'Date', + 'DefaultInternational' => 'Default International', + 'DefaultNational' => 'Default National', + 'Delivery' => 'Delivery', + 'DeliveryNote' => 'Delivery Note', + 'Description' => 'Description', + 'Discount' => 'Discount', + 'DiscountP' => 'Discount in %', + 'Documentation' => 'Documentation', + 'Employee' => 'Employee', + 'End' => 'End', + 'FAO' => 'FAO', + 'From' => 'From', + 'Group' => 'Group', + 'Groups' => 'Groups', + 'Highest' => 'Highest', + 'Inactive' => 'Inactive', + 'Interval' => 'Interval', + 'Invoice' => 'Invoice', + 'Invoices' => 'Invoices', + 'IsDefault' => 'Is default?', + 'Language' => 'Language', + 'Last' => 'Last', + 'Localization' => 'Localization', + 'Loginname' => 'Loginname', + 'Matchcode' => 'Matchcode', + 'Media' => 'Media', + 'MinPrice' => 'Min Price', + 'Name' => 'Name', + 'Name1' => 'Name 1', + 'Name2' => 'Name 2', + 'Name3' => 'Name 3', + 'Offer' => 'Offer', + 'Order' => 'Order', + 'Ordered' => 'Ordered', + 'OrderedBy' => 'Ordered By', + 'Orders' => 'Orders', + 'Payment' => 'Payment', + 'Price' => 'Price', + 'Priority' => 'Priority', + 'Profit' => 'Profit', + 'Quantity' => 'Quantity', + 'Receipt' => 'Receipt', + 'Reference' => 'Reference', + 'Sales' => 'Sales', + 'Settings' => 'Settings', + 'Single' => 'Single', + 'Start' => 'Start', + 'State' => 'State', + 'Statistics' => 'Statistics', + 'Status' => 'Status', + 'Stock' => 'Stock', + 'Street' => 'Street', + 'Subgroup' => 'Subgroup', + 'Tax' => 'Tax', + 'Terms' => 'Terms', + 'To' => 'To', + 'TopArticles' => 'Top Articles', + 'Trend' => 'Trend', + 'Turnover' => 'Turnover', + 'Type' => 'Type', + 'ZipCode' => 'ZipCode', +]]; diff --git a/Theme/Backend/Lang/es.lang.php b/Theme/Backend/Lang/es.lang.php new file mode 100755 index 0000000..a0a1778 --- /dev/null +++ b/Theme/Backend/Lang/es.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Cuenta', + 'Active' => 'Activo', + 'Activity' => 'Actividad', + 'Address' => 'Habla a', + 'All' => 'Todo', + 'Amount' => 'Monto', + 'Analysis' => 'Análisis', + 'Analyze' => '#VALUE!', + 'Area' => 'Área', + 'Article' => 'Artículo', + 'Articles' => 'Artículos', + 'Available' => 'Disponible', + 'Calculate' => 'Calcular', + 'City' => 'Ciudad', + 'Class' => 'Clase', + 'Client' => 'Cliente', + 'ClientID' => 'Identificación del cliente', + 'ClientName' => 'nombre del cliente', + 'Clients' => 'Clientela', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Confirmación', + 'CoreData' => 'Datos principales', + 'Country' => 'País', + 'Created' => 'Creado', + 'Creator' => 'Creador', + 'CreditNote' => 'Nota de crédito', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Fecha', + 'DefaultInternational' => 'Internacional predeterminado', + 'DefaultNational' => 'Nacional predeterminado', + 'Delivery' => 'Entrega', + 'DeliveryNote' => 'Nota de entrega', + 'Description' => 'Descripción', + 'Discount' => 'Descuento', + 'DiscountP' => 'Descuento en%', + 'Documentation' => 'Documentación', + 'Employee' => 'Empleado', + 'End' => '#VALUE!', + 'FAO' => 'Fao', + 'From' => 'Desde', + 'Group' => 'Grupo', + 'Groups' => 'Grupo', + 'Highest' => 'Más alto', + 'Inactive' => 'Inactivo', + 'Interval' => 'Intervalo', + 'Invoice' => 'Factura', + 'Invoices' => 'Facturas', + 'IsDefault' => 'Es por defecto?', + 'Language' => 'Idioma', + 'Last' => 'Ultimo', + 'Localization' => 'Localización', + 'Loginname' => 'Nombre de inicio de sesión', + 'Matchcode' => 'Código de asociación', + 'Media' => 'Medios de comunicación', + 'MinPrice' => 'Precio mínimo', + 'Name' => 'Nombre', + 'Name1' => 'Nombre 1', + 'Name2' => 'Nombre 2', + 'Name3' => 'Nombre 3', + 'Offer' => 'Oferta', + 'Order' => 'Pedido', + 'Ordered' => 'Ordenado', + 'OrderedBy' => 'Ordenado por', + 'Orders' => 'Pedidos', + 'Payment' => 'Pago', + 'Price' => 'Precio', + 'Priority' => 'Prioridad', + 'Profit' => '#VALUE!', + 'Quantity' => 'Cantidad', + 'Receipt' => 'Recibo', + 'Reference' => 'Referencia', + 'Sales' => 'Ventas', + 'Settings' => 'Ajustes', + 'Single' => 'Único', + 'Start' => '#VALUE!', + 'State' => 'Expresar', + 'Statistics' => 'Estadísticas', + 'Status' => 'Estado', + 'Stock' => 'Valores', + 'Street' => 'calle', + 'Subgroup' => 'Subgrupo', + 'Tax' => 'Impuesto', + 'Terms' => 'Condiciones', + 'To' => 'A', + 'TopArticles' => 'Artículos principales', + 'Trend' => 'Tendencia', + 'Turnover' => 'Rotación', + 'Type' => 'Escribe', + 'ZipCode' => 'Código postal', +]]; diff --git a/Theme/Backend/Lang/fi.lang.php b/Theme/Backend/Lang/fi.lang.php new file mode 100755 index 0000000..1e2e0af --- /dev/null +++ b/Theme/Backend/Lang/fi.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Tili', + 'Active' => 'Aktiivinen', + 'Activity' => 'Toiminta', + 'Address' => 'Osoite', + 'All' => 'Kaikki', + 'Amount' => 'Määrä', + 'Analysis' => 'Analyysi', + 'Analyze' => '#VALUE!', + 'Area' => 'Alue', + 'Article' => 'Artikla', + 'Articles' => 'Artikkelit', + 'Available' => 'Saatavilla', + 'Calculate' => 'Laskea', + 'City' => 'Kaupunki', + 'Class' => 'Luokka', + 'Client' => 'Asiakas', + 'ClientID' => 'Asiakastunnus', + 'ClientName' => 'Asiakkaan Nimi', + 'Clients' => 'Asiakkaat', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Vahvistus', + 'CoreData' => 'Keskeiset tiedot', + 'Country' => 'Maa', + 'Created' => 'Luotu', + 'Creator' => 'Luoja', + 'CreditNote' => 'Luottoluotto', + 'Current' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Päivämäärä', + 'DefaultInternational' => 'Oletus kansainvälinen', + 'DefaultNational' => 'Oletusarvoinen kansallinen', + 'Delivery' => 'Toimitus', + 'DeliveryNote' => 'Saapumisilmoitus', + 'Description' => 'Kuvaus', + 'Discount' => 'Alennus', + 'DiscountP' => 'Alennus%', + 'Documentation' => 'Dokumentointi', + 'Employee' => 'Työntekijä', + 'End' => '#VALUE!', + 'FAO' => 'Fao', + 'From' => 'Peräkkäin', + 'Group' => 'Ryhmä', + 'Groups' => 'Ryhmät', + 'Highest' => 'Korkein', + 'Inactive' => 'Epäaktiivinen', + 'Interval' => 'Aikaväli', + 'Invoice' => 'Lasku', + 'Invoices' => 'Laskut', + 'IsDefault' => 'On oletusarvo?', + 'Language' => 'Kieli', + 'Last' => 'Kestää', + 'Localization' => 'Lokalisointi', + 'Loginname' => 'Kirjautumisnimi', + 'Matchcode' => 'Matchcode', + 'Media' => 'Media', + 'MinPrice' => 'Min hinta', + 'Name' => 'Nimi', + 'Name1' => 'Nimi 1', + 'Name2' => 'Nimi 2', + 'Name3' => 'Nimi 3', + 'Offer' => 'Tarjous', + 'Order' => 'Tilaus', + 'Ordered' => 'Tilattu', + 'OrderedBy' => 'Tilaama', + 'Orders' => 'Tilaus', + 'Payment' => 'Maksu', + 'Price' => 'Hinta', + 'Priority' => 'Etusija', + 'Profit' => '#VALUE!', + 'Quantity' => 'Määrä', + 'Receipt' => 'Kuitti', + 'Reference' => 'Viite', + 'Sales' => 'Myynti', + 'Settings' => 'asetukset', + 'Single' => 'Yksittäinen', + 'Start' => '#VALUE!', + 'State' => 'Osavaltio', + 'Statistics' => 'Tilastot', + 'Status' => 'Tila', + 'Stock' => 'Varasto', + 'Street' => 'Katu', + 'Subgroup' => 'Alaryhmä', + 'Tax' => 'Verottaa', + 'Terms' => 'Ehdot', + 'To' => 'Jllek', + 'TopArticles' => 'Top artikkelit', + 'Trend' => 'Trendi', + 'Turnover' => 'Liikevaihto', + 'Type' => 'Tyyppi', + 'ZipCode' => 'Postinumero', +]]; diff --git a/Theme/Backend/Lang/fr.lang.php b/Theme/Backend/Lang/fr.lang.php new file mode 100755 index 0000000..dde03ef --- /dev/null +++ b/Theme/Backend/Lang/fr.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Compte', + 'Active' => 'actif', + 'Activity' => 'Activité', + 'Address' => 'Adresse', + 'All' => 'Tout', + 'Amount' => 'Quantité', + 'Analysis' => 'Analyse', + 'Analyze' => '#VALUE!', + 'Area' => 'Zone', + 'Article' => 'Article', + 'Articles' => 'Des articles', + 'Available' => 'Disponible', + 'Calculate' => 'Calculer', + 'City' => 'Ville', + 'Class' => 'Classer', + 'Client' => 'Client', + 'ClientID' => 'identité du client', + 'ClientName' => 'Nom du client', + 'Clients' => 'Clients', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Confirmation', + 'CoreData' => 'Données de base', + 'Country' => 'Pays', + 'Created' => 'Établi', + 'Creator' => 'Créateur', + 'CreditNote' => 'Note de crédit', + 'Current' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Date', + 'DefaultInternational' => 'International par défaut', + 'DefaultNational' => 'National par défaut', + 'Delivery' => 'Livraison', + 'DeliveryNote' => 'Bon de livraison', + 'Description' => 'La description', + 'Discount' => 'Remise', + 'DiscountP' => 'Rabais en%', + 'Documentation' => 'Documentation', + 'Employee' => 'Employé', + 'End' => '#VALUE!', + 'FAO' => 'Fao', + 'From' => 'À partir de', + 'Group' => 'Grouper', + 'Groups' => 'Groupes', + 'Highest' => 'Plus haut', + 'Inactive' => 'Inactif', + 'Interval' => 'Intervalle', + 'Invoice' => 'Facture d\'achat', + 'Invoices' => 'Factures', + 'IsDefault' => 'Est par défaut?', + 'Language' => 'Langue', + 'Last' => 'Dernier', + 'Localization' => 'Localisation', + 'Loginname' => 'Identifiant', + 'Matchcode' => 'Encadrement', + 'Media' => 'Médias', + 'MinPrice' => "Prix \u{200b}\u{200b}min", + 'Name' => 'Nom', + 'Name1' => 'Nom 1', + 'Name2' => 'Nom 2', + 'Name3' => 'Nom 3', + 'Offer' => 'Offrir', + 'Order' => 'Commander', + 'Ordered' => 'Commandé', + 'OrderedBy' => 'Commander par', + 'Orders' => 'Ordres', + 'Payment' => 'Paiement', + 'Price' => 'Prix', + 'Priority' => 'Priorité', + 'Profit' => '#VALUE!', + 'Quantity' => 'Quantité', + 'Receipt' => 'Reçu', + 'Reference' => 'Référence', + 'Sales' => 'Ventes', + 'Settings' => 'Réglages', + 'Single' => 'Seul', + 'Start' => '#VALUE!', + 'State' => 'État', + 'Statistics' => 'Statistiques', + 'Status' => 'Statut', + 'Stock' => 'Stocker', + 'Street' => 'rue', + 'Subgroup' => 'Sous-groupe', + 'Tax' => 'Impôt', + 'Terms' => 'termes', + 'To' => 'À', + 'TopArticles' => 'Top articles', + 'Trend' => 'Tendance', + 'Turnover' => 'Chiffre d\'affaires', + 'Type' => 'Taper', + 'ZipCode' => 'Code postal', +]]; diff --git a/Theme/Backend/Lang/hu.lang.php b/Theme/Backend/Lang/hu.lang.php new file mode 100755 index 0000000..f1c0d74 --- /dev/null +++ b/Theme/Backend/Lang/hu.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Számla', + 'Active' => 'Aktív', + 'Activity' => 'Tevékenység', + 'Address' => 'Cím', + 'All' => 'Minden', + 'Amount' => 'Összeg', + 'Analysis' => 'Elemzés', + 'Analyze' => '#VALUE!', + 'Area' => 'Terület', + 'Article' => 'Cikk', + 'Articles' => 'Árucikkek', + 'Available' => 'Elérhető', + 'Calculate' => 'Kiszámítja', + 'City' => 'Város', + 'Class' => 'Osztály', + 'Client' => 'Ügyfél', + 'ClientID' => 'Ügyfélazonosító', + 'ClientName' => 'Ügyfél Neve', + 'Clients' => 'Kliensek', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Megerősítés', + 'CoreData' => 'Alapvető adatok', + 'Country' => 'Ország', + 'Created' => 'Létrehozott', + 'Creator' => 'Teremtő', + 'CreditNote' => 'Jóváírás', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Dátum', + 'DefaultInternational' => 'Alapértelmezett nemzetközi', + 'DefaultNational' => 'Alapértelmezett nemzeti', + 'Delivery' => 'Szállítás', + 'DeliveryNote' => 'Fuvarlevél', + 'Description' => 'Leírás', + 'Discount' => 'Kedvezmény', + 'DiscountP' => 'Kedvezmény%', + 'Documentation' => 'Dokumentáció', + 'Employee' => 'Munkavállaló', + 'End' => '#VALUE!', + 'FAO' => 'FAO', + 'From' => 'Tól től', + 'Group' => 'Csoport', + 'Groups' => 'Csoportok', + 'Highest' => 'Legmagasabb', + 'Inactive' => 'Inaktív', + 'Interval' => 'Intervallum', + 'Invoice' => 'Számla', + 'Invoices' => 'Számlák', + 'IsDefault' => 'Alapértelmezett?', + 'Language' => 'Nyelv', + 'Last' => 'Utolsó', + 'Localization' => 'Lokalizáció', + 'Loginname' => 'Bejelentkezési név', + 'Matchcode' => 'Matchcode', + 'Media' => 'Média', + 'MinPrice' => 'Min Ár', + 'Name' => 'Név', + 'Name1' => 'NAME 1', + 'Name2' => 'NAME 2', + 'Name3' => 'Név 3', + 'Offer' => 'Ajánlat', + 'Order' => 'Rendelés', + 'Ordered' => 'Elrendelt', + 'OrderedBy' => 'Megrendelő', + 'Orders' => 'Megrendelések', + 'Payment' => 'Fizetés', + 'Price' => 'Ár', + 'Priority' => 'Kiemelten fontos', + 'Profit' => '#VALUE!', + 'Quantity' => 'Mennyiség', + 'Receipt' => 'Nyugta', + 'Reference' => 'Referencia', + 'Sales' => 'Értékesítés', + 'Settings' => 'Beállítások', + 'Single' => 'Egyetlen', + 'Start' => '#VALUE!', + 'State' => 'Állapot', + 'Statistics' => 'Statisztika', + 'Status' => 'Állapot', + 'Stock' => 'Készlet', + 'Street' => 'utca', + 'Subgroup' => 'Alcsoport', + 'Tax' => 'Adó', + 'Terms' => 'Feltételek', + 'To' => 'Nak nek', + 'TopArticles' => 'Top cikkek', + 'Trend' => 'Irányzat', + 'Turnover' => 'Forgalom', + 'Type' => 'típus', + 'ZipCode' => 'Irányítószám', +]]; diff --git a/Theme/Backend/Lang/it.lang.php b/Theme/Backend/Lang/it.lang.php new file mode 100755 index 0000000..faedf61 --- /dev/null +++ b/Theme/Backend/Lang/it.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Account', + 'Active' => 'Attivo', + 'Activity' => 'Attività', + 'Address' => 'Indirizzo', + 'All' => 'Tutto', + 'Amount' => 'Quantità', + 'Analysis' => 'Analisi', + 'Analyze' => '#VALUE!', + 'Area' => 'La zona', + 'Article' => 'Articolo', + 'Articles' => 'Artificio', + 'Available' => 'A disposizione', + 'Calculate' => 'Calcolare', + 'City' => 'Città', + 'Class' => 'Classe', + 'Client' => 'Cliente', + 'ClientID' => 'Identificativo cliente', + 'ClientName' => 'nome del cliente', + 'Clients' => 'Clienti', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Conferma', + 'CoreData' => 'Dati principali', + 'Country' => 'Nazione', + 'Created' => 'Creato', + 'Creator' => 'Creatore', + 'CreditNote' => 'Nota di credito', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Data', + 'DefaultInternational' => 'Default International.', + 'DefaultNational' => 'National default.', + 'Delivery' => 'Consegna', + 'DeliveryNote' => 'Bolla d\'accompagnamento', + 'Description' => 'Descrizione', + 'Discount' => 'Sconto', + 'DiscountP' => 'Sconto in%', + 'Documentation' => 'Documentazione', + 'Employee' => 'Dipendente', + 'End' => '#VALUE!', + 'FAO' => 'FAO.', + 'From' => 'A partire dal', + 'Group' => 'Gruppo', + 'Groups' => 'Gruppi', + 'Highest' => 'Massimo', + 'Inactive' => 'Non attivo', + 'Interval' => 'Intervallo', + 'Invoice' => 'Fattura', + 'Invoices' => 'Fatture', + 'IsDefault' => 'È predefinito?', + 'Language' => 'Lingua', + 'Last' => 'Scorso', + 'Localization' => 'Localizzazione', + 'Loginname' => 'Nome di login', + 'Matchcode' => 'Matchcode.', + 'Media' => 'Media', + 'MinPrice' => 'Prezzo minimo', + 'Name' => 'Nome', + 'Name1' => 'Nome 1.', + 'Name2' => 'Nome 2.', + 'Name3' => 'Nome 3.', + 'Offer' => 'Offerta', + 'Order' => 'Ordine', + 'Ordered' => 'Ordinato', + 'OrderedBy' => 'Ordinato da', + 'Orders' => 'Ordini', + 'Payment' => 'Pagamento', + 'Price' => 'Prezzo', + 'Priority' => 'Priorità', + 'Profit' => '#VALUE!', + 'Quantity' => 'Quantità', + 'Receipt' => 'Ricevuta', + 'Reference' => 'Riferimento', + 'Sales' => 'Saldi', + 'Settings' => 'Impostazioni', + 'Single' => 'Separare', + 'Start' => '#VALUE!', + 'State' => 'Stato', + 'Statistics' => 'Statistiche', + 'Status' => 'Stato', + 'Stock' => 'Azione', + 'Street' => 'strada', + 'Subgroup' => 'Sottogruppo', + 'Tax' => 'Imposta', + 'Terms' => 'Termini', + 'To' => 'a', + 'TopArticles' => 'Articoli migliori', + 'Trend' => 'Tendenza', + 'Turnover' => 'Turnover', + 'Type' => 'Tipo', + 'ZipCode' => 'Cap', +]]; diff --git a/Theme/Backend/Lang/ja.lang.php b/Theme/Backend/Lang/ja.lang.php new file mode 100755 index 0000000..f8a9b33 --- /dev/null +++ b/Theme/Backend/Lang/ja.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'アカウント', + 'Active' => 'アクティブ', + 'Activity' => 'アクティビティ', + 'Address' => '住所', + 'All' => '全て', + 'Amount' => '額', + 'Analysis' => '分析', + 'Analyze' => '#VALUE!', + 'Area' => '領域', + 'Article' => '記事', + 'Articles' => 'articles', + 'Available' => '利用可能', + 'Calculate' => '計算する', + 'City' => '市', + 'Class' => 'クラス', + 'Client' => 'クライアント', + 'ClientID' => 'クライアントID', + 'ClientName' => 'クライアント名', + 'Clients' => 'クライアント', + 'Comparison' => '#VALUE!', + 'Confirmation' => '確認', + 'CoreData' => 'コアデータ', + 'Country' => '国', + 'Created' => '作成した', + 'Creator' => 'クリエーター', + 'CreditNote' => 'クレジットノート', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => '日にち', + 'DefaultInternational' => 'デフォルトの国際', + 'DefaultNational' => 'デフォルトの国', + 'Delivery' => '配達', + 'DeliveryNote' => '配達メモ', + 'Description' => '説明', + 'Discount' => '割引', + 'DiscountP' => '割引%', + 'Documentation' => 'ドキュメンテーション', + 'Employee' => '従業員', + 'End' => '#VALUE!', + 'FAO' => 'fa fa', + 'From' => 'から', + 'Group' => 'グループ', + 'Groups' => '団体', + 'Highest' => '最高', + 'Inactive' => '非活性', + 'Interval' => '間隔', + 'Invoice' => '請求書', + 'Invoices' => '請求書', + 'IsDefault' => 'デフォルトですか?', + 'Language' => '言語', + 'Last' => '最後', + 'Localization' => 'ローカライズ', + 'Loginname' => 'ログイン名', + 'Matchcode' => 'マッチコード', + 'Media' => 'メディア', + 'MinPrice' => '最小価格', + 'Name' => '名前', + 'Name1' => '名前1', + 'Name2' => '名前2', + 'Name3' => '名前3', + 'Offer' => 'オファー', + 'Order' => '注文', + 'Ordered' => '順序付けられました', + 'OrderedBy' => 'によって順序付け', + 'Orders' => '命令', + 'Payment' => '支払い', + 'Price' => '価格', + 'Priority' => '優先度', + 'Profit' => '#VALUE!', + 'Quantity' => '量', + 'Receipt' => 'レシート', + 'Reference' => 'リファレンス', + 'Sales' => '売り返り', + 'Settings' => '設定', + 'Single' => '独身', + 'Start' => '#VALUE!', + 'State' => '州', + 'Statistics' => '統計学', + 'Status' => '状態', + 'Stock' => 'ストック', + 'Street' => '街', + 'Subgroup' => 'サブグループ', + 'Tax' => '税', + 'Terms' => '条項', + 'To' => 'に', + 'TopArticles' => 'トップ記事', + 'Trend' => '傾向', + 'Turnover' => 'ひっくり返す', + 'Type' => 'タイプ', + 'ZipCode' => '郵便番号', +]]; diff --git a/Theme/Backend/Lang/ko.lang.php b/Theme/Backend/Lang/ko.lang.php new file mode 100755 index 0000000..f7b7e8b --- /dev/null +++ b/Theme/Backend/Lang/ko.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => '계정', + 'Active' => '활동적인', + 'Activity' => '활동', + 'Address' => '주소', + 'All' => '모두', + 'Amount' => '양', + 'Analysis' => '분석', + 'Analyze' => '#VALUE!', + 'Area' => '지역', + 'Article' => '기사', + 'Articles' => '조항', + 'Available' => '사용 가능', + 'Calculate' => '계산하다', + 'City' => '도시', + 'Class' => '등급', + 'Client' => '고객', + 'ClientID' => '클라이언트 ID.', + 'ClientName' => '고객 이름', + 'Clients' => '클라이언트', + 'Comparison' => '#VALUE!', + 'Confirmation' => '확인', + 'CoreData' => '핵심 데이터', + 'Country' => '국가', + 'Created' => '만들어진', + 'Creator' => '창조자', + 'CreditNote' => '신용 노트', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => '날짜', + 'DefaultInternational' => '기본 국제', + 'DefaultNational' => '기본 내셔널', + 'Delivery' => '배달', + 'DeliveryNote' => '배달 메모', + 'Description' => '설명', + 'Discount' => '할인', + 'DiscountP' => '할인 %', + 'Documentation' => '선적 서류 비치', + 'Employee' => '직원', + 'End' => '#VALUE!', + 'FAO' => '조금', + 'From' => '에서', + 'Group' => '그룹', + 'Groups' => '여러 떼', + 'Highest' => '제일 높은', + 'Inactive' => '비활성으로', + 'Interval' => '간격', + 'Invoice' => '송장', + 'Invoices' => '송장', + 'IsDefault' => '기본값은 무엇입니까?', + 'Language' => '언어', + 'Last' => '마지막', + 'Localization' => '현지화', + 'Loginname' => '로그인 이름', + 'Matchcode' => '매치 코드', + 'Media' => '미디어', + 'MinPrice' => '최소 가격', + 'Name' => '이름', + 'Name1' => '이름 1', + 'Name2' => '이름 2', + 'Name3' => '이름 3.', + 'Offer' => '권하다', + 'Order' => '주문하다', + 'Ordered' => '주문했다', + 'OrderedBy' => '명령을 받았다', + 'Orders' => '명령', + 'Payment' => '지불', + 'Price' => '가격', + 'Priority' => '우선 사항', + 'Profit' => '#VALUE!', + 'Quantity' => '수량', + 'Receipt' => '영수증', + 'Reference' => '참조', + 'Sales' => '매상', + 'Settings' => '설정', + 'Single' => '하나의', + 'Start' => '#VALUE!', + 'State' => '상태', + 'Statistics' => '통계', + 'Status' => '상태', + 'Stock' => '재고', + 'Street' => '거리', + 'Subgroup' => '하급 집단', + 'Tax' => '세', + 'Terms' => '자귀', + 'To' => '에게', + 'TopArticles' => '최고 기사', + 'Trend' => '경향', + 'Turnover' => '회전율', + 'Type' => '유형', + 'ZipCode' => '우편 번호', +]]; diff --git a/Theme/Backend/Lang/no.lang.php b/Theme/Backend/Lang/no.lang.php new file mode 100755 index 0000000..f4e708c --- /dev/null +++ b/Theme/Backend/Lang/no.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Regnskap', + 'Active' => 'Aktiv', + 'Activity' => 'Aktivitet', + 'Address' => 'Adresse', + 'All' => 'Alle', + 'Amount' => 'Beløp', + 'Analysis' => 'Analyse', + 'Analyze' => '#VALUE!', + 'Area' => 'Område', + 'Article' => 'Artikkel', + 'Articles' => 'Artikler', + 'Available' => 'Tilgjengelig', + 'Calculate' => 'Regne ut', + 'City' => 'By', + 'Class' => 'Klasse', + 'Client' => 'Klient', + 'ClientID' => 'klient-ID', + 'ClientName' => 'Klientens navn', + 'Clients' => 'Klienter', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Bekreftelse', + 'CoreData' => 'Kjernedata', + 'Country' => 'Land', + 'Created' => 'Opprettet', + 'Creator' => 'Skaperen.', + 'CreditNote' => 'Kredittnota', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Dato', + 'DefaultInternational' => 'Standard internasjonal', + 'DefaultNational' => 'Standard nasjonal', + 'Delivery' => 'Leveranse', + 'DeliveryNote' => 'Leveringsnotat', + 'Description' => 'Beskrivelse', + 'Discount' => 'Rabatt', + 'DiscountP' => 'Rabatt i%', + 'Documentation' => 'Dokumentasjon', + 'Employee' => 'Ansatt', + 'End' => '#VALUE!', + 'FAO' => 'FAO.', + 'From' => 'Fra', + 'Group' => 'Gruppe', + 'Groups' => 'Grupper', + 'Highest' => 'Høyeste', + 'Inactive' => 'Inaktiv', + 'Interval' => 'Intervall', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturaer', + 'IsDefault' => 'Er standard?', + 'Language' => 'Språk', + 'Last' => 'Siste', + 'Localization' => 'Lokalisering', + 'Loginname' => 'Påloggingsnavn', + 'Matchcode' => 'MatchCode.', + 'Media' => 'Media', + 'MinPrice' => 'Min pris', + 'Name' => 'Navn', + 'Name1' => 'Navn 1', + 'Name2' => 'Navn 2.', + 'Name3' => 'Navn 3.', + 'Offer' => 'By på', + 'Order' => 'Rekkefølge', + 'Ordered' => 'Bestilt', + 'OrderedBy' => 'Bestilt av.', + 'Orders' => 'Bestillinger', + 'Payment' => 'innbetaling', + 'Price' => 'Pris', + 'Priority' => 'Prioritet', + 'Profit' => '#VALUE!', + 'Quantity' => 'Mengde', + 'Receipt' => 'Kvittering', + 'Reference' => 'Referanse', + 'Sales' => 'Salg', + 'Settings' => 'Innstillinger', + 'Single' => 'Enkelt', + 'Start' => '#VALUE!', + 'State' => 'Stat', + 'Statistics' => 'Statistikk', + 'Status' => 'Status', + 'Stock' => 'Lager', + 'Street' => 'gate', + 'Subgroup' => 'Undergruppe', + 'Tax' => 'Avgift', + 'Terms' => 'Vilkårene', + 'To' => 'Til', + 'TopArticles' => 'Toppartikler', + 'Trend' => 'Trend', + 'Turnover' => 'Omsetning', + 'Type' => 'Type', + 'ZipCode' => 'Post kode', +]]; diff --git a/Theme/Backend/Lang/pl.lang.php b/Theme/Backend/Lang/pl.lang.php new file mode 100755 index 0000000..f3eb54e --- /dev/null +++ b/Theme/Backend/Lang/pl.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Rachunek', + 'Active' => 'Aktywny', + 'Activity' => 'Czynność', + 'Address' => 'Adres', + 'All' => 'Wszystkie', + 'Amount' => 'Kwota', + 'Analysis' => 'Analiza', + 'Analyze' => '#VALUE!', + 'Area' => 'Powierzchnia', + 'Article' => 'Artykuł', + 'Articles' => 'Artykuły', + 'Available' => 'Dostępny', + 'Calculate' => 'Oblicz', + 'City' => 'Miasto', + 'Class' => 'Klasa', + 'Client' => 'Klient', + 'ClientID' => 'Identyfikator klienta', + 'ClientName' => 'Nazwa klienta', + 'Clients' => 'Klienci.', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Potwierdzenie', + 'CoreData' => 'Podstawowe dane', + 'Country' => 'Kraj', + 'Created' => 'Utworzony', + 'Creator' => 'Twórca', + 'CreditNote' => 'Uwaga kredytowa', + 'Current' => '#VALUE!', + 'DSO' => 'DSO.', + 'Date' => 'Data', + 'DefaultInternational' => 'Domyślny międzynarodowy', + 'DefaultNational' => 'Domyślny National.', + 'Delivery' => 'Dostawa', + 'DeliveryNote' => 'Dowód dostawy', + 'Description' => 'Opis', + 'Discount' => 'Zniżka', + 'DiscountP' => 'Zniżka w%', + 'Documentation' => 'Dokumentacja', + 'Employee' => 'Pracownik', + 'End' => '#VALUE!', + 'FAO' => 'Fao.', + 'From' => 'Z', + 'Group' => 'Grupa', + 'Groups' => 'Grupy', + 'Highest' => 'Najwyższy', + 'Inactive' => 'Nieaktywny', + 'Interval' => 'Interwał', + 'Invoice' => 'Faktura', + 'Invoices' => 'Faktury', + 'IsDefault' => 'Jest domyślnie?', + 'Language' => 'Język', + 'Last' => 'Ostatni, ubiegły, zeszły', + 'Localization' => 'Lokalizacja', + 'Loginname' => 'Nazwa użytkownika', + 'Matchcode' => 'MatchCode.', + 'Media' => 'Głoska bezdźwięczna', + 'MinPrice' => 'Cena min', + 'Name' => 'Nazwa', + 'Name1' => 'Nazwa 1.', + 'Name2' => 'Nazwa 2.', + 'Name3' => 'Nazwa 3.', + 'Offer' => 'Oferta', + 'Order' => 'Zamówienie', + 'Ordered' => 'Uporządkowany', + 'OrderedBy' => 'Zamówiony przez', + 'Orders' => 'Zamówienia', + 'Payment' => 'Zapłata', + 'Price' => 'Cena £', + 'Priority' => 'Priorytet', + 'Profit' => '#VALUE!', + 'Quantity' => 'Ilość', + 'Receipt' => 'Paragon fiskalny', + 'Reference' => 'Odniesienie', + 'Sales' => 'Obroty', + 'Settings' => 'Ustawienia', + 'Single' => 'Pojedynczy', + 'Start' => '#VALUE!', + 'State' => 'Państwo', + 'Statistics' => 'Statystyka', + 'Status' => 'Status', + 'Stock' => 'Magazyn', + 'Street' => 'Ulica', + 'Subgroup' => 'Podgrupa', + 'Tax' => 'Podatek', + 'Terms' => 'Semestry', + 'To' => 'Do', + 'TopArticles' => 'Najlepsze artykuły', + 'Trend' => 'Tendencja', + 'Turnover' => 'Obrót', + 'Type' => 'Rodzaj', + 'ZipCode' => 'Kod pocztowy', +]]; diff --git a/Theme/Backend/Lang/pt.lang.php b/Theme/Backend/Lang/pt.lang.php new file mode 100755 index 0000000..681f4bc --- /dev/null +++ b/Theme/Backend/Lang/pt.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Conta', + 'Active' => 'Ativo', + 'Activity' => 'Atividade', + 'Address' => 'Endereço', + 'All' => 'Tudo', + 'Amount' => 'Montante', + 'Analysis' => 'Análise', + 'Analyze' => '#VALUE!', + 'Area' => 'Área', + 'Article' => 'Artigo', + 'Articles' => 'Artigos', + 'Available' => 'Disponível', + 'Calculate' => 'Calcular', + 'City' => 'Cidade', + 'Class' => 'Classe', + 'Client' => 'Cliente', + 'ClientID' => 'ID do Cliente', + 'ClientName' => 'Nome do cliente', + 'Clients' => 'Clientes', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Confirmação', + 'CoreData' => 'Dados principais', + 'Country' => 'País', + 'Created' => 'Criado', + 'Creator' => 'O Criador', + 'CreditNote' => 'Nota de crédito', + 'Current' => '#VALUE!', + 'DSO' => 'Dso.', + 'Date' => 'Encontro', + 'DefaultInternational' => 'Padrão Internacional', + 'DefaultNational' => 'Nacional padrão', + 'Delivery' => 'Entrega', + 'DeliveryNote' => 'Nota de entrega', + 'Description' => 'Descrição', + 'Discount' => 'Desconto', + 'DiscountP' => 'Desconto em%', + 'Documentation' => 'Documentação', + 'Employee' => 'Funcionário', + 'End' => '#VALUE!', + 'FAO' => 'FAO.', + 'From' => 'A partir de', + 'Group' => 'Grupo', + 'Groups' => 'Grupos', + 'Highest' => 'Altíssima', + 'Inactive' => 'Inativo', + 'Interval' => 'Intervalo', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturas', + 'IsDefault' => 'É padrão?', + 'Language' => 'Língua', + 'Last' => 'Durar', + 'Localization' => 'Localização', + 'Loginname' => 'Nome de acesso', + 'Matchcode' => 'Código de combinação', + 'Media' => 'meios de comunicação', + 'MinPrice' => 'Preço mínimo', + 'Name' => 'Nome', + 'Name1' => 'Nome 1.', + 'Name2' => 'Nome 2.', + 'Name3' => 'Nome 3.', + 'Offer' => 'Oferta', + 'Order' => 'Pedido', + 'Ordered' => 'Encomendado', + 'OrderedBy' => 'Ordenado por', + 'Orders' => 'Pedidos', + 'Payment' => 'Pagamento', + 'Price' => 'Preço', + 'Priority' => 'Prioridade', + 'Profit' => '#VALUE!', + 'Quantity' => 'Quantidade', + 'Receipt' => 'Recibo', + 'Reference' => 'Referência', + 'Sales' => 'Vendas', + 'Settings' => 'Configurações', + 'Single' => 'Solteiro', + 'Start' => '#VALUE!', + 'State' => 'Estado', + 'Statistics' => 'Estatisticas', + 'Status' => 'Status', + 'Stock' => 'Estoque', + 'Street' => 'rua', + 'Subgroup' => 'Subgrupo', + 'Tax' => 'Imposto', + 'Terms' => 'Termos.', + 'To' => 'Para', + 'TopArticles' => 'Artigos de topo', + 'Trend' => 'Tendência', + 'Turnover' => 'Volume de negócios', + 'Type' => 'Modelo', + 'ZipCode' => 'CEP', +]]; diff --git a/Theme/Backend/Lang/ru.lang.php b/Theme/Backend/Lang/ru.lang.php new file mode 100755 index 0000000..e59979e --- /dev/null +++ b/Theme/Backend/Lang/ru.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Счет', + 'Active' => 'Активный', + 'Activity' => 'Мероприятия', + 'Address' => 'Адрес', + 'All' => 'Все', + 'Amount' => 'Количество', + 'Analysis' => 'Анализ', + 'Analyze' => '#VALUE!', + 'Area' => 'Площадь', + 'Article' => 'Статья', + 'Articles' => 'Статьи', + 'Available' => 'Доступный', + 'Calculate' => 'Рассчитать', + 'City' => 'Город', + 'Class' => 'Класс', + 'Client' => 'Клиент', + 'ClientID' => 'ID клиента', + 'ClientName' => 'имя клиента', + 'Clients' => 'Клиенты', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Подтверждение', + 'CoreData' => 'Основные данные', + 'Country' => 'Страна', + 'Created' => 'Созданный', + 'Creator' => 'Создатель', + 'CreditNote' => 'Кредитная нота', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'Дата', + 'DefaultInternational' => 'Default International', + 'DefaultNational' => 'Национальный по умолчанию', + 'Delivery' => 'Доставка', + 'DeliveryNote' => 'Накладная', + 'Description' => 'Описание', + 'Discount' => 'Скидка', + 'DiscountP' => 'Скидка в%', + 'Documentation' => 'Документация', + 'Employee' => 'Наемный рабочий', + 'End' => '#VALUE!', + 'FAO' => 'ФАО', + 'From' => 'От', + 'Group' => 'Группа', + 'Groups' => 'Группы', + 'Highest' => 'Наибольший', + 'Inactive' => 'Неактивный', + 'Interval' => 'Интервал', + 'Invoice' => 'Счет', + 'Invoices' => 'Счета', + 'IsDefault' => 'По умолчанию?', + 'Language' => 'Язык', + 'Last' => 'Последний', + 'Localization' => 'Локализация', + 'Loginname' => 'Логин', + 'Matchcode' => 'MatchCode.', + 'Media' => 'Средства массовой информации', + 'MinPrice' => 'Мин цена', + 'Name' => 'Имя', + 'Name1' => 'Имя 1.', + 'Name2' => 'Имя 2.', + 'Name3' => 'Имя 3.', + 'Offer' => 'Предложение', + 'Order' => 'Заказ', + 'Ordered' => 'Заказал', + 'OrderedBy' => 'Заказан', + 'Orders' => 'Заказывает', + 'Payment' => 'Оплата', + 'Price' => 'Цена', + 'Priority' => 'Приоритет', + 'Profit' => '#VALUE!', + 'Quantity' => 'Количество', + 'Receipt' => 'Квитанция', + 'Reference' => 'Ссылка', + 'Sales' => 'Продажи', + 'Settings' => 'Настройки', + 'Single' => 'Одинокий', + 'Start' => '#VALUE!', + 'State' => 'Состояние', + 'Statistics' => 'Статистика', + 'Status' => 'Статус', + 'Stock' => 'Склад', + 'Street' => 'улица', + 'Subgroup' => 'Подгруппа', + 'Tax' => 'Налог', + 'Terms' => 'Условия', + 'To' => 'К', + 'TopArticles' => 'Лучшие статьи', + 'Trend' => 'Тренд', + 'Turnover' => 'Оборот', + 'Type' => 'Тип', + 'ZipCode' => 'Почтовый Индекс', +]]; diff --git a/Theme/Backend/Lang/sv.lang.php b/Theme/Backend/Lang/sv.lang.php new file mode 100755 index 0000000..667efb9 --- /dev/null +++ b/Theme/Backend/Lang/sv.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'konto', + 'Active' => 'Aktiva', + 'Activity' => 'Aktivitet', + 'Address' => 'Adress', + 'All' => 'Allt', + 'Amount' => 'Belopp', + 'Analysis' => 'Analys', + 'Analyze' => '#VALUE!', + 'Area' => 'Område', + 'Article' => 'Artikel', + 'Articles' => 'Artiklar', + 'Available' => 'Tillgängligt', + 'Calculate' => 'Beräkna', + 'City' => 'Stad', + 'Class' => 'Klass', + 'Client' => 'Klient', + 'ClientID' => 'Klient ID', + 'ClientName' => 'Kundnamn', + 'Clients' => 'Klienter', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Bekräftelse', + 'CoreData' => 'Kärndata', + 'Country' => 'Land', + 'Created' => 'Skapad', + 'Creator' => 'Skapare', + 'CreditNote' => 'Kreditanteckning', + 'Current' => '#VALUE!', + 'DSO' => 'Do', + 'Date' => 'Datum', + 'DefaultInternational' => 'Standard International', + 'DefaultNational' => 'Standard nationell', + 'Delivery' => 'Leverans', + 'DeliveryNote' => 'Leveransanteckning', + 'Description' => 'Beskrivning', + 'Discount' => 'Rabatt', + 'DiscountP' => 'Rabatt i%', + 'Documentation' => 'Dokumentation', + 'Employee' => 'Anställd', + 'End' => '#VALUE!', + 'FAO' => 'Fao', + 'From' => 'Från', + 'Group' => 'Grupp', + 'Groups' => 'Grupp', + 'Highest' => 'Högsta', + 'Inactive' => 'Inaktiv', + 'Interval' => 'Intervall', + 'Invoice' => 'Faktura', + 'Invoices' => 'Fakturor', + 'IsDefault' => 'Är standard?', + 'Language' => 'Språk', + 'Last' => 'Sista', + 'Localization' => 'Lokalisering', + 'Loginname' => 'Inloggningsnamn', + 'Matchcode' => 'Matchcode', + 'Media' => 'Media', + 'MinPrice' => 'Min pris', + 'Name' => 'namn', + 'Name1' => 'Namn 1', + 'Name2' => 'Namn 2', + 'Name3' => 'Namn 3', + 'Offer' => 'Erbjudande', + 'Order' => 'Beställa', + 'Ordered' => 'Beställde', + 'OrderedBy' => 'Beställd av', + 'Orders' => 'Order', + 'Payment' => 'Betalning', + 'Price' => 'Pris', + 'Priority' => 'Prioritet', + 'Profit' => '#VALUE!', + 'Quantity' => 'Kvantitet', + 'Receipt' => 'Mottagande', + 'Reference' => 'Referens', + 'Sales' => 'Försäljning', + 'Settings' => 'inställningar', + 'Single' => 'Enda', + 'Start' => '#VALUE!', + 'State' => 'stat', + 'Statistics' => 'Statistik', + 'Status' => 'Status', + 'Stock' => 'Stock', + 'Street' => 'Gata', + 'Subgroup' => 'Undergrupp', + 'Tax' => 'Beskatta', + 'Terms' => 'Villkor', + 'To' => 'Till', + 'TopArticles' => 'Toppartiklar', + 'Trend' => 'Trend', + 'Turnover' => 'Omsättning', + 'Type' => 'Typ', + 'ZipCode' => 'Postnummer', +]]; diff --git a/Theme/Backend/Lang/th.lang.php b/Theme/Backend/Lang/th.lang.php new file mode 100755 index 0000000..d9474bb --- /dev/null +++ b/Theme/Backend/Lang/th.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'บัญชี', + 'Active' => 'คล่องแคล่ว', + 'Activity' => 'กิจกรรม', + 'Address' => 'ที่อยู่', + 'All' => 'ทั้งหมด', + 'Amount' => 'จำนวน', + 'Analysis' => 'การวิเคราะห์', + 'Analyze' => '#VALUE!', + 'Area' => 'พื้นที่', + 'Article' => 'บทความ', + 'Articles' => 'บทความ', + 'Available' => 'มีอยู่', + 'Calculate' => 'คำนวณ', + 'City' => 'เมือง', + 'Class' => 'ระดับ', + 'Client' => 'ลูกค้า', + 'ClientID' => 'รหัสลูกค้า', + 'ClientName' => 'ชื่อลูกค้า', + 'Clients' => 'ลูกค้า', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'การยืนยัน', + 'CoreData' => 'ข้อมูลหลัก', + 'Country' => 'ประเทศ', + 'Created' => 'สร้าง', + 'Creator' => 'ผู้สร้าง', + 'CreditNote' => 'ใบลดหนี้', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => 'วันที่', + 'DefaultInternational' => 'เริ่มต้นระหว่างประเทศ', + 'DefaultNational' => 'เริ่มต้นชาติ', + 'Delivery' => 'จัดส่ง', + 'DeliveryNote' => 'บันทึกการส่งมอบ', + 'Description' => 'คำอธิบาย', + 'Discount' => 'การลดราคา', + 'DiscountP' => 'ส่วนลดใน%', + 'Documentation' => 'เอกสาร', + 'Employee' => 'พนักงาน', + 'End' => '#VALUE!', + 'FAO' => 'คน', + 'From' => 'จาก', + 'Group' => 'กลุ่ม', + 'Groups' => 'กลุ่ม', + 'Highest' => 'สูงที่สุด', + 'Inactive' => 'ไม่ใช้งาน', + 'Interval' => 'ช่วงเวลา', + 'Invoice' => 'ใบแจ้งหนี้', + 'Invoices' => 'ใบแจ้งหนี้', + 'IsDefault' => 'เป็นค่าเริ่มต้น?', + 'Language' => 'ภาษา', + 'Last' => 'ล่าสุด', + 'Localization' => 'การแปล', + 'Loginname' => 'ชื่อเข้าสู่ระบบ', + 'Matchcode' => 'การจับคู่', + 'Media' => 'สื่อ', + 'MinPrice' => 'นาทีราคา', + 'Name' => 'ชื่อ', + 'Name1' => 'ชื่อ 1', + 'Name2' => 'ชื่อ 2', + 'Name3' => 'ชื่อ 3', + 'Offer' => 'เสนอ', + 'Order' => 'คำสั่ง', + 'Ordered' => 'ที่ได้รับคำสั่ง', + 'OrderedBy' => 'ได้รับคำสั่งจาก', + 'Orders' => 'คำสั่งซื้อ', + 'Payment' => 'การชำระเงิน', + 'Price' => 'ราคา', + 'Priority' => 'ลำดับความสำคัญ', + 'Profit' => '#VALUE!', + 'Quantity' => 'ปริมาณ', + 'Receipt' => 'ใบเสร็จ', + 'Reference' => 'อ้างอิง', + 'Sales' => 'ฝ่ายขาย', + 'Settings' => 'การตั้งค่า', + 'Single' => 'เดี่ยว', + 'Start' => '#VALUE!', + 'State' => 'สถานะ', + 'Statistics' => 'สถิติ', + 'Status' => 'สถานะ', + 'Stock' => 'คลังสินค้า', + 'Street' => 'ถนน', + 'Subgroup' => 'กลุ่มย่อย', + 'Tax' => 'ภาษี', + 'Terms' => 'เงื่อนไข', + 'To' => 'ถึง', + 'TopArticles' => 'บทความยอดนิยม', + 'Trend' => 'แนวโน้ม', + 'Turnover' => 'การหมุนเวียน', + 'Type' => 'พิมพ์', + 'ZipCode' => 'รหัสไปรษณีย์', +]]; diff --git a/Theme/Backend/Lang/tr.lang.php b/Theme/Backend/Lang/tr.lang.php new file mode 100755 index 0000000..9cbdcd9 --- /dev/null +++ b/Theme/Backend/Lang/tr.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Hesap', + 'Active' => 'Aktif', + 'Activity' => 'Aktivite', + 'Address' => 'Adres', + 'All' => 'Herşey', + 'Amount' => 'Miktar', + 'Analysis' => 'Analiz', + 'Analyze' => '#VALUE!', + 'Area' => 'Alan', + 'Article' => 'Madde', + 'Articles' => 'Nesne', + 'Available' => 'Mevcut', + 'Calculate' => 'Hesaplamak', + 'City' => 'Şehir', + 'Class' => 'Sınıf', + 'Client' => 'Müşteri', + 'ClientID' => 'Müşteri Kimliği', + 'ClientName' => 'Müşteri Adı', + 'Clients' => 'Müşteriler', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Onayla', + 'CoreData' => 'Temel veri', + 'Country' => 'Ülke', + 'Created' => 'Yaratılmış', + 'Creator' => 'Yaratıcı', + 'CreditNote' => 'Kredi notu', + 'Current' => '#VALUE!', + 'DSO' => 'Dso', + 'Date' => 'Tarih', + 'DefaultInternational' => 'Varsayılan Uluslararası', + 'DefaultNational' => 'Varsayılan ulusal', + 'Delivery' => 'Teslimat', + 'DeliveryNote' => 'Teslimat notu', + 'Description' => 'Açıklama', + 'Discount' => 'İndirim', + 'DiscountP' => '% İndirim', + 'Documentation' => 'Belgeler', + 'Employee' => 'Çalışan', + 'End' => '#VALUE!', + 'FAO' => 'FAO', + 'From' => 'İtibaren', + 'Group' => 'Grup', + 'Groups' => 'Gruplar', + 'Highest' => 'En yüksek', + 'Inactive' => 'Aktif olmayan', + 'Interval' => 'Aralık', + 'Invoice' => 'Fatura', + 'Invoices' => 'Faturalar', + 'IsDefault' => 'Varsayılan mı?', + 'Language' => 'Dilim', + 'Last' => 'Geçen', + 'Localization' => 'Yerelleştirme', + 'Loginname' => 'Kullanıcı adı', + 'Matchcode' => 'Maç Kodu', + 'Media' => 'Medya', + 'MinPrice' => 'Minik fiyat', + 'Name' => 'İsim', + 'Name1' => 'İsim 1', + 'Name2' => 'İsim 2', + 'Name3' => 'ADI 3', + 'Offer' => 'Teklif', + 'Order' => 'Emir', + 'Ordered' => 'Emir', + 'OrderedBy' => 'Tarafından sipariş edildi', + 'Orders' => 'Emirler', + 'Payment' => 'Ödeme', + 'Price' => 'Fiyat', + 'Priority' => 'Öncelik', + 'Profit' => '#VALUE!', + 'Quantity' => 'Miktar', + 'Receipt' => 'Fiş', + 'Reference' => 'Referans', + 'Sales' => 'Satış', + 'Settings' => 'Ayarlar', + 'Single' => 'Bekar', + 'Start' => '#VALUE!', + 'State' => 'Belirtmek, bildirmek', + 'Statistics' => 'İstatistik', + 'Status' => 'Durum', + 'Stock' => 'Stoklamak', + 'Street' => 'sokak', + 'Subgroup' => 'Alt grup', + 'Tax' => 'Vergi', + 'Terms' => 'Terimler', + 'To' => 'İle', + 'TopArticles' => 'En iyi makaleler', + 'Trend' => 'Akım', + 'Turnover' => 'Devir', + 'Type' => 'Tip', + 'ZipCode' => 'Posta kodu', +]]; diff --git a/Theme/Backend/Lang/uk.lang.php b/Theme/Backend/Lang/uk.lang.php new file mode 100755 index 0000000..a3879cd --- /dev/null +++ b/Theme/Backend/Lang/uk.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => 'Обліковий запис', + 'Active' => 'Активний', + 'Activity' => 'Діяльність', + 'Address' => 'Адреса', + 'All' => 'Все', + 'Amount' => 'Сума', + 'Analysis' => 'Аналіз', + 'Analyze' => '#VALUE!', + 'Area' => 'Площа', + 'Article' => 'Стаття', + 'Articles' => 'Статті', + 'Available' => 'Доступний', + 'Calculate' => 'Розраховувати', + 'City' => 'Місто', + 'Class' => 'Клас', + 'Client' => 'Клієнт', + 'ClientID' => 'Ідентифікатор клієнта', + 'ClientName' => 'Назва клієнта', + 'Clients' => 'Клієнти', + 'Comparison' => '#VALUE!', + 'Confirmation' => 'Підтвердження', + 'CoreData' => 'Основні дані', + 'Country' => 'Країна', + 'Created' => 'Створений', + 'Creator' => 'Творець', + 'CreditNote' => 'Кредитове авізо', + 'Current' => '#VALUE!', + 'DSO' => 'Дз', + 'Date' => 'Дата', + 'DefaultInternational' => 'Міжнародний за замовчуванням', + 'DefaultNational' => 'Національний за замовчуванням', + 'Delivery' => 'Доставка', + 'DeliveryNote' => 'Накладна', + 'Description' => 'Опис', + 'Discount' => 'Знижка', + 'DiscountP' => 'Знижка у%', + 'Documentation' => 'Документація', + 'Employee' => 'Співробітник', + 'End' => '#VALUE!', + 'FAO' => 'Фах', + 'From' => 'Від', + 'Group' => 'Група', + 'Groups' => 'Групи', + 'Highest' => 'Найвищий', + 'Inactive' => 'Неактивний', + 'Interval' => 'Інтервал', + 'Invoice' => 'Рахунок-фактура', + 'Invoices' => 'Рахунки-фактури', + 'IsDefault' => 'Чи є за замовчуванням?', + 'Language' => 'Мову', + 'Last' => 'Остання', + 'Localization' => 'Локалізація', + 'Loginname' => 'Логін', + 'Matchcode' => 'Матч', + 'Media' => 'Медіа', + 'MinPrice' => 'Ціна', + 'Name' => 'Назва', + 'Name1' => 'Ім\'я 1', + 'Name2' => 'Ім\'я 2', + 'Name3' => 'Назва 3', + 'Offer' => 'Пропозиція', + 'Order' => 'Порядок', + 'Ordered' => 'Упорядкований', + 'OrderedBy' => 'Замовлений', + 'Orders' => 'Накази', + 'Payment' => 'Платіж', + 'Price' => 'Ціна', + 'Priority' => 'Пріоритет', + 'Profit' => '#VALUE!', + 'Quantity' => 'Кількість', + 'Receipt' => 'Квитанція', + 'Reference' => 'Довідник', + 'Sales' => 'Продаж', + 'Settings' => 'Налаштування', + 'Single' => 'Одиночний', + 'Start' => '#VALUE!', + 'State' => 'Держава', + 'Statistics' => 'Статистика', + 'Status' => 'Статус', + 'Stock' => 'Запас', + 'Street' => 'Вулиця', + 'Subgroup' => 'Підгруп', + 'Tax' => 'Оподаткування', + 'Terms' => 'Умови', + 'To' => 'До', + 'TopArticles' => 'Топці', + 'Trend' => 'Тенденція', + 'Turnover' => 'Оборот', + 'Type' => 'Тип', + 'ZipCode' => 'ЗІП код', +]]; diff --git a/Theme/Backend/Lang/zh.lang.php b/Theme/Backend/Lang/zh.lang.php new file mode 100755 index 0000000..99f1248 --- /dev/null +++ b/Theme/Backend/Lang/zh.lang.php @@ -0,0 +1,106 @@ + [ + 'Account' => '帐户', + 'Active' => '积极的', + 'Activity' => '活动', + 'Address' => '地址', + 'All' => '全部', + 'Amount' => '数量', + 'Analysis' => '分析', + 'Analyze' => '#VALUE!', + 'Area' => '区域', + 'Article' => '文章', + 'Articles' => '文章', + 'Available' => '可用的', + 'Calculate' => '计算', + 'City' => '城市', + 'Class' => '班级', + 'Client' => '客户', + 'ClientID' => '客户ID', + 'ClientName' => '客户名称', + 'Clients' => '客户', + 'Comparison' => '#VALUE!', + 'Confirmation' => '确认', + 'CoreData' => '核心数据', + 'Country' => '国家', + 'Created' => '创造了', + 'Creator' => '创造者', + 'CreditNote' => '信用票据', + 'Current' => '#VALUE!', + 'DSO' => 'DSO', + 'Date' => '日期', + 'DefaultInternational' => '违约国际', + 'DefaultNational' => '违约国家', + 'Delivery' => '交货', + 'DeliveryNote' => '送货单', + 'Description' => '描述', + 'Discount' => '折扣', + 'DiscountP' => '折扣%%', + 'Documentation' => '文件', + 'Employee' => '员工', + 'End' => '#VALUE!', + 'FAO' => '粮农组织', + 'From' => '从', + 'Group' => '团体', + 'Groups' => '团体', + 'Highest' => '最高', + 'Inactive' => '不活跃', + 'Interval' => '间隔', + 'Invoice' => '发票', + 'Invoices' => '发票', + 'IsDefault' => '默认为默认情况下?', + 'Language' => '语', + 'Last' => '最后的', + 'Localization' => '本土化', + 'Loginname' => '登录名', + 'Matchcode' => '匹配码', + 'Media' => '媒体', + 'MinPrice' => '最终价格', + 'Name' => '名称', + 'Name1' => '名称1', + 'Name2' => '名称2', + 'Name3' => '名称3.', + 'Offer' => '提供', + 'Order' => '命令', + 'Ordered' => '订购', + 'OrderedBy' => '订购', + 'Orders' => '命令', + 'Payment' => '支付', + 'Price' => '价格', + 'Priority' => '优先事项', + 'Profit' => '#VALUE!', + 'Quantity' => '数量', + 'Receipt' => '收据', + 'Reference' => '参考', + 'Sales' => '销售量', + 'Settings' => '设置', + 'Single' => '单身的', + 'Start' => '#VALUE!', + 'State' => '状态', + 'Statistics' => '统计数据', + 'Status' => '地位', + 'Stock' => '库存', + 'Street' => '街道', + 'Subgroup' => '亚组', + 'Tax' => '税', + 'Terms' => '条款', + 'To' => '到', + 'TopArticles' => '顶级文章', + 'Trend' => '趋势', + 'Turnover' => '周转', + 'Type' => '类型', + 'ZipCode' => '邮政编码', +]]; diff --git a/Theme/Backend/sales-analysis-dashboard.tpl.php b/Theme/Backend/sales-analysis-dashboard.tpl.php new file mode 100755 index 0000000..d650dbb --- /dev/null +++ b/Theme/Backend/sales-analysis-dashboard.tpl.php @@ -0,0 +1,399 @@ +getData('nav')->render(); +?> + +
+
+
+
+

getHtml('Current'); ?>

+
+
+ + +
+ +
+ + +
+
+ +

getHtml('Comparison'); ?>

+
+
+ + +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
Actual
+
+
+
Sales MTD:
+
+12.0 %
+
+ +
+
Sales YTD:
+
+1.2 %
+
+ +
+
Gross Profit Current:
+
+12.0 %
+
+ +
+
Gross Profit Previous:
+
+1.2 %
+
+
+
+
+ +
+
+
Budget
+
+
+
Sales MTD:
+
+12.0 %
+
+ +
+
Sales YTD:
+
+1.2 %
+
+ +
+
Gross Profit Current:
+
+12.0 %
+
+ +
+
Gross Profit Budget:
+
+1.2 %
+
+
+
+
+
+ +
+
+
+
+ Sales / Profit - Monthly + +
+ getData('monthlySalesCustomer'); ?> +
+ + + ], + "datasets": [ + { + "label": "getHtml('Profit'); ?>", + "type": "line", + "data": [ + + + ], + "yAxisID": "axis-2", + "fill": false, + "borderColor": "rgb(255, 99, 132)", + "backgroundColor": "rgb(255, 99, 132)", + "tension": 0.0 + }, + { + "label": "getHtml('Sales'); ?>", + "type": "bar", + "data": [ + + + ], + "yAxisID": "axis-1", + "fill": false, + "borderColor": "rgb(54, 162, 235)", + "backgroundColor": "rgb(54, 162, 235)", + "tension": 0.0 + } + ] + }, + "options": { + "title": { + "display": false, + "text": "Sales / Profit" + }, + "scales": { + "yAxes": [ + { + "id": "axis-1", + "display": true, + "position": "left" + }, + { + "id": "axis-2", + "display": true, + "position": "right", + "scaleLabel": { + "display": true, + "labelString": "getHtml('Profit'); ?>" + }, + "gridLines": { + "display": false + } + } + ] + } + } + }'> +
+ + +
+ + + + + + + +
Month + Sales + Customer count +
+ getCurrency(); ?> + + +
Total + getCurrency(); ?> + +
+
+
+
+
+
+ +
+
+
+ Sales / Profit - Annual + +
+ getData('annualSalesCustomer'); ?> +
+ + + ], + "datasets": [ + { + "label": "getHtml('Profit'); ?>", + "type": "line", + "data": [ + + + ], + "yAxisID": "axis-2", + "fill": false, + "borderColor": "rgb(255, 99, 132)", + "backgroundColor": "rgb(255, 99, 132)", + "tension": 0.0 + }, + { + "label": "getHtml('Sales'); ?>", + "type": "bar", + "data": [ + + + ], + "yAxisID": "axis-1", + "fill": false, + "borderColor": "rgb(54, 162, 235)", + "backgroundColor": "rgb(54, 162, 235)", + "tension": 0.0 + } + ] + }, + "options": { + "title": { + "display": false, + "text": "Sales / Profit" + }, + "scales": { + "yAxes": [ + { + "id": "axis-1", + "display": true, + "position": "left" + }, + { + "id": "axis-2", + "display": true, + "position": "right", + "scaleLabel": { + "display": true, + "labelString": "getHtml('Profit'); ?>" + }, + "gridLines": { + "display": false + } + } + ] + } + } + }'> +
+ + +
+ + + + + + +
Year + Sales + Customer count +
+ getCurrency(); ?> + + +
+
+
+
+
+
+
+ +
+
+
+
+ Sales / Attribute + +
+ + + + +
Product + Sales PY + Sales B + Sales A + Diff PY + Diff B +
+
+
+
+ +
+
+
+
+ Sales / Region + +
+ + + + +
Country + Sales PY + Sales B + Sales A + Diff PY + Diff B +
+
+
+
\ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..fcc0462 --- /dev/null +++ b/composer.json @@ -0,0 +1,20 @@ +{ + "name": "karaka/karaka", + "description": "PHP Framework for Karaka.", + "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..708ea35 --- /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": "a7d5793a0158a42dd8436aeac8fef6c1", + "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 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�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 [ + '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/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 + + + + + + + + + + + + + +