diff --git a/.ddev/.env.template b/.ddev/.env.template index e79deeed8..b0085cad6 100644 --- a/.ddev/.env.template +++ b/.ddev/.env.template @@ -1,5 +1,5 @@ # ZMS Core -ZMS_API_URL=https://localhost/terminvereinbarung/api/2 +ZMS_API_URL=https://zms.ddev.site/terminvereinbarung/api/2 ZMS_CRONROOT=1 ZMS_ENV=dev #ZMS_TIMEADJUST='2016-04-01 H:i' diff --git a/.github/workflows/static.yaml b/.github/workflows/build-api-docs.yaml similarity index 71% rename from .github/workflows/static.yaml rename to .github/workflows/build-api-docs.yaml index 4fb48fe6b..73d9fa8ac 100644 --- a/.github/workflows/static.yaml +++ b/.github/workflows/build-api-docs.yaml @@ -1,27 +1,20 @@ -# Workflow for deploying API documentation to Pages -name: Deploy API Documentation to Pages +name: Build API Documentation on: - push: - branches: ["main"] - workflow_dispatch: + workflow_call: + outputs: + result: + description: "Build result" + value: ${{ jobs.build.outputs.result }} permissions: contents: read - pages: write - id-token: write - -concurrency: - group: "pages" - cancel-in-progress: false jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} + build: runs-on: ubuntu-latest - + outputs: + result: ${{ steps.set-result.outputs.result }} steps: - name: Checkout uses: actions/checkout@v4 @@ -70,14 +63,15 @@ jobs: npx swagger-cli bundle -o public/doc/swagger.json public/doc/swagger.yaml cd .. - - name: Setup Pages - uses: actions/configure-pages@v5 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 + - name: Upload API docs artifact + uses: actions/upload-artifact@v4 with: - path: '.' + name: api-docs + path: | + zmsapi/public/doc/ + zmscitizenapi/public/doc/ - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 + - name: Set job result + id: set-result + if: always() + run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT \ No newline at end of file diff --git a/.github/workflows/combined-workflow-with-docs.yaml b/.github/workflows/combined-workflow-with-docs.yaml new file mode 100644 index 000000000..ce497a462 --- /dev/null +++ b/.github/workflows/combined-workflow-with-docs.yaml @@ -0,0 +1,55 @@ +name: Combined Workflow with Documentation + +on: + push: + branches: [next] + +permissions: + contents: read + packages: write + pages: write + id-token: write + +jobs: + call-php-code-quality: + uses: ./.github/workflows/php-code-quality.yaml + + call-php-unit-tests: + uses: ./.github/workflows/php-unit-tests.yaml + + combine-php-test-coverage: + needs: [call-php-unit-tests] + runs-on: ubuntu-latest + steps: + - name: Download all coverage reports + uses: actions/download-artifact@v4 + with: + pattern: 'coverage-*' + path: public/coverage + merge-multiple: false + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-reports + path: public/coverage/ + retention-days: 7 + + call-build-api-docs: + uses: ./.github/workflows/build-api-docs.yaml + + deploy-to-pages: + needs: [combine-php-test-coverage, call-build-api-docs] + if: needs.call-build-api-docs.result == 'success' + uses: ./.github/workflows/deploy-pages.yaml + with: + coverage_artifact: coverage-reports + api_docs_artifact: api-docs + + call-php-build-images: + needs: [call-php-code-quality, call-php-unit-tests] + if: | + always() && + needs.call-php-code-quality.result == 'success' && + needs.call-php-unit-tests.result == 'success' + uses: ./.github/workflows/php-build-images.yaml \ No newline at end of file diff --git a/.github/workflows/combined-workflow.yaml b/.github/workflows/combined-workflow.yaml index 8524121c4..13e248c9f 100644 --- a/.github/workflows/combined-workflow.yaml +++ b/.github/workflows/combined-workflow.yaml @@ -1,11 +1,25 @@ name: Combined Workflow -on: [push] +on: + push: + branches-ignore: [next] + workflow_call: + +permissions: + contents: read + packages: write jobs: - call-unit-tests: - uses: ./.github/workflows/unit-tests.yaml + call-php-code-quality: + uses: ./.github/workflows/php-code-quality.yaml + + call-php-unit-tests: + uses: ./.github/workflows/php-unit-tests.yaml - call-build-images: - needs: call-unit-tests - uses: ./.github/workflows/build-images.yaml + call-php-build-images: + needs: [call-php-code-quality, call-php-unit-tests] + if: | + always() && + needs.call-php-code-quality.result == 'success' && + needs.call-php-unit-tests.result == 'success' + uses: ./.github/workflows/php-build-images.yaml \ No newline at end of file diff --git a/.github/workflows/deploy-pages.yaml b/.github/workflows/deploy-pages.yaml new file mode 100644 index 000000000..3144b1292 --- /dev/null +++ b/.github/workflows/deploy-pages.yaml @@ -0,0 +1,147 @@ +name: Deploy to GitHub Pages + +on: + workflow_call: + inputs: + coverage_artifact: + description: 'Name of the coverage reports artifact' + required: true + type: string + default: 'coverage-reports' + api_docs_artifact: + description: 'Name of the API documentation artifact' + required: true + type: string + default: 'api-docs' + +permissions: + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Create public directory + run: mkdir -p public + + - name: Download coverage reports + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.coverage_artifact }} + path: public/coverage + + - name: Download API docs + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.api_docs_artifact }} + path: public + + - name: Create index page + run: | + cat > public/index.html <<'EOL' + + + + eAppointment Documentation + + + +

ZMS eAppointment Technical Documentation

+ +
+
+

API Documentation

+ +
+ +
+

Code Test Coverage Reports

+ +
+
+ + + EOL + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: public + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/.github/workflows/build-images.yaml b/.github/workflows/php-build-images.yaml similarity index 100% rename from .github/workflows/build-images.yaml rename to .github/workflows/php-build-images.yaml diff --git a/.github/workflows/php-code-quality.yaml b/.github/workflows/php-code-quality.yaml new file mode 100644 index 000000000..23b5f6ccf --- /dev/null +++ b/.github/workflows/php-code-quality.yaml @@ -0,0 +1,59 @@ +name: code quality + +on: + workflow_call: + +jobs: + module-code-quality: + runs-on: ubuntu-latest + container: + image: "ghcr.io/it-at-m/eappointment-php-base:${{ matrix.php_version }}-dev" + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Composer Dependencies + run: | + cd "${{ matrix.module }}" + composer install --no-progress --prefer-dist --optimize-autoloader + + - name: PHPCS / PSR-12 + run: | + cd "${{ matrix.module }}" + echo "Running phpcs (ignoring warnings)..." + vendor/bin/phpcs --standard=psr12 --warning-severity=0 src/ + + - name: PHPMD + run: | + cd "${{ matrix.module }}" + echo "Running phpmd..." + vendor/bin/phpmd src/ text ../phpmd.rules.xml + + strategy: + fail-fast: false + matrix: + include: + - module: zmsadmin + php_version: "8.0" + - module: zmsapi + php_version: "8.0" + - module: zmscalldisplay + php_version: "8.0" + - module: zmscitizenapi + php_version: "8.0" + - module: zmsclient + php_version: "8.0" + - module: zmsdb + php_version: "8.0" + - module: zmsdldb + php_version: "8.0" + - module: zmsentities + php_version: "8.0" + - module: zmsmessaging + php_version: "8.0" + - module: zmsslim + php_version: "8.0" + - module: zmsstatistic + php_version: "8.0" + - module: zmsticketprinter + php_version: "8.0" \ No newline at end of file diff --git a/.github/workflows/unit-tests.yaml b/.github/workflows/php-unit-tests.yaml similarity index 54% rename from .github/workflows/unit-tests.yaml rename to .github/workflows/php-unit-tests.yaml index 2b74dca8f..bde14a4e2 100644 --- a/.github/workflows/unit-tests.yaml +++ b/.github/workflows/php-unit-tests.yaml @@ -2,23 +2,72 @@ name: unit tests on: workflow_call: + outputs: + module-test-result: + description: "Module test result" + value: ${{ jobs.module-test.outputs.result }} + zmsapi-test-result: + description: "ZMSAPI test result" + value: ${{ jobs.zmsapi-test.outputs.result }} + zmsdb-test-result: + description: "ZMSDB test result" + value: ${{ jobs.zmsdb-test.outputs.result }} + zmsclient-test-result: + description: "ZMSClient test result" + value: ${{ jobs.zmsclient-test.outputs.result }} jobs: module-test: runs-on: ubuntu-latest container: image: "ghcr.io/it-at-m/eappointment-php-base:${{ matrix.php_version }}-dev" + env: + XDEBUG_MODE: coverage + PHP_INI_SCAN_DIR: "/usr/local/etc/php/conf.d:/tmp/php/conf.d" + outputs: + result: ${{ steps.set-result.outputs.result }} steps: - - name: Checkout GitHub Action - uses: actions/checkout@main + - uses: actions/checkout@main + + - name: Configure PHP + run: | + mkdir -p /tmp/php/conf.d + echo "zend_extension=xdebug.so" > /tmp/php/conf.d/xdebug.ini + echo "xdebug.mode=coverage" >> /tmp/php/conf.d/xdebug.ini + echo "xdebug.start_with_request=yes" >> /tmp/php/conf.d/xdebug.ini + - name: Install Composer Dependencies run: | cd "${{ matrix.module }}" composer install --no-progress --prefer-dist --optimize-autoloader - - name: Run Unit Tests + + - name: Run Unit Tests with Coverage + env: + XDEBUG_MODE: coverage run: | cd "${{ matrix.module }}" - ./vendor/bin/phpunit + mkdir -p coverage + echo "Running tests with coverage for ${{ matrix.module }}" + php -dmemory_limit=-1 \ + ./vendor/bin/phpunit -c phpunit.xml \ + --coverage-html coverage/html \ + --coverage-clover coverage/clover.xml \ + --log-junit coverage/junit.xml || if [ $? -eq 2 ] && [ -f "coverage/clover.xml" ]; then exit 0; fi + echo "Coverage files generated:" + ls -la coverage/ + + - name: Upload Coverage + uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.module }} + path: ${{ matrix.module }}/coverage/ + retention-days: 1 + + - name: Set job result + id: set-result + if: always() + run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT + strategy: fail-fast: false matrix: @@ -42,14 +91,13 @@ jobs: - module: zmsticketprinter php_version: "8.0" - zmsapi-test: runs-on: ubuntu-latest container: image: "ghcr.io/it-at-m/eappointment-php-base:8.0-dev" services: mariadb: - image: mariadb:10.6 + image: mariadb:10.11 env: MYSQL_ROOT_PASSWORD: zmsapi MYSQL_DATABASE: zmsbo @@ -91,9 +139,25 @@ jobs: ln -s vendor/eappointment/zmsdb/tests/Zmsdb/fixtures data echo "Importing test data..." vendor/bin/importTestData --commit - php -dzend_extension=xdebug.so -dmemory_limit=-1 vendor/bin/phpunit \ - -v --colors=never --coverage-text --coverage-html public/_tests/coverage/ --log-junit \ - public/_tests/junit.xml + mkdir -p coverage + echo "Running tests with coverage" + php -dzend_extension=xdebug.so -dxdebug.mode=coverage -dmemory_limit=-1 \ + ./vendor/bin/phpunit -c phpunit.xml \ + --coverage-html coverage/html \ + --coverage-clover coverage/clover.xml \ + --log-junit coverage/junit.xml + echo "Coverage files generated:" + ls -la coverage/ + - name: Upload Coverage + uses: actions/upload-artifact@v4 + with: + name: coverage-zmsapi + path: zmsapi/coverage/ + retention-days: 1 + - name: Set job result + id: set-result + if: always() + run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT zmsdb-test: runs-on: ubuntu-latest @@ -101,7 +165,7 @@ jobs: image: "ghcr.io/it-at-m/eappointment-php-base:8.0-dev" services: mariadb: - image: mariadb:10.6 + image: mariadb:10.11 env: MYSQL_ROOT_PASSWORD: zmsdb MYSQL_DATABASE: zmsbo @@ -136,18 +200,35 @@ jobs: MYSQL_PORT: "tcp://mariadb:3306" MYSQL_DATABASE: zmsbo MYSQL_ROOT_PASSWORD: zmsdb + XDEBUG_MODE: coverage run: | cd zmsdb bin/importTestData --commit - php -dzend_extension=xdebug.so -dmemory_limit=-1 vendor/bin/phpunit \ - -v --colors=never --coverage-text --coverage-html public/_tests/coverage/ --log-junit \ - public/_tests/junit.xml - - - + mkdir -p coverage + echo "Running tests with coverage" + php -i | grep -i xdebug + php -dzend_extension=xdebug.so -dxdebug.mode=coverage -dmemory_limit=-1 \ + ./vendor/bin/phpunit -c phpunit.xml \ + --coverage-html coverage/html \ + --coverage-clover coverage/clover.xml \ + --log-junit coverage/junit.xml + echo "Coverage files generated:" + ls -la coverage/ + - name: Upload Coverage + uses: actions/upload-artifact@v4 + with: + name: coverage-zmsdb + path: zmsdb/coverage/ + retention-days: 1 + - name: Set job result + id: set-result + if: always() + run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT zmsclient-test: runs-on: ubuntu-latest + outputs: + result: ${{ steps.set-result.outputs.result }} steps: - name: Checkout GitHub Action uses: actions/checkout@main @@ -166,11 +247,6 @@ jobs: echo "Installing Composer dependencies for $module" (cd "$module" && composer install --no-progress --prefer-dist --optimize-autoloader) done - - name: Install Docker Compose - run: | - sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - sudo chmod +x /usr/local/bin/docker-compose - docker-compose --version - name: Install Docker Compose run: | @@ -180,4 +256,24 @@ jobs: - name: Run Unit Tests run: | - /bin/bash -c "cd ./zmsclient && docker-compose up -d && docker-compose exec -T test ./vendor/bin/phpunit" + cd ./zmsclient + mkdir -p coverage + docker-compose up -d + docker-compose exec -T test php -dzend_extension=xdebug.so -dmemory_limit=-1 \ + ./vendor/bin/phpunit \ + --coverage-html coverage/html \ + --coverage-clover coverage/clover.xml \ + --log-junit coverage/junit.xml + echo "Coverage files generated:" + ls -la coverage/ + - name: Upload Coverage + uses: actions/upload-artifact@v4 + with: + name: coverage-zmsclient + path: zmsclient/coverage/ + retention-days: 1 + + - name: Set job result + id: set-result + if: always() + run: echo "result=${{ job.status }}" >> $GITHUB_OUTPUT \ No newline at end of file diff --git a/.gitignore b/.gitignore index b24773838..404a67129 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ .vscode/settings.json .vscode/tasks.json .vscode/terminals.json +coverage/ diff --git a/README.md b/README.md index 1aa8e17de..890e68ab0 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,7 @@ The ZMS system is intended to manage human waiting queues. It has the following * collecting statistics like waiting time or served clients per day * emergency call for employees -[ZMSAPI Documentation](https://it-at-m.github.io/eappointment/zmsapi/public/doc/index.html) -[ZMSCITIZENAPI Documentation](https://it-at-m.github.io/eappointment/zmscitizenapi/public/doc/index.html) +[Code Coverage ZMSAPI and ZMSCITIZENAPI Documentation](https://it-at-m.github.io/eappointment/) ## Contact [Overview](https://opensource.muenchen.de/software/zeitmanagementsystem.html) @@ -43,14 +42,14 @@ Munich Contact: it@M - opensource@muenchen.de BerlinOnline Stadtportal GmbH & Co KG and it@M. - + --- @@ -79,8 +78,7 @@ Das ZMS-System dient zur Verwaltung von Warteschlangen für Menschen. Es bietet * Sammeln von Statistiken wie Wartezeiten oder bedienten Kunden pro Tag * Notruf für Mitarbeiter -[ZMSAPI-Dokumentation](https://it-at-m.github.io/eappointment/zmsapi/public/doc/index.html) -[ZMSCITIZENAPI-Dokumentation](https://it-at-m.github.io/eappointment/zmscitizenapi/public/doc/index.html) +[Code-Abdeckung ZMSAPI und ZMSCITIZENAPI Dokumentation](https://it-at-m.github.io/eappointment/) ## Kontakt BerlinOnline Stadtportal GmbH & Co KG Kontakt: @@ -89,14 +87,14 @@ Munich Kontakt: it@M - opensource@muenchen.de BerlinOnline Stadtportal GmbH & Co KG und it@M. - + ---- @@ -117,6 +115,30 @@ e.g. - `ddev exec ./cli modules check-upgrade 8.2` - `ddev exec ./cli modules check-upgrade 8.3` +## Code Quality Checks +We use PHPCS (following PSR-12 standards) and PHPMD to maintain code quality and detect possible issues early. These checks run automatically in our GitHub Actions pipeline but can also be executed locally. + +To run Checks locally in your local docker container: + +0. Run all at once: +- `ddev exec "./cli modules loop 'vendor/bin/phpcs --standard=psr12 src/'"` + +1. **Enter the container** (if using DDEV or Docker): +- `ddev ssh` + +2. **Go to the desired module directory: +- `cd zmsadmin` +3. Run PHPCS (PSR-12 standard): +- `vendor/bin/phpcs --standard=psr12 src/` +- ``` + You can automatically fix many PHPCS formatting issues by running: + - vendor/bin/phpcbf --standard=psr12 src/ + or + - phpcs --standard=psr12 --fix src/ + ``` +4. Run PHPMD (using the phpmd.rules.xml in the project root): +- `vendor/bin/phpmd src/ text ../phpmd.rules.xml` + ## Unit Testing To run unit tests locally refer to the Github Workflows: https://github.com/it-at-m/eappointment/blob/main/.github/workflows/unit-tests.yaml and in your local docker container run: @@ -168,6 +190,8 @@ The branch name must match the following regular expression: ## Screenshot ![screenshot](https://github.com/user-attachments/assets/54d360e9-c47b-4f3c-b849-5966a8766af9) +![combined_image](https://github.com/user-attachments/assets/87902e60-fe90-48a0-bf60-c5edec210dc9) +

(back to top)

diff --git a/mellon/phpunit.xml.dist b/mellon/phpunit.xml.dist index 24f093133..928b65eaf 100644 --- a/mellon/phpunit.xml.dist +++ b/mellon/phpunit.xml.dist @@ -22,5 +22,13 @@ ./src + + ./vendor + ./tests + + + + + diff --git a/phpmd.rules.xml b/phpmd.rules.xml new file mode 100644 index 000000000..2654affec --- /dev/null +++ b/phpmd.rules.xml @@ -0,0 +1,81 @@ + + + Mein PHPMD-Konfigurations-File + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/zmsadmin/.gitignore b/zmsadmin/.gitignore index 6cba15bb5..eca95fd4c 100644 --- a/zmsadmin/.gitignore +++ b/zmsadmin/.gitignore @@ -21,3 +21,4 @@ public/_css/admin.css public/_css/admin.css.map .cache .phpunit.* +coverage diff --git a/zmsadmin/js/block/scope/emergencyend.js b/zmsadmin/js/block/scope/emergencyend.js new file mode 100644 index 000000000..0667cd603 --- /dev/null +++ b/zmsadmin/js/block/scope/emergencyend.js @@ -0,0 +1,40 @@ +import $ from 'jquery' + +class EndEmergencyView { + + constructor(element, options) { + this.includeUrl = options.includeurl + this.scope = options.scope + this.workstationName = "" + options.workstationname + this.data = {} + this.$ = $(element) + + this.$.find('.emergency__button-end').on('click', this.endEmergency.bind(this)) + } + + endEmergency() { + this.update({ activated: "0", calledByWorkstation: "-1", acceptedByWorkstation: "-1" }) + this.sendEmergencyCancel() + } + + update(newData) { + this.data = Object.assign({}, this.data, newData) + } + + sendEmergencyCancel() { + const url = `${this.includeUrl}/scope/${this.scope.id}/emergency/` + + return new Promise((resolve, reject) => { + $.ajax(url, { + method: 'GET' + }).done(() => { + resolve() + }).fail(err => { + console.log('XHR error', url, err) + reject(err) + }) + }) + } +} + +export default EndEmergencyView; \ No newline at end of file diff --git a/zmsadmin/js/index.js b/zmsadmin/js/index.js index 6b1ec817f..2a85edea2 100644 --- a/zmsadmin/js/index.js +++ b/zmsadmin/js/index.js @@ -26,6 +26,7 @@ import PickupKeyboardHandheldView from "./page/pickup/keyboard-handheld" import StatisticView from './page/statistic' import LoginScopeSelectView from './block/scope/loginselectform' +import EmergencyEnd from './block/scope/emergencyend' //import AvailabilityDayPage from './page/availabilityDay' import WeekCalendarPage from './page/weekCalendar' import printScopeAppointmentsByDay from './page/scopeAppointmentsByDay/print' @@ -108,6 +109,10 @@ $('[data-scope-select-form]').each(function () { new LoginScopeSelectView(this, getDataAttributes(this)); }) +$('.emergency-end').each(function () { + new EmergencyEnd(this, getDataAttributes(this)); +}) + $('.pickup-view').each(function () { new PickupView(this, getDataAttributes(this)); }) diff --git a/zmsadmin/js/page/counter/index.js b/zmsadmin/js/page/counter/index.js index 63321a7a4..c61bb79c9 100644 --- a/zmsadmin/js/page/counter/index.js +++ b/zmsadmin/js/page/counter/index.js @@ -19,18 +19,6 @@ class View extends Workstation { } this.setReloadTimer(); } - window.onblur = () => { - //console.log("lost Focus"); - clearTimeout(this.reloadTimer); - } - this.$main.find('[data-queue-table], [data-queue-info]').on("mouseenter", () => { - //console.log("stop Reload on mouse enter"); - clearTimeout(this.reloadTimer); - }); - this.$main.find('[data-queue-table], [data-queue-info]').on("mouseleave", () => { - //console.log("start reload on mouse leave"); - this.setReloadTimer(); - }); } loadAllPartials() { diff --git a/zmsadmin/js/page/workstation/index.js b/zmsadmin/js/page/workstation/index.js index c7467f551..368b4bf11 100644 --- a/zmsadmin/js/page/workstation/index.js +++ b/zmsadmin/js/page/workstation/index.js @@ -83,18 +83,6 @@ class View extends BaseView { } this.setReloadTimer(); } - window.onblur = () => { - //console.log("lost Focus"); - clearTimeout(this.reloadTimer); - } - this.$main.find('[data-queue-table]').on("mouseenter", () => { - //console.log("stop Reload on mouse enter"); - clearTimeout(this.reloadTimer); - }); - this.$main.find('[data-queue-table]').on("mouseleave", () => { - //console.log("start reload on mouse leave"); - this.setReloadTimer(); - }); } setReloadTimer() { diff --git a/zmsadmin/package-lock.json b/zmsadmin/package-lock.json index fafdb39ed..26488d076 100644 --- a/zmsadmin/package-lock.json +++ b/zmsadmin/package-lock.json @@ -192,12 +192,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -283,6 +277,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -296,6 +291,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -309,6 +305,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -322,6 +319,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -335,6 +333,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -348,6 +347,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -446,21 +446,22 @@ ] }, "node_modules/@parcel/bundler-default": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.12.0.tgz", - "integrity": "sha512-3ybN74oYNMKyjD6V20c9Gerdbh7teeNvVMwIoHIQMzuIFT6IGX53PyOLlOKRLbjxMc0TMimQQxIt2eQqxR5LsA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.13.3.tgz", + "integrity": "sha512-mOuWeth0bZzRv1b9Lrvydis/hAzJyePy0gwa0tix3/zyYBvw0JY+xkXVR4qKyD/blc1Ra2qOlfI2uD3ucnsdXA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/graph": "3.2.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -468,37 +469,39 @@ } }, "node_modules/@parcel/cache": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.12.0.tgz", - "integrity": "sha512-FX5ZpTEkxvq/yvWklRHDESVRz+c7sLTXgFuzz6uEnBcXV38j6dMSikflNpHA6q/L4GKkCqRywm9R6XQwhwIMyw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.13.3.tgz", + "integrity": "sha512-Vz5+K5uCt9mcuQAMDo0JdbPYDmVdB8Nvu/A2vTEK2rqZPxvoOTczKeMBA4JqzKqGURHPRLaJCvuR8nDG+jhK9A==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/fs": "2.12.0", - "@parcel/logger": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/utils": "2.13.3", "lmdb": "2.8.5" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/codeframe": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.12.0.tgz", - "integrity": "sha512-v2VmneILFiHZJTxPiR7GEF1wey1/IXPdZMcUlNXBiPZyWDfcuNgGGVQkx/xW561rULLIvDPharOMdxz5oHOKQg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.13.3.tgz", + "integrity": "sha512-L/PQf+PT0xM8k9nc0B+PxxOYO2phQYnbuifu9o4pFRiqVmCtHztP+XMIvRJ2gOEXy3pgAImSPFVJ3xGxMFky4g==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0" + "chalk": "^4.1.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -506,16 +509,17 @@ } }, "node_modules/@parcel/compressor-raw": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.12.0.tgz", - "integrity": "sha512-h41Q3X7ZAQ9wbQ2csP8QGrwepasLZdXiuEdpUryDce6rF9ZiHoJ97MRpdLxOhOPyASTw/xDgE1xyaPQr0Q3f5A==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.13.3.tgz", + "integrity": "sha512-C6vjDlgTLjYc358i7LA/dqcL0XDQZ1IHXFw6hBaHHOfxPKW2T4bzUI6RURyToEK9Q1X7+ggDKqgdLxwp4veCFg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0" + "@parcel/plugin": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -523,85 +527,87 @@ } }, "node_modules/@parcel/config-default": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.12.0.tgz", - "integrity": "sha512-dPNe2n9eEsKRc1soWIY0yToMUPirPIa2QhxcCB3Z5RjpDGIXm0pds+BaiqY6uGLEEzsjhRO0ujd4v2Rmm0vuFg==", - "dev": true, - "dependencies": { - "@parcel/bundler-default": "2.12.0", - "@parcel/compressor-raw": "2.12.0", - "@parcel/namer-default": "2.12.0", - "@parcel/optimizer-css": "2.12.0", - "@parcel/optimizer-htmlnano": "2.12.0", - "@parcel/optimizer-image": "2.12.0", - "@parcel/optimizer-svgo": "2.12.0", - "@parcel/optimizer-swc": "2.12.0", - "@parcel/packager-css": "2.12.0", - "@parcel/packager-html": "2.12.0", - "@parcel/packager-js": "2.12.0", - "@parcel/packager-raw": "2.12.0", - "@parcel/packager-svg": "2.12.0", - "@parcel/packager-wasm": "2.12.0", - "@parcel/reporter-dev-server": "2.12.0", - "@parcel/resolver-default": "2.12.0", - "@parcel/runtime-browser-hmr": "2.12.0", - "@parcel/runtime-js": "2.12.0", - "@parcel/runtime-react-refresh": "2.12.0", - "@parcel/runtime-service-worker": "2.12.0", - "@parcel/transformer-babel": "2.12.0", - "@parcel/transformer-css": "2.12.0", - "@parcel/transformer-html": "2.12.0", - "@parcel/transformer-image": "2.12.0", - "@parcel/transformer-js": "2.12.0", - "@parcel/transformer-json": "2.12.0", - "@parcel/transformer-postcss": "2.12.0", - "@parcel/transformer-posthtml": "2.12.0", - "@parcel/transformer-raw": "2.12.0", - "@parcel/transformer-react-refresh-wrap": "2.12.0", - "@parcel/transformer-svg": "2.12.0" + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.13.3.tgz", + "integrity": "sha512-WUsx83ic8DgLwwnL1Bua4lRgQqYjxiTT+DBxESGk1paNm1juWzyfPXEQDLXwiCTcWMQGiXQFQ8OuSISauVQ8dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/bundler-default": "2.13.3", + "@parcel/compressor-raw": "2.13.3", + "@parcel/namer-default": "2.13.3", + "@parcel/optimizer-css": "2.13.3", + "@parcel/optimizer-htmlnano": "2.13.3", + "@parcel/optimizer-image": "2.13.3", + "@parcel/optimizer-svgo": "2.13.3", + "@parcel/optimizer-swc": "2.13.3", + "@parcel/packager-css": "2.13.3", + "@parcel/packager-html": "2.13.3", + "@parcel/packager-js": "2.13.3", + "@parcel/packager-raw": "2.13.3", + "@parcel/packager-svg": "2.13.3", + "@parcel/packager-wasm": "2.13.3", + "@parcel/reporter-dev-server": "2.13.3", + "@parcel/resolver-default": "2.13.3", + "@parcel/runtime-browser-hmr": "2.13.3", + "@parcel/runtime-js": "2.13.3", + "@parcel/runtime-react-refresh": "2.13.3", + "@parcel/runtime-service-worker": "2.13.3", + "@parcel/transformer-babel": "2.13.3", + "@parcel/transformer-css": "2.13.3", + "@parcel/transformer-html": "2.13.3", + "@parcel/transformer-image": "2.13.3", + "@parcel/transformer-js": "2.13.3", + "@parcel/transformer-json": "2.13.3", + "@parcel/transformer-postcss": "2.13.3", + "@parcel/transformer-posthtml": "2.13.3", + "@parcel/transformer-raw": "2.13.3", + "@parcel/transformer-react-refresh-wrap": "2.13.3", + "@parcel/transformer-svg": "2.13.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/core": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.12.0.tgz", - "integrity": "sha512-s+6pwEj+GfKf7vqGUzN9iSEPueUssCCQrCBUlcAfKrJe0a22hTUCjewpB0I7lNrCIULt8dkndD+sMdOrXsRl6Q==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.13.3.tgz", + "integrity": "sha512-SRZFtqGiaKHlZ2YAvf+NHvBFWS3GnkBvJMfOJM7kxJRK3M1bhbwJa/GgSdzqro5UVf9Bfj6E+pkdrRQIOZ7jMQ==", "dev": true, + "license": "MIT", "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/cache": "2.12.0", - "@parcel/diagnostic": "2.12.0", - "@parcel/events": "2.12.0", - "@parcel/fs": "2.12.0", - "@parcel/graph": "3.2.0", - "@parcel/logger": "2.12.0", - "@parcel/package-manager": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/profiler": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/cache": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/logger": "2.13.3", + "@parcel/package-manager": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/profiler": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", - "@parcel/workers": "2.12.0", - "abortcontroller-polyfill": "^1.1.9", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "base-x": "^3.0.8", "browserslist": "^4.6.6", "clone": "^2.1.1", - "dotenv": "^7.0.0", - "dotenv-expand": "^5.1.0", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", "json5": "^2.2.0", "msgpackr": "^1.9.9", "nullthrows": "^1.1.1", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -609,16 +615,17 @@ } }, "node_modules/@parcel/diagnostic": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.12.0.tgz", - "integrity": "sha512-8f1NOsSFK+F4AwFCKynyIu9Kr/uWHC+SywAv4oS6Bv3Acig0gtwUjugk0C9UaB8ztBZiW5TQZhw+uPZn9T/lJA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.13.3.tgz", + "integrity": "sha512-C70KXLBaXLJvr7XCEVu8m6TqNdw1gQLxqg5BQ8roR62R4vWWDnOq8PEksxDi4Y8Z/FF4i3Sapv6tRx9iBNxDEg==", "dev": true, + "license": "MIT", "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -626,12 +633,27 @@ } }, "node_modules/@parcel/events": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.12.0.tgz", - "integrity": "sha512-nmAAEIKLjW1kB2cUbCYSmZOGbnGj8wCzhqnK727zCCWaA25ogzAtt657GPOeFyqW77KyosU728Tl63Fc8hphIA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.13.3.tgz", + "integrity": "sha512-ZkSHTTbD/E+53AjUzhAWTnMLnxLEU5yRw0H614CaruGh+GjgOIKyukGeToF5Gf/lvZ159VrJCGE0Z5EpgHVkuQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/feature-flags": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/feature-flags/-/feature-flags-2.13.3.tgz", + "integrity": "sha512-UZm14QpamDFoUut9YtCZSpG1HxPs07lUwUCpsAYL0PpxASD3oWJQxIJGfDZPa2272DarXDG9adTKrNXvkHZblw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -639,38 +661,42 @@ } }, "node_modules/@parcel/fs": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.12.0.tgz", - "integrity": "sha512-NnFkuvou1YBtPOhTdZr44WN7I60cGyly2wpHzqRl62yhObyi1KvW0SjwOMa0QGNcBOIzp4G0CapoZ93hD0RG5Q==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.13.3.tgz", + "integrity": "sha512-+MPWAt0zr+TCDSlj1LvkORTjfB/BSffsE99A9AvScKytDSYYpY2s0t4vtV9unSh0FHMS2aBCZNJ4t7KL+DcPIg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/rust": "2.12.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/feature-flags": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/types-internal": "2.13.3", + "@parcel/utils": "2.13.3", "@parcel/watcher": "^2.0.7", - "@parcel/workers": "2.12.0" + "@parcel/workers": "2.13.3" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/graph": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.2.0.tgz", - "integrity": "sha512-xlrmCPqy58D4Fg5umV7bpwDx5Vyt7MlnQPxW68vae5+BA4GSWetfZt+Cs5dtotMG2oCHzZxhIPt7YZ7NRyQzLA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.3.3.tgz", + "integrity": "sha512-pxs4GauEdvCN8nRd6wG3st6LvpHske3GfqGwUSR0P0X0pBPI1/NicvXz6xzp3rgb9gPWfbKXeI/2IOTfIxxVfg==", "dev": true, + "license": "MIT", "dependencies": { + "@parcel/feature-flags": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -678,16 +704,17 @@ } }, "node_modules/@parcel/logger": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.12.0.tgz", - "integrity": "sha512-cJ7Paqa7/9VJ7C+KwgJlwMqTQBOjjn71FbKk0G07hydUEBISU2aDfmc/52o60ErL9l+vXB26zTrIBanbxS8rVg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.13.3.tgz", + "integrity": "sha512-8YF/ZhsQgd7ohQ2vEqcMD1Ag9JlJULROWRPGgGYLGD+twuxAiSdiFBpN3f+j4gQN4PYaLaIS/SwUFx11J243fQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/events": "2.12.0" + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -695,15 +722,16 @@ } }, "node_modules/@parcel/markdown-ansi": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.12.0.tgz", - "integrity": "sha512-WZz3rzL8k0H3WR4qTHX6Ic8DlEs17keO9gtD4MNGyMNQbqQEvQ61lWJaIH0nAtgEetu0SOITiVqdZrb8zx/M7w==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.13.3.tgz", + "integrity": "sha512-B4rUdlNUulJs2xOQuDbN7Hq5a9roq8IZUcJ1vQ8PAv+zMGb7KCfqIIr/BSCDYGhayfAGBVWW8x55Kvrl1zrDYw==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0" + "chalk": "^4.1.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -711,18 +739,19 @@ } }, "node_modules/@parcel/namer-default": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.12.0.tgz", - "integrity": "sha512-9DNKPDHWgMnMtqqZIMiEj/R9PNWW16lpnlHjwK3ciRlMPgjPJ8+UNc255teZODhX0T17GOzPdGbU/O/xbxVPzA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.13.3.tgz", + "integrity": "sha512-A2a5A5fuyNcjSGOS0hPcdQmOE2kszZnLIXof7UMGNkNkeC62KAG8WcFZH5RNOY3LT5H773hq51zmc2Y2gE5Rnw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -730,21 +759,22 @@ } }, "node_modules/@parcel/node-resolver-core": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.3.0.tgz", - "integrity": "sha512-rhPW9DYPEIqQBSlYzz3S0AjXxjN6Ub2yS6tzzsW/4S3Gpsgk/uEq4ZfxPvoPf/6TgZndVxmKwpmxaKtGMmf3cA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.4.3.tgz", + "integrity": "sha512-IEnMks49egEic1ITBp59VQyHzkSQUXqpU9hOHwqN3KoSTdZ6rEgrXcS3pa6tdXay4NYGlcZ88kFCE8i/xYoVCg==", "dev": true, + "license": "MIT", "dependencies": { "@mischnic/json-sourcemap": "^0.1.0", - "@parcel/diagnostic": "2.12.0", - "@parcel/fs": "2.12.0", - "@parcel/rust": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -752,22 +782,23 @@ } }, "node_modules/@parcel/optimizer-css": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.12.0.tgz", - "integrity": "sha512-ifbcC97fRzpruTjaa8axIFeX4MjjSIlQfem3EJug3L2AVqQUXnM1XO8L0NaXGNLTW2qnh1ZjIJ7vXT/QhsphsA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.13.3.tgz", + "integrity": "sha512-A8o9IVCv919vhv69SkLmyW2WjJR5WZgcMqV6L1uiGF8i8z18myrMhrp2JuSHx29PRT9uNyzNC4Xrd4StYjIhJg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", + "@parcel/utils": "2.13.3", "browserslist": "^4.6.6", "lightningcss": "^1.22.1", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -775,232 +806,90 @@ } }, "node_modules/@parcel/optimizer-htmlnano": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.12.0.tgz", - "integrity": "sha512-MfPMeCrT8FYiOrpFHVR+NcZQlXAptK2r4nGJjfT+ndPBhEEZp4yyL7n1y7HfX9geg5altc4WTb4Gug7rCoW8VQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.13.3.tgz", + "integrity": "sha512-K4Uvg0Sy2pECP7pdvvbud++F0pfcbNkq+IxTrgqBX5HJnLEmRZwgdvZEKF43oMEolclMnURMQRGjRplRaPdbXg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "htmlnano": "^2.0.0", "nullthrows": "^1.1.1", - "posthtml": "^0.16.5", - "svgo": "^2.4.0" + "posthtml": "^0.16.5" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/optimizer-htmlnano/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@parcel/optimizer-htmlnano/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@parcel/optimizer-htmlnano/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@parcel/optimizer-htmlnano/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/@parcel/optimizer-htmlnano/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@parcel/optimizer-image": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.12.0.tgz", - "integrity": "sha512-bo1O7raeAIbRU5nmNVtx8divLW9Xqn0c57GVNGeAK4mygnQoqHqRZ0mR9uboh64pxv6ijXZHPhKvU9HEpjPjBQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.13.3.tgz", + "integrity": "sha512-wlDUICA29J4UnqkKrWiyt68g1e85qfYhp4zJFcFJL0LX1qqh1QwsLUz3YJ+KlruoqPxJSFEC8ncBEKiVCsqhEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", - "@parcel/utils": "2.12.0", - "@parcel/workers": "2.12.0" + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/optimizer-svgo": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.12.0.tgz", - "integrity": "sha512-Kyli+ZZXnoonnbeRQdoWwee9Bk2jm/49xvnfb+2OO8NN0d41lblBoRhOyFiScRnJrw7eVl1Xrz7NTkXCIO7XFQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.13.3.tgz", + "integrity": "sha512-piIKxQKzhZK54dJR6yqIcq+urZmpsfgUpLCZT3cnWlX4ux5+S2iN66qqZBs0zVn+a58LcWcoP4Z9ieiJmpiu2w==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", - "svgo": "^2.4.0" + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/optimizer-svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@parcel/optimizer-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@parcel/optimizer-svgo/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@parcel/optimizer-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/@parcel/optimizer-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@parcel/optimizer-swc": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.12.0.tgz", - "integrity": "sha512-iBi6LZB3lm6WmbXfzi8J3DCVPmn4FN2lw7DGXxUXu7MouDPVWfTsM6U/5TkSHJRNRogZ2gqy5q9g34NPxHbJcw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.13.3.tgz", + "integrity": "sha512-zNSq6oWqLlW8ksPIDjM0VgrK6ZAJbPQCDvs1V+p0oX3CzEe85lT5VkRpnfrN1+/vvEJNGL8e60efHKpI+rXGTA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", - "@swc/core": "^1.3.36", + "@parcel/utils": "2.13.3", + "@swc/core": "^1.7.26", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1008,48 +897,50 @@ } }, "node_modules/@parcel/package-manager": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.12.0.tgz", - "integrity": "sha512-0nvAezcjPx9FT+hIL+LS1jb0aohwLZXct7jAh7i0MLMtehOi0z1Sau+QpgMlA9rfEZZ1LIeFdnZZwqSy7Ccspw==", - "dev": true, - "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/fs": "2.12.0", - "@parcel/logger": "2.12.0", - "@parcel/node-resolver-core": "3.3.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", - "@parcel/workers": "2.12.0", - "@swc/core": "^1.3.36", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.13.3.tgz", + "integrity": "sha512-FLNI5OrZxymGf/Yln0E/kjnGn5sdkQAxW7pQVdtuM+5VeN75yibJRjsSGv88PvJ+KvpD2ANgiIJo1RufmoPcww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/node-resolver-core": "3.4.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", + "@swc/core": "^1.7.26", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/packager-css": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.12.0.tgz", - "integrity": "sha512-j3a/ODciaNKD19IYdWJT+TP+tnhhn5koBGBWWtrKSu0UxWpnezIGZetit3eE+Y9+NTePalMkvpIlit2eDhvfJA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.13.3.tgz", + "integrity": "sha512-ghDqRMtrUwaDERzFm9le0uz2PTeqqsjsW0ihQSZPSAptElRl9o5BR+XtMPv3r7Ui0evo+w35gD55oQCJ28vCig==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", + "@parcel/utils": "2.13.3", "lightningcss": "^1.22.1", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1057,20 +948,21 @@ } }, "node_modules/@parcel/packager-html": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.12.0.tgz", - "integrity": "sha512-PpvGB9hFFe+19NXGz2ApvPrkA9GwEqaDAninT+3pJD57OVBaxB8U+HN4a5LICKxjUppPPqmrLb6YPbD65IX4RA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.13.3.tgz", + "integrity": "sha512-jDLnKSA/EzVEZ3/aegXO3QJ/Ij732AgBBkIQfeC8tUoxwVz5b3HiPBAjVjcUSfZs7mdBSHO+ELWC3UD+HbsIrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1078,23 +970,24 @@ } }, "node_modules/@parcel/packager-js": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.12.0.tgz", - "integrity": "sha512-viMF+FszITRRr8+2iJyk+4ruGiL27Y6AF7hQ3xbJfzqnmbOhGFtLTQwuwhOLqN/mWR2VKdgbLpZSarWaO3yAMg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.13.3.tgz", + "integrity": "sha512-0pMHHf2zOn7EOJe88QJw5h/wcV1bFfj6cXVcE55Wa8GX3V+SdCgolnlvNuBcRQ1Tlx0Xkpo+9hMFVIQbNQY6zw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", "globals": "^13.2.0", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1102,16 +995,17 @@ } }, "node_modules/@parcel/packager-raw": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.12.0.tgz", - "integrity": "sha512-tJZqFbHqP24aq1F+OojFbQIc09P/u8HAW5xfndCrFnXpW4wTgM3p03P0xfw3gnNq+TtxHJ8c3UFE5LnXNNKhYA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.13.3.tgz", + "integrity": "sha512-AWu4UB+akBdskzvT3KGVHIdacU9f7cI678DQQ1jKQuc9yZz5D0VFt3ocFBOmvDfEQDF0uH3jjtJR7fnuvX7Biw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0" + "@parcel/plugin": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1119,19 +1013,20 @@ } }, "node_modules/@parcel/packager-svg": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.12.0.tgz", - "integrity": "sha512-ldaGiacGb2lLqcXas97k8JiZRbAnNREmcvoY2W2dvW4loVuDT9B9fU777mbV6zODpcgcHWsLL3lYbJ5Lt3y9cg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.13.3.tgz", + "integrity": "sha512-tKGRiFq/4jh5u2xpTstNQ7gu+RuZWzlWqpw5NaFmcKe6VQe5CMcS499xTFoREAGnRvevSeIgC38X1a+VOo+/AA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", "posthtml": "^0.16.4" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1139,16 +1034,17 @@ } }, "node_modules/@parcel/packager-wasm": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.12.0.tgz", - "integrity": "sha512-fYqZzIqO9fGYveeImzF8ll6KRo2LrOXfD+2Y5U3BiX/wp9wv17dz50QLDQm9hmTcKGWxK4yWqKQh+Evp/fae7A==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.13.3.tgz", + "integrity": "sha512-SZB56/b230vFrSehVXaUAWjJmWYc89gzb8OTLkBm7uvtFtov2J1R8Ig9TTJwinyXE3h84MCFP/YpQElSfoLkJw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0" + "@parcel/plugin": "2.13.3" }, "engines": { - "node": ">=12.0.0", - "parcel": "^2.12.0" + "node": ">=16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1156,15 +1052,16 @@ } }, "node_modules/@parcel/plugin": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.12.0.tgz", - "integrity": "sha512-nc/uRA8DiMoe4neBbzV6kDndh/58a4wQuGKw5oEoIwBCHUvE2W8ZFSu7ollSXUGRzfacTt4NdY8TwS73ScWZ+g==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.13.3.tgz", + "integrity": "sha512-cterKHHcwg6q11Gpif/aqvHo056TR+yDVJ3fSdiG2xr5KD1VZ2B3hmofWERNNwjMcnR1h9Xq40B7jCKUhOyNFA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/types": "2.12.0" + "@parcel/types": "2.13.3" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -1172,17 +1069,19 @@ } }, "node_modules/@parcel/profiler": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.12.0.tgz", - "integrity": "sha512-q53fvl5LDcFYzMUtSusUBZSjQrKjMlLEBgKeQHFwkimwR1mgoseaDBDuNz0XvmzDzF1UelJ02TUKCGacU8W2qA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.13.3.tgz", + "integrity": "sha512-ok6BwWSLvyHe5TuSXjSacYnDStFgP5Y30tA9mbtWSm0INDsYf+m5DqzpYPx8U54OaywWMK8w3MXUClosJX3aPA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/events": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/types-internal": "2.13.3", "chrome-trace-event": "^1.0.2" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -1190,20 +1089,21 @@ } }, "node_modules/@parcel/reporter-cli": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.12.0.tgz", - "integrity": "sha512-TqKsH4GVOLPSCanZ6tcTPj+rdVHERnt5y4bwTM82cajM21bCX1Ruwp8xOKU+03091oV2pv5ieB18pJyRF7IpIw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.13.3.tgz", + "integrity": "sha512-EA5tKt/6bXYNMEavSs35qHlFdx6cZmRazlZxPBgxPePQYoouNAPMNLUOEQozaPhz9f5fvNDN7EHOFaAWcdO2LA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", - "chalk": "^4.1.0", + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "chalk": "^4.1.2", "term-size": "^2.2.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1211,17 +1111,18 @@ } }, "node_modules/@parcel/reporter-dev-server": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.12.0.tgz", - "integrity": "sha512-tIcDqRvAPAttRlTV28dHcbWT5K2r/MBFks7nM4nrEDHWtnrCwimkDmZTc1kD8QOCCjGVwRHcQybpHvxfwol6GA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.13.3.tgz", + "integrity": "sha512-ZNeFp6AOIQFv7mZIv2P5O188dnZHNg0ymeDVcakfZomwhpSva2dFNS3AnvWo4eyWBlUxkmQO8BtaxeWTs7jAuA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0" + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1229,19 +1130,20 @@ } }, "node_modules/@parcel/reporter-tracer": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.12.0.tgz", - "integrity": "sha512-g8rlu9GxB8Ut/F8WGx4zidIPQ4pcYFjU9bZO+fyRIPrSUFH2bKijCnbZcr4ntqzDGx74hwD6cCG4DBoleq2UlQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.13.3.tgz", + "integrity": "sha512-aBsVPI8jLZTDkFYrI69GxnsdvZKEYerkPsu935LcX9rfUYssOnmmUP+3oI+8fbg+qNjJuk9BgoQ4hCp9FOphMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "chrome-trace-event": "^1.0.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1249,17 +1151,18 @@ } }, "node_modules/@parcel/resolver-default": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.12.0.tgz", - "integrity": "sha512-uuhbajTax37TwCxu7V98JtRLiT6hzE4VYSu5B7Qkauy14/WFt2dz6GOUXPgVsED569/hkxebPx3KCMtZW6cHHA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.13.3.tgz", + "integrity": "sha512-urBZuRALWT9pFMeWQ8JirchLmsQEyI9lrJptiwLbJWrwvmlwSUGkcstmPwoNRf/aAQjICB7ser/247Vny0pFxA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/node-resolver-core": "3.3.0", - "@parcel/plugin": "2.12.0" + "@parcel/node-resolver-core": "3.4.3", + "@parcel/plugin": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1267,17 +1170,18 @@ } }, "node_modules/@parcel/runtime-browser-hmr": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.12.0.tgz", - "integrity": "sha512-4ZLp2FWyD32r0GlTulO3+jxgsA3oO1P1b5oO2IWuWilfhcJH5LTiazpL5YdusUjtNn9PGN6QLAWfxmzRIfM+Ow==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.13.3.tgz", + "integrity": "sha512-EAcPojQFUNUGUrDk66cu3ySPO0NXRVS5CKPd4QrxPCVVbGzde4koKu8krC/TaGsoyUqhie8HMnS70qBP0GFfcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0" + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1285,19 +1189,20 @@ } }, "node_modules/@parcel/runtime-js": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.12.0.tgz", - "integrity": "sha512-sBerP32Z1crX5PfLNGDSXSdqzlllM++GVnVQVeM7DgMKS8JIFG3VLi28YkX+dYYGtPypm01JoIHCkvwiZEcQJg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.13.3.tgz", + "integrity": "sha512-62OucNAnxb2Q0uyTFWW/0Hvv2DJ4b5H6neh/YFu2/wmxaZ37xTpEuEcG2do7KW54xE5DeLP+RliHLwi4NvR3ww==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1305,19 +1210,20 @@ } }, "node_modules/@parcel/runtime-react-refresh": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.12.0.tgz", - "integrity": "sha512-SCHkcczJIDFTFdLTzrHTkQ0aTrX3xH6jrA4UsCBL6ji61+w+ohy4jEEe9qCgJVXhnJfGLE43HNXek+0MStX+Mw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.13.3.tgz", + "integrity": "sha512-PYZ1klpJVwqE3WuifILjtF1dugtesHEuJcXYZI85T6UoRSD5ctS1nAIpZzT14Ga1lRt/jd+eAmhWL1l3m/Vk1Q==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "react-error-overlay": "6.0.9", - "react-refresh": "^0.9.0" + "react-refresh": ">=0.9 <=0.14" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1325,18 +1231,19 @@ } }, "node_modules/@parcel/runtime-service-worker": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.12.0.tgz", - "integrity": "sha512-BXuMBsfiwpIEnssn+jqfC3jkgbS8oxeo3C7xhSQsuSv+AF2FwY3O3AO1c1RBskEW3XrBLNINOJujroNw80VTKA==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.13.3.tgz", + "integrity": "sha512-BjMhPuT7Us1+YIo31exPRwomPiL+jrZZS5UUAwlEW2XGHDceEotzRM94LwxeFliCScT4IOokGoxixm19qRuzWg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1344,12 +1251,13 @@ } }, "node_modules/@parcel/rust": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.12.0.tgz", - "integrity": "sha512-005cldMdFZFDPOjbDVEXcINQ3wT4vrxvSavRWI3Az0e3E18exO/x/mW9f648KtXugOXMAqCEqhFHcXECL9nmMw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.13.3.tgz", + "integrity": "sha512-dLq85xDAtzr3P5200cvxk+8WXSWauYbxuev9LCPdwfhlaWo/JEj6cu9seVdWlkagjGwkoV1kXC+GGntgUXOLAQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -1369,23 +1277,24 @@ } }, "node_modules/@parcel/transformer-babel": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.12.0.tgz", - "integrity": "sha512-zQaBfOnf/l8rPxYGnsk/ufh/0EuqvmnxafjBIpKZ//j6rGylw5JCqXSb1QvvAqRYruKeccxGv7+HrxpqKU6V4A==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.13.3.tgz", + "integrity": "sha512-ikzK9f5WTFrdQsPitQgjCPH6HmVU8AQPRemIJ2BndYhtodn5PQut5cnSvTrqax8RjYvheEKCQk/Zb/uR7qgS3g==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", + "@parcel/utils": "2.13.3", "browserslist": "^4.6.6", "json5": "^2.2.0", "nullthrows": "^1.1.1", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1393,22 +1302,23 @@ } }, "node_modules/@parcel/transformer-css": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.12.0.tgz", - "integrity": "sha512-vXhOqoAlQGATYyQ433Z1DXKmiKmzOAUmKysbYH3FD+LKEKLMEl/pA14goqp00TW+A/EjtSKKyeMyHlMIIUqj4Q==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.13.3.tgz", + "integrity": "sha512-zbrNURGph6JeVADbGydyZ7lcu/izj41kDxQ9xw4RPRW/3rofQiTU0OTREi+uBWiMENQySXVivEdzHA9cA+aLAA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", + "@parcel/utils": "2.13.3", "browserslist": "^4.6.6", "lightningcss": "^1.22.1", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1416,24 +1326,25 @@ } }, "node_modules/@parcel/transformer-html": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.12.0.tgz", - "integrity": "sha512-5jW4dFFBlYBvIQk4nrH62rfA/G/KzVzEDa6S+Nne0xXhglLjkm64Ci9b/d4tKZfuGWUbpm2ASAq8skti/nfpXw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.13.3.tgz", + "integrity": "sha512-Yf74FkL9RCCB4+hxQRVMNQThH9+fZ5w0NLiQPpWUOcgDEEyxTi4FWPQgEBsKl/XK2ehdydbQB9fBgPQLuQxwPg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", + "posthtml-parser": "^0.12.1", "posthtml-render": "^3.0.0", "semver": "^7.5.2", "srcset": "4" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1454,66 +1365,69 @@ } }, "node_modules/@parcel/transformer-image": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.12.0.tgz", - "integrity": "sha512-8hXrGm2IRII49R7lZ0RpmNk27EhcsH+uNKsvxuMpXPuEnWgC/ha/IrjaI29xCng1uGur74bJF43NUSQhR4aTdw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.13.3.tgz", + "integrity": "sha512-wL1CXyeFAqbp2wcEq/JD3a/tbAyVIDMTC6laQxlIwnVV7dsENhK1qRuJZuoBdixESeUpFQSmmQvDIhcfT/cUUg==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", - "@parcel/workers": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/transformer-js": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.12.0.tgz", - "integrity": "sha512-OSZpOu+FGDbC/xivu24v092D9w6EGytB3vidwbdiJ2FaPgfV7rxS0WIUjH4I0OcvHAcitArRXL0a3+HrNTdQQw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.13.3.tgz", + "integrity": "sha512-KqfNGn1IHzDoN2aPqt4nDksgb50Xzcny777C7A7hjlQ3cmkjyJrixYjzzsPaPSGJ+kJpknh3KE8unkQ9mhFvRQ==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/utils": "2.12.0", - "@parcel/workers": "2.12.0", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", "@swc/helpers": "^0.5.0", "browserslist": "^4.6.6", "nullthrows": "^1.1.1", - "regenerator-runtime": "^0.13.7", + "regenerator-runtime": "^0.14.1", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@parcel/transformer-json": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.12.0.tgz", - "integrity": "sha512-Utv64GLRCQILK5r0KFs4o7I41ixMPllwOLOhkdjJKvf1hZmN6WqfOmB1YLbWS/y5Zb/iB52DU2pWZm96vLFQZQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.13.3.tgz", + "integrity": "sha512-rrq0ab6J0w9ePtsxi0kAvpCmrUYXXAx1Z5PATZakv89rSYbHBKEdXxyCoKFui/UPVCUEGVs5r0iOFepdHpIyeA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", + "@parcel/plugin": "2.13.3", "json5": "^2.2.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1521,23 +1435,24 @@ } }, "node_modules/@parcel/transformer-postcss": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.12.0.tgz", - "integrity": "sha512-FZqn+oUtiLfPOn67EZxPpBkfdFiTnF4iwiXPqvst3XI8H+iC+yNgzmtJkunOOuylpYY6NOU5jT8d7saqWSDv2Q==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.13.3.tgz", + "integrity": "sha512-AIiWpU0QSFBrPcYIqAnhqB8RGE6yHFznnxztfg1t2zMSOnK3xoU6xqYKv8H/MduShGGrC3qVOeDfM8MUwzL3cw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", "clone": "^2.1.1", "nullthrows": "^1.1.1", "postcss-value-parser": "^4.2.0", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1545,22 +1460,23 @@ } }, "node_modules/@parcel/transformer-posthtml": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.12.0.tgz", - "integrity": "sha512-z6Z7rav/pcaWdeD+2sDUcd0mmNZRUvtHaUGa50Y2mr+poxrKilpsnFMSiWBT+oOqPt7j71jzDvrdnAF4XkCljg==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.13.3.tgz", + "integrity": "sha512-5GSLyccpHASwFAu3uJ83gDIBSvfsGdVmhJvy0Vxe+K1Fklk2ibhvvtUHMhB7mg6SPHC+R9jsNc3ZqY04ZLeGjw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", + "posthtml-parser": "^0.12.1", "posthtml-render": "^3.0.0", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1568,16 +1484,17 @@ } }, "node_modules/@parcel/transformer-raw": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.12.0.tgz", - "integrity": "sha512-Ht1fQvXxix0NncdnmnXZsa6hra20RXYh1VqhBYZLsDfkvGGFnXIgO03Jqn4Z8MkKoa0tiNbDhpKIeTjyclbBxQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.13.3.tgz", + "integrity": "sha512-BFsAbdQF0l8/Pdb7dSLJeYcd8jgwvAUbHgMink2MNXJuRUvDl19Gns8jVokU+uraFHulJMBj40+K/RTd33in4g==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0" + "@parcel/plugin": "2.13.3" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1585,18 +1502,19 @@ } }, "node_modules/@parcel/transformer-react-refresh-wrap": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.12.0.tgz", - "integrity": "sha512-GE8gmP2AZtkpBIV5vSCVhewgOFRhqwdM5Q9jNPOY5PKcM3/Ff0qCqDiTzzGLhk0/VMBrdjssrfZkVx6S/lHdJw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.13.3.tgz", + "integrity": "sha512-mOof4cRyxsZRdg8kkWaFtaX98mHpxUhcGPU+nF9RQVa9q737ItxrorsPNR9hpZAyE2TtFNflNW7RoYsgvlLw8w==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", - "@parcel/utils": "2.12.0", - "react-refresh": "^0.9.0" + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "react-refresh": ">=0.9 <=0.14" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1604,18 +1522,19 @@ } }, "node_modules/@parcel/transformer-sass": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.12.0.tgz", - "integrity": "sha512-xLLoSLPST+2AHJwFRLl4foArDjjy6P1RChP3TxMU2MVS1sbKGJnfFhFpHAacH8ASjuGtu5rbpfpHRZePlvoZxw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.13.3.tgz", + "integrity": "sha512-M8Ntscr+RGoQJ2ymIvT+f/1THea/6pVLJY2ky2N+fhtM6/iFx/7WnpJKL37IKAGIOn5AhqDqc0tPjK6H9moIbA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/plugin": "2.12.0", + "@parcel/plugin": "2.13.3", "@parcel/source-map": "^2.1.1", "sass": "^1.38.0" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1623,23 +1542,24 @@ } }, "node_modules/@parcel/transformer-svg": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.12.0.tgz", - "integrity": "sha512-cZJqGRJ4JNdYcb+vj94J7PdOuTnwyy45dM9xqbIMH+HSiiIkfrMsdEwYft0GTyFTdsnf+hdHn3tau7Qa5hhX+A==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.13.3.tgz", + "integrity": "sha512-9jm7ZF4KHIrGLWlw/SFUz5KKJ20nxHvjFAmzde34R9Wu+F1BOjLZxae7w4ZRwvIc+UVOUcBBQFmhSVwVDZg6Dw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/plugin": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", "nullthrows": "^1.1.1", "posthtml": "^0.16.5", - "posthtml-parser": "^0.10.1", + "posthtml-parser": "^0.12.1", "posthtml-render": "^3.0.0", "semver": "^7.5.2" }, "engines": { - "node": ">= 12.0.0", - "parcel": "^2.12.0" + "node": ">= 16.0.0", + "parcel": "^2.13.3" }, "funding": { "type": "opencollective", @@ -1647,37 +1567,47 @@ } }, "node_modules/@parcel/types": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.12.0.tgz", - "integrity": "sha512-8zAFiYNCwNTQcglIObyNwKfRYQK5ELlL13GuBOrSMxueUiI5ylgsGbTS1N7J3dAGZixHO8KhHGv5a71FILn9rQ==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.13.3.tgz", + "integrity": "sha512-+RpFHxx8fy8/dpuehHUw/ja9PRExC3wJoIlIIF42E7SLu2SvlTHtKm6EfICZzxCXNEBzjoDbamCRcN0nmTPlhw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/cache": "2.12.0", - "@parcel/diagnostic": "2.12.0", - "@parcel/fs": "2.12.0", - "@parcel/package-manager": "2.12.0", + "@parcel/types-internal": "2.13.3", + "@parcel/workers": "2.13.3" + } + }, + "node_modules/@parcel/types-internal": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/types-internal/-/types-internal-2.13.3.tgz", + "integrity": "sha512-Lhx0n+9RCp+Ipktf/I+CLm3zE9Iq9NtDd8b2Vr5lVWyoT8AbzBKIHIpTbhLS4kjZ80L3I6o93OYjqAaIjsqoZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/feature-flags": "2.13.3", "@parcel/source-map": "^2.1.1", - "@parcel/workers": "2.12.0", "utility-types": "^3.10.0" } }, "node_modules/@parcel/utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.12.0.tgz", - "integrity": "sha512-z1JhLuZ8QmDaYoEIuUCVZlhcFrS7LMfHrb2OCRui5SQFntRWBH2fNM6H/fXXUkT9SkxcuFP2DUA6/m4+Gkz72g==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.13.3.tgz", + "integrity": "sha512-yxY9xw2wOUlJaScOXYZmMGoZ4Ck4Kqj+p6Koe5kLkkWM1j98Q0Dj2tf/mNvZi4yrdnlm+dclCwNRnuE8Q9D+pw==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/codeframe": "2.12.0", - "@parcel/diagnostic": "2.12.0", - "@parcel/logger": "2.12.0", - "@parcel/markdown-ansi": "2.12.0", - "@parcel/rust": "2.12.0", + "@parcel/codeframe": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/markdown-ansi": "2.13.3", + "@parcel/rust": "2.13.3", "@parcel/source-map": "^2.1.1", - "chalk": "^4.1.0", + "chalk": "^4.1.2", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -1980,27 +1910,28 @@ } }, "node_modules/@parcel/workers": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.12.0.tgz", - "integrity": "sha512-zv5We5Jmb+ZWXlU6A+AufyjY4oZckkxsZ8J4dvyWL0W8IQvGO1JB4FGeryyttzQv3RM3OxcN/BpTGPiDG6keBw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.13.3.tgz", + "integrity": "sha512-oAHmdniWTRwwwsKbcF4t3VjOtKN+/W17Wj5laiYB+HLkfsjGTfIQPj3sdXmrlBAGpI4omIcvR70PHHXnfdTfwA==", "dev": true, + "license": "MIT", "dependencies": { - "@parcel/diagnostic": "2.12.0", - "@parcel/logger": "2.12.0", - "@parcel/profiler": "2.12.0", - "@parcel/types": "2.12.0", - "@parcel/utils": "2.12.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/profiler": "2.13.3", + "@parcel/types-internal": "2.13.3", + "@parcel/utils": "2.13.3", "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" }, "peerDependencies": { - "@parcel/core": "^2.12.0" + "@parcel/core": "^2.13.3" } }, "node_modules/@popperjs/core": { @@ -2241,15 +2172,6 @@ "@swc/counter": "^0.1.3" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -2262,12 +2184,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", - "dev": true - }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -2579,13 +2495,6 @@ "version": "1.0.0", "resolved": "git+ssh://git@gitlab.com/eappointment/zmsentities.git#34257f84656f5527d3e66005c9290ac6fd1a606e" }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "license": "ISC" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2772,6 +2681,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } @@ -2820,12 +2730,13 @@ "dev": true }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=18" } }, "node_modules/concat-map": { @@ -2839,6 +2750,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -2864,13 +2776,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/cosmiconfig/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2892,19 +2806,6 @@ "node": ">= 8" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3054,28 +2955,20 @@ } }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/dom7": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz", @@ -3094,15 +2987,17 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "domelementtype": "^2.2.0" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -3112,33 +3007,48 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dotenv": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", - "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } }, "node_modules/electron-to-chromium": { "version": "1.5.51", @@ -3166,10 +3076,11 @@ } }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -3182,6 +3093,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3191,6 +3103,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -4125,6 +4038,7 @@ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.1.tgz", "integrity": "sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==", "dev": true, + "license": "MIT", "dependencies": { "cosmiconfig": "^9.0.0", "posthtml": "^0.16.5", @@ -4168,9 +4082,9 @@ } }, "node_modules/htmlparser2": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", - "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -4179,11 +4093,12 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.2", - "domutils": "^2.8.0", - "entities": "^3.0.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" } }, "node_modules/https-browserify": { @@ -4319,7 +4234,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", @@ -4482,7 +4398,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-map": { "version": "2.0.3", @@ -4702,8 +4619,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", @@ -4728,7 +4644,8 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-defaults": { "version": "0.4.0", @@ -4844,10 +4761,11 @@ } }, "node_modules/lightningcss": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.1.tgz", - "integrity": "sha512-KRDkHlLlNj3DWh79CDt93fPlRJh2W1AuHV0ZSZAMMuN7lqlsZTV5842idfS1urWG8q9tc17velp1gCXhY7sLnQ==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", + "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", "dev": true, + "license": "MPL-2.0", "dependencies": { "detect-libc": "^1.0.3" }, @@ -4859,26 +4777,27 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.28.1", - "lightningcss-darwin-x64": "1.28.1", - "lightningcss-freebsd-x64": "1.28.1", - "lightningcss-linux-arm-gnueabihf": "1.28.1", - "lightningcss-linux-arm64-gnu": "1.28.1", - "lightningcss-linux-arm64-musl": "1.28.1", - "lightningcss-linux-x64-gnu": "1.28.1", - "lightningcss-linux-x64-musl": "1.28.1", - "lightningcss-win32-arm64-msvc": "1.28.1", - "lightningcss-win32-x64-msvc": "1.28.1" + "lightningcss-darwin-arm64": "1.29.1", + "lightningcss-darwin-x64": "1.29.1", + "lightningcss-freebsd-x64": "1.29.1", + "lightningcss-linux-arm-gnueabihf": "1.29.1", + "lightningcss-linux-arm64-gnu": "1.29.1", + "lightningcss-linux-arm64-musl": "1.29.1", + "lightningcss-linux-x64-gnu": "1.29.1", + "lightningcss-linux-x64-musl": "1.29.1", + "lightningcss-win32-arm64-msvc": "1.29.1", + "lightningcss-win32-x64-msvc": "1.29.1" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.28.1.tgz", - "integrity": "sha512-VG3vvzM0m/rguCdm76DdobNeNJnHK+jWcdkNLFWHLh9YCotRvbRIt45JxwcHlIF8TDqWStVLTdghq5NaigVCBQ==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz", + "integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==", "cpu": [ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -4892,13 +4811,14 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.28.1.tgz", - "integrity": "sha512-O7ORdislvKfMohFl4Iq7fxKqdJOuuxArcglVI3amuFO5DJ0wfV3Gxgi1JRo49slfr7OVzJQEHLG4muTWYM5cTQ==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz", + "integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==", "cpu": [ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -4912,13 +4832,14 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.28.1.tgz", - "integrity": "sha512-b7sF89B31kYYijxVcFO7l5u6UNA862YstNu+3YbLl/IQKzveL4a5cwR5cdpG+OOhErg/c2u9WCmzZoX2I5GBvw==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz", + "integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==", "cpu": [ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "freebsd" @@ -4932,13 +4853,14 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.28.1.tgz", - "integrity": "sha512-p61kXwvhUDLLzkWHjzSFfUBW/F0iy3jr3CWi3k8SKULtJEsJXTI9DqRm9EixxMSe2AMBQBt4auTYiQL4B1N51A==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz", + "integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==", "cpu": [ "arm" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -4952,13 +4874,14 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.28.1.tgz", - "integrity": "sha512-iO+fN9hOMmzfwqcG2/BgUtMKD48H2JO/SXU44fyIwpY2veb65QF5xiRrQ9l1FwIxbGK3231KBYCtAqv+xf+NsQ==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz", + "integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -4972,13 +4895,14 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.28.1.tgz", - "integrity": "sha512-dnMHeXEmCUzHHZjaDpQBYuBKcN9nPC3nPFKl70bcj5Bkn5EmkcgEqm5p035LKOgvAwk1XwLpQCML6pXmCwz0NQ==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz", + "integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==", "cpu": [ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -4992,13 +4916,14 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.28.1.tgz", - "integrity": "sha512-7vWDISaMUn+oo2TwRdf2hl/BLdPxvywv9JKEqNZB/0K7bXwV4XE9wN/C2sAp1gGuh6QBA8lpjF4JIPt3HNlCHA==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz", + "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==", "cpu": [ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -5012,13 +4937,14 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.28.1.tgz", - "integrity": "sha512-IHCu9tVGP+x5BCpA2rF3D04DBokcBza/a8AuHQU+1AiMKubuMegPwcL7RatBgK4ztFHeYnnD5NdhwhRfYMAtNA==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz", + "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==", "cpu": [ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -5032,13 +4958,14 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.28.1.tgz", - "integrity": "sha512-Erm72kHmMg/3h350PTseskz+eEGBM17Fuu79WW2Qqt0BfWSF1jHHc12lkJCWMYl5jcBHPs5yZdgNHtJ7IJS3Uw==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz", + "integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==", "cpu": [ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -5052,13 +4979,14 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.28.1.tgz", - "integrity": "sha512-ZPQtvx+uQBzrSdHH8p4H3M9Alue+x369TPZAA3b4K3d92FPhpZCuBG04+HQzspam9sVeID9mI6f3VRAs2ezaEA==", + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz", + "integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==", "cpu": [ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -5075,7 +5003,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lmdb": { "version": "2.8.5", @@ -5083,6 +5012,7 @@ "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "msgpackr": "^1.9.5", "node-addon-api": "^6.1.0", @@ -5106,7 +5036,8 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -5124,7 +5055,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5262,6 +5192,7 @@ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==", "dev": true, + "license": "MIT", "dependencies": { "detect-libc": "^2.0.1" }, @@ -5276,6 +5207,7 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -5286,19 +5218,6 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -5446,34 +5365,37 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz", "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parcel": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.12.0.tgz", - "integrity": "sha512-W+gxAq7aQ9dJIg/XLKGcRT0cvnStFAQHPaI0pvD0U2l6IVLueUAm3nwN7lkY62zZNmlvNx6jNtE4wlbS+CyqSg==", - "dev": true, - "dependencies": { - "@parcel/config-default": "2.12.0", - "@parcel/core": "2.12.0", - "@parcel/diagnostic": "2.12.0", - "@parcel/events": "2.12.0", - "@parcel/fs": "2.12.0", - "@parcel/logger": "2.12.0", - "@parcel/package-manager": "2.12.0", - "@parcel/reporter-cli": "2.12.0", - "@parcel/reporter-dev-server": "2.12.0", - "@parcel/reporter-tracer": "2.12.0", - "@parcel/utils": "2.12.0", - "chalk": "^4.1.0", - "commander": "^7.0.0", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.13.3.tgz", + "integrity": "sha512-8GrC8C7J8mwRpAlk7EJ7lwdFTbCN+dcXH2gy5AsEs9pLfzo9wvxOTx6W0fzSlvCOvZOita+8GdfYlGfEt0tRgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/config-default": "2.13.3", + "@parcel/core": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/package-manager": "2.13.3", + "@parcel/reporter-cli": "2.13.3", + "@parcel/reporter-dev-server": "2.13.3", + "@parcel/reporter-tracer": "2.13.3", + "@parcel/utils": "2.13.3", + "chalk": "^4.1.2", + "commander": "^12.1.0", "get-port": "^4.2.0" }, "bin": { "parcel": "lib/bin.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 16.0.0" }, "funding": { "type": "opencollective", @@ -5497,6 +5419,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5565,13 +5488,15 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/posthtml": { "version": "0.16.6", "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", "dev": true, + "license": "MIT", "dependencies": { "posthtml-parser": "^0.11.0", "posthtml-render": "^3.0.0" @@ -5581,15 +5506,16 @@ } }, "node_modules/posthtml-parser": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", - "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.12.1.tgz", + "integrity": "sha512-rYFmsDLfYm+4Ts2Oh4DCDSZPtdC1BLnRXAobypVzX9alj28KGl65dIFtgDY9zB57D0TC4Qxqrawuq/2et1P0GA==", "dev": true, + "license": "MIT", "dependencies": { - "htmlparser2": "^7.1.1" + "htmlparser2": "^9.0.0" }, "engines": { - "node": ">=12" + "node": ">=16" } }, "node_modules/posthtml-render": { @@ -5597,6 +5523,7 @@ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", "dev": true, + "license": "MIT", "dependencies": { "is-json": "^2.0.1" }, @@ -5604,11 +5531,101 @@ "node": ">=12" } }, + "node_modules/posthtml/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, "node_modules/posthtml/node_modules/posthtml-parser": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", "dev": true, + "license": "MIT", "dependencies": { "htmlparser2": "^7.1.1" }, @@ -5694,7 +5711,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -5746,7 +5762,8 @@ "version": "6.0.9", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/react-fast-compare": { "version": "3.2.2", @@ -5799,10 +5816,11 @@ } }, "node_modules/react-refresh": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", - "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5885,10 +5903,11 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", @@ -6164,16 +6183,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6189,19 +6198,26 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/srcset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz", + "integrity": "sha512-/P1UYbGfJVlxZag7aABNRrulEXAwCSDo7fklafOQrantuPTDmYgijJMks2zusPCVzgW9+4P69mq7w6pYuZpgxw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ssr-window": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-3.0.0.tgz", "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true, - "license": "MIT" - }, "node_modules/stream-http": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", @@ -6468,7 +6484,8 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -6709,6 +6726,7 @@ "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -6732,7 +6750,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", diff --git a/zmsadmin/phpunit.xml b/zmsadmin/phpunit.xml index 8bb8b0e9e..3c141c7ef 100644 --- a/zmsadmin/phpunit.xml +++ b/zmsadmin/phpunit.xml @@ -1,23 +1,31 @@ - - ./src + ./src + + ./vendor + ./tests + + + + + diff --git a/zmsadmin/src/Zmsadmin/Application.php b/zmsadmin/src/Zmsadmin/Application.php index 65c6a83e1..319e46fb3 100644 --- a/zmsadmin/src/Zmsadmin/Application.php +++ b/zmsadmin/src/Zmsadmin/Application.php @@ -1,4 +1,5 @@ hasId()) ? $selectedProcess->getFirstAppointment()->getStartTime()->format('H-i') : $validator->getParameter('selectedtime')->isString()->getValue(); - + $selectedScope = Helper\AppointmentFormHelper::readSelectedScope($request, $workstation, $selectedProcess, 2); $requestList = ($selectedScope && $selectedScope->hasId()) @@ -49,11 +50,11 @@ public function readResponse( $freeProcessList = ($selectedScope) ? Helper\AppointmentFormHelper::readFreeProcessList($request, $workstation, 2) : null; - + $slotTimeInMinutes = null; if ($selectedProcess && $selectedProcess->hasId()) { $slotTimeInMinutes = $selectedProcess->getAppointments()->getFirst()->getAvailability()['slotTimeInMinutes']; - } else if ($selectedScope) { + } elseif ($selectedScope) { $provider = $selectedScope->getProvider(); $slotTimeInMinutes = $provider->getSlotTimeInMinutes(); } diff --git a/zmsadmin/src/Zmsadmin/AppointmentFormButtons.php b/zmsadmin/src/Zmsadmin/AppointmentFormButtons.php index 336f28e33..bd9dacbf6 100644 --- a/zmsadmin/src/Zmsadmin/AppointmentFormButtons.php +++ b/zmsadmin/src/Zmsadmin/AppointmentFormButtons.php @@ -1,4 +1,5 @@ getParameter('selectedtime')->isString()->getValue(); $selectedProcessId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); $selectedProcess = ($selectedProcessId) ? - \App::$http->readGetResult('/process/'. $selectedProcessId .'/')->getEntity() : null; + \App::$http->readGetResult('/process/' . $selectedProcessId . '/')->getEntity() : null; $isNewAppointment = $this->isNewAppointment( $selectedProcess, @@ -50,7 +51,7 @@ public function readResponse( protected function isNewAppointment($process, $selectedDate, $selectedTime) { $selectedAppointment = new \BO\Zmsentities\Appointment(); - $selectedAppointment->setTime($selectedDate.' '.$selectedTime); + $selectedAppointment->setTime($selectedDate . ' ' . $selectedTime); return ($process) ? ($process->getFirstAppointment()->date != $selectedAppointment->date) : false; } } diff --git a/zmsadmin/src/Zmsadmin/AppointmentFormFreeProcessList.php b/zmsadmin/src/Zmsadmin/AppointmentFormFreeProcessList.php index c253026d9..303863a09 100644 --- a/zmsadmin/src/Zmsadmin/AppointmentFormFreeProcessList.php +++ b/zmsadmin/src/Zmsadmin/AppointmentFormFreeProcessList.php @@ -1,4 +1,5 @@ getParameter('selectedtime')->isString()->getValue(); $selectedProcessId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); $selectedProcess = ($selectedProcessId) ? - \App::$http->readGetResult('/process/'. $selectedProcessId .'/', [ + \App::$http->readGetResult('/process/' . $selectedProcessId . '/', [ 'gql' => Helper\GraphDefaults::getProcess() ])->getEntity() : null; $freeProcessList = Helper\AppointmentFormHelper::readFreeProcessList($request, $workstation); diff --git a/zmsadmin/src/Zmsadmin/AvailabilityConflicts.php b/zmsadmin/src/Zmsadmin/AvailabilityConflicts.php index cf41ff895..5f5cc305a 100644 --- a/zmsadmin/src/Zmsadmin/AvailabilityConflicts.php +++ b/zmsadmin/src/Zmsadmin/AvailabilityConflicts.php @@ -1,4 +1,5 @@ getAttribute('validator'); $input = $validator->getInput()->isJson()->assertValid()->getValue(); $entity = new Entity($input); - $availability = \App::$http->readPostResult('/availability/'. $args['id'] .'/', $entity)->getEntity(); + $availability = \App::$http->readPostResult('/availability/' . $args['id'] . '/', $entity)->getEntity(); $response = Render::withLastModified($response, time(), '0'); return Render::withJson($response, $availability); } diff --git a/zmsadmin/src/Zmsadmin/BaseController.php b/zmsadmin/src/Zmsadmin/BaseController.php index fa7044fef..ad7ca3031 100644 --- a/zmsadmin/src/Zmsadmin/BaseController.php +++ b/zmsadmin/src/Zmsadmin/BaseController.php @@ -1,4 +1,5 @@ addEntity($scope) + ? (new \BO\Zmsentities\Collection\ScopeList())->addEntity($scope) : (new Helper\ClusterHelper($workstation))->getScopeList(); $slotsRequired = ($scope && $scope->getPreference('appointment', 'multipleSlotsEnabled')) ? $slotsRequired : 0; diff --git a/zmsadmin/src/Zmsadmin/CalendarWeek.php b/zmsadmin/src/Zmsadmin/CalendarWeek.php index 205a28a7b..da4f72fd0 100644 --- a/zmsadmin/src/Zmsadmin/CalendarWeek.php +++ b/zmsadmin/src/Zmsadmin/CalendarWeek.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); diff --git a/zmsadmin/src/Zmsadmin/Calldisplay.php b/zmsadmin/src/Zmsadmin/Calldisplay.php index 8bbfcb0bd..d8d8d0a71 100644 --- a/zmsadmin/src/Zmsadmin/Calldisplay.php +++ b/zmsadmin/src/Zmsadmin/Calldisplay.php @@ -1,4 +1,5 @@ readGetResult('/config/')->getEntity(); $entity = \App::$http->readGetResult( - '/scope/'. $entityId .'/organisation/', + '/scope/' . $entityId . '/organisation/', ['resolveReferences' => 3] )->getEntity(); diff --git a/zmsadmin/src/Zmsadmin/Changelog.php b/zmsadmin/src/Zmsadmin/Changelog.php index fe1da93c5..efd96e3cc 100644 --- a/zmsadmin/src/Zmsadmin/Changelog.php +++ b/zmsadmin/src/Zmsadmin/Changelog.php @@ -1,4 +1,5 @@ readGetResult('/cluster/' . $entityId . '/', ['resolveReferences' => 2]) ->getEntity(); $organisation = $this->testOrganisation($entityId); - + $success = $request->getAttribute('validator')->getParameter('success')->isString()->getValue(); $department = \App::$http->readGetResult( @@ -36,14 +37,14 @@ public function readResponse( ['resolveReferences' => 2] )->getEntity(); - $callDisplayImage = \App::$http->readGetResult('/cluster/'. $entityId .'/imagedata/calldisplay/')->getEntity(); + $callDisplayImage = \App::$http->readGetResult('/cluster/' . $entityId . '/imagedata/calldisplay/')->getEntity(); $input = $request->getParsedBody(); if (is_array($input) && array_key_exists('save', $input)) { $entity = (new Entity($input))->withCleanedUpFormData(); $entity->id = $entityId; $entity = \App::$http->readPostResult('/cluster/' . $entity->id . '/', $entity)->getEntity(); if (isset($input['removeImage']) && $input['removeImage']) { - \App::$http->readDeleteResult('/cluster/'. $entityId .'/imagedata/calldisplay/'); + \App::$http->readDeleteResult('/cluster/' . $entityId . '/imagedata/calldisplay/'); } else { (new Helper\FileUploader($request, 'uploadCallDisplayImage'))->writeUploadToCluster($entityId); } diff --git a/zmsadmin/src/Zmsadmin/ClusterDelete.php b/zmsadmin/src/Zmsadmin/ClusterDelete.php index aa11ae6dc..d6ae83e74 100644 --- a/zmsadmin/src/Zmsadmin/ClusterDelete.php +++ b/zmsadmin/src/Zmsadmin/ClusterDelete.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class ClusterDelete extends BaseController { - /** * @SuppressWarnings(Param) * @return String diff --git a/zmsadmin/src/Zmsadmin/ConfigInfo.php b/zmsadmin/src/Zmsadmin/ConfigInfo.php index d3ac35fe0..d8eb9251e 100644 --- a/zmsadmin/src/Zmsadmin/ConfigInfo.php +++ b/zmsadmin/src/Zmsadmin/ConfigInfo.php @@ -1,4 +1,5 @@ readGetResult('/mailtemplates/')->getCollection(); - $mainProcessExample = ((new \BO\Zmsentities\Process)->getExample()); + $mainProcessExample = ((new \BO\Zmsentities\Process())->getExample()); $mainProcessExample->id = 987654; $dateTime = new \DateTimeImmutable("2015-10-23 08:00:00", new \DateTimeZone('Europe/Berlin')); $mainProcessExample->getFirstAppointment()->setDateTime($dateTime); $mainProcessExample->requests[] = (new \BO\Zmsentities\Request())->getExample(); - $processExample = ((new \BO\Zmsentities\Process)->getExample()); - $processExample->scope = ((new \BO\Zmsentities\Scope)->getExample()); + $processExample = ((new \BO\Zmsentities\Process())->getExample()); + $processExample->scope = ((new \BO\Zmsentities\Scope())->getExample()); $processExample2 = clone $processExample; $dateTime = new \DateTimeImmutable("2015-12-30 11:55:00", new \DateTimeZone('Europe/Berlin')); $processExample2->getFirstAppointment()->setDateTime($dateTime); diff --git a/zmsadmin/src/Zmsadmin/Counter.php b/zmsadmin/src/Zmsadmin/Counter.php index 537a8ed62..58a0d2908 100644 --- a/zmsadmin/src/Zmsadmin/Counter.php +++ b/zmsadmin/src/Zmsadmin/Counter.php @@ -1,4 +1,5 @@ getParameter('selecteddate')->isString()->getValue(); $dateTime = new \BO\Zmsentities\Helper\DateTime($selectedDate); $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 0])->getEntity(); - + try { $availabilityList = \App::$http - ->readGetResult('/scope/'. $workstation->scope['id'] . '/availability/', [ + ->readGetResult('/scope/' . $workstation->scope['id'] . '/availability/', [ 'startDate' => $selectedDate, 'endDate' => $selectedDate ], \App::CONFIG_SECURE_TOKEN) diff --git a/zmsadmin/src/Zmsadmin/CounterQueueInfo.php b/zmsadmin/src/Zmsadmin/CounterQueueInfo.php index d682ef53f..d5df825f8 100644 --- a/zmsadmin/src/Zmsadmin/CounterQueueInfo.php +++ b/zmsadmin/src/Zmsadmin/CounterQueueInfo.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $success = $request->getAttribute('validator')->getParameter('success')->isString()->getValue(); $year = Validator::value($args['year'])->isNumber()->getValue(); - $collection = \App::$http->readGetResult('/dayoff/'. $year .'/')->getCollection(); + $collection = \App::$http->readGetResult('/dayoff/' . $year . '/')->getCollection(); $dayOffList = ($collection) ? array_values($collection->sortByCustomKey('date')->getArrayCopy()) : null; $updated = false; @@ -32,7 +32,7 @@ public function readResponse( if (array_key_exists('save', (array) $input)) { $data = (array_key_exists('dayoff', $input)) ? $input['dayoff'] : []; $collection = (new Collection($data))->withTimestampFromDateformat(); - \App::$http->readPostResult('/dayoff/'. $year .'/', $collection); + \App::$http->readPostResult('/dayoff/' . $year . '/', $collection); $updated = true; return \BO\Slim\Render::redirect('dayoffByYear', ['year' => $year], [ 'success' => 'dayoff_saved' diff --git a/zmsadmin/src/Zmsadmin/Department.php b/zmsadmin/src/Zmsadmin/Department.php index 3a7cbe584..893c151f0 100644 --- a/zmsadmin/src/Zmsadmin/Department.php +++ b/zmsadmin/src/Zmsadmin/Department.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $success = $request->getAttribute('validator')->getParameter('success')->isString()->getValue(); $entityId = Validator::value($args['id'])->isNumber()->getValue(); - $entity = \App::$http->readGetResult('/department/'. $entityId .'/', ['resolveReferences' => 1])->getEntity(); + $entity = \App::$http->readGetResult('/department/' . $entityId . '/', ['resolveReferences' => 1])->getEntity(); $organisation = \App::$http->readGetResult('/department/' . $entityId . '/organisation/')->getEntity(); $input = $request->getParsedBody(); @@ -35,7 +36,7 @@ public function readResponse( $entity->id = $entityId; $entity->dayoff = $entity->getDayoffList()->withTimestampFromDateformat(); $entity = \App::$http->readPostResult( - '/department/'. $entity->id .'/', + '/department/' . $entity->id . '/', $entity )->getEntity(); return \BO\Slim\Render::redirect('department', ['id' => $entityId], [ diff --git a/zmsadmin/src/Zmsadmin/DepartmentAddCluster.php b/zmsadmin/src/Zmsadmin/DepartmentAddCluster.php index 1fd0960ee..50f1201de 100644 --- a/zmsadmin/src/Zmsadmin/DepartmentAddCluster.php +++ b/zmsadmin/src/Zmsadmin/DepartmentAddCluster.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $departmentId = Validator::value($args['departmentId'])->isNumber()->getValue(); $department = \App::$http - ->readGetResult('/department/'. $departmentId .'/', ['resolveReferences' => 2])->getEntity(); + ->readGetResult('/department/' . $departmentId . '/', ['resolveReferences' => 2])->getEntity(); $organisation = \App::$http->readGetResult('/department/' . $departmentId . '/organisation/')->getEntity(); $input = $request->getParsedBody(); @@ -30,7 +31,7 @@ public function readResponse( $entity = (new Entity($input))->withCleanedUpFormData(); $entity->scopes = (new \BO\Zmsentities\Collection\ScopeList($entity->scopes))->withUniqueScopes(); $entity = \App::$http - ->readPostResult('/department/'. $department->id .'/cluster/', $entity) + ->readPostResult('/department/' . $department->id . '/cluster/', $entity) ->getEntity(); (new Helper\FileUploader($request, 'uploadCallDisplayImage'))->writeUploadToCluster($entity->id); return \BO\Slim\Render::redirect( diff --git a/zmsadmin/src/Zmsadmin/DepartmentAddScope.php b/zmsadmin/src/Zmsadmin/DepartmentAddScope.php index ec45d32d7..e45e890ef 100644 --- a/zmsadmin/src/Zmsadmin/DepartmentAddScope.php +++ b/zmsadmin/src/Zmsadmin/DepartmentAddScope.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $departmentId = Validator::value($args['id'])->isNumber()->getValue(); $department = \App::$http - ->readGetResult('/department/'. $departmentId .'/', ['resolveReferences' => 0])->getEntity(); + ->readGetResult('/department/' . $departmentId . '/', ['resolveReferences' => 0])->getEntity(); $organisation = \App::$http->readGetResult('/department/' . $departmentId . '/organisation/')->getEntity(); $providerList = Helper\ProviderHandler::readProviderList($workstation->getScope()->getSource()); $sourceList = $this->readSourceList(); diff --git a/zmsadmin/src/Zmsadmin/DepartmentDelete.php b/zmsadmin/src/Zmsadmin/DepartmentDelete.php index 3e175b7c2..ed894deb3 100644 --- a/zmsadmin/src/Zmsadmin/DepartmentDelete.php +++ b/zmsadmin/src/Zmsadmin/DepartmentDelete.php @@ -1,4 +1,5 @@ readGetResult('/department/' . $entityId . '/')->getEntity(); $departmentName = $entity->name; - - + + \App::$http->readDeleteResult( - '/department/'. $entityId .'/' + '/department/' . $entityId . '/' )->getEntity(); return \BO\Slim\Render::redirect( 'owner_overview', diff --git a/zmsadmin/src/Zmsadmin/Exception/BadRequest.php b/zmsadmin/src/Zmsadmin/Exception/BadRequest.php index 299ddb2cb..7b90656cf 100644 --- a/zmsadmin/src/Zmsadmin/Exception/BadRequest.php +++ b/zmsadmin/src/Zmsadmin/Exception/BadRequest.php @@ -1,4 +1,5 @@ getAttribute('validator'); $selectedProcessId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); $selectedProcess = ($selectedProcessId) - ? \App::$http->readGetResult('/process/'. $selectedProcessId .'/', [ + ? \App::$http->readGetResult('/process/' . $selectedProcessId . '/', [ 'gql' => GraphDefaults::getProcess() ])->getEntity() : null; $scope = static::readSelectedScope($request, $workstation, $selectedProcess, $resolveReferences); - $scopeList = ($scope) ? (new ScopeList)->addEntity($scope) : (new ClusterHelper($workstation))->getScopeList(); - + $scopeList = ($scope) ? (new ScopeList())->addEntity($scope) : (new ClusterHelper($workstation))->getScopeList(); + $slotType = static::setSlotType($validator); $slotsRequired = static::setSlotsRequired($validator, $scope, $selectedProcess); $freeProcessList = static::readProcessListByScopeAndDate( @@ -51,12 +53,12 @@ public static function readRequestList($request, $workstation, $selectedScope = $requestList = null; if ($scope) { $requestList = \App::$http - ->readGetResult('/scope/'. $scope->getId().'/request/', [ + ->readGetResult('/scope/' . $scope->getId() . '/request/', [ 'gql' => GraphDefaults::getRequest() ]) ->getCollection(); } - return ($requestList) ? $requestList->sortByName() : new \BO\Zmsentities\Collection\RequestList; + return ($requestList) ? $requestList->sortByName() : new \BO\Zmsentities\Collection\RequestList(); } public static function readSelectedScope($request, $workstation, $selectedProcess = null, $resolveReferences = 1) @@ -75,7 +77,7 @@ public static function readSelectedScope($request, $workstation, $selectedProces } if ($selectedScopeId) { $selectedScope = \App::$http - ->readGetResult('/scope/'. $selectedScopeId .'/', [ + ->readGetResult('/scope/' . $selectedScopeId . '/', [ 'resolveReferences' => $resolveReferences, 'gql' => GraphDefaults::getScope() ]) @@ -92,7 +94,7 @@ public static function readSelectedProcess($request) $validator = $request->getAttribute('validator'); $selectedProcessId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); return ($selectedProcessId) ? - \App::$http->readGetResult('/process/'. $selectedProcessId .'/', [ + \App::$http->readGetResult('/process/' . $selectedProcessId . '/', [ 'gql' => GraphDefaults::getProcess() ])->getEntity() : null; @@ -126,7 +128,8 @@ protected static function getFreeProcessListWithSelectedProcess( $selectedProcess ) { $selectedDate = $validator->getParameter('selecteddate')->isString()->getValue(); - if ($selectedProcess && + if ( + $selectedProcess && $selectedProcess->queue->withAppointment && $selectedDate == $selectedProcess->getFirstAppointment()->toDateTime()->format('Y-m-d') ) { @@ -139,7 +142,7 @@ protected static function getFreeProcessListWithSelectedProcess( $freeProcessList = (new \BO\Zmsentities\Collection\ProcessList())->addEntity($selectedProcess); } } - + return ($freeProcessList) ? $freeProcessList : null; } @@ -165,12 +168,13 @@ protected static function setSlotsRequired($validator, \BO\Zmsentities\Scope $sc protected static function writeNotification($smsConfirmation, \BO\Zmsentities\Process $process) { - if ($smsConfirmation && + if ( + $smsConfirmation && $process->scope->hasNotificationEnabled() && $process->getFirstClient()->hasTelephone() ) { \App::$http->readPostResult( - '/process/'. $process->id .'/'. $process->authKey .'/confirmation/notification/', + '/process/' . $process->id . '/' . $process->authKey . '/confirmation/notification/', $process ); } @@ -178,12 +182,13 @@ protected static function writeNotification($smsConfirmation, \BO\Zmsentities\Pr protected static function writeMail($mailConfirmation, \BO\Zmsentities\Process $process) { - if ($mailConfirmation && + if ( + $mailConfirmation && $process->getFirstClient()->hasEmail() && $process->scope->hasEmailFrom() ) { \App::$http->readPostResult( - '/process/'. $process->id .'/'. $process->authKey .'/confirmation/mail/', + '/process/' . $process->id . '/' . $process->authKey . '/confirmation/mail/', $process ); } diff --git a/zmsadmin/src/Zmsadmin/Helper/AvailabilityCalcSlots.php b/zmsadmin/src/Zmsadmin/Helper/AvailabilityCalcSlots.php index fa60cb68e..7fa6ac6ea 100644 --- a/zmsadmin/src/Zmsadmin/Helper/AvailabilityCalcSlots.php +++ b/zmsadmin/src/Zmsadmin/Helper/AvailabilityCalcSlots.php @@ -1,4 +1,5 @@ getMaxWorkstationCount(); $data['maxSlots'] = $collection->getSummerizedSlotCount(); $data['busySlots'] = $input['busySlots']; - + return \BO\Slim\Render::withJson( $response, $data diff --git a/zmsadmin/src/Zmsadmin/Helper/Calendar.php b/zmsadmin/src/Zmsadmin/Helper/Calendar.php index 8e317124c..dc85a37c2 100644 --- a/zmsadmin/src/Zmsadmin/Helper/Calendar.php +++ b/zmsadmin/src/Zmsadmin/Helper/Calendar.php @@ -1,16 +1,18 @@ readGetResult('/cluster/'. $cluster->id .'/process/'. $this->dateTime->format('Y-m-d') . '/', ['showWeek' => 1]) + ->readGetResult('/cluster/' . $cluster->id . '/process/' . $this->dateTime->format('Y-m-d') . '/', ['showWeek' => 1]) ->getCollection(); } else { $bookedProcessList = \App::$http - ->readGetResult('/scope/'. $scope->id .'/process/'. $this->dateTime->format('Y-m-d') . '/', ['showWeek' => 1]) + ->readGetResult('/scope/' . $scope->id . '/process/' . $this->dateTime->format('Y-m-d') . '/', ['showWeek' => 1]) ->getCollection(); } @@ -134,7 +136,7 @@ public function readWeekDayListWithProcessList( $freeProcessListByDate = $freeProcessList ? $this->splitByDate($freeProcessList) : []; while ($currentDate <= $endDate) { - $day = (new Day)->setDateTime($currentDate); + $day = (new Day())->setDateTime($currentDate); $day->status = Day::DETAIL; $processList = new \BO\Zmsentities\Collection\ProcessList(); @@ -184,7 +186,7 @@ public function toProcessListByHour(ProcessList $processList) ksort($list[$hour]); } } - + ksort($list); return $list; } @@ -196,7 +198,7 @@ public function toDayListByHour(DayList $dayList) $dayKeys = array(); foreach ($dayList as $day) { $list['days'][] = $day; - $dayKey = $day->year .'-'. $day->month .'-'. $day->day; + $dayKey = $day->year . '-' . $day->month . '-' . $day->day; $dayKeys[$dayKey] = $dayKey; foreach ($day['processList'] as $hour => $processList) { $list['hours'][$hour][$dayKey] = $processList; @@ -226,7 +228,8 @@ private function splitByDate(ProcessList $processList) foreach ($processList as $process) { $dayKey = $process->getFirstAppointment()->toDateTime()->format("Y-m-d"); if (! isset($list[$dayKey])) { - $list[$dayKey] = new \BO\Zmsentities\Collection\ProcessList();; + $list[$dayKey] = new \BO\Zmsentities\Collection\ProcessList(); + ; } $list[$dayKey]->addEntity($process); diff --git a/zmsadmin/src/Zmsadmin/Helper/ClusterHelper.php b/zmsadmin/src/Zmsadmin/Helper/ClusterHelper.php index 818127a18..777e884fa 100644 --- a/zmsadmin/src/Zmsadmin/Helper/ClusterHelper.php +++ b/zmsadmin/src/Zmsadmin/Helper/ClusterHelper.php @@ -1,10 +1,12 @@ readGetResult('/scope/'. $workstation->scope['id'] .'/cluster/')->getEntity(); + static::$cluster = \App::$http->readGetResult('/scope/' . $workstation->scope['id'] . '/cluster/')->getEntity(); } public static function getEntity() @@ -34,13 +36,13 @@ public static function getProcessList($selectedDate) if (static::isClusterEnabled()) { $processList = \App::$http ->readGetResult( - '/cluster/'. static::$cluster->id .'/process/'. $selectedDate .'/', + '/cluster/' . static::$cluster->id . '/process/' . $selectedDate . '/', ['resolveReferences' => 1, 'gql' => GraphDefaults::getProcess()] ); } else { $processList = \App::$http ->readGetResult( - '/scope/'. static::$workstation->scope['id'] .'/process/'. $selectedDate .'/', + '/scope/' . static::$workstation->scope['id'] . '/process/' . $selectedDate . '/', ['resolveReferences' => 1, 'gql' => GraphDefaults::getProcess()] ); } @@ -59,7 +61,7 @@ public static function getNextProcess($excludedIds) } if (static::isClusterEnabled()) { $nextProcess = \App::$http->readGetResult( - '/cluster/'. static::$cluster['id'] .'/queue/next/', + '/cluster/' . static::$cluster['id'] . '/queue/next/', [ 'exclude' => $excludedIds, 'allowClusterWideCall' => \App::$allowClusterWideCall @@ -67,12 +69,12 @@ public static function getNextProcess($excludedIds) )->getEntity(); } else { $nextProcess = \App::$http->readGetResult( - '/scope/'. static::$workstation->scope['id'] .'/queue/next/', + '/scope/' . static::$workstation->scope['id'] . '/queue/next/', ['exclude' => $excludedIds] )->getEntity(); } - - + + return ($nextProcess) ? $nextProcess : new \BO\Zmsentities\Process(); } diff --git a/zmsadmin/src/Zmsadmin/Helper/DialogHandler.php b/zmsadmin/src/Zmsadmin/Helper/DialogHandler.php index ef3903548..4613b541b 100644 --- a/zmsadmin/src/Zmsadmin/Helper/DialogHandler.php +++ b/zmsadmin/src/Zmsadmin/Helper/DialogHandler.php @@ -1,14 +1,15 @@ readGetResult('/process/'. $parameter['id'] .'/'); + $result = \App::$http->readGetResult('/process/' . $parameter['id'] . '/'); if ($result) { $process = $result->getEntity(); $parameter['settings']['isWithAppointment'] = $process->isWithAppointment(); @@ -40,7 +41,7 @@ public function readResponse( return \BO\Slim\Render::withHtml( $response, - 'element/helper/dialog/'. $template .'.twig', + 'element/helper/dialog/' . $template . '.twig', $parameter ); } diff --git a/zmsadmin/src/Zmsadmin/Helper/FileUploader.php b/zmsadmin/src/Zmsadmin/Helper/FileUploader.php index 706be8d44..02a9b133f 100644 --- a/zmsadmin/src/Zmsadmin/Helper/FileUploader.php +++ b/zmsadmin/src/Zmsadmin/Helper/FileUploader.php @@ -1,13 +1,15 @@ imageData = \App::$http->readPostResult( - '/scope/'. $entityId .'/imagedata/calldisplay/', + '/scope/' . $entityId . '/imagedata/calldisplay/', $this->imageData )->getEntity(); return $this; @@ -41,7 +43,7 @@ public function writeUploadToScope($entityId) public function writeUploadToCluster($entityId) { $this->imageData = \App::$http->readPostResult( - '/cluster/'. $entityId .'/imagedata/calldisplay/', + '/cluster/' . $entityId . '/imagedata/calldisplay/', $this->imageData )->getEntity(); return $this; diff --git a/zmsadmin/src/Zmsadmin/Helper/GraphDefaults.php b/zmsadmin/src/Zmsadmin/Helper/GraphDefaults.php index 9900a0366..d62907101 100644 --- a/zmsadmin/src/Zmsadmin/Helper/GraphDefaults.php +++ b/zmsadmin/src/Zmsadmin/Helper/GraphDefaults.php @@ -14,7 +14,7 @@ protected static function defaultFormat($string) */ public static function getWorkstation() { - $default =<<< EOS + $default = <<< EOS { id, name, @@ -48,7 +48,7 @@ public static function getWorkstation() public static function getWorkstationWithProvider() { - $default =<<< EOS + $default = <<< EOS { id, name, @@ -93,7 +93,7 @@ public static function getWorkstationWithProvider() */ public static function getAvailability() { - $default =<<< EOS + $default = <<< EOS { id, weekday, @@ -129,7 +129,7 @@ public static function getAvailability() */ public static function getAvailabilityTimes() { - $default =<<< EOS + $default = <<< EOS { weekday, repeat @@ -153,7 +153,7 @@ public static function getAvailabilityTimes() */ public static function getScope() { - $default =<<< EOS + $default = <<< EOS { id source @@ -185,7 +185,7 @@ public static function getScope() */ public static function getDepartment() { - $default =<<< EOS + $default = <<< EOS { id name @@ -201,7 +201,7 @@ public static function getDepartment() */ public static function getRequest() { - $default =<<< EOS + $default = <<< EOS { id name @@ -218,13 +218,13 @@ public static function getRequest() EOS; return static::defaultFormat($default); } - + /** * free process list reduced response data */ public static function getFreeProcessList() { - $default =<<< EOS + $default = <<< EOS { scope { id @@ -254,7 +254,7 @@ public static function getFreeProcessList() */ public static function getCalendar() { - $default =<<< EOS + $default = <<< EOS { firstDay lastDay @@ -289,7 +289,7 @@ public static function getCalendar() */ public static function getProcess() { - $default =<<< EOS + $default = <<< EOS { amendment customTextfield @@ -363,7 +363,7 @@ public static function getProcess() */ public static function getPickup() { - $default =<<< EOS + $default = <<< EOS { amendment customTextfield @@ -394,7 +394,7 @@ public static function getPickup() */ public static function getFreeProcess() { - $default =<<< EOS + $default = <<< EOS { appointments{ date diff --git a/zmsadmin/src/Zmsadmin/Helper/LoginForm.php b/zmsadmin/src/Zmsadmin/Helper/LoginForm.php index 041295800..d46bde120 100644 --- a/zmsadmin/src/Zmsadmin/Helper/LoginForm.php +++ b/zmsadmin/src/Zmsadmin/Helper/LoginForm.php @@ -1,17 +1,18 @@ templates[$templateName]; } - public function getTemplates() { + public function getTemplates() + { return $this->templates; } - public function setTemplates($templates) { + public function setTemplates($templates) + { $this->templates = $templates; } - -} \ No newline at end of file +} diff --git a/zmsadmin/src/Zmsadmin/Helper/MailTemplateCreateCustomization.php b/zmsadmin/src/Zmsadmin/Helper/MailTemplateCreateCustomization.php index 7ada7455a..03cb7e7a9 100644 --- a/zmsadmin/src/Zmsadmin/Helper/MailTemplateCreateCustomization.php +++ b/zmsadmin/src/Zmsadmin/Helper/MailTemplateCreateCustomization.php @@ -1,4 +1,5 @@ getAttribute('validator'); $input = $validator->getInput()->isJson()->getValue(); - + $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $providerId = $workstation->scope['provider']['id']; if (isset($args['id']) && !empty($args['id'])) { $scope = \App::$http - ->readGetResult('/scope/'. $args['id'] .'/', ['resolveReferences' => 1]) + ->readGetResult('/scope/' . $args['id'] . '/', ['resolveReferences' => 1]) ->getEntity(); $providerId = $scope->provider->id; diff --git a/zmsadmin/src/Zmsadmin/Helper/MailTemplateDeleteCustomization.php b/zmsadmin/src/Zmsadmin/Helper/MailTemplateDeleteCustomization.php index 6a0c41cfa..218324175 100644 --- a/zmsadmin/src/Zmsadmin/Helper/MailTemplateDeleteCustomization.php +++ b/zmsadmin/src/Zmsadmin/Helper/MailTemplateDeleteCustomization.php @@ -1,4 +1,5 @@ getAttribute('validator'); $input = $validator->getInput()->isJson()->getValue(); - + $result = \App::$http->readDeleteResult('/mailtemplates/' . $input['templateId'] . '/'); return \BO\Slim\Render::withJson( diff --git a/zmsadmin/src/Zmsadmin/Helper/MailTemplateDummyPreview.php b/zmsadmin/src/Zmsadmin/Helper/MailTemplateDummyPreview.php index b943e660c..3d39fb366 100644 --- a/zmsadmin/src/Zmsadmin/Helper/MailTemplateDummyPreview.php +++ b/zmsadmin/src/Zmsadmin/Helper/MailTemplateDummyPreview.php @@ -7,8 +7,8 @@ use Twig\Error\RuntimeError; use Twig\Error\SyntaxError; - class MailTemplateDummyPreview extends BaseController - { +class MailTemplateDummyPreview extends BaseController +{ public function readResponse( \Psr\Http\Message\RequestInterface $request, \Psr\Http\Message\ResponseInterface $response, @@ -20,7 +20,7 @@ public function readResponse( $providerId = $workstation->scope['provider']['id']; $result = \App::$http->readGetResult("/preview-mailtemplates/$mailStatus/$providerId/", ['resolveReferences' => 0]); $data = json_decode($result->getResponse()->getBody()->getContents())->data; - + try { // Twig-Template rendern return \BO\Slim\Render::withHtml( @@ -43,4 +43,4 @@ public function readResponse( ); } } - } \ No newline at end of file +} diff --git a/zmsadmin/src/Zmsadmin/Helper/MailTemplateHandler.php b/zmsadmin/src/Zmsadmin/Helper/MailTemplateHandler.php index 50a686050..733b54fdf 100644 --- a/zmsadmin/src/Zmsadmin/Helper/MailTemplateHandler.php +++ b/zmsadmin/src/Zmsadmin/Helper/MailTemplateHandler.php @@ -1,4 +1,5 @@ getAttribute('validator'); $input = $validator->getInput()->isJson()->getValue(); - + $template = \App::$http->readPostResult('/mailtemplates/', array( "templateId" => $input['templateId'], "templateContent" => $input['templateContent'] diff --git a/zmsadmin/src/Zmsadmin/Helper/MailTemplatePreviewMail.php b/zmsadmin/src/Zmsadmin/Helper/MailTemplatePreviewMail.php index 6f88abe82..c22315b5b 100644 --- a/zmsadmin/src/Zmsadmin/Helper/MailTemplatePreviewMail.php +++ b/zmsadmin/src/Zmsadmin/Helper/MailTemplatePreviewMail.php @@ -11,8 +11,8 @@ use Symfony\Bridge\Twig\Extension\TranslationExtension; use Twig\Extra\Intl\IntlExtension; - class MailTemplatePreviewMail extends BaseController - { +class MailTemplatePreviewMail extends BaseController +{ public function readResponse( \Psr\Http\Message\RequestInterface $request, \Psr\Http\Message\ResponseInterface $response, @@ -22,8 +22,8 @@ public function readResponse( $mailStatus = $args['mailStatus']; $validator = $request->getAttribute('validator'); $input = $validator->getInput()->isJson()->getValue(); - - $mainProcessExample = ((new \BO\Zmsentities\Process)->getExample()); + + $mainProcessExample = ((new \BO\Zmsentities\Process())->getExample()); $mainProcessExample->id = 987654; $dateTime = new \DateTimeImmutable("2015-10-23 08:00:00", new \DateTimeZone('Europe/Berlin')); $mainProcessExample->getFirstAppointment()->setDateTime($dateTime); @@ -44,12 +44,11 @@ public function readResponse( $mail = (new \BO\Zmsentities\Mail()) ->setTemplateProvider($templateProvider) ->toResolvedEntity($mainProcessExample, $config, $mailStatus); - } - catch( \Exception $e) { + } catch (\Exception $e) { return \BO\Slim\Render::withJson( $response, array( - 'error'=>$e->getMessage() + 'error' => $e->getMessage() ) ); } @@ -57,10 +56,9 @@ public function readResponse( return \BO\Slim\Render::withJson( $response, array( - 'previewHtml'=>$mail->getHtmlPart(), - 'previewPlain'=>$mail->getPlainPart() + 'previewHtml' => $mail->getHtmlPart(), + 'previewPlain' => $mail->getPlainPart() ) ); - } - } \ No newline at end of file +} diff --git a/zmsadmin/src/Zmsadmin/Helper/ProcessFinishedHelper.php b/zmsadmin/src/Zmsadmin/Helper/ProcessFinishedHelper.php index 4fe172526..bae6b4749 100644 --- a/zmsadmin/src/Zmsadmin/Helper/ProcessFinishedHelper.php +++ b/zmsadmin/src/Zmsadmin/Helper/ProcessFinishedHelper.php @@ -1,9 +1,11 @@ readGetResult( - '/provider/'. $source .'/', + '/provider/' . $source . '/', array( 'isAssigned' => true ) @@ -50,7 +51,7 @@ protected static function readProviderAssigned($source) protected static function readProviderNotAssigned($source) { $providerNotAssigned = \App::$http->readGetResult( - '/provider/'. $source .'/', + '/provider/' . $source . '/', array( 'isAssigned' => false ) diff --git a/zmsadmin/src/Zmsadmin/Helper/QueueListHelper.php b/zmsadmin/src/Zmsadmin/Helper/QueueListHelper.php index 856e1c8f2..4bfc75b00 100644 --- a/zmsadmin/src/Zmsadmin/Helper/QueueListHelper.php +++ b/zmsadmin/src/Zmsadmin/Helper/QueueListHelper.php @@ -1,15 +1,16 @@ 0, 'waitingClientsEffective' => 0 ); - $scope = \App::$http->readGetResult('/scope/'. $workstation->scope['id'] .'/workstationcount/')->getEntity(); + $scope = \App::$http->readGetResult('/scope/' . $workstation->scope['id'] . '/workstationcount/')->getEntity(); $clusterHelper = (new ClusterHelper($workstation)); - + $infoData['workstationGhostCount'] = $scope->status['queue']['ghostWorkstationCount']; $infoData['workstationList'] = ($clusterHelper->isClusterEnabled()) ? static::getWorkstationsByCluster($clusterHelper->getEntity()->getId()) : @@ -56,7 +58,7 @@ public static function getInfoBoxData(\BO\Zmsentities\Workstation $workstation, count($withAppointment) ? array_sum($withAppointment) / count($withAppointment) : 0; $infoData['averageWaitingTimeWithoutAppointment'] = count($withoutAppointment) ? array_sum($withoutAppointment) / count($withoutAppointment) : 0; - + $infoData['countCurrentlyProcessing'] = count($queueListHelper->getFullList()->withStatus(['called', 'processing'])); if ($queueListHelper->getWaitingCount()) { @@ -68,12 +70,13 @@ public static function getInfoBoxData(\BO\Zmsentities\Workstation $workstation, return $infoData; } - public static function stringTimeToMinute($time) { + public static function stringTimeToMinute($time) + { $timeArray = explode(':', $time); if (count($timeArray) === 3) { $minutes = (int) $timeArray[0] * 60 * 24 + (int) $timeArray[1] * 60 + (int) $timeArray[2]; - } else if (count($timeArray) === 2) { + } elseif (count($timeArray) === 2) { $minutes = (int) $timeArray[0] * 60 + (int) $timeArray[1]; } else { $minutes = (int) $timeArray[0]; @@ -86,14 +89,14 @@ public static function stringTimeToMinute($time) { public static function getWorkstationsByScope($scopeId) { return \App::$http - ->readGetResult('/scope/'. $scopeId . '/workstation/', ['resolveReferences' => 1]) + ->readGetResult('/scope/' . $scopeId . '/workstation/', ['resolveReferences' => 1]) ->getCollection(); } public static function getWorkstationsByCluster($clusterId) { return \App::$http - ->readGetResult('/cluster/'. $clusterId . '/workstation/', ['resolveReferences' => 1]) + ->readGetResult('/cluster/' . $clusterId . '/workstation/', ['resolveReferences' => 1]) ->getCollection(); } diff --git a/zmsadmin/src/Zmsadmin/Index.php b/zmsadmin/src/Zmsadmin/Index.php index fb8023de4..a359c81b0 100644 --- a/zmsadmin/src/Zmsadmin/Index.php +++ b/zmsadmin/src/Zmsadmin/Index.php @@ -1,4 +1,5 @@ template) { \BO\Zmsclient\Auth::setKey($exception->data['authkey'], time() + \App::SESSION_DURATION); throw $exception; - } elseif ('' != $exception->template + } elseif ( + '' != $exception->template && \App::$slim->getContainer()->get('view')->getLoader()->exists($template) ) { $exceptionData = [ @@ -104,7 +106,8 @@ protected function getProviderList($config) $allowedProviderList = explode(',', $config->getPreference('oidc', 'provider')); $oidcproviderlist = []; foreach (\BO\Slim\Middleware\OAuthMiddleware::$authInstances as $provider => $authInstance) { - if (0 < count($allowedProviderList) && + if ( + 0 < count($allowedProviderList) && class_exists($authInstance) && in_array($provider, $allowedProviderList) ) { diff --git a/zmsadmin/src/Zmsadmin/Logout.php b/zmsadmin/src/Zmsadmin/Logout.php index 9a8486e97..1052807e1 100644 --- a/zmsadmin/src/Zmsadmin/Logout.php +++ b/zmsadmin/src/Zmsadmin/Logout.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 0])->getEntity(); - \App::$http->readDeleteResult('/workstation/login/'. $workstation->useraccount['id'] .'/')->getEntity(); + \App::$http->readDeleteResult('/workstation/login/' . $workstation->useraccount['id'] . '/')->getEntity(); } catch (\BO\Zmsclient\Exception $exception) { if ("BO\Zmsentities\Exception\UseraccountMissingLogin" !== $exception->template) { throw $exception; diff --git a/zmsadmin/src/Zmsadmin/LogoutBySuperuser.php b/zmsadmin/src/Zmsadmin/LogoutBySuperuser.php index cca78efb1..44518d97c 100644 --- a/zmsadmin/src/Zmsadmin/LogoutBySuperuser.php +++ b/zmsadmin/src/Zmsadmin/LogoutBySuperuser.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 0])->getEntity(); $workstationToLogout = $validator->getParameter('workstation')->isArray()->getValue(); - if (array_key_exists('useraccount', $workstationToLogout) && + if ( + array_key_exists('useraccount', $workstationToLogout) && isset($workstationToLogout['useraccount']['id']) && $workstation->hasSuperUseraccount() ) { - \App::$http->readDeleteResult('/workstation/login/'. $workstationToLogout['useraccount']['id'] .'/'); + \App::$http->readDeleteResult('/workstation/login/' . $workstationToLogout['useraccount']['id'] . '/'); } $departmentId = Validator::value($args['id'])->isNumber()->getValue(); diff --git a/zmsadmin/src/Zmsadmin/Mail.php b/zmsadmin/src/Zmsadmin/Mail.php index f1a231aee..cd22fd2d5 100644 --- a/zmsadmin/src/Zmsadmin/Mail.php +++ b/zmsadmin/src/Zmsadmin/Mail.php @@ -1,4 +1,5 @@ getParsedBody(); $process = ($selectedProcessId) ? - \App::$http->readGetResult('/process/'. $selectedProcessId .'/')->getEntity() : + \App::$http->readGetResult('/process/' . $selectedProcessId . '/')->getEntity() : null; if (array_key_exists('submit', (array)$input) && 'form' == $input['submit']) { $formResponse = $this->writeValidatedMail($process, $department); @@ -80,7 +80,7 @@ private function writeValidatedMail($process, $department) ->isBiggerThan(2, "Es muss eine aussagekräftige Nachricht eingegeben werden"); $collection = Validator::collection($collection); if (! $collection->hasFailed()) { - $mail = (new Entity)->toCustomMessageEntity($process, $collection->getValues()); + $mail = (new Entity())->toCustomMessageEntity($process, $collection->getValues()); $mail = \App::$http->readPostResult('/mails/', $mail->withDepartment($department))->getEntity(); return $mail; } diff --git a/zmsadmin/src/Zmsadmin/MailTemplates.php b/zmsadmin/src/Zmsadmin/MailTemplates.php index 6a06977bc..da9c5c5d5 100644 --- a/zmsadmin/src/Zmsadmin/MailTemplates.php +++ b/zmsadmin/src/Zmsadmin/MailTemplates.php @@ -1,4 +1,5 @@ readGetResult('/scope/'. $args['scopeId'] .'/', ['resolveReferences' => 1]) + ->readGetResult('/scope/' . $args['scopeId'] . '/', ['resolveReferences' => 1]) ->getEntity(); $scopeName = $scope->contact->name; @@ -37,8 +38,8 @@ public function readResponse( $config = \App::$http->readGetResult('/config/')->getEntity(); - $mergedMailTemplates = \App::$http->readGetResult('/merged-mailtemplates/'.$providerId.'/')->getCollection(); - forEach($mergedMailTemplates as $template) { + $mergedMailTemplates = \App::$http->readGetResult('/merged-mailtemplates/' . $providerId . '/')->getCollection(); + foreach ($mergedMailTemplates as $template) { if ($template['provider']) { $template->isCustom = true; } @@ -53,14 +54,14 @@ public function readResponse( $mergedMailTemplates->prioritizeByName($priorityNames); - $mainProcessExample = ((new \BO\Zmsentities\Process)->getExample()); + $mainProcessExample = ((new \BO\Zmsentities\Process())->getExample()); $mainProcessExample->id = 987654; $dateTime = new \DateTimeImmutable("2015-10-23 08:00:00", new \DateTimeZone('Europe/Berlin')); $mainProcessExample->getFirstAppointment()->setDateTime($dateTime); $mainProcessExample->requests[] = (new \BO\Zmsentities\Request())->getExample(); - $processExample = ((new \BO\Zmsentities\Process)->getExample()); - $processExample->scope = ((new \BO\Zmsentities\Scope)->getExample()); + $processExample = ((new \BO\Zmsentities\Process())->getExample()); + $processExample->scope = ((new \BO\Zmsentities\Scope())->getExample()); $processExample2 = clone $processExample; $dateTime = new \DateTimeImmutable("2015-12-30 11:55:00", new \DateTimeZone('Europe/Berlin')); $processExample2->getFirstAppointment()->setDateTime($dateTime); diff --git a/zmsadmin/src/Zmsadmin/Notification.php b/zmsadmin/src/Zmsadmin/Notification.php index 8ce6a8fec..9265ad662 100644 --- a/zmsadmin/src/Zmsadmin/Notification.php +++ b/zmsadmin/src/Zmsadmin/Notification.php @@ -1,4 +1,5 @@ readGetResult('/config/')->getEntity(); $input = $request->getParsedBody(); $process = ($selectedProcessId) ? - \App::$http->readGetResult('/process/'. $selectedProcessId .'/')->getEntity() : + \App::$http->readGetResult('/process/' . $selectedProcessId . '/')->getEntity() : null; $formResponse = $this->getValidatedResponse($input, $process, $config, $department); if ($formResponse instanceof Entity) { @@ -87,7 +87,7 @@ protected function getValidatedResponse($input, $process, $config, $department) protected function getReminderNotification($process, $config, $department) { - $notification = (new Entity)->toResolvedEntity($process, $config, $department, 'reminder'); + $notification = (new Entity())->toResolvedEntity($process, $config, $department, 'reminder'); // maybe should be $notification->department->hasNotificationReminderEnabled() return ($notification->department->hasNotificationEnabled()) ? \App::$http->readPostResult('/notification/', $notification)->getEntity() @@ -101,7 +101,7 @@ protected function getCustomNotification($process, $department) ->isBiggerThan(2, "Es muss eine aussagekräftige Nachricht eingegeben werden"); $collection = Validator::collection($collection); if (! $collection->hasFailed()) { - $notification = (new Entity)->toCustomMessageEntity($process, $collection->getValues(), $department); + $notification = (new Entity())->toCustomMessageEntity($process, $collection->getValues(), $department); return ($notification->department->hasNotificationEnabled()) ? \App::$http->readPostResult('/notification/', $notification)->getEntity() : $notification; diff --git a/zmsadmin/src/Zmsadmin/Oidc.php b/zmsadmin/src/Zmsadmin/Oidc.php index 8ee8fb657..40a396bfc 100644 --- a/zmsadmin/src/Zmsadmin/Oidc.php +++ b/zmsadmin/src/Zmsadmin/Oidc.php @@ -1,4 +1,5 @@ getParam("state"); $authKey = \BO\Zmsclient\Auth::getKey(); - + \App::$log->info('OIDC state validation', [ 'event' => 'oauth_state_validation', 'timestamp' => date('c'), @@ -30,12 +31,12 @@ public function readResponse( 'application' => 'zmsadmin', 'state_match' => ($state == $authKey) ]); - + if ($state == $authKey) { try { $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $username = $workstation->getUseraccount()->id . '@' . \BO\Zmsclient\Auth::getOidcProvider(); - + \App::$log->info('OIDC workstation access', [ 'event' => 'oauth_workstation_access', 'timestamp' => date('c'), @@ -44,9 +45,9 @@ public function readResponse( 'username' => $username, 'workstation_id' => $workstation->id ?? 'unknown' ]); - + $departmentCount = $workstation->getUseraccount()->getDepartmentList()->count(); - + // Log department check with username \App::$log->info('OIDC department check', [ 'event' => 'oauth_department_check', @@ -57,7 +58,7 @@ public function readResponse( 'department_count' => $departmentCount, 'has_departments' => ($departmentCount > 0) ]); - + if (0 == $departmentCount) { return \BO\Slim\Render::redirect( 'index', @@ -74,7 +75,7 @@ public function readResponse( ); } catch (\Exception $e) { // Log workstation access error - \App::$log->error('OIDC workstation error', [ + \App::$log->error('OIDC workstation error', [ 'event' => 'oauth_workstation_error', 'timestamp' => date('c'), 'provider' => \BO\Zmsclient\Auth::getOidcProvider(), @@ -85,7 +86,7 @@ public function readResponse( throw $e; } } - + // Log invalid state \App::$log->error('OIDC invalid state', [ 'event' => 'oauth_invalid_state', @@ -93,9 +94,8 @@ public function readResponse( 'provider' => \BO\Zmsclient\Auth::getOidcProvider(), 'application' => 'zmsadmin' ]); - + throw new \BO\Slim\Exception\OAuthInvalid(); - } catch (\Exception $e) { \App::$log->error('OIDC error', [ 'event' => 'oauth_error', diff --git a/zmsadmin/src/Zmsadmin/Organisation.php b/zmsadmin/src/Zmsadmin/Organisation.php index e303bdba1..96eff437b 100644 --- a/zmsadmin/src/Zmsadmin/Organisation.php +++ b/zmsadmin/src/Zmsadmin/Organisation.php @@ -1,4 +1,5 @@ getAttribute('validator')->getParameter('success')->isString()->getValue(); $entityId = Validator::value($args['id'])->isNumber()->getValue(); $entity = \App::$http->readGetResult( - '/organisation/'. $entityId .'/', + '/organisation/' . $entityId . '/', ['resolveReferences' => 1] )->getEntity(); @@ -36,7 +37,7 @@ public function readResponse( if (array_key_exists('save', (array) $input)) { $entity = (new Entity($input))->withCleanedUpFormData(); $entity->id = $entityId; - $entity = \App::$http->readPostResult('/organisation/'. $entity->id .'/', $entity)->getEntity(); + $entity = \App::$http->readPostResult('/organisation/' . $entity->id . '/', $entity)->getEntity(); return \BO\Slim\Render::redirect( 'organisation', [ diff --git a/zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php b/zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php index e3ddd2f82..8b2ece052 100644 --- a/zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php +++ b/zmsadmin/src/Zmsadmin/OrganisationAddDepartment.php @@ -1,4 +1,5 @@ withCleanupDayoffs($input); $entity = (new Entity($input))->withCleanedUpFormData(); $entity->dayoff = $entity->getDayoffList()->withTimestampFromDateformat(); - $department = \App::$http->readPostResult('/organisation/'. $organisationId .'/department/', $entity) + $department = \App::$http->readPostResult('/organisation/' . $organisationId . '/department/', $entity) ->getEntity(); return \BO\Slim\Render::redirect( 'department', diff --git a/zmsadmin/src/Zmsadmin/OrganisationDelete.php b/zmsadmin/src/Zmsadmin/OrganisationDelete.php index f5146a26a..a863d5936 100644 --- a/zmsadmin/src/Zmsadmin/OrganisationDelete.php +++ b/zmsadmin/src/Zmsadmin/OrganisationDelete.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class OrganisationDelete extends BaseController { - /** * * @return String diff --git a/zmsadmin/src/Zmsadmin/Owner.php b/zmsadmin/src/Zmsadmin/Owner.php index 5b18a3289..510cc9d32 100644 --- a/zmsadmin/src/Zmsadmin/Owner.php +++ b/zmsadmin/src/Zmsadmin/Owner.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Zmsentities\Owner as Entity; diff --git a/zmsadmin/src/Zmsadmin/OwnerAdd.php b/zmsadmin/src/Zmsadmin/OwnerAdd.php index 6c8508e9f..949670f06 100644 --- a/zmsadmin/src/Zmsadmin/OwnerAdd.php +++ b/zmsadmin/src/Zmsadmin/OwnerAdd.php @@ -1,4 +1,5 @@ isNumber()->getValue(); if (is_array($input) && array_key_exists('save', $input)) { $entity = (new Entity($input))->withCleanedUpFormData(); - $entity = \App::$http->readPostResult('/owner/'. $parentId .'/organisation/', $entity) + $entity = \App::$http->readPostResult('/owner/' . $parentId . '/organisation/', $entity) ->getEntity(); return \BO\Slim\Render::redirect( 'organisation', diff --git a/zmsadmin/src/Zmsadmin/OwnerDelete.php b/zmsadmin/src/Zmsadmin/OwnerDelete.php index 6af234ab3..10542b1f7 100644 --- a/zmsadmin/src/Zmsadmin/OwnerDelete.php +++ b/zmsadmin/src/Zmsadmin/OwnerDelete.php @@ -1,4 +1,5 @@ isNumber()->getValue(); - \App::$http->readDeleteResult('/owner/'. $entityId .'/')->getEntity(); + \App::$http->readDeleteResult('/owner/' . $entityId . '/')->getEntity(); return \BO\Slim\Render::redirect( 'owner_overview', array(), diff --git a/zmsadmin/src/Zmsadmin/OwnerOverview.php b/zmsadmin/src/Zmsadmin/OwnerOverview.php index 8cc570b9e..fada84b50 100644 --- a/zmsadmin/src/Zmsadmin/OwnerOverview.php +++ b/zmsadmin/src/Zmsadmin/OwnerOverview.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $ownerList = \App::$http->readGetResult('/owner/', array('resolveReferences' => 4))->getCollection(); $success = $request->getAttribute('validator')->getParameter('success')->isString()->setDefault('')->getValue(); - $scopeName = $request->getAttribute('validator')->getParameter('scopeName')->isString()->setDefault('')->getValue(); - $departmentName = $request->getAttribute('validator')->getParameter('departmentName')->isString()->setDefault('')->getValue(); + $scopeName = $request->getAttribute('validator')->getParameter('scopeName')->isString()->setDefault('')->getValue(); + $departmentName = $request->getAttribute('validator')->getParameter('departmentName')->isString()->setDefault('')->getValue(); return \BO\Slim\Render::withHtml( $response, 'page/ownerOverview.twig', diff --git a/zmsadmin/src/Zmsadmin/Pickup.php b/zmsadmin/src/Zmsadmin/Pickup.php index 77a4a9d6e..e57c198aa 100644 --- a/zmsadmin/src/Zmsadmin/Pickup.php +++ b/zmsadmin/src/Zmsadmin/Pickup.php @@ -1,4 +1,5 @@ readGetResult('/process/'. $inputNumber .'/') + ->readGetResult('/process/' . $inputNumber . '/') ->getEntity(); $workstation->testMatchingProcessScope($workstation->getScopeList(), $process); } else { $process = \App::$http - ->readGetResult('/scope/'. $workstation->scope['id'] .'/queue/'. $inputNumber .'/') + ->readGetResult('/scope/' . $workstation->scope['id'] . '/queue/' . $inputNumber . '/') ->getEntity(); } } catch (\BO\Zmsclient\Exception $exception) { diff --git a/zmsadmin/src/Zmsadmin/PickupCallCancel.php b/zmsadmin/src/Zmsadmin/PickupCallCancel.php index 8833d0d31..24def9478 100644 --- a/zmsadmin/src/Zmsadmin/PickupCallCancel.php +++ b/zmsadmin/src/Zmsadmin/PickupCallCancel.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $processId = Validator::value($args['id'])->isNumber()->getValue(); $deleteList = Validator::param('list')->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); $process->status = 'finished'; \App::$http->readDeleteResult('/workstation/process/'); $processArchived = \App::$http diff --git a/zmsadmin/src/Zmsadmin/PickupHandheld.php b/zmsadmin/src/Zmsadmin/PickupHandheld.php index 5a40c72b4..b6ed3f22f 100644 --- a/zmsadmin/src/Zmsadmin/PickupHandheld.php +++ b/zmsadmin/src/Zmsadmin/PickupHandheld.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); - $department = \App::$http->readGetResult('/scope/'. $workstation->scope['id'] .'/department/')->getEntity(); + $department = \App::$http->readGetResult('/scope/' . $workstation->scope['id'] . '/department/')->getEntity(); return \BO\Slim\Render::withHtml( $response, diff --git a/zmsadmin/src/Zmsadmin/PickupMail.php b/zmsadmin/src/Zmsadmin/PickupMail.php index a50ce603a..1ef54965f 100644 --- a/zmsadmin/src/Zmsadmin/PickupMail.php +++ b/zmsadmin/src/Zmsadmin/PickupMail.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -17,7 +18,6 @@ */ class PickupMail extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -30,17 +30,17 @@ public function readResponse( $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $validator = $request->getAttribute('validator'); $processId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/', ['resolveReferences' => 1])->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/', ['resolveReferences' => 1])->getEntity(); // disabled 2021-01-20 by TK because in ZMS1 it is allowed to send pickup mailings // to processes from another scope in department //$workstation->testMatchingProcessScope($workstation->getScopeList(), $process); $config = \App::$http->readGetResult('/config/')->getEntity(); - $department = \App::$http->readGetResult('/scope/'. $workstation->scope['id'] .'/department/')->getEntity(); + $department = \App::$http->readGetResult('/scope/' . $workstation->scope['id'] . '/department/')->getEntity(); if (! $process->scope->hasEmailFrom()) { throw new \BO\Zmsadmin\Exception\MailFromMissing(); } - $mail = (new Entity)->toResolvedEntity($process, $config, 'pickup'); + $mail = (new Entity())->toResolvedEntity($process, $config, 'pickup'); $mail = \App::$http->readPostResult('/mails/', $mail->withDepartment($department))->getEntity(); return \BO\Slim\Render::withHtml( diff --git a/zmsadmin/src/Zmsadmin/PickupNotification.php b/zmsadmin/src/Zmsadmin/PickupNotification.php index f55b212a3..daa1e6b7e 100644 --- a/zmsadmin/src/Zmsadmin/PickupNotification.php +++ b/zmsadmin/src/Zmsadmin/PickupNotification.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -17,7 +18,6 @@ */ class PickupNotification extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -30,18 +30,18 @@ public function readResponse( $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $validator = $request->getAttribute('validator'); $processId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); // disabled 2021-01-20 by TK because in ZMS1 it is allowed to send pickup notifications // to processes from another scope in department //$workstation->testMatchingProcessScope($workstation->getScopeList(), $process); - $department = \App::$http->readGetResult('/scope/'. $workstation->scope['id'] .'/department/')->getEntity(); + $department = \App::$http->readGetResult('/scope/' . $workstation->scope['id'] . '/department/')->getEntity(); $config = \App::$http->readGetResult('/config/')->getEntity(); if ($process->scope->hasNotificationEnabled()) { - $notification = (new Entity)->toResolvedEntity($process, $config, $department, 'pickup'); + $notification = (new Entity())->toResolvedEntity($process, $config, $department, 'pickup'); $notification = \App::$http->readPostResult('/notification/', $notification)->getEntity(); } - + return \BO\Slim\Render::withHtml( $response, 'block/pickup/notificationSent.twig', diff --git a/zmsadmin/src/Zmsadmin/PickupQueue.php b/zmsadmin/src/Zmsadmin/PickupQueue.php index 12c41f040..362494006 100644 --- a/zmsadmin/src/Zmsadmin/PickupQueue.php +++ b/zmsadmin/src/Zmsadmin/PickupQueue.php @@ -1,4 +1,5 @@ getParameter('limit')->isNumber()->setDefault(Pickup::$defaultLimit)->getValue(); $offset = $validator->getParameter('offset')->isNumber()->setDefault(0)->getValue(); $scopeId = ($selectedScope) ? $selectedScope : $workstation->scope['id']; - $scope = \App::$http->readGetResult('/scope/'. $scopeId .'/')->getEntity(); + $scope = \App::$http->readGetResult('/scope/' . $scopeId . '/')->getEntity(); $department = \App::$http->readGetResult( - '/scope/'. $workstation->scope['id'] .'/department/', + '/scope/' . $workstation->scope['id'] . '/department/', [ 'resolveReferences' => 2 ] @@ -37,7 +38,7 @@ public function readResponse( return \BO\Slim\Render::withHtml( $response, - 'block/pickup/'. $template .'.twig', + 'block/pickup/' . $template . '.twig', array( 'workstation' => $workstation, 'pickupList' => $department->getScopeList(), diff --git a/zmsadmin/src/Zmsadmin/PickupSpreadSheet.php b/zmsadmin/src/Zmsadmin/PickupSpreadSheet.php index f0848ec60..679730edf 100644 --- a/zmsadmin/src/Zmsadmin/PickupSpreadSheet.php +++ b/zmsadmin/src/Zmsadmin/PickupSpreadSheet.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $selectedScope = $validator->getParameter('selectedscope')->isNumber()->getValue(); $scopeId = ($selectedScope) ? $selectedScope : $workstation->scope['id']; - $scope = \App::$http->readGetResult('/scope/'. $scopeId .'/', [ + $scope = \App::$http->readGetResult('/scope/' . $scopeId . '/', [ 'resolveReferences' => 1 ])->getEntity(); - $department = \App::$http->readGetResult('/scope/'. $scopeId .'/department/')->getEntity(); + $department = \App::$http->readGetResult('/scope/' . $scopeId . '/department/')->getEntity(); $providerName = $scope['provider']['name']; @@ -48,14 +49,14 @@ public function readResponse( $writer->setDelimiter(';'); $writer->addFormatter(new EscapeFormula()); $writer->insertOne(['Abholer','','','','','','','','']); - $writer->insertOne([$department->name .' - '. $providerName,'','','','','','','','']); + $writer->insertOne([$department->name . ' - ' . $providerName,'','','','','','','','']); $writer->insertOne(['','Datum','Nr.','Name','Telefonnr.','eMail','Dienstleistung','Anmerkung']); $writer->setOutputBOM(Reader::BOM_UTF8); $writer->insertAll($rows); $response->getBody()->write($writer->toString()); - $fileName = 'abholer_'. $providerName; + $fileName = 'abholer_' . $providerName; return $response ->withHeader('Content-Type', 'text/csv; charset=UTF-8') @@ -73,7 +74,7 @@ protected function readProcessList($scopeId, $loop, $retry = 0) } catch (\BO\Zmsclient\Exception\ApiFailed $exception) { if ($retry < 3) { sleep(1); // Let the other request complete his transaction - return $this->readProcessList($scopeId, $loop, $retry+1); + return $this->readProcessList($scopeId, $loop, $retry + 1); } throw $exception; } @@ -104,7 +105,7 @@ protected function setRows($processList, $rowCount, $rows) join(', ', $requestNameList), $processItem->amendment ]; - $rowCount ++; + $rowCount++; } } return $rows; @@ -112,7 +113,7 @@ protected function setRows($processList, $rowCount, $rows) protected function convertspecialchars($string) { - + $convert = array ( array ('ä','ae',), array ('ö','oe',), @@ -120,8 +121,8 @@ protected function convertspecialchars($string) array ('ß','ss',), array (' ','_',), ); - - + + foreach ($convert as $array) { $string = str_replace($array[0], $array[1], $string); } diff --git a/zmsadmin/src/Zmsadmin/ProcessChange.php b/zmsadmin/src/Zmsadmin/ProcessChange.php index 1b8b92d8c..8fde8f6de 100644 --- a/zmsadmin/src/Zmsadmin/ProcessChange.php +++ b/zmsadmin/src/Zmsadmin/ProcessChange.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Condition; @@ -18,7 +19,6 @@ */ class ProcessChange extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -32,7 +32,7 @@ public function readResponse( $input = $request->getParams(); $scope = Helper\AppointmentFormHelper::readSelectedScope($request, $workstation); $oldProcess = \App::$http - ->readGetResult('/process/'. $input['selectedprocess'] .'/')->getEntity(); + ->readGetResult('/process/' . $input['selectedprocess'] . '/')->getEntity(); $newProcess = $this->getNewProcess($input, $oldProcess, $scope); $validatedForm = static::getValidatedForm($request->getAttribute('validator'), $newProcess); if ($validatedForm['failed']) { @@ -41,7 +41,7 @@ public function readResponse( $validatedForm ); } - + $process = static::writeChangedProcess($input, $oldProcess, $newProcess); $queryParams = ('confirmed' == $process->getStatus()) ? ['selectedprocess' => $process, 'success' => 'process_changed'] : @@ -58,7 +58,7 @@ protected function getNewProcess($input, $process, $scope) { $newProcess = clone $process; $selectedTime = str_replace('-', ':', $input['selectedtime']); - $dateTime = \DateTime::createFromFormat('Y-m-d H:i', $input['selecteddate'] .' '. $selectedTime); + $dateTime = \DateTime::createFromFormat('Y-m-d H:i', $input['selecteddate'] . ' ' . $selectedTime); return $newProcess->withUpdatedData($input, $dateTime, $scope); } @@ -134,13 +134,13 @@ protected static function writeChangedProcess($input, $oldProcess, $newProcess) $oldAppointment = $oldProcess->getFirstAppointment(); $newAppointment = $newProcess->getFirstAppointment(); \App::$http->readPostResult( - '/process/'. $newProcess['id'] .'/'. $newProcess['authKey'] .'/', + '/process/' . $newProcess['id'] . '/' . $newProcess['authKey'] . '/', $newProcess, ['initiator' => 'admin'] ); if (! $oldAppointment->isMatching($newAppointment)) { $newProcess = \App::$http->readPostResult( - '/process/'. $oldProcess->id .'/'. $oldProcess->authKey .'/appointment/', + '/process/' . $oldProcess->id . '/' . $oldProcess->authKey . '/appointment/', $newAppointment, [ 'resolveReferences' => 1, diff --git a/zmsadmin/src/Zmsadmin/ProcessDelete.php b/zmsadmin/src/Zmsadmin/ProcessDelete.php index e14ae445f..402b79803 100644 --- a/zmsadmin/src/Zmsadmin/ProcessDelete.php +++ b/zmsadmin/src/Zmsadmin/ProcessDelete.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class ProcessDelete extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -29,11 +29,11 @@ public function readResponse( $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $processId = Validator::value($args['id'])->isNumber()->getValue(); $initiator = Validator::param('initiator')->isString()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); $process->status = 'deleted'; $workstation->testMatchingProcessScope((new Helper\ClusterHelper($workstation))->getScopeList(), $process); - \App::$http->readDeleteResult('/process/'. $process->getId() .'/', ['initiator' => $initiator]); + \App::$http->readDeleteResult('/process/' . $process->getId() . '/', ['initiator' => $initiator]); static::writeDeleteMailNotifications($process); return \BO\Slim\Render::withHtml( @@ -49,23 +49,25 @@ public function readResponse( public static function writeDeleteMailNotifications($process) { #email only for clients with appointment if email address is given - if ($process->getFirstClient()->hasEmail() && + if ( + $process->getFirstClient()->hasEmail() && $process->isWithAppointment() && $process->scope->hasEmailFrom() ) { \App::$http ->readPostResult( - '/process/'. $process->getId() .'/'. $process->getAuthKey() .'/delete/mail/', + '/process/' . $process->getId() . '/' . $process->getAuthKey() . '/delete/mail/', $process )->getEntity(); } #sms notifications for clients with and without appointment if telephone number is given - if ($process->scope->hasNotificationEnabled() && + if ( + $process->scope->hasNotificationEnabled() && $process->getFirstClient()->hasTelephone() ) { \App::$http ->readPostResult( - '/process/'. $process->getId() .'/'. $process->getAuthKey() .'/delete/notification/', + '/process/' . $process->getId() . '/' . $process->getAuthKey() . '/delete/notification/', $process )->getEntity(); } diff --git a/zmsadmin/src/Zmsadmin/ProcessQueue.php b/zmsadmin/src/Zmsadmin/ProcessQueue.php index aa2405603..ed87b880d 100644 --- a/zmsadmin/src/Zmsadmin/ProcessQueue.php +++ b/zmsadmin/src/Zmsadmin/ProcessQueue.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Condition; @@ -26,7 +27,6 @@ */ class ProcessQueue extends BaseController { - /** * @SuppressWarnings(Param) */ @@ -39,7 +39,7 @@ public function readResponse( $validator = $request->getAttribute('validator'); $selectedProcessId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); - + if ($selectedProcessId) { $process = $this->readSelectedProcessWithWaitingnumber($selectedProcessId); @@ -111,7 +111,7 @@ public static function getValidatedForm($validator, $process) $validator->getParameter('sendReminder')->isNumber()->isNotEqualTo(1) ) ) - + ; $processValidator->getCollection()->addValid( $validator->getParameter('sendConfirmation')->isNumber(), @@ -127,7 +127,7 @@ protected function readSelectedProcessWithWaitingnumber($selectedProcessId) { $result = null; if ($selectedProcessId) { - $result = \App::$http->readGetResult('/process/'. $selectedProcessId .'/')->getEntity(); + $result = \App::$http->readGetResult('/process/' . $selectedProcessId . '/')->getEntity(); } return $result; } @@ -149,7 +149,7 @@ protected function writeQueuedProcess($input, $process) protected function isOpened($scope) { if ($scope->getResolveLevel() < 1) { - $scope = \App::$http->readGetResult('/scope/'. $scope->getId() .'/', [ + $scope = \App::$http->readGetResult('/scope/' . $scope->getId() . '/', [ 'resolveReferences' => 1, 'gql' => Helper\GraphDefaults::getScope() ]) @@ -157,7 +157,7 @@ protected function isOpened($scope) } try { $isOpened = \App::$http - ->readGetResult('/scope/'. $scope->getId() .'/availability/', ['resolveReferences' => 0]) + ->readGetResult('/scope/' . $scope->getId() . '/availability/', ['resolveReferences' => 0]) ->getCollection() ->withScope($scope) ->isOpened(\App::$now); @@ -174,8 +174,7 @@ private function printProcessResponse( Entity $process, ?string $printType = null, ?int $providerId = null - ): ResponseInterface - { + ): ResponseInterface { if ($printType === 'mail') { $mergedMailTemplates = \App::$http->readGetResult('/merged-mailtemplates/' . $providerId . '/') ->getCollection(); diff --git a/zmsadmin/src/Zmsadmin/ProcessQueueReset.php b/zmsadmin/src/Zmsadmin/ProcessQueueReset.php index 253f6606d..673a389d6 100644 --- a/zmsadmin/src/Zmsadmin/ProcessQueueReset.php +++ b/zmsadmin/src/Zmsadmin/ProcessQueueReset.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class ProcessQueueReset extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -31,7 +31,7 @@ public function readResponse( $processId = $validator->getParameter('selectedprocess')->isNumber()->getValue(); $selectedDate = $validator->getParameter('selecteddate')->isString()->getValue(); if ($processId) { - $selectedProcess = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $selectedProcess = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); } \App::$http->readPostResult('/process/status/queued/', $selectedProcess); diff --git a/zmsadmin/src/Zmsadmin/ProcessReserve.php b/zmsadmin/src/Zmsadmin/ProcessReserve.php index a40a4388d..906b3d945 100644 --- a/zmsadmin/src/Zmsadmin/ProcessReserve.php +++ b/zmsadmin/src/Zmsadmin/ProcessReserve.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Condition; @@ -18,7 +19,6 @@ */ class ProcessReserve extends BaseController { - /** * @SuppressWarnings(Param) * @return String @@ -39,7 +39,7 @@ public function readResponse( $validatedForm ); } - + $process = static::writeReservedProcess($input, $process); $process = static::writeConfirmedProcess($input, $process); $appointment = $process->getFirstAppointment(); @@ -65,8 +65,8 @@ protected function getProcess($input, $scope) { $process = new \BO\Zmsentities\Process(); $selectedTime = str_replace('-', ':', $input['selectedtime']); - $dateTime = \DateTime::createFromFormat('Y-m-d H:i', $input['selecteddate'] .' '. $selectedTime); - + $dateTime = \DateTime::createFromFormat('Y-m-d H:i', $input['selecteddate'] . ' ' . $selectedTime); + return $process->withUpdatedData($input, $dateTime, $scope); } @@ -122,7 +122,8 @@ function () use ($process, $delegatedProcess) { ) ; - if (isset($process->scope->preferences['client']['customTextfieldRequired']) + if ( + isset($process->scope->preferences['client']['customTextfieldRequired']) && $process->scope->preferences['client']['customTextfieldRequired'] ) { $processValidator->validateCustomField( diff --git a/zmsadmin/src/Zmsadmin/ProcessSave.php b/zmsadmin/src/Zmsadmin/ProcessSave.php index 02fe97c20..43f96dfef 100644 --- a/zmsadmin/src/Zmsadmin/ProcessSave.php +++ b/zmsadmin/src/Zmsadmin/ProcessSave.php @@ -1,10 +1,12 @@ getAttribute('validator'); $input = $request->getParams(); - + $scope = Helper\AppointmentFormHelper::readSelectedScope($request, $workstation); $processId = $validator->value($args['id'])->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); $dateTime = ($process->isWithAppointment()) ? (new \DateTime())->setTimestamp($process->getFirstAppointment()->date) : \App::$now; $shouldNotify = $this->shouldSendNotifications($input, $process); $process->withUpdatedData($input, $dateTime, $scope); - + $validatedForm = ($process->isWithAppointment()) ? ProcessReserve::getValidatedForm($validator, $process) : ProcessQueue::getValidatedForm($validator, $process); @@ -94,7 +96,7 @@ protected function writeUpdatedProcess($input, Entity $process, $validator, $not { $initiator = $validator->getParameter('initiator')->isString()->getValue(); $process = \App::$http->readPostResult( - '/process/'. $process->id .'/'. $process->authKey .'/', + '/process/' . $process->id . '/' . $process->authKey . '/', $process, [ 'initiator' => $initiator ?? 'admin', diff --git a/zmsadmin/src/Zmsadmin/ProcessSearch.php b/zmsadmin/src/Zmsadmin/ProcessSearch.php index f146bf8a4..f3e3c3bc5 100644 --- a/zmsadmin/src/Zmsadmin/ProcessSearch.php +++ b/zmsadmin/src/Zmsadmin/ProcessSearch.php @@ -1,4 +1,5 @@ readGetResult('/useraccount/'. $entity->getId() .'/')->getEntity(); + $userAccount = \App::$http->readGetResult('/useraccount/' . $entity->getId() . '/')->getEntity(); $config = \App::$http->readGetResult('/config/', [], \App::CONFIG_SECURE_TOKEN)->getEntity(); $allowedProviderList = explode(',', $config->getPreference('oidc', 'provider')); @@ -68,7 +68,8 @@ protected function writeUpdatedEntity($input) $entity = \App::$http->readPostResult('/workstation/password/', $entity)->getEntity(); } catch (\BO\Zmsclient\Exception $exception) { $template = Helper\TwigExceptionHandler::getExceptionTemplate($exception); - if ('' != $exception->template + if ( + '' != $exception->template && \App::$slim->getContainer()->get('view')->getLoader()->exists($template) ) { return [ diff --git a/zmsadmin/src/Zmsadmin/QueueTable.php b/zmsadmin/src/Zmsadmin/QueueTable.php index 8167a89e8..05a420694 100644 --- a/zmsadmin/src/Zmsadmin/QueueTable.php +++ b/zmsadmin/src/Zmsadmin/QueueTable.php @@ -1,4 +1,5 @@ getParameter('selectedprocess')->isNumber()->getValue(); - + // HTTP requests $workstation = \App::$http->readGetResult('/workstation/', [ 'resolveReferences' => 1, @@ -43,13 +44,16 @@ public function readResponse( Helper\GraphDefaults::getProcess() ); $changedProcess = ($selectedProcessId) - ? \App::$http->readGetResult('/process/'. $selectedProcessId .'/', [ + ? \App::$http->readGetResult('/process/' . $selectedProcessId . '/', [ 'gql' => Helper\GraphDefaults::getProcess() ])->getEntity() : null; // data refinement $queueList = $processList->toQueueList(\App::$now); + $queueList->uasort(function ($queueA, $queueB) { + return $queueA->arrivalTime - $queueB->arrivalTime; + }); $queueListVisible = $queueList->withStatus(['preconfirmed', 'confirmed', 'queued', 'reserved', 'deleted']); $queueListMissed = $queueList->withStatus(['missed']); $queueListParked = $queueList->withStatus(['parked']); diff --git a/zmsadmin/src/Zmsadmin/QuickLogin.php b/zmsadmin/src/Zmsadmin/QuickLogin.php index cc2bcaca9..3b3eef68c 100644 --- a/zmsadmin/src/Zmsadmin/QuickLogin.php +++ b/zmsadmin/src/Zmsadmin/QuickLogin.php @@ -1,4 +1,5 @@ readPostResult('/workstation/', $workstation)->getEntity(); $basePath = $request->getBasePath(); - return $response->withRedirect($basePath .'/'. trim($loginData['redirectUrl']['value'], "/")); + return $response->withRedirect($basePath . '/' . trim($loginData['redirectUrl']['value'], "/")); } } diff --git a/zmsadmin/src/Zmsadmin/Scope.php b/zmsadmin/src/Zmsadmin/Scope.php index fc5b4339e..d1a73a002 100644 --- a/zmsadmin/src/Zmsadmin/Scope.php +++ b/zmsadmin/src/Zmsadmin/Scope.php @@ -1,10 +1,12 @@ readSourceList(); $providerList = Helper\ProviderHandler::readProviderList($entity->getSource()); $currentSource = $this->readCurrentSource($entity->getSource()); - + $organisation = \App::$http->readGetResult('/scope/' . $entityId . '/organisation/')->getEntity(); $department = \App::$http->readGetResult('/scope/' . $entityId . '/department/')->getEntity(); - $callDisplayImage = \App::$http->readGetResult('/scope/'. $entityId .'/imagedata/calldisplay/')->getEntity(); + $callDisplayImage = \App::$http->readGetResult('/scope/' . $entityId . '/imagedata/calldisplay/')->getEntity(); $input = $request->getParsedBody(); if ($request->getMethod() === 'POST') { $result = $this->testUpdateEntity($input, $entityId); @@ -55,7 +56,7 @@ public function readResponse( ]); } } - + return \BO\Slim\Render::withHtml( $response, 'page/scope.twig', @@ -85,7 +86,7 @@ protected function readSourceList() protected function readCurrentSource($source) { - $source = \App::$http->readGetResult('/source/'. $source .'/')->getEntity(); + $source = \App::$http->readGetResult('/source/' . $source . '/')->getEntity(); return $source; } @@ -101,12 +102,13 @@ protected function testUpdateEntity($input, $entityId = null) $entity->id = $entityId; $entity = \App::$http->readPostResult('/scope/' . $entity->id . '/', $entity)->getEntity(); } else { - $entity = \App::$http->readPostResult('/department/'. $entityId .'/scope/', $entity) + $entity = \App::$http->readPostResult('/department/' . $entityId . '/scope/', $entity) ->getEntity(); } } catch (\BO\Zmsclient\Exception $exception) { $template = Helper\TwigExceptionHandler::getExceptionTemplate($exception); - if ('' != $exception->template + if ( + '' != $exception->template && \App::$slim->getContainer()->get('view')->getLoader()->exists($template) ) { return [ @@ -122,7 +124,7 @@ protected function testUpdateEntity($input, $entityId = null) protected function writeUploadedImage(\Psr\Http\Message\RequestInterface $request, $entityId, $input) { if (isset($input['removeImage']) && $input['removeImage']) { - \App::$http->readDeleteResult('/scope/'. $entityId .'/imagedata/calldisplay/'); + \App::$http->readDeleteResult('/scope/' . $entityId . '/imagedata/calldisplay/'); } else { (new Helper\FileUploader($request, 'uploadCallDisplayImage'))->writeUploadToScope($entityId); } diff --git a/zmsadmin/src/Zmsadmin/ScopeAppointmentsByDay.php b/zmsadmin/src/Zmsadmin/ScopeAppointmentsByDay.php index ad83f8529..e4d97738f 100644 --- a/zmsadmin/src/Zmsadmin/ScopeAppointmentsByDay.php +++ b/zmsadmin/src/Zmsadmin/ScopeAppointmentsByDay.php @@ -1,15 +1,16 @@ format('d.m.Y'); $clusterColumn = $workstation->isClusterEnabled() ? 'Kürzel' : 'Lfd. Nummer'; $xlsHeaders = [ @@ -80,21 +81,21 @@ public function readResponse( ->withHeader('Content-Description', 'File Transfer') ->withHeader( 'Content-Disposition', - sprintf('download; filename="'. $this->convertspecialChars($fileName) .'"') + sprintf('download; filename="' . $this->convertspecialChars($fileName) . '"') ); } protected function convertspecialchars($string) { - + $convert = array ( array ('ä','ae',), array ('ö','oe',), array ('ü','ue',), array ('ß','ss',), ); - - + + foreach ($convert as $array) { $string = str_replace($array[0], $array[1], $string); } diff --git a/zmsadmin/src/Zmsadmin/ScopeAvailabilityDay.php b/zmsadmin/src/Zmsadmin/ScopeAvailabilityDay.php index 8fa374473..4b4b0b6f4 100644 --- a/zmsadmin/src/Zmsadmin/ScopeAvailabilityDay.php +++ b/zmsadmin/src/Zmsadmin/ScopeAvailabilityDay.php @@ -1,4 +1,5 @@ getEntity(); } - protected static function getSlotBuckets($availabilityList, $processList) { + protected static function getSlotBuckets($availabilityList, $processList) + { $availability = $availabilityList->getFirst(); if (!$availability) { @@ -50,14 +52,14 @@ protected static function getSlotBuckets($availabilityList, $processList) { $slotTimeInMinutes = $availability->getSlotTimeInMinutes(); foreach ($availabilityList->getSlotListByType('appointment') as $slot) { - $time = $slot->time; + $time = $slot->time; $buckets[$time] = [ 'time' => $time, 'timeString' => $slot->getTimeString(), - 'public' => $slot->public, - 'intern' => $slot->intern, + 'public' => $slot->public, + 'intern' => $slot->intern, 'callcenter' => $slot->callcenter, - 'occupiedCount' => 0, + 'occupiedCount' => 0, ]; } @@ -67,10 +69,9 @@ protected static function getSlotBuckets($availabilityList, $processList) { $startDateTime = new \DateTime($startTime); $endDateTime = new \DateTime($endTime); - - foreach ($buckets as $time => $value) { + + foreach (array_keys($buckets) as $time) { $slotDateTime = new \DateTime($time); - // Check if the appointment overlaps with the slot time if ($slotDateTime >= $startDateTime && $slotDateTime < $endDateTime) { $buckets[$time]['occupiedCount']++; } @@ -80,7 +81,7 @@ protected static function getSlotBuckets($availabilityList, $processList) { uksort($buckets, function ($time1, $time2) { return strtotime($time1) <=> strtotime($time2); }); - + return $buckets; } @@ -99,8 +100,8 @@ protected static function getAvailabilityData($scopeId, $dateString) if (!$processList->count()) { $processList = new \BO\Zmsentities\Collection\ProcessList(); } - - + + $conflictList = static::readConflictList($scopeId, $dateWithTime); $maxSlots = $availabilityList->getSummerizedSlotCount(); $busySlots = $availabilityList->getCalculatedSlotCount($processList); diff --git a/zmsadmin/src/Zmsadmin/ScopeAvailabilityDayConflicts.php b/zmsadmin/src/Zmsadmin/ScopeAvailabilityDayConflicts.php index 5b634bb1f..b44dccb7f 100644 --- a/zmsadmin/src/Zmsadmin/ScopeAvailabilityDayConflicts.php +++ b/zmsadmin/src/Zmsadmin/ScopeAvailabilityDayConflicts.php @@ -1,4 +1,5 @@ 1, 'gql' => Helper\GraphDefaults::getWorkstation() ])->getEntity(); - + $dateTime = (isset($args['date'])) ? new \BO\Zmsentities\Helper\DateTime($args['date']) : \App::$now; $startDate = $dateTime->modify('first day of this month'); $endDate = $dateTime->modify('last day of this month'); @@ -45,7 +45,7 @@ public function readResponse( 'resolveReferences' => 1 ])->getEntity(); $calendar = new Helper\Calendar($dateTime->format('Y-m-d')); - $scopeList = (new \BO\Zmsentities\Collection\ScopeList)->addEntity($scope); + $scopeList = (new \BO\Zmsentities\Collection\ScopeList())->addEntity($scope); $month = $calendar->readMonthListByScopeList($scopeList, 'intern', 0)->getFirst(); $availabilityList = $this->getAvailabilityList($scope, $startDate, $endDate); @@ -58,7 +58,7 @@ public function readResponse( $processConflictList = $processConflictList ? $processConflictList->toConflictListByDay() : new \BO\Zmsentities\Collection\ProcessList(); - + return \BO\Slim\Render::withHtml( $response, 'page/availabilityMonth.twig', diff --git a/zmsadmin/src/Zmsadmin/ScopeDelete.php b/zmsadmin/src/Zmsadmin/ScopeDelete.php index bff1d7f41..fe431d491 100644 --- a/zmsadmin/src/Zmsadmin/ScopeDelete.php +++ b/zmsadmin/src/Zmsadmin/ScopeDelete.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class ScopeDelete extends BaseController { - /** * * @return String @@ -28,10 +28,10 @@ public function readResponse( ) { $entityId = Validator::value($args['id'])->isNumber() ->getValue(); - + $entity = \App::$http->readGetResult('/scope/' . $entityId . '/')->getEntity(); - $scopeName = $entity->offsetGet('contact')->offsetGet('name'); - + $scopeName = $entity->offsetGet('contact')->offsetGet('name'); + \App::$http->readDeleteResult('/scope/' . $entityId . '/') ->getEntity(); return \BO\Slim\Render::redirect( diff --git a/zmsadmin/src/Zmsadmin/ScopeEmergency.php b/zmsadmin/src/Zmsadmin/ScopeEmergency.php index 00be64d5e..5f081ef8c 100644 --- a/zmsadmin/src/Zmsadmin/ScopeEmergency.php +++ b/zmsadmin/src/Zmsadmin/ScopeEmergency.php @@ -1,4 +1,5 @@ readGetResult('/source/'. $args['name'] .'/', ['resolveReferences' => 2]) + ->readGetResult('/source/' . $args['name'] . '/', ['resolveReferences' => 2]) ->getEntity(); } - + $input = $request->getParsedBody(); if (is_array($input) && array_key_exists('save', $input)) { $result = $this->testUpdateEntity($input); diff --git a/zmsadmin/src/Zmsadmin/SourceIndex.php b/zmsadmin/src/Zmsadmin/SourceIndex.php index d316e83aa..ca08a2d53 100644 --- a/zmsadmin/src/Zmsadmin/SourceIndex.php +++ b/zmsadmin/src/Zmsadmin/SourceIndex.php @@ -6,11 +6,11 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; class SourceIndex extends BaseController { - /** * @SuppressWarnings(Param) * @return String diff --git a/zmsadmin/src/Zmsadmin/Status.php b/zmsadmin/src/Zmsadmin/Status.php index 17eef9299..240346cb8 100644 --- a/zmsadmin/src/Zmsadmin/Status.php +++ b/zmsadmin/src/Zmsadmin/Status.php @@ -1,9 +1,11 @@ isNumber()->getValue(); $config = \App::$http->readGetResult('/config/')->getEntity(); $organisation = \App::$http->readGetResult( - '/scope/'. $scopeId .'/organisation/', + '/scope/' . $scopeId . '/organisation/', ['resolveReferences' => 5] )->getEntity(); diff --git a/zmsadmin/src/Zmsadmin/TicketprinterStatusByScope.php b/zmsadmin/src/Zmsadmin/TicketprinterStatusByScope.php index e6b7e6a1d..a06a591cf 100644 --- a/zmsadmin/src/Zmsadmin/TicketprinterStatusByScope.php +++ b/zmsadmin/src/Zmsadmin/TicketprinterStatusByScope.php @@ -1,4 +1,5 @@ readPostResult('/scope/' . $scope->id . '/', $scope)->getEntity(); return \BO\Slim\Render::redirect('ticketprinterStatusByScope', ['id' => $scopeId], [ - 'success' => 'ticketprinter_deactivated_'. $scope->status['ticketprinter']['deactivated'] + 'success' => 'ticketprinter_deactivated_' . $scope->status['ticketprinter']['deactivated'] ]); } diff --git a/zmsadmin/src/Zmsadmin/UrlParameterSigning.php b/zmsadmin/src/Zmsadmin/UrlParameterSigning.php index e48cdff37..fcde34189 100644 --- a/zmsadmin/src/Zmsadmin/UrlParameterSigning.php +++ b/zmsadmin/src/Zmsadmin/UrlParameterSigning.php @@ -1,4 +1,5 @@ readGetResult( - '/scope/'. $workstation['scope']['id'] .'/organisation/', + '/scope/' . $workstation['scope']['id'] . '/organisation/', ['resolveReferences' => 3] )->getEntity(); diff --git a/zmsadmin/src/Zmsadmin/Useraccount.php b/zmsadmin/src/Zmsadmin/Useraccount.php index 920d8b47e..7e3a0994b 100644 --- a/zmsadmin/src/Zmsadmin/Useraccount.php +++ b/zmsadmin/src/Zmsadmin/Useraccount.php @@ -6,15 +6,15 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; -use \BO\Zmsentities\Collection\UseraccountList as Collection; +use BO\Zmsentities\Collection\UseraccountList as Collection; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; class Useraccount extends BaseController { - /** * @SuppressWarnings(Param) * @return ResponseInterface @@ -27,7 +27,7 @@ public function readResponse( $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $success = $request->getAttribute('validator')->getParameter('success')->isString()->getValue(); $ownerList = \App::$http->readGetResult('/owner/', array('resolveReferences' => 2))->getCollection(); - + $useraccountList = new Collection(); if ($workstation->hasSuperUseraccount()) { $useraccountList = \App::$http->readGetResult("/useraccount/", ["resolveReferences" => 0])->getCollection(); diff --git a/zmsadmin/src/Zmsadmin/UseraccountAdd.php b/zmsadmin/src/Zmsadmin/UseraccountAdd.php index f3fbe67da..233c6a993 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountAdd.php +++ b/zmsadmin/src/Zmsadmin/UseraccountAdd.php @@ -1,4 +1,5 @@ id = $entity->id. '@' .$input['oidcProvider']; + $entity->id = $entity->id . '@' . $input['oidcProvider']; } $entity = $entity->withCleanedUpFormData(true); try { $entity = \App::$http->readPostResult('/useraccount/', $entity)->getEntity(); } catch (\BO\Zmsclient\Exception $exception) { $template = Helper\TwigExceptionHandler::getExceptionTemplate($exception); - if ('' != $exception->template + if ( + '' != $exception->template && \App::$slim->getContainer()->get('view')->getLoader()->exists($template) ) { return [ diff --git a/zmsadmin/src/Zmsadmin/UseraccountByDepartment.php b/zmsadmin/src/Zmsadmin/UseraccountByDepartment.php index bfcba10b9..73be26ec4 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountByDepartment.php +++ b/zmsadmin/src/Zmsadmin/UseraccountByDepartment.php @@ -1,4 +1,5 @@ getAttribute('validator')->getParameter('success')->isString()->getValue(); $department = \App::$http->readGetResult("/department/$departmentId/")->getEntity(); - $useraccountList = new Collection; + $useraccountList = new Collection(); $useraccountList = \App::$http->readGetResult("/department/$departmentId/useraccount/")->getCollection(); $workstationList = \App::$http->readGetResult("/department/$departmentId/workstation/")->getCollection(); diff --git a/zmsadmin/src/Zmsadmin/UseraccountByRole.php b/zmsadmin/src/Zmsadmin/UseraccountByRole.php index 0461f083e..925e03040 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountByRole.php +++ b/zmsadmin/src/Zmsadmin/UseraccountByRole.php @@ -1,4 +1,5 @@ getAttribute('validator')->getParameter('success')->isString()->getValue(); $ownerList = \App::$http->readGetResult('/owner/', array('resolveReferences' => 2))->getCollection(); - $useraccountList = new Collection; + $useraccountList = new Collection(); if ($workstation->hasSuperUseraccount()) { - try { $useraccountList = \App::$http->readGetResult("/role/$roleLevel/useraccount/")->getCollection(); } catch (\Exception $e) { false; } - } else { $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $departmentList = $workstation->getUseraccount()->getDepartmentList(); foreach ($departmentList as $accountDepartment) { - try { $departmentUseraccountList = \App::$http ->readGetResult("/role/$roleLevel/department/$accountDepartment->id/useraccount/") @@ -72,4 +70,3 @@ public function readResponse( ); } } - diff --git a/zmsadmin/src/Zmsadmin/UseraccountDelete.php b/zmsadmin/src/Zmsadmin/UseraccountDelete.php index 1227f77ca..88cb3b052 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountDelete.php +++ b/zmsadmin/src/Zmsadmin/UseraccountDelete.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Mellon\Validator; @@ -16,7 +17,6 @@ */ class UseraccountDelete extends BaseController { - /** * * @return String diff --git a/zmsadmin/src/Zmsadmin/UseraccountEdit.php b/zmsadmin/src/Zmsadmin/UseraccountEdit.php index 0feac37ad..6912a4f7b 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountEdit.php +++ b/zmsadmin/src/Zmsadmin/UseraccountEdit.php @@ -6,6 +6,7 @@ * @copyright BerlinOnline Stadtportal GmbH & Co. KG * */ + namespace BO\Zmsadmin; use BO\Zmsentities\Schema\Loader; @@ -15,7 +16,6 @@ class UseraccountEdit extends BaseController { - /** * * @return String @@ -28,7 +28,7 @@ public function readResponse( $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 1])->getEntity(); $userAccountName = Validator::value($args['loginname'])->isString()->getValue(); $confirmSuccess = $request->getAttribute('validator')->getParameter('success')->isString()->getValue(); - $userAccount = \App::$http->readGetResult('/useraccount/'. $userAccountName .'/')->getEntity(); + $userAccount = \App::$http->readGetResult('/useraccount/' . $userAccountName . '/')->getEntity(); $ownerList = \App::$http->readGetResult('/owner/', ['resolveReferences' => 2])->getCollection(); if ($request->getMethod() === 'POST') { @@ -69,10 +69,11 @@ protected function writeUpdatedEntity($input, $userAccountName) $entity = (new Entity($input))->withCleanedUpFormData(); $entity->setPassword($input); try { - $entity = \App::$http->readPostResult('/useraccount/'. $userAccountName .'/', $entity)->getEntity(); + $entity = \App::$http->readPostResult('/useraccount/' . $userAccountName . '/', $entity)->getEntity(); } catch (\BO\Zmsclient\Exception $exception) { $template = Helper\TwigExceptionHandler::getExceptionTemplate($exception); - if ('' != $exception->template + if ( + '' != $exception->template && \App::$slim->getContainer()->get('view')->getLoader()->exists($template) ) { return [ diff --git a/zmsadmin/src/Zmsadmin/UseraccountSearch.php b/zmsadmin/src/Zmsadmin/UseraccountSearch.php index dbd3714c5..f28600e95 100644 --- a/zmsadmin/src/Zmsadmin/UseraccountSearch.php +++ b/zmsadmin/src/Zmsadmin/UseraccountSearch.php @@ -1,4 +1,5 @@ isString() ->getValue(); - $useraccountList = new Collection; + $useraccountList = new Collection(); if ($workstation->hasSuperUseraccount()) { - $useraccountList = \App::$http->readGetResult('/useraccount/search/', [ 'query' => $queryString, 'resolveReferences' => 1, ])->getCollection(); - } else { $workstation = \App::$http->readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $departmentList = $workstation->getUseraccount()->getDepartmentList(); @@ -70,5 +69,4 @@ public function readResponse( ) ); } - } diff --git a/zmsadmin/src/Zmsadmin/Workstation.php b/zmsadmin/src/Zmsadmin/Workstation.php index a60c18a79..6f07ea916 100644 --- a/zmsadmin/src/Zmsadmin/Workstation.php +++ b/zmsadmin/src/Zmsadmin/Workstation.php @@ -1,4 +1,5 @@ $workstation ) diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessCall.php b/zmsadmin/src/Zmsadmin/WorkstationProcessCall.php index 2cbf2b939..7867d5254 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessCall.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessCall.php @@ -1,4 +1,5 @@ isNumber()->getValue(); $validator = $request->getAttribute('validator'); $isDirectCall = $validator->getParameter('direct')->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); if ($process->toProperty()->amendment->get() && ! $isDirectCall) { return \BO\Slim\Render::redirect( 'workstationProcessPreCall', diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessCalled.php b/zmsadmin/src/Zmsadmin/WorkstationProcessCalled.php index fb5642642..945081749 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessCalled.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessCalled.php @@ -1,4 +1,5 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $processId = Validator::value($args['id'])->isNumber()->getValue(); if (! $workstation->process->hasId() && ! $workstation->process->queue->callTime) { - $process = \App::$http->readGetResult('/process/'. $args['id'] .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $args['id'] . '/')->getEntity(); $workstation = \App::$http->readPostResult('/workstation/process/called/', $process, [ 'allowClusterWideCall' => \App::$allowClusterWideCall ])->getEntity(); @@ -33,14 +34,14 @@ public function readResponse( $exclude = explode(',', $excludedIds); } $exclude[] = $workstation->process->toQueue(\App::$now)->number; - + $error = $validator->getParameter('error')->isString()->getValue(); if (isset($processId) && $workstation->process->getId() != $processId) { $error = ('pickup' == $workstation->process->getStatus()) ? 'has_called_pickup' : 'has_called_process'; } - + if ($workstation->process->getStatus() == 'processing') { return \BO\Slim\Render::redirect('workstationProcessProcessing', [], ['error' => $error]); } diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessCancel.php b/zmsadmin/src/Zmsadmin/WorkstationProcessCancel.php index 679916357..0b5ba1d7f 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessCancel.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessCancel.php @@ -1,4 +1,5 @@ readGetResult('/scope/'. $scopeId .'/request/') + ->readGetResult('/scope/' . $scopeId . '/request/') ->getCollection(); $requestList = $requestList ? $requestList : new RequestList(); diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessNext.php b/zmsadmin/src/Zmsadmin/WorkstationProcessNext.php index d6b20de02..d0ffe15ef 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessNext.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessNext.php @@ -1,4 +1,5 @@ status === "queued" || $process->status === "confirmed") { $timeoutTimeUnix = isset($process->timeoutTime) ? $this->timeToUnix($process->timeoutTime) : null; $currentTimeUnix = time(); - if(!isset($process->timeoutTime)){ + if (!isset($process->timeoutTime)) { $filteredProcessList->addEntity(clone $process); - } else if (isset($timeoutTimeUnix) && !($process->queue->callCount > 0 && ($currentTimeUnix - $timeoutTimeUnix) < 300)) { + } elseif (isset($timeoutTimeUnix) && !($process->queue->callCount > 0 && ($currentTimeUnix - $timeoutTimeUnix) < 300)) { $filteredProcessList->addEntity(clone $process); - } else { + } else { if (!empty($excludedIds)) { $excludedIds .= ","; - } + } $excludedIds .= $process->queue->number; } } diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessParked.php b/zmsadmin/src/Zmsadmin/WorkstationProcessParked.php index dd4e07deb..541601ebf 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessParked.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessParked.php @@ -1,11 +1,13 @@ readGetResult('/workstation/', ['resolveReferences' => 2])->getEntity(); $processId = Validator::value($args['id'])->isNumber()->getValue(); - $process = \App::$http->readGetResult('/process/'. $processId .'/')->getEntity(); + $process = \App::$http->readGetResult('/process/' . $processId . '/')->getEntity(); $excludedIds = $validator->getParameter('exclude')->isString()->setDefault('')->getValue(); if ($excludedIds) { $exclude = explode(',', $excludedIds); diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessProcessing.php b/zmsadmin/src/Zmsadmin/WorkstationProcessProcessing.php index 7dddbbc7d..f74848411 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessProcessing.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessProcessing.php @@ -1,4 +1,5 @@ process = \App::$http->readPostResult( - '/process/'. $workstation->process->id .'/'. $workstation->process->authKey .'/', + '/process/' . $workstation->process->id . '/' . $workstation->process->authKey . '/', $workstation->process, ['initiator' => 'admin'] )->getEntity(); diff --git a/zmsadmin/src/Zmsadmin/WorkstationProcessRedirect.php b/zmsadmin/src/Zmsadmin/WorkstationProcessRedirect.php index f4d9ded40..d2b49a52b 100644 --- a/zmsadmin/src/Zmsadmin/WorkstationProcessRedirect.php +++ b/zmsadmin/src/Zmsadmin/WorkstationProcessRedirect.php @@ -1,4 +1,5 @@ Fertig stellen - {% if workstation.process.withAppointment %} - Weiterleiten - {% endif %} -