From 62602669d87391a65e17890d3f01a6e5edcaf9ea Mon Sep 17 00:00:00 2001 From: Christian Hartmann Date: Sun, 5 May 2024 14:46:29 +0200 Subject: [PATCH 1/3] chore: Use prettier for stylistic rules Signed-off-by: Christian Hartmann --- .eslintrc.json | 16 +++- .prettierignore | 15 +++ .prettierrc.json | 1 + package-lock.json | 231 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 5 + 5 files changed, 260 insertions(+), 8 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json diff --git a/.eslintrc.json b/.eslintrc.json index 9cc975712..3951eef00 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -3,11 +3,23 @@ "appName": true }, "extends": [ - "@nextcloud" + "@nextcloud", + "prettier" // < this needs to be the last one to override all previous ], "rules": { // We are using the @nextcloud/logger "no-console": "error", "import/no-unresolved": ["error", { "ignore": ["\\?raw"] }] - } + }, + "overrides": [ + { + "files": ["**/*.vue"], + "rules": { + "vue/first-attribute-linebreak": [ + "error", + { "multiline": "below", "singleline": "ignore" } + ] + } + } + ] } diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d51580bad --- /dev/null +++ b/.prettierignore @@ -0,0 +1,15 @@ +# version control systems directories +**/.git +**/.svn +**/.hg + +# 3rdparty dependencies +**/node_modules +**/vendor + +# Compiled JS output +js/ + +# PHP +lib/ +**/*.php diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..68b03a97b --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +"@nextcloud/prettier-config" diff --git a/package-lock.json b/package-lock.json index cb30cd788..15556a85d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,12 +37,15 @@ "@nextcloud/browserslist-config": "^3.0.1", "@nextcloud/cypress": "^1.0.0-beta.8", "@nextcloud/eslint-config": "^8.4.1", + "@nextcloud/prettier-config": "^1.1.0", "@nextcloud/stylelint-config": "^3.0.1", "@nextcloud/vite-config": "^1.2.3", "cypress": "^13.11.0", "cypress-split": "^1.24.0", "cypress-vite": "^1.5.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-cypress": "^3.3.0", + "prettier": "^3.2.5", "vite": "^5.2.13" }, "engines": { @@ -1882,6 +1885,18 @@ "core-js": "^3.6.4" } }, + "node_modules/@nextcloud/prettier-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/prettier-config/-/prettier-config-1.1.0.tgz", + "integrity": "sha512-mhgDTSAn2YqSi6kw7Ooy5IVxQKmOr+iUtOlI26LLH3pGrI1ARc0CvGs7l9UD59MaUql+F5uVutHROPo9imsqOQ==", + "dev": true, + "dependencies": { + "prettier-plugin-packagejson": "^2.5.0" + }, + "peerDependencies": { + "prettier": ">=3.0.0" + } + }, "node_modules/@nextcloud/router": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.0.1.tgz", @@ -2070,6 +2085,18 @@ "node": ">= 8" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@rollup/plugin-inject": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", @@ -2922,6 +2949,21 @@ "prettier": "^1.18.2 || ^2.0.0" } }, + "node_modules/@vue/compiler-sfc/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@vue/compiler-ssr": { "version": "3.4.27", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", @@ -5043,6 +5085,15 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/detect-indent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", + "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, "node_modules/detective-amd": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.0.tgz", @@ -5733,6 +5784,18 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -7298,6 +7361,18 @@ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, + "node_modules/get-stdin": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -7361,6 +7436,15 @@ "assert-plus": "^1.0.0" } }, + "node_modules/git-hooks-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz", + "integrity": "sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -10983,20 +11067,38 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "optional": true, + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-plugin-packagejson": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.5.0.tgz", + "integrity": "sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==", + "dev": true, + "dependencies": { + "sort-package-json": "2.10.0", + "synckit": "0.9.0" + }, + "peerDependencies": { + "prettier": ">= 1.16.0" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -11988,6 +12090,18 @@ "node": ">=14.16" } }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -12035,6 +12149,95 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/sort-object-keys": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", + "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", + "dev": true + }, + "node_modules/sort-package-json": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.10.0.tgz", + "integrity": "sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g==", + "dev": true, + "dependencies": { + "detect-indent": "^7.0.1", + "detect-newline": "^4.0.0", + "get-stdin": "^9.0.0", + "git-hooks-list": "^3.0.0", + "globby": "^13.1.2", + "is-plain-obj": "^4.1.0", + "semver": "^7.6.0", + "sort-object-keys": "^1.1.3" + }, + "bin": { + "sort-package-json": "cli.js" + } + }, + "node_modules/sort-package-json/node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-package-json/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-package-json/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sort-package-json/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sort-package-json/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/sortablejs": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", @@ -12869,6 +13072,22 @@ "dev": true, "peer": true }, + "node_modules/synckit": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", + "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tabbable": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", diff --git a/package.json b/package.json index 7e6c6487a..7ca5789b3 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "watch": "vite --mode development build --watch", "cypress": "cypress run --e2e", "cypress:gui": "cypress open", + "format": "prettier --check .", + "format:fix": "prettier --write .", "lint": "eslint --ext .js,.vue src", "lint:fix": "eslint --ext .js,.vue src --fix", "stylelint": "stylelint css/*.css css/*.scss src/**/*.vue", @@ -60,12 +62,15 @@ "@nextcloud/browserslist-config": "^3.0.1", "@nextcloud/cypress": "^1.0.0-beta.8", "@nextcloud/eslint-config": "^8.4.1", + "@nextcloud/prettier-config": "^1.1.0", "@nextcloud/stylelint-config": "^3.0.1", "@nextcloud/vite-config": "^1.2.3", "cypress": "^13.11.0", "cypress-split": "^1.24.0", "cypress-vite": "^1.5.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-cypress": "^3.3.0", + "prettier": "^3.2.5", "vite": "^5.2.13" } } From 5a9220038002d4fb5a85b1a11b9633dc7ab086b2 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Sun, 5 May 2024 20:42:59 +0200 Subject: [PATCH 2/3] feat(ci): Add prettier CI workflow Signed-off-by: Ferdinand Thiessen --- .github/workflows/lint-prettier.yml | 91 +++++++++++++++++++++++++++++ .prettierignore | 3 + 2 files changed, 94 insertions(+) create mode 100644 .github/workflows/lint-prettier.yml diff --git a/.github/workflows/lint-prettier.yml b/.github/workflows/lint-prettier.yml new file mode 100644 index 000000000..d073c06a1 --- /dev/null +++ b/.github/workflows/lint-prettier.yml @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint prettier + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-prettier-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'lib/**' + - 'appinfo/info.xml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '.prettierignore' + - '**.js' + - '**.ts' + - '**.vue' + - '**.yml' + - '**.md' + + lint: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + name: NPM format + + steps: + - name: Checkout + uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4 + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^20' + fallbackNpm: '^10' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v3 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" + + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: npm ci + + - name: Format + run: npm run format + + summary: + permissions: + contents: none + runs-on: ubuntu-latest + needs: [changes, lint] + + if: always() + + # This is the summary, we just avoid to rename it so that branch protection rules still match + name: prettier + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi diff --git a/.prettierignore b/.prettierignore index d51580bad..6088eb9bf 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,6 +10,9 @@ # Compiled JS output js/ +# Handled by transifex +l10n/ + # PHP lib/ **/*.php From f3bc09c8be805d344c901998f3646047093deb86 Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Mon, 6 May 2024 14:02:11 +0200 Subject: [PATCH 3/3] chore: Fix code style by running prettier Signed-off-by: Ferdinand Thiessen Signed-off-by: Christian Hartmann --- .github/ISSUE_TEMPLATE/bug_report.md | 44 +- .github/ISSUE_TEMPLATE/feature_request.md | 6 +- .github/dependabot.yml | 194 +- .github/pr-feedback.yml | 4 +- .github/workflows/appstore-build-publish.yml | 4 +- .github/workflows/cypress.yml | 6 +- CHANGELOG.md | 1012 +-- README.md | 27 +- codecov.yml | 4 +- composer.lock | 5622 +++++++++-------- cypress.config.ts | 14 +- cypress/.eslintrc.json | 8 +- cypress/e2e/create-form/create.cy.ts | 25 +- cypress/support/e2e.ts | 2 +- cypress/tsconfig.json | 5 +- docs/API.md | 671 +- docs/DataStructure.md | 173 +- docs/Embedding.md | 63 +- package.json | 28 +- src/Forms.vue | 135 +- src/FormsEmptyContent.vue | 8 +- src/FormsSettings.vue | 17 +- src/FormsSubmit.vue | 51 +- src/components/AppNavigationForm.vue | 89 +- src/components/ArchivedFormsModal.vue | 6 +- src/components/Icons/FormsIcon.vue | 9 +- src/components/Icons/IconCopyAll.vue | 9 +- src/components/Icons/IconOverlay.vue | 3 +- src/components/PillMenu.vue | 3 +- src/components/Questions/AnswerInput.vue | 43 +- src/components/Questions/Question.vue | 72 +- src/components/Questions/QuestionDate.vue | 15 +- src/components/Questions/QuestionDropdown.vue | 55 +- src/components/Questions/QuestionFile.vue | 134 +- src/components/Questions/QuestionLong.vue | 11 +- src/components/Questions/QuestionMultiple.vue | 148 +- src/components/Questions/QuestionShort.vue | 59 +- src/components/Results/Answer.vue | 9 +- src/components/Results/ResultsSummary.vue | 68 +- src/components/Results/Submission.vue | 20 +- .../SidebarTabs/SettingsSidebarTab.vue | 115 +- .../SidebarTabs/SharingSearchDiv.vue | 31 +- .../SidebarTabs/SharingShareDiv.vue | 56 +- .../SidebarTabs/SharingSidebarTab.vue | 149 +- .../SidebarTabs/TransferOwnership.vue | 92 +- src/components/TopBar.vue | 37 +- src/emptyContent.js | 8 +- src/main.js | 2 +- src/mixins/PermissionTypes.js | 7 +- src/mixins/QuestionMixin.js | 35 +- src/mixins/ShareLinkMixin.js | 16 +- src/mixins/ShareTypes.js | 30 +- src/mixins/UserSearchMixin.js | 84 +- src/mixins/ViewsMixin.js | 34 +- src/models/AnswerTypes.js | 21 +- src/models/ValidationTypes.js | 6 +- src/scssmixins/markdownOutput.scss | 9 +- src/settings.js | 8 +- src/submit.js | 2 +- src/utils/CancelableRequest.js | 4 +- src/utils/Logger.js | 5 +- src/utils/OcsResponse2Data.js | 2 +- src/utils/RegularExpression.js | 2 +- src/utils/SetWindowTitle.js | 5 +- src/views/Create.vue | 164 +- src/views/Results.vue | 311 +- src/views/Sidebar.vue | 24 +- src/views/Submit.vue | 205 +- tsconfig.json | 2 +- vendor-bin/cs-fixer/composer.lock | 219 +- vendor-bin/psalm/composer.lock | 5328 ++++++++-------- vite.config.js | 31 +- 72 files changed, 8614 insertions(+), 7306 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 38a75e03b..e9d2a6150 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,8 +4,8 @@ about: Create a report to help us improve title: '' labels: 0. Needs triage, bug assignees: '' - --- + **Please use the 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are affected by the same issue. Please don't comment if you have no relevant information to add!** **Describe the bug** @@ -13,6 +13,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -25,21 +26,25 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Nextcloud (please complete the following information):** -- Nextcloud-Version: [e.g. 19.0.0] -- Forms-Version: [e.g. 2.0.0-beta4] + +- Nextcloud-Version: [e.g. 19.0.0] +- Forms-Version: [e.g. 2.0.0-beta4] **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] + +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Browser log** + ``` Open your console, reload your page and/or do the action leading to this issue and copy/paste the log in this thread. ``` @@ -48,29 +53,34 @@ Open your console, reload your page and/or do the action leading to this issue a How to access your browser console (Click to expand) # Chrome -- Press either CTRL + SHIFT + J to open the “console” tab of the Developer Tools. -- Alternative method: + +- Press either CTRL + SHIFT + J to open the “console” tab of the Developer Tools. +- Alternative method: 1. Press either CTRL + SHIFT + I or F12 to open the Developer Tools. 2. Click the “console” tab. # Safari -- Press CMD + ALT + I to open the Web Inspector. -- See Chrome’s step 2. (Chrome and Safari have pretty much identical dev tools.) + +- Press CMD + ALT + I to open the Web Inspector. +- See Chrome’s step 2. (Chrome and Safari have pretty much identical dev tools.) # IE9 + 1. Press F12 to open the developer tools. 2. Click the “console” tab. # Firefox -- Press CTRL + SHIFT + K to open the Web console (COMMAND + SHIFT + K on Macs). -- or, if Firebug is installed (recommended): + +- Press CTRL + SHIFT + K to open the Web console (COMMAND + SHIFT + K on Macs). +- or, if Firebug is installed (recommended): 1. Press F12 to open Firebug. 2. Click on the “console” tab. # Opera + 1. Press CTRL + SHIFT + I to open Dragonfly. 2. Click on the “console” tab. - + **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 31dd5a30a..3b20882d0 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -4,12 +4,12 @@ about: Suggest an idea for this project title: '' labels: 0. Needs triage, enhancement assignees: '' - --- **Nextcloud (please complete the following information):** -- Nextcloud-Version: [e.g. 19.0.0] -- Forms-Version: [e.g. 2.0.0-beta4] + +- Nextcloud-Version: [e.g. 19.0.0] +- Forms-Version: [e.g. 2.0.0-beta4] **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 82dd72a3f..85ead26c6 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,106 +1,106 @@ version: 2 updates: -- package-ecosystem: composer - target-branch: "main" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: composer + target-branch: 'main' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: composer - target-branch: "main" - directory: "/vendor-bin/cs-fixer/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: composer + target-branch: 'main' + directory: '/vendor-bin/cs-fixer/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: npm - target-branch: "main" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: npm + target-branch: 'main' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: github-actions - target-branch: "main" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: github-actions + target-branch: 'main' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -# Update stable3 until NC27 is out of support -- package-ecosystem: composer - target-branch: "stable3" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + # Update stable3 until NC27 is out of support + - package-ecosystem: composer + target-branch: 'stable3' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: composer - target-branch: "stable3" - directory: "/vendor-bin/cs-fixer/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: composer + target-branch: 'stable3' + directory: '/vendor-bin/cs-fixer/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: npm - target-branch: "stable3" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: npm + target-branch: 'stable3' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies -- package-ecosystem: github-actions - target-branch: "stable3" - directory: "/" - schedule: - interval: weekly - day: saturday - time: "03:00" - timezone: Europe/Paris - open-pull-requests-limit: 10 - labels: - - 3. to review - - dependencies + - package-ecosystem: github-actions + target-branch: 'stable3' + directory: '/' + schedule: + interval: weekly + day: saturday + time: '03:00' + timezone: Europe/Paris + open-pull-requests-limit: 10 + labels: + - 3. to review + - dependencies diff --git a/.github/pr-feedback.yml b/.github/pr-feedback.yml index f8810b253..83dc4d76e 100644 --- a/.github/pr-feedback.yml +++ b/.github/pr-feedback.yml @@ -21,6 +21,6 @@ jobs: Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! days-before-feedback: 14 - start-date: "2023-07-10" - exempt-authors: "${{ steps.scrape.outputs.users }}" + start-date: '2023-07-10' + exempt-authors: '${{ steps.scrape.outputs.users }}' exempt-bots: true diff --git a/.github/workflows/appstore-build-publish.yml b/.github/workflows/appstore-build-publish.yml index 63711d9a9..21c43b79e 100644 --- a/.github/workflows/appstore-build-publish.yml +++ b/.github/workflows/appstore-build-publish.yml @@ -38,7 +38,7 @@ jobs: uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master with: filename: ${{ env.APP_NAME }}/appinfo/info.xml - expression: "//info//dependencies//nextcloud/@min-version" + expression: '//info//dependencies//nextcloud/@min-version' - name: Read package.json node and npm engines version uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 @@ -80,7 +80,7 @@ jobs: id: check_composer uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v2 with: - files: "${{ env.APP_NAME }}/composer.json" + files: '${{ env.APP_NAME }}/composer.json' - name: Install composer dependencies if: steps.check_composer.outputs.files_exists == 'true' diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 9698dc479..06c8f3e42 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -34,7 +34,7 @@ jobs: id: check_composer uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v2 with: - files: "composer.json" + files: 'composer.json' - name: Install composer dependencies if: steps.check_composer.outputs.files_exists == 'true' @@ -44,8 +44,8 @@ jobs: uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 id: versions with: - fallbackNode: "^20" - fallbackNpm: "^10" + fallbackNode: '^20' + fallbackNpm: '^10' - name: Set up node ${{ steps.versions.outputs.nodeVersion }} uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index deeed7384..593cbdce1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,803 +13,837 @@ - fix(i18n): Aligned grammar by @rakekniven in [\#2095](https://github.com/nextcloud/forms/pull/2095) - fix: Parse momentFormat and storageFormat by @Chartman123 in [\#2093](https://github.com/nextcloud/forms/pull/2093) - ## v4.2.3 - 2024-04-16 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.2.2...v4.2.3) ### Merged -- Fix fetching shared forms and return array values in ApiController.php by @Chartman123 in [\#2076](https://github.com/nextcloud/forms/pull/2076) -- Fix toggle between Summary and Responses Submission overview by @Koc in [\#2073](https://github.com/nextcloud/forms/pull/2073) +- Fix fetching shared forms and return array values in ApiController.php by @Chartman123 in [\#2076](https://github.com/nextcloud/forms/pull/2076) +- Fix toggle between Summary and Responses Submission overview by @Koc in [\#2073](https://github.com/nextcloud/forms/pull/2073) ## v4.2.2 - 2024-04-15 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.2.1...v4.2.2) ### Fixed -- fix(DB): Correctly fetch shared forms by @susnux in [\#2069](https://github.com/nextcloud/forms/pull/2069) -- fix(Form): If `permitAllUsers` is not set then no public access is granted by @susnux in [\#2070](https://github.com/nextcloud/forms/pull/2070) +- fix(DB): Correctly fetch shared forms by @susnux in [\#2069](https://github.com/nextcloud/forms/pull/2069) +- fix(Form): If `permitAllUsers` is not set then no public access is granted by @susnux in [\#2070](https://github.com/nextcloud/forms/pull/2070) ## v4.2.1 - 2024-04-15 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.2.0...v4.2.1) ### Fixed -- fix: remove setup() and move code to data() in Results.vue by @Chartman123 in [\#2065](https://github.com/nextcloud/forms/pull/2065) -- fix: Move non-reactive props and composables to `setup` by @susnux in [\#2068](https://github.com/nextcloud/forms/pull/2068) -- Set lastUpdated on link/unlink file by @Chartman123 in [\#2066](https://github.com/nextcloud/forms/pull/2066) -- fix: `legacyLink` access handling by @Chartman123 in [\#2060](https://github.com/nextcloud/forms/pull/2060) -- fix: don't filter expired forms in navigation by @Chartman123 in [\#2062](https://github.com/nextcloud/forms/pull/2062) +- fix: remove setup() and move code to data() in Results.vue by @Chartman123 in [\#2065](https://github.com/nextcloud/forms/pull/2065) +- fix: Move non-reactive props and composables to `setup` by @susnux in [\#2068](https://github.com/nextcloud/forms/pull/2068) +- Set lastUpdated on link/unlink file by @Chartman123 in [\#2066](https://github.com/nextcloud/forms/pull/2066) +- fix: `legacyLink` access handling by @Chartman123 in [\#2060](https://github.com/nextcloud/forms/pull/2060) +- fix: don't filter expired forms in navigation by @Chartman123 in [\#2062](https://github.com/nextcloud/forms/pull/2062) ## v4.2.0 - 2024-04-14 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.1.1...v4.2.0) ### Enhancements -- Get only forms shared with user from database [\#2029](https://github.com/nextcloud/forms/pull/2029) ([Chartman123](https://github.com/Chartman123)) -- Allow embedding forms within other websites [\#1353](https://github.com/nextcloud/forms/pull/1353) ([susnux](https://github.com/susnux)) -- feat: Add forms `state` to close and archive forms [\#1925](https://github.com/nextcloud/forms/pull/1925) ([susnux](https://github.com/susnux)) + +- Get only forms shared with user from database [\#2029](https://github.com/nextcloud/forms/pull/2029) ([Chartman123](https://github.com/Chartman123)) +- Allow embedding forms within other websites [\#1353](https://github.com/nextcloud/forms/pull/1353) ([susnux](https://github.com/susnux)) +- feat: Add forms `state` to close and archive forms [\#1925](https://github.com/nextcloud/forms/pull/1925) ([susnux](https://github.com/susnux)) ### Fixed -- fix: remove positive lookbehind for finding unescaped slashes [\#2033](https://github.com/nextcloud/forms/pull/2033) ([Chartman123](https://github.com/Chartman123)) -- fix: Do not show trailing button for technical name input [\#2021](https://github.com/nextcloud/forms/pull/2021) ([susnux](https://github.com/susnux)) -- Show expired shared forms to users with results permission [\#2013](https://github.com/nextcloud/forms/pull/2013) ([Chartman123](https://github.com/Chartman123)) -- fix(TopBar): provide optional button text via new slot syntax [\#2015](https://github.com/nextcloud/forms/pull/2015) ([ShGKme](https://github.com/ShGKme)) + +- fix: remove positive lookbehind for finding unescaped slashes [\#2033](https://github.com/nextcloud/forms/pull/2033) ([Chartman123](https://github.com/Chartman123)) +- fix: Do not show trailing button for technical name input [\#2021](https://github.com/nextcloud/forms/pull/2021) ([susnux](https://github.com/susnux)) +- Show expired shared forms to users with results permission [\#2013](https://github.com/nextcloud/forms/pull/2013) ([Chartman123](https://github.com/Chartman123)) +- fix(TopBar): provide optional button text via new slot syntax [\#2015](https://github.com/nextcloud/forms/pull/2015) ([ShGKme](https://github.com/ShGKme)) ### Merged -- chore: Add Nextcloud 29 support [\#2003](https://github.com/nextcloud/forms/pull/2003) ([susnux](https://github.com/susnux)) -- Rename Circles to Teams in UI/logging [\#2000](https://github.com/nextcloud/forms/pull/2000) ([Chartman123](https://github.com/Chartman123)) -- Reuse top bar component for responses view toggle [\#1576](https://github.com/nextcloud/forms/pull/1576) ([susnux](https://github.com/susnux)) -- Update dependencies and translations +- chore: Add Nextcloud 29 support [\#2003](https://github.com/nextcloud/forms/pull/2003) ([susnux](https://github.com/susnux)) +- Rename Circles to Teams in UI/logging [\#2000](https://github.com/nextcloud/forms/pull/2000) ([Chartman123](https://github.com/Chartman123)) +- Reuse top bar component for responses view toggle [\#1576](https://github.com/nextcloud/forms/pull/1576) ([susnux](https://github.com/susnux)) +- Update dependencies and translations ## v4.1.1 - 2024-02-18 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.1.0...v4.1.1) ### Fixed -- fix: Update moment format for date parsing [\#1969](https://github.com/nextcloud/forms/pull/1969) ([Chartman123](https://github.com/Chartman123)) -- fix: Load styles also for settings section [\#1963](https://github.com/nextcloud/forms/pull/1963) ([susnux](https://github.com/susnux)) +- fix: Update moment format for date parsing [\#1969](https://github.com/nextcloud/forms/pull/1969) ([Chartman123](https://github.com/Chartman123)) +- fix: Load styles also for settings section [\#1963](https://github.com/nextcloud/forms/pull/1963) ([susnux](https://github.com/susnux)) ## v4.1.0 - 2024-02-02 [Full Changelog](https://github.com/nextcloud/forms/compare/v4.0.0...v4.1.0) ### Enhancements -- enh: Use NcDialog for confirmation when deleting all submissions [\#1910](https://github.com/nextcloud/forms/pull/1910) ([Chartman123](https://github.com/Chartman123)) -- enh: Use NcDialog to confirm leaving [\#1880](https://github.com/nextcloud/forms/pull/1880) ([Chartman123](https://github.com/Chartman123)) -- Added possibility to link spreadsheet for automatic submission export in multiple formats [\#1758](https://github.com/nextcloud/forms/pull/1758) ([Koc](https://github.com/Koc)) -- enh: Better text contrast for form description (closes #1878) [\#1881](https://github.com/nextcloud/forms/pull/1881) ([mschmidm](https://github.com/mschmidm)) -- enh: Replace confirm dialog for deletion with NcDialog [\#1663](https://github.com/nextcloud/forms/pull/1663) ([Chartman123](https://github.com/Chartman123)) -- Question duplication [\#1423](https://github.com/nextcloud/forms/pull/1423) ([KaasKop97](https://github.com/KaasKop97)) + +- enh: Use NcDialog for confirmation when deleting all submissions [\#1910](https://github.com/nextcloud/forms/pull/1910) ([Chartman123](https://github.com/Chartman123)) +- enh: Use NcDialog to confirm leaving [\#1880](https://github.com/nextcloud/forms/pull/1880) ([Chartman123](https://github.com/Chartman123)) +- Added possibility to link spreadsheet for automatic submission export in multiple formats [\#1758](https://github.com/nextcloud/forms/pull/1758) ([Koc](https://github.com/Koc)) +- enh: Better text contrast for form description (closes #1878) [\#1881](https://github.com/nextcloud/forms/pull/1881) ([mschmidm](https://github.com/mschmidm)) +- enh: Replace confirm dialog for deletion with NcDialog [\#1663](https://github.com/nextcloud/forms/pull/1663) ([Chartman123](https://github.com/Chartman123)) +- Question duplication [\#1423](https://github.com/nextcloud/forms/pull/1423) ([KaasKop97](https://github.com/KaasKop97)) ### Fixed -- Fix sharing form [\#1907](https://github.com/nextcloud/forms/pull/1907) ([avinash-0007](https://github.com/avinash-0007)) -- fix empty content public page view [\#1904](https://github.com/nextcloud/forms/pull/1904) ([Chartman123](https://github.com/Chartman123)) -- stop filtering result while sharing [\#1895](https://github.com/nextcloud/forms/pull/1895) ([avinash-0007](https://github.com/avinash-0007)) -- fix: Prevent race condition on unique-submission forms [\#1841](https://github.com/nextcloud/forms/pull/1841) ([susnux](https://github.com/susnux)) + +- Fix sharing form [\#1907](https://github.com/nextcloud/forms/pull/1907) ([avinash-0007](https://github.com/avinash-0007)) +- fix empty content public page view [\#1904](https://github.com/nextcloud/forms/pull/1904) ([Chartman123](https://github.com/Chartman123)) +- stop filtering result while sharing [\#1895](https://github.com/nextcloud/forms/pull/1895) ([avinash-0007](https://github.com/avinash-0007)) +- fix: Prevent race condition on unique-submission forms [\#1841](https://github.com/nextcloud/forms/pull/1841) ([susnux](https://github.com/susnux)) ### Merged -- Update API version to v2.4 [\#1932](https://github.com/nextcloud/forms/pull/1932) ([Chartman123](https://github.com/Chartman123)) -- refactoring: move code to separate function storeAnswersForQuestion [\#1866](https://github.com/nextcloud/forms/pull/1866) ([tpokorra](https://github.com/tpokorra)) -- chore: replace isMobile mixin with useIsMobile composable [\#1863](https://github.com/nextcloud/forms/pull/1863) ([Chartman123](https://github.com/Chartman123)) +- Update API version to v2.4 [\#1932](https://github.com/nextcloud/forms/pull/1932) ([Chartman123](https://github.com/Chartman123)) +- refactoring: move code to separate function storeAnswersForQuestion [\#1866](https://github.com/nextcloud/forms/pull/1866) ([tpokorra](https://github.com/tpokorra)) +- chore: replace isMobile mixin with useIsMobile composable [\#1863](https://github.com/nextcloud/forms/pull/1863) ([Chartman123](https://github.com/Chartman123)) ## v4.0.0 - 2023-12-12 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.4.0...v4.0.0) ### Enhancements -- transfer ownership of a form [\#1416](https://github.com/nextcloud/forms/pull/1416) ([hamza221](https://github.com/hamza221)) -- Add Forms to header title on public link view [\#1828](https://github.com/nextcloud/forms/pull/1828) ([Chartman123](https://github.com/Chartman123)) -- Allow to set `results_delete` permission on the frontend [\#1805](https://github.com/nextcloud/forms/pull/1805) ([susnux](https://github.com/susnux)) -- use PUT/PATCH for updating and move to API v2.2 [\#1809](https://github.com/nextcloud/forms/pull/1809) ([Chartman123](https://github.com/Chartman123)) -- Show confirmation dialog before submitting an empty form [\#1803](https://github.com/nextcloud/forms/pull/1803) ([susnux](https://github.com/susnux)) -- Move away from deprecated icon classes and allow to search user by email [\#1802](https://github.com/nextcloud/forms/pull/1802) ([susnux](https://github.com/susnux)) + +- transfer ownership of a form [\#1416](https://github.com/nextcloud/forms/pull/1416) ([hamza221](https://github.com/hamza221)) +- Add Forms to header title on public link view [\#1828](https://github.com/nextcloud/forms/pull/1828) ([Chartman123](https://github.com/Chartman123)) +- Allow to set `results_delete` permission on the frontend [\#1805](https://github.com/nextcloud/forms/pull/1805) ([susnux](https://github.com/susnux)) +- use PUT/PATCH for updating and move to API v2.2 [\#1809](https://github.com/nextcloud/forms/pull/1809) ([Chartman123](https://github.com/Chartman123)) +- Show confirmation dialog before submitting an empty form [\#1803](https://github.com/nextcloud/forms/pull/1803) ([susnux](https://github.com/susnux)) +- Move away from deprecated icon classes and allow to search user by email [\#1802](https://github.com/nextcloud/forms/pull/1802) ([susnux](https://github.com/susnux)) ### Fixed -- Remove deprecated setModal [\#1826](https://github.com/nextcloud/forms/pull/1826) ([hamza221](https://github.com/hamza221)) -- fix(QuestionMultiple): Fix setting the `allowOtherAnswer` option [\#1800](https://github.com/nextcloud/forms/pull/1800) ([susnux](https://github.com/susnux)) -- Fix missing column in DataStructure.md [\#1791](https://github.com/nextcloud/forms/pull/1791) ([Chartman123](https://github.com/Chartman123)) -- fix: add canMoveUp/Down props to QuestionMixin [\#1806](https://github.com/nextcloud/forms/pull/1806) ([Chartman123](https://github.com/Chartman123 + +- Remove deprecated setModal [\#1826](https://github.com/nextcloud/forms/pull/1826) ([hamza221](https://github.com/hamza221)) +- fix(QuestionMultiple): Fix setting the `allowOtherAnswer` option [\#1800](https://github.com/nextcloud/forms/pull/1800) ([susnux](https://github.com/susnux)) +- Fix missing column in DataStructure.md [\#1791](https://github.com/nextcloud/forms/pull/1791) ([Chartman123](https://github.com/Chartman123)) +- fix: add canMoveUp/Down props to QuestionMixin [\#1806](https://github.com/nextcloud/forms/pull/1806) ([Chartman123](https://github.com/Chartman123 ### Merged -- Migrate from webpack to vite for building the frontend [\#1827](https://github.com/nextcloud/forms/pull/1827) ([susnux](https://github.com/susnux)))) -- Make components compatible to nextcloud-vue 8 [\#1696](https://github.com/nextcloud/forms/pull/1696) ([Chartman123](https://github.com/Chartman123)) -- Min server 28 [\#1796](https://github.com/nextcloud/forms/pull/1796) ([Chartman123](https://github.com/Chartman123)) +- Migrate from webpack to vite for building the frontend [\#1827](https://github.com/nextcloud/forms/pull/1827) ([susnux](https://github.com/susnux)))) +- Make components compatible to nextcloud-vue 8 [\#1696](https://github.com/nextcloud/forms/pull/1696) ([Chartman123](https://github.com/Chartman123)) +- Min server 28 [\#1796](https://github.com/nextcloud/forms/pull/1796) ([Chartman123](https://github.com/Chartman123)) ## v3.4.0 - 2023-11-27 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.3.1...v3.4.0) ### Breaking -- Move to min-version 26 and drop PHP 7.4 [\#1727](https://github.com/nextcloud/forms/pull/1727) ([Chartman123](https://github.com/Chartman123)) + +- Move to min-version 26 and drop PHP 7.4 [\#1727](https://github.com/nextcloud/forms/pull/1727) ([Chartman123](https://github.com/Chartman123)) ### Enhancements -- Add subtypes for short input, like email, phone or custom regex [\#1491](https://github.com/nextcloud/forms/pull/1491) ([susnux](https://github.com/susnux)) -- Remember input in LocalStorage [\#1382](https://github.com/nextcloud/forms/pull/1382) ([hamza221](https://github.com/hamza221)) -- Make form editable with keyboard [\#1750](https://github.com/nextcloud/forms/pull/1750) ([Chartman123](https://github.com/Chartman123)) -- Allow reordering questions using the keyboard [\#1532](https://github.com/nextcloud/forms/pull/1532) ([susnux](https://github.com/susnux)) -- feat: Implement custom submission message [\#1659](https://github.com/nextcloud/forms/pull/1659) ([susnux](https://github.com/susnux)) -- feat(ActivityManager): Send notification about new submissions to circle memebers [\#1746](https://github.com/nextcloud/forms/pull/1746) ([susnux](https://github.com/susnux)) -- Implement warning when leaving an unsubmitted form [\#1310](https://github.com/nextcloud/forms/pull/1310) ([Chartman123](https://github.com/Chartman123)) -- Feature: Allow to share forms with Circles [\#1467](https://github.com/nextcloud/forms/pull/1467) ([susnux](https://github.com/susnux)) -- Notify users on new submissions for shared forms [\#1496](https://github.com/nextcloud/forms/pull/1496) ([susnux](https://github.com/susnux)) -- Optimization of FormMapper::findById calls [\#1707](https://github.com/nextcloud/forms/pull/1707) ([AIlkiv](https://github.com/AIlkiv)) -- feat: Add 'Other' option for radio/checkbox questions. [\#1694](https://github.com/nextcloud/forms/pull/1694) ([AIlkiv](https://github.com/AIlkiv)) -- Reduce white space between questions [\#1658](https://github.com/nextcloud/forms/pull/1658) ([Chartman123](https://github.com/Chartman123)) -- Add technical identifiers for questions [\#1553](https://github.com/nextcloud/forms/pull/1553) ([susnux](https://github.com/susnux)) -- Support RTL languages - migrate css from physical to logical positioning [\#1654](https://github.com/nextcloud/forms/pull/1654) ([susnux](https://github.com/susnux)) - -### Fixed -- fix: Enhance extraSettings handling and fix XML output [\#1705](https://github.com/nextcloud/forms/pull/1705) ([Chartman123](https://github.com/Chartman123)) -- fix: Warning about missing label for other answer [\#1731](https://github.com/nextcloud/forms/pull/1731) ([Chartman123](https://github.com/Chartman123)) -- fix(docs): Add changes of API 2.1 to the API docs [\#1745](https://github.com/nextcloud/forms/pull/1745) ([susnux](https://github.com/susnux)) -- fix(Submit): Make `answers` reactive and fix invalid mutation of computed property [\#1786](https://github.com/nextcloud/forms/pull/1786) ([susnux](https://github.com/susnux)) -- fix: Fix import of debounce [\#1784](https://github.com/nextcloud/forms/pull/1784) ([susnux](https://github.com/susnux)) -- Fix inverted sorting in frontend for shared forms [\#1759](https://github.com/nextcloud/forms/pull/1759) ([Chartman123](https://github.com/Chartman123)) -- fix: Handle questions props as props and not as attrs [\#1763](https://github.com/nextcloud/forms/pull/1763) ([susnux](https://github.com/susnux)) -- fix: Make sure "other" answers are correctly handled [\#1764](https://github.com/nextcloud/forms/pull/1764) ([susnux](https://github.com/susnux)) -- fix: Sanitize file name when writing a CSV file [\#1660](https://github.com/nextcloud/forms/pull/1660) ([susnux](https://github.com/susnux)) -- fix: no styling applied to h1-headings in markdown (closes #1668) [\#1743](https://github.com/nextcloud/forms/pull/1743) ([mschmidm](https://github.com/mschmidm)) -- fix(tests): Update phpunit workflow to fix OCI tests [\#1729](https://github.com/nextcloud/forms/pull/1729) ([susnux](https://github.com/susnux)) -- fix(lint): add missing trailing commas [\#1770](https://github.com/nextcloud/forms/pull/1770) ([Chartman123](https://github.com/Chartman123)) -- fix: Incorrect type for empty extraSettings in frontend [\#1730](https://github.com/nextcloud/forms/pull/1730) ([Chartman123](https://github.com/Chartman123)) + +- Add subtypes for short input, like email, phone or custom regex [\#1491](https://github.com/nextcloud/forms/pull/1491) ([susnux](https://github.com/susnux)) +- Remember input in LocalStorage [\#1382](https://github.com/nextcloud/forms/pull/1382) ([hamza221](https://github.com/hamza221)) +- Make form editable with keyboard [\#1750](https://github.com/nextcloud/forms/pull/1750) ([Chartman123](https://github.com/Chartman123)) +- Allow reordering questions using the keyboard [\#1532](https://github.com/nextcloud/forms/pull/1532) ([susnux](https://github.com/susnux)) +- feat: Implement custom submission message [\#1659](https://github.com/nextcloud/forms/pull/1659) ([susnux](https://github.com/susnux)) +- feat(ActivityManager): Send notification about new submissions to circle memebers [\#1746](https://github.com/nextcloud/forms/pull/1746) ([susnux](https://github.com/susnux)) +- Implement warning when leaving an unsubmitted form [\#1310](https://github.com/nextcloud/forms/pull/1310) ([Chartman123](https://github.com/Chartman123)) +- Feature: Allow to share forms with Circles [\#1467](https://github.com/nextcloud/forms/pull/1467) ([susnux](https://github.com/susnux)) +- Notify users on new submissions for shared forms [\#1496](https://github.com/nextcloud/forms/pull/1496) ([susnux](https://github.com/susnux)) +- Optimization of FormMapper::findById calls [\#1707](https://github.com/nextcloud/forms/pull/1707) ([AIlkiv](https://github.com/AIlkiv)) +- feat: Add 'Other' option for radio/checkbox questions. [\#1694](https://github.com/nextcloud/forms/pull/1694) ([AIlkiv](https://github.com/AIlkiv)) +- Reduce white space between questions [\#1658](https://github.com/nextcloud/forms/pull/1658) ([Chartman123](https://github.com/Chartman123)) +- Add technical identifiers for questions [\#1553](https://github.com/nextcloud/forms/pull/1553) ([susnux](https://github.com/susnux)) +- Support RTL languages - migrate css from physical to logical positioning [\#1654](https://github.com/nextcloud/forms/pull/1654) ([susnux](https://github.com/susnux)) + +### Fixed + +- fix: Enhance extraSettings handling and fix XML output [\#1705](https://github.com/nextcloud/forms/pull/1705) ([Chartman123](https://github.com/Chartman123)) +- fix: Warning about missing label for other answer [\#1731](https://github.com/nextcloud/forms/pull/1731) ([Chartman123](https://github.com/Chartman123)) +- fix(docs): Add changes of API 2.1 to the API docs [\#1745](https://github.com/nextcloud/forms/pull/1745) ([susnux](https://github.com/susnux)) +- fix(Submit): Make `answers` reactive and fix invalid mutation of computed property [\#1786](https://github.com/nextcloud/forms/pull/1786) ([susnux](https://github.com/susnux)) +- fix: Fix import of debounce [\#1784](https://github.com/nextcloud/forms/pull/1784) ([susnux](https://github.com/susnux)) +- Fix inverted sorting in frontend for shared forms [\#1759](https://github.com/nextcloud/forms/pull/1759) ([Chartman123](https://github.com/Chartman123)) +- fix: Handle questions props as props and not as attrs [\#1763](https://github.com/nextcloud/forms/pull/1763) ([susnux](https://github.com/susnux)) +- fix: Make sure "other" answers are correctly handled [\#1764](https://github.com/nextcloud/forms/pull/1764) ([susnux](https://github.com/susnux)) +- fix: Sanitize file name when writing a CSV file [\#1660](https://github.com/nextcloud/forms/pull/1660) ([susnux](https://github.com/susnux)) +- fix: no styling applied to h1-headings in markdown (closes #1668) [\#1743](https://github.com/nextcloud/forms/pull/1743) ([mschmidm](https://github.com/mschmidm)) +- fix(tests): Update phpunit workflow to fix OCI tests [\#1729](https://github.com/nextcloud/forms/pull/1729) ([susnux](https://github.com/susnux)) +- fix(lint): add missing trailing commas [\#1770](https://github.com/nextcloud/forms/pull/1770) ([Chartman123](https://github.com/Chartman123)) +- fix: Incorrect type for empty extraSettings in frontend [\#1730](https://github.com/nextcloud/forms/pull/1730) ([Chartman123](https://github.com/Chartman123)) ### Merged -- Move parameter typing for extraSettings [\#1769](https://github.com/nextcloud/forms/pull/1769) ([Chartman123](https://github.com/Chartman123)) -- Update README.md [\#1739](https://github.com/nextcloud/forms/pull/1739) ([Chartman123](https://github.com/Chartman123)) -- Increase font size to default 15px [\#1738](https://github.com/nextcloud/forms/pull/1738) ([marcoambrosini](https://github.com/marcoambrosini)) -- Replace outdated screenshots in Readme.md [\#1736](https://github.com/nextcloud/forms/pull/1736) ([Chartman123](https://github.com/Chartman123)) -- chore: replace deprecated qb->execute() with executeStatement() [\#1706](https://github.com/nextcloud/forms/pull/1706) ([Chartman123](https://github.com/Chartman123)) -- Added test for insertSubmission in ApiController [\#1704](https://github.com/nextcloud/forms/pull/1704) ([AIlkiv](https://github.com/AIlkiv)) -- Add pr feedback action [\#1703](https://github.com/nextcloud/forms/pull/1703) ([Fenn-CS](https://github.com/Fenn-CS)) -- phpunit: use custom db images to fix rate limiting [\#1685](https://github.com/nextcloud/forms/pull/1685) ([Chartman123](https://github.com/Chartman123)) -- Add healtcheck options to PHPUnit for OCI [\#1678](https://github.com/nextcloud/forms/pull/1678) ([Chartman123](https://github.com/Chartman123)) +- Move parameter typing for extraSettings [\#1769](https://github.com/nextcloud/forms/pull/1769) ([Chartman123](https://github.com/Chartman123)) +- Update README.md [\#1739](https://github.com/nextcloud/forms/pull/1739) ([Chartman123](https://github.com/Chartman123)) +- Increase font size to default 15px [\#1738](https://github.com/nextcloud/forms/pull/1738) ([marcoambrosini](https://github.com/marcoambrosini)) +- Replace outdated screenshots in Readme.md [\#1736](https://github.com/nextcloud/forms/pull/1736) ([Chartman123](https://github.com/Chartman123)) +- chore: replace deprecated qb->execute() with executeStatement() [\#1706](https://github.com/nextcloud/forms/pull/1706) ([Chartman123](https://github.com/Chartman123)) +- Added test for insertSubmission in ApiController [\#1704](https://github.com/nextcloud/forms/pull/1704) ([AIlkiv](https://github.com/AIlkiv)) +- Add pr feedback action [\#1703](https://github.com/nextcloud/forms/pull/1703) ([Fenn-CS](https://github.com/Fenn-CS)) +- phpunit: use custom db images to fix rate limiting [\#1685](https://github.com/nextcloud/forms/pull/1685) ([Chartman123](https://github.com/Chartman123)) +- Add healtcheck options to PHPUnit for OCI [\#1678](https://github.com/nextcloud/forms/pull/1678) ([Chartman123](https://github.com/Chartman123)) ## 3.3.1 - 2023-06-23 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.3.0...v3.3.1) ### Fixed -- Allow to right click share-link buttons to copy link manually [\#1653](https://github.com/nextcloud/forms/pull/1653) ([susnux](https://github.com/susnux)) + +- Allow to right click share-link buttons to copy link manually [\#1653](https://github.com/nextcloud/forms/pull/1653) ([susnux](https://github.com/susnux)) ### Merged -- Drop 'Nextcloud' from connected responses string [\#1635](https://github.com/nextcloud/forms/pull/1635) ([Chartman123](https://github.com/Chartman123)) -- Updated translations -- Updated dependencies +- Drop 'Nextcloud' from connected responses string [\#1635](https://github.com/nextcloud/forms/pull/1635) ([Chartman123](https://github.com/Chartman123)) +- Updated translations +- Updated dependencies ## 3.3.0 - 2023-05-22 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.2.0...v3.3.0) ### Enhancements -- Improve and unify Markdown output style [\#1575](https://github.com/nextcloud/forms/pull/1575) ([susnux](https://github.com/susnux)) + +- Improve and unify Markdown output style [\#1575](https://github.com/nextcloud/forms/pull/1575) ([susnux](https://github.com/susnux)) ### Fixed -- fix(markdown): Add margin for all new paragraphs [\#1568](https://github.com/nextcloud/forms/pull/1568) ([susnux](https://github.com/susnux)) -- Place actions popover so it does not overflow the page [\#1554](https://github.com/nextcloud/forms/pull/1554) ([susnux](https://github.com/susnux)) -- fix: Replace `NcRichContenteditable` with `textarea` [\#1574](https://github.com/nextcloud/forms/pull/1574) ([susnux](https://github.com/susnux)) + +- fix(markdown): Add margin for all new paragraphs [\#1568](https://github.com/nextcloud/forms/pull/1568) ([susnux](https://github.com/susnux)) +- Place actions popover so it does not overflow the page [\#1554](https://github.com/nextcloud/forms/pull/1554) ([susnux](https://github.com/susnux)) +- fix: Replace `NcRichContenteditable` with `textarea` [\#1574](https://github.com/nextcloud/forms/pull/1574) ([susnux](https://github.com/susnux)) ### Merged -- Prepare for NC27 [\#1625](https://github.com/nextcloud/forms/pull/1625) ([Chartman123](https://github.com/Chartman123)) -- Replace deprecated code and fix issues found by static code analysis [\#1577](https://github.com/nextcloud/forms/pull/1577) ([susnux](https://github.com/susnux)) +- Prepare for NC27 [\#1625](https://github.com/nextcloud/forms/pull/1625) ([Chartman123](https://github.com/Chartman123)) +- Replace deprecated code and fix issues found by static code analysis [\#1577](https://github.com/nextcloud/forms/pull/1577) ([susnux](https://github.com/susnux)) ## 3.2.0 - 2023-03-06 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.1.0...v3.2.0) ### Enhancements -- Make timestamp in csv export ISO 8601 compliant [\#1531](https://github.com/nextcloud/forms/pull/1531) ([Chartman123](https://github.com/Chartman123)) -- Add lastUpdated property to Form [\#1479](https://github.com/nextcloud/forms/pull/1479) ([Chartman123](https://github.com/Chartman123)) + +- Make timestamp in csv export ISO 8601 compliant [\#1531](https://github.com/nextcloud/forms/pull/1531) ([Chartman123](https://github.com/Chartman123)) +- Add lastUpdated property to Form [\#1479](https://github.com/nextcloud/forms/pull/1479) ([Chartman123](https://github.com/Chartman123)) ### Fixed -- Fix paragraph rendering [\#1542](https://github.com/nextcloud/forms/pull/1542) ([jotoeri](https://github.com/jotoeri)) -- Move API to v2.1 [\#1539](https://github.com/nextcloud/forms/pull/1539) ([Chartman123](https://github.com/Chartman123)) -- Make skip to content buttons work [\#1530](https://github.com/nextcloud/forms/pull/1530) ([susnux](https://github.com/susnux)) + +- Fix paragraph rendering [\#1542](https://github.com/nextcloud/forms/pull/1542) ([jotoeri](https://github.com/jotoeri)) +- Move API to v2.1 [\#1539](https://github.com/nextcloud/forms/pull/1539) ([Chartman123](https://github.com/Chartman123)) +- Make skip to content buttons work [\#1530](https://github.com/nextcloud/forms/pull/1530) ([susnux](https://github.com/susnux)) ### Merged -- Replace deprecated NcMultiselect with recommended NcSelect [\#1471](https://github.com/nextcloud/forms/pull/1471) ([susnux](https://github.com/susnux)) -- Added test for `cloneForm` in `ApiController` [\#1488](https://github.com/nextcloud/forms/pull/1488) ([susnux](https://github.com/susnux)) -- Add information about API to appinfo [\#1529](https://github.com/nextcloud/forms/pull/1529) ([susnux](https://github.com/susnux)) +- Replace deprecated NcMultiselect with recommended NcSelect [\#1471](https://github.com/nextcloud/forms/pull/1471) ([susnux](https://github.com/susnux)) +- Added test for `cloneForm` in `ApiController` [\#1488](https://github.com/nextcloud/forms/pull/1488) ([susnux](https://github.com/susnux)) +- Add information about API to appinfo [\#1529](https://github.com/nextcloud/forms/pull/1529) ([susnux](https://github.com/susnux)) ## 3.1.0 - 2023-02-20 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.0.4...v3.1.0) ### Enhancements -- Allow formatting question and form descriptions using markdown [\#1394](https://github.com/nextcloud/forms/pull/1394) ([susnux](https://github.com/susnux)) -- Add Nextcloud 26 support [\#1489](https://github.com/nextcloud/forms/pull/1489) ([susnux](https://github.com/susnux)) -- Add test for method `newForm` of `ApiController` [\#1480](https://github.com/nextcloud/forms/pull/1480) ([susnux](https://github.com/susnux)) -- Drop `v-clipboard` in favor of native browser API [\#1478](https://github.com/nextcloud/forms/pull/1478) ([susnux](https://github.com/susnux)) -- Allow sharees to see results | Implement `PERMISSION_RESULTS` [\#1461](https://github.com/nextcloud/forms/pull/1461) ([susnux](https://github.com/susnux)) -- feat: Add slot for additional actions to the question component [\#1470](https://github.com/nextcloud/forms/pull/1470) ([susnux](https://github.com/susnux)) + +- Allow formatting question and form descriptions using markdown [\#1394](https://github.com/nextcloud/forms/pull/1394) ([susnux](https://github.com/susnux)) +- Add Nextcloud 26 support [\#1489](https://github.com/nextcloud/forms/pull/1489) ([susnux](https://github.com/susnux)) +- Add test for method `newForm` of `ApiController` [\#1480](https://github.com/nextcloud/forms/pull/1480) ([susnux](https://github.com/susnux)) +- Drop `v-clipboard` in favor of native browser API [\#1478](https://github.com/nextcloud/forms/pull/1478) ([susnux](https://github.com/susnux)) +- Allow sharees to see results | Implement `PERMISSION_RESULTS` [\#1461](https://github.com/nextcloud/forms/pull/1461) ([susnux](https://github.com/susnux)) +- feat: Add slot for additional actions to the question component [\#1470](https://github.com/nextcloud/forms/pull/1470) ([susnux](https://github.com/susnux)) ### Fixed -- Fix Create edit mode [\#1498](https://github.com/nextcloud/forms/pull/1498) ([jotoeri](https://github.com/jotoeri)) -- Fix public view [\#1492](https://github.com/nextcloud/forms/pull/1492) ([jotoeri](https://github.com/jotoeri)) -- Fix some small `SubmissionService` issues [\#1490](https://github.com/nextcloud/forms/pull/1490) ([susnux](https://github.com/susnux)) -- Add missing computed property to edit view [\#1473](https://github.com/nextcloud/forms/pull/1473) ([Chartman123](https://github.com/Chartman123)) + +- Fix Create edit mode [\#1498](https://github.com/nextcloud/forms/pull/1498) ([jotoeri](https://github.com/jotoeri)) +- Fix public view [\#1492](https://github.com/nextcloud/forms/pull/1492) ([jotoeri](https://github.com/jotoeri)) +- Fix some small `SubmissionService` issues [\#1490](https://github.com/nextcloud/forms/pull/1490) ([susnux](https://github.com/susnux)) +- Add missing computed property to edit view [\#1473](https://github.com/nextcloud/forms/pull/1473) ([Chartman123](https://github.com/Chartman123)) ### Merged -- Add shareHash parameter [\#1476](https://github.com/nextcloud/forms/pull/1476) ([Chartman123](https://github.com/Chartman123)) +- Add shareHash parameter [\#1476](https://github.com/nextcloud/forms/pull/1476) ([Chartman123](https://github.com/Chartman123)) ## 3.0.4 - 2023-01-31 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.0.3...v3.0.4) ### Enhancements -- Show relative expiration date inside form [\#1432](https://github.com/nextcloud/forms/pull/1432) ([Chartman123](https://github.com/Chartman123)) + +- Show relative expiration date inside form [\#1432](https://github.com/nextcloud/forms/pull/1432) ([Chartman123](https://github.com/Chartman123)) ### Fixed -- Fix insert [\#1465](https://github.com/nextcloud/forms/pull/1465) ([jotoeri](https://github.com/jotoeri)) -- Fix cors on ShareApi [\#1463](https://github.com/nextcloud/forms/pull/1463) ([jotoeri](https://github.com/jotoeri)) -- Fix public insert [\#1456](https://github.com/nextcloud/forms/pull/1456) ([jotoeri](https://github.com/jotoeri)) -- Import form question extra settings [\#1440](https://github.com/nextcloud/forms/pull/1440) ([Copephobia](https://github.com/Copephobia)) + +- Fix insert [\#1465](https://github.com/nextcloud/forms/pull/1465) ([jotoeri](https://github.com/jotoeri)) +- Fix cors on ShareApi [\#1463](https://github.com/nextcloud/forms/pull/1463) ([jotoeri](https://github.com/jotoeri)) +- Fix public insert [\#1456](https://github.com/nextcloud/forms/pull/1456) ([jotoeri](https://github.com/jotoeri)) +- Import form question extra settings [\#1440](https://github.com/nextcloud/forms/pull/1440) ([Copephobia](https://github.com/Copephobia)) ### Merged -- Show info message only if available [\#1441](https://github.com/nextcloud/forms/pull/1441) ([susnux](https://github.com/susnux)) -- Update phpunit.yml to work with current Server master [\#1460](https://github.com/nextcloud/forms/pull/1460) ([Chartman123](https://github.com/Chartman123)) -- Enable PHPUnit integration tests and fix them [\#1449](https://github.com/nextcloud/forms/pull/1449) ([Chartman123](https://github.com/Chartman123)) -- Scope SCSS in Create.vue and adjust Results.vue [\#1447](https://github.com/nextcloud/forms/pull/1447) ([Chartman123](https://github.com/Chartman123)) -- Fix Typo [\#1450](https://github.com/nextcloud/forms/pull/1450) ([jotoeri](https://github.com/jotoeri)) +- Show info message only if available [\#1441](https://github.com/nextcloud/forms/pull/1441) ([susnux](https://github.com/susnux)) +- Update phpunit.yml to work with current Server master [\#1460](https://github.com/nextcloud/forms/pull/1460) ([Chartman123](https://github.com/Chartman123)) +- Enable PHPUnit integration tests and fix them [\#1449](https://github.com/nextcloud/forms/pull/1449) ([Chartman123](https://github.com/Chartman123)) +- Scope SCSS in Create.vue and adjust Results.vue [\#1447](https://github.com/nextcloud/forms/pull/1447) ([Chartman123](https://github.com/Chartman123)) +- Fix Typo [\#1450](https://github.com/nextcloud/forms/pull/1450) ([jotoeri](https://github.com/jotoeri)) ## 3.0.3 - 2022-12-30 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.0.2...v3.0.3) ### Fixed -- Fix export [\#1433](https://github.com/nextcloud/forms/pull/1433) ([jotoeri](https://github.com/jotoeri)) +- Fix export [\#1433](https://github.com/nextcloud/forms/pull/1433) ([jotoeri](https://github.com/jotoeri)) ## 3.0.2 - 2022-12-23 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.0.1...v3.0.2) ### Fixed -- Fix question header title for extra long text [\#1393](https://github.com/nextcloud/forms/pull/1393) ([susnux](https://github.com/susnux)) -- make forms OCS API CORS compatible [\#1139](https://github.com/nextcloud/forms/pull/1139) ([everlanes](https://github.com/everlanes)) -- Init all answers from props [\#1383](https://github.com/nextcloud/forms/pull/1383) ([susnux](https://github.com/susnux)) -- More usable and accessible navigation between View/Edit/Results [\#1381](https://github.com/nextcloud/forms/pull/1381) ([jancborchardt](https://github.com/jancborchardt)) +- Fix question header title for extra long text [\#1393](https://github.com/nextcloud/forms/pull/1393) ([susnux](https://github.com/susnux)) +- make forms OCS API CORS compatible [\#1139](https://github.com/nextcloud/forms/pull/1139) ([everlanes](https://github.com/everlanes)) +- Init all answers from props [\#1383](https://github.com/nextcloud/forms/pull/1383) ([susnux](https://github.com/susnux)) +- More usable and accessible navigation between View/Edit/Results [\#1381](https://github.com/nextcloud/forms/pull/1381) ([jancborchardt](https://github.com/jancborchardt)) ## 3.0.1 - 2022-10-25 [Full Changelog](https://github.com/nextcloud/forms/compare/v3.0.0...v3.0.1) ### Fixed -- Fix `setExtraSettings` to accept same type as `getExtraSettings` [\#1391](https://github.com/nextcloud/forms/pull/1391) ([susnux](https://github.com/susnux)) -- Use user's timezone for timestamps in CSV export [\#1389](https://github.com/nextcloud/forms/pull/1389) ([Chartman123](https://github.com/Chartman123)) + +- Fix `setExtraSettings` to accept same type as `getExtraSettings` [\#1391](https://github.com/nextcloud/forms/pull/1391) ([susnux](https://github.com/susnux)) +- Use user's timezone for timestamps in CSV export [\#1389](https://github.com/nextcloud/forms/pull/1389) ([Chartman123](https://github.com/Chartman123)) ### Merged -- Fix CI runs for postgres [\#1388](https://github.com/nextcloud/forms/pull/1388) ([Chartman123](https://github.com/Chartman123)) +- Fix CI runs for postgres [\#1388](https://github.com/nextcloud/forms/pull/1388) ([Chartman123](https://github.com/Chartman123)) ## 3.0.0 - 2022-10-13 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.5.1...v3.0.0) ### Breaking ⚠️ -- Moving completely from API v1 to v2. With this, we fundamentally change the way how the forms sharing works, now much more flexible and closer to how it is done in server. -- Also inverting SubmitOnce to SubmitMultiple with ApiV2 -- The question Type `datetime` has been replaced by `date` and `time` question types. Existing questions remain usable, but no `datetime` questions can be created anymore. + +- Moving completely from API v1 to v2. With this, we fundamentally change the way how the forms sharing works, now much more flexible and closer to how it is done in server. +- Also inverting SubmitOnce to SubmitMultiple with ApiV2 +- The question Type `datetime` has been replaced by `date` and `time` question types. Existing questions remain usable, but no `datetime` questions can be created anymore. ### Enhancements -- Use NcCheckboxRadioSwitch for QuestionMultiple [\#1322](https://github.com/nextcloud/forms/pull/1322) ([Chartman123](https://github.com/Chartman123)) -- Make dropdown searchable [\#1342](https://github.com/nextcloud/forms/pull/1342) ([Chartman123](https://github.com/Chartman123)) -- Add UI to preview and fill out own forms [\#1320](https://github.com/nextcloud/forms/pull/1320) ([susnux](https://github.com/susnux)) -- Make CHANGELOG.md parseable by the appstore [\#1306](https://github.com/nextcloud/forms/pull/1306) ([Chartman123](https://github.com/Chartman123)) -- More Icons! [\#1305](https://github.com/nextcloud/forms/pull/1305) ([jotoeri](https://github.com/jotoeri)) -- Move Question Icons to Material Design [\#1304](https://github.com/nextcloud/forms/pull/1304) ([jotoeri](https://github.com/jotoeri)) -- Update Forms Icon and create Component [\#1303](https://github.com/nextcloud/forms/pull/1303) ([jotoeri](https://github.com/jotoeri)) -- Feature: Allow shuffling of answer options | Sort options [\#1271](https://github.com/nextcloud/forms/pull/1271) ([susnux](https://github.com/susnux)) -- User migration [\#1243](https://github.com/nextcloud/forms/pull/1243) ([jotoeri](https://github.com/jotoeri)) -- Add UID to export [\#1204](https://github.com/nextcloud/forms/pull/1204) ([jotoeri](https://github.com/jotoeri)) -- Restrict Form Creation & Sharing Settings [\#1199](https://github.com/nextcloud/forms/pull/1199) ([jotoeri](https://github.com/jotoeri)) -- Add Question Description [\#1172](https://github.com/nextcloud/forms/pull/1172) ([jotoeri](https://github.com/jotoeri)) -- Rework Navigation [\#1168](https://github.com/nextcloud/forms/pull/1168) ([Chartman123](https://github.com/Chartman123)) -- New Sharing [\#1087](https://github.com/nextcloud/forms/pull/1087) ([jotoeri](https://github.com/jotoeri)) -- Make date/time answers consistent [\#1001](https://github.com/nextcloud/forms/pull/1001) ([Chartman123](https://github.com/Chartman123)) - -### Fixed -- Remove isDropdown condition [\#1368](https://github.com/nextcloud/forms/pull/1368) ([Chartman123](https://github.com/Chartman123)) -- Fix public View [\#1365](https://github.com/nextcloud/forms/pull/1365) ([jotoeri](https://github.com/jotoeri)) -- Adjust look of long text questions [\#1364](https://github.com/nextcloud/forms/pull/1364) ([Chartman123](https://github.com/Chartman123)) -- Fix datepicker height [\#1363](https://github.com/nextcloud/forms/pull/1363) ([jotoeri](https://github.com/jotoeri)) -- Fix upgrading [\#1361](https://github.com/nextcloud/forms/pull/1361) ([jotoeri](https://github.com/jotoeri)) -- Remove css variables [\#1360](https://github.com/nextcloud/forms/pull/1360) ([jotoeri](https://github.com/jotoeri)) -- Fix Actions Container [\#1359](https://github.com/nextcloud/forms/pull/1359) ([jotoeri](https://github.com/jotoeri)) -- Use `--gradient-primary-background` for summary [\#1356](https://github.com/nextcloud/forms/pull/1356) ([Chartman123](https://github.com/Chartman123)) -- Fix alignment of "Add question" button [\#1351](https://github.com/nextcloud/forms/pull/1351) ([Chartman123](https://github.com/Chartman123)) -- Adjust design based on Design Review [\#1344](https://github.com/nextcloud/forms/pull/1344) ([Chartman123](https://github.com/Chartman123)) -- Fixing several small things [\#1335](https://github.com/nextcloud/forms/pull/1335) ([jotoeri](https://github.com/jotoeri)) -- Fix migration 20220414 not working on SQLite [\#1334](https://github.com/nextcloud/forms/pull/1334) ([susnux](https://github.com/susnux)) -- Fix Add Question a11y [\#1269](https://github.com/nextcloud/forms/pull/1269) ([jotoeri](https://github.com/jotoeri)) -- Fix sharing icons [\#1242](https://github.com/nextcloud/forms/pull/1242) ([jotoeri](https://github.com/jotoeri)) -- Fix titles [\#1239](https://github.com/nextcloud/forms/pull/1239) ([jotoeri](https://github.com/jotoeri)) + +- Use NcCheckboxRadioSwitch for QuestionMultiple [\#1322](https://github.com/nextcloud/forms/pull/1322) ([Chartman123](https://github.com/Chartman123)) +- Make dropdown searchable [\#1342](https://github.com/nextcloud/forms/pull/1342) ([Chartman123](https://github.com/Chartman123)) +- Add UI to preview and fill out own forms [\#1320](https://github.com/nextcloud/forms/pull/1320) ([susnux](https://github.com/susnux)) +- Make CHANGELOG.md parseable by the appstore [\#1306](https://github.com/nextcloud/forms/pull/1306) ([Chartman123](https://github.com/Chartman123)) +- More Icons! [\#1305](https://github.com/nextcloud/forms/pull/1305) ([jotoeri](https://github.com/jotoeri)) +- Move Question Icons to Material Design [\#1304](https://github.com/nextcloud/forms/pull/1304) ([jotoeri](https://github.com/jotoeri)) +- Update Forms Icon and create Component [\#1303](https://github.com/nextcloud/forms/pull/1303) ([jotoeri](https://github.com/jotoeri)) +- Feature: Allow shuffling of answer options | Sort options [\#1271](https://github.com/nextcloud/forms/pull/1271) ([susnux](https://github.com/susnux)) +- User migration [\#1243](https://github.com/nextcloud/forms/pull/1243) ([jotoeri](https://github.com/jotoeri)) +- Add UID to export [\#1204](https://github.com/nextcloud/forms/pull/1204) ([jotoeri](https://github.com/jotoeri)) +- Restrict Form Creation & Sharing Settings [\#1199](https://github.com/nextcloud/forms/pull/1199) ([jotoeri](https://github.com/jotoeri)) +- Add Question Description [\#1172](https://github.com/nextcloud/forms/pull/1172) ([jotoeri](https://github.com/jotoeri)) +- Rework Navigation [\#1168](https://github.com/nextcloud/forms/pull/1168) ([Chartman123](https://github.com/Chartman123)) +- New Sharing [\#1087](https://github.com/nextcloud/forms/pull/1087) ([jotoeri](https://github.com/jotoeri)) +- Make date/time answers consistent [\#1001](https://github.com/nextcloud/forms/pull/1001) ([Chartman123](https://github.com/Chartman123)) + +### Fixed + +- Remove isDropdown condition [\#1368](https://github.com/nextcloud/forms/pull/1368) ([Chartman123](https://github.com/Chartman123)) +- Fix public View [\#1365](https://github.com/nextcloud/forms/pull/1365) ([jotoeri](https://github.com/jotoeri)) +- Adjust look of long text questions [\#1364](https://github.com/nextcloud/forms/pull/1364) ([Chartman123](https://github.com/Chartman123)) +- Fix datepicker height [\#1363](https://github.com/nextcloud/forms/pull/1363) ([jotoeri](https://github.com/jotoeri)) +- Fix upgrading [\#1361](https://github.com/nextcloud/forms/pull/1361) ([jotoeri](https://github.com/jotoeri)) +- Remove css variables [\#1360](https://github.com/nextcloud/forms/pull/1360) ([jotoeri](https://github.com/jotoeri)) +- Fix Actions Container [\#1359](https://github.com/nextcloud/forms/pull/1359) ([jotoeri](https://github.com/jotoeri)) +- Use `--gradient-primary-background` for summary [\#1356](https://github.com/nextcloud/forms/pull/1356) ([Chartman123](https://github.com/Chartman123)) +- Fix alignment of "Add question" button [\#1351](https://github.com/nextcloud/forms/pull/1351) ([Chartman123](https://github.com/Chartman123)) +- Adjust design based on Design Review [\#1344](https://github.com/nextcloud/forms/pull/1344) ([Chartman123](https://github.com/Chartman123)) +- Fixing several small things [\#1335](https://github.com/nextcloud/forms/pull/1335) ([jotoeri](https://github.com/jotoeri)) +- Fix migration 20220414 not working on SQLite [\#1334](https://github.com/nextcloud/forms/pull/1334) ([susnux](https://github.com/susnux)) +- Fix Add Question a11y [\#1269](https://github.com/nextcloud/forms/pull/1269) ([jotoeri](https://github.com/jotoeri)) +- Fix sharing icons [\#1242](https://github.com/nextcloud/forms/pull/1242) ([jotoeri](https://github.com/jotoeri)) +- Fix titles [\#1239](https://github.com/nextcloud/forms/pull/1239) ([jotoeri](https://github.com/jotoeri)) ### Merged -- Fix lint warning [\#1371](https://github.com/nextcloud/forms/pull/1371) ([Chartman123](https://github.com/Chartman123)) -- Fix aria warning [\#1370](https://github.com/nextcloud/forms/pull/1370) ([jotoeri](https://github.com/jotoeri)) -- Fix question movement [\#1362](https://github.com/nextcloud/forms/pull/1362) ([jotoeri](https://github.com/jotoeri)) -- Adjust testing matrix for Nextcloud 25 on master [\#1354](https://github.com/nextcloud/forms/pull/1354) ([nickvergessen](https://github.com/nickvergessen)) -- Remove unneeded css [\#1352](https://github.com/nextcloud/forms/pull/1352) ([Chartman123](https://github.com/Chartman123)) -- minversion 25 [\#1348](https://github.com/nextcloud/forms/pull/1348) ([Chartman123](https://github.com/Chartman123)) -- Adjust styling for NC25 & Update `@nextcloud/vue` [\#1338](https://github.com/nextcloud/forms/pull/1338) ([susnux](https://github.com/susnux)) -- Empty Content to Vue [\#1321](https://github.com/nextcloud/forms/pull/1321) ([jotoeri](https://github.com/jotoeri)) -- Move to NcEmptyContent and even more icons [\#1308](https://github.com/nextcloud/forms/pull/1308) ([jotoeri](https://github.com/jotoeri)) -- Use NC/vue beta 3 [\#1298](https://github.com/nextcloud/forms/pull/1298) ([jotoeri](https://github.com/jotoeri)) -- Update Marcos Email [\#1285](https://github.com/nextcloud/forms/pull/1285) ([jotoeri](https://github.com/jotoeri)) -- Use MutliSelect for dropdown questions [\#1283](https://github.com/nextcloud/forms/pull/1283) ([Chartman123](https://github.com/Chartman123)) -- Move to button component & first material icons [\#1281](https://github.com/nextcloud/forms/pull/1281) ([jotoeri](https://github.com/jotoeri)) -- Move to Psr\Log\LoggerInterface [\#1275](https://github.com/nextcloud/forms/pull/1275) ([Chartman123](https://github.com/Chartman123)) -- Use `@nextcloud/logger` for frontend logging [\#1274](https://github.com/nextcloud/forms/pull/1274) ([susnux](https://github.com/susnux)) -- Set border color to maxcontrast [\#1270](https://github.com/nextcloud/forms/pull/1270) ([Chartman123](https://github.com/Chartman123)) -- Invert submitOnce [\#1252](https://github.com/nextcloud/forms/pull/1252) ([jotoeri](https://github.com/jotoeri)) -- Remove old code [\#1240](https://github.com/nextcloud/forms/pull/1240) ([jotoeri](https://github.com/jotoeri)) -- Removed trailing dot [\#1228](https://github.com/nextcloud/forms/pull/1228) ([rakekniven](https://github.com/rakekniven)) -- Rename Radio buttons [\#1215](https://github.com/nextcloud/forms/pull/1215) ([jotoeri](https://github.com/jotoeri)) -- Remove old forms tables [\#1156](https://github.com/nextcloud/forms/pull/1156) ([jotoeri](https://github.com/jotoeri)) -- Simple API Test, bump php dependencies [\#1148](https://github.com/nextcloud/forms/pull/1148) ([jotoeri](https://github.com/jotoeri)) -- API v2 [\#1126](https://github.com/nextcloud/forms/pull/1126) ([jotoeri](https://github.com/jotoeri)) +- Fix lint warning [\#1371](https://github.com/nextcloud/forms/pull/1371) ([Chartman123](https://github.com/Chartman123)) +- Fix aria warning [\#1370](https://github.com/nextcloud/forms/pull/1370) ([jotoeri](https://github.com/jotoeri)) +- Fix question movement [\#1362](https://github.com/nextcloud/forms/pull/1362) ([jotoeri](https://github.com/jotoeri)) +- Adjust testing matrix for Nextcloud 25 on master [\#1354](https://github.com/nextcloud/forms/pull/1354) ([nickvergessen](https://github.com/nickvergessen)) +- Remove unneeded css [\#1352](https://github.com/nextcloud/forms/pull/1352) ([Chartman123](https://github.com/Chartman123)) +- minversion 25 [\#1348](https://github.com/nextcloud/forms/pull/1348) ([Chartman123](https://github.com/Chartman123)) +- Adjust styling for NC25 & Update `@nextcloud/vue` [\#1338](https://github.com/nextcloud/forms/pull/1338) ([susnux](https://github.com/susnux)) +- Empty Content to Vue [\#1321](https://github.com/nextcloud/forms/pull/1321) ([jotoeri](https://github.com/jotoeri)) +- Move to NcEmptyContent and even more icons [\#1308](https://github.com/nextcloud/forms/pull/1308) ([jotoeri](https://github.com/jotoeri)) +- Use NC/vue beta 3 [\#1298](https://github.com/nextcloud/forms/pull/1298) ([jotoeri](https://github.com/jotoeri)) +- Update Marcos Email [\#1285](https://github.com/nextcloud/forms/pull/1285) ([jotoeri](https://github.com/jotoeri)) +- Use MutliSelect for dropdown questions [\#1283](https://github.com/nextcloud/forms/pull/1283) ([Chartman123](https://github.com/Chartman123)) +- Move to button component & first material icons [\#1281](https://github.com/nextcloud/forms/pull/1281) ([jotoeri](https://github.com/jotoeri)) +- Move to Psr\Log\LoggerInterface [\#1275](https://github.com/nextcloud/forms/pull/1275) ([Chartman123](https://github.com/Chartman123)) +- Use `@nextcloud/logger` for frontend logging [\#1274](https://github.com/nextcloud/forms/pull/1274) ([susnux](https://github.com/susnux)) +- Set border color to maxcontrast [\#1270](https://github.com/nextcloud/forms/pull/1270) ([Chartman123](https://github.com/Chartman123)) +- Invert submitOnce [\#1252](https://github.com/nextcloud/forms/pull/1252) ([jotoeri](https://github.com/jotoeri)) +- Remove old code [\#1240](https://github.com/nextcloud/forms/pull/1240) ([jotoeri](https://github.com/jotoeri)) +- Removed trailing dot [\#1228](https://github.com/nextcloud/forms/pull/1228) ([rakekniven](https://github.com/rakekniven)) +- Rename Radio buttons [\#1215](https://github.com/nextcloud/forms/pull/1215) ([jotoeri](https://github.com/jotoeri)) +- Remove old forms tables [\#1156](https://github.com/nextcloud/forms/pull/1156) ([jotoeri](https://github.com/jotoeri)) +- Simple API Test, bump php dependencies [\#1148](https://github.com/nextcloud/forms/pull/1148) ([jotoeri](https://github.com/jotoeri)) +- API v2 [\#1126](https://github.com/nextcloud/forms/pull/1126) ([jotoeri](https://github.com/jotoeri)) ## 2.5.1 - 2022-05-26 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.5.0...v2.5.1) ### Fixed -- Fix upgrading [\#1212](https://github.com/nextcloud/forms/pull/1212) ([nickvergessen](https://github.com/nickvergessen)) +- Fix upgrading [\#1212](https://github.com/nextcloud/forms/pull/1212) ([nickvergessen](https://github.com/nickvergessen)) ## 2.5.0 - 2022-04-08 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.4.0...v2.5.0) ### Enhancements -- Include Capabilities Response [\#1158](https://github.com/nextcloud/forms/pull/1158) ([jotoeri](https://github.com/jotoeri)) - -### Fixed -- Rollback Capabilities - [\#1162](https://github.com/nextcloud/forms/pull/1162) ([jotoeri](https://github.com/jotoeri)) -- Update master php testing versions - [\#1161](https://github.com/nextcloud/forms/pull/1161) ([nickvergessen](https://github.com/nickvergessen)) -- Update master php testing versions - [\#1157](https://github.com/nextcloud/forms/pull/1157) ([nickvergessen](https://github.com/nickvergessen)) -- Fix tests - [\#1151](https://github.com/nextcloud/forms/pull/1151) ([jotoeri](https://github.com/jotoeri)) -- Minversion 22 - [\#1150](https://github.com/nextcloud/forms/pull/1150) ([jotoeri](https://github.com/jotoeri)) -- Move to NC-Internal Db-Types - [\#1149](https://github.com/nextcloud/forms/pull/1149) ([jotoeri](https://github.com/jotoeri)) -- Replace deprecated String.prototype.substr\(\) - [\#1141](https://github.com/nextcloud/forms/pull/1141) ([CommanderRoot](https://github.com/CommanderRoot)) -- Improve Question Text - [\#1127](https://github.com/nextcloud/forms/pull/1127) ([jotoeri](https://github.com/jotoeri)) -- Fix Linting Warnings - [\#1082](https://github.com/nextcloud/forms/pull/1082) ([jotoeri](https://github.com/jotoeri)) -- Update version on master - [\#1071](https://github.com/nextcloud/forms/pull/1071) ([nickvergessen](https://github.com/nickvergessen)) -- Update master target versions - [\#1070](https://github.com/nextcloud/forms/pull/1070) ([nickvergessen](https://github.com/nickvergessen)) +- Include Capabilities Response [\#1158](https://github.com/nextcloud/forms/pull/1158) ([jotoeri](https://github.com/jotoeri)) + +### Fixed + +- Rollback Capabilities + [\#1162](https://github.com/nextcloud/forms/pull/1162) ([jotoeri](https://github.com/jotoeri)) +- Update master php testing versions + [\#1161](https://github.com/nextcloud/forms/pull/1161) ([nickvergessen](https://github.com/nickvergessen)) +- Update master php testing versions + [\#1157](https://github.com/nextcloud/forms/pull/1157) ([nickvergessen](https://github.com/nickvergessen)) +- Fix tests + [\#1151](https://github.com/nextcloud/forms/pull/1151) ([jotoeri](https://github.com/jotoeri)) +- Minversion 22 + [\#1150](https://github.com/nextcloud/forms/pull/1150) ([jotoeri](https://github.com/jotoeri)) +- Move to NC-Internal Db-Types + [\#1149](https://github.com/nextcloud/forms/pull/1149) ([jotoeri](https://github.com/jotoeri)) +- Replace deprecated String.prototype.substr\(\) + [\#1141](https://github.com/nextcloud/forms/pull/1141) ([CommanderRoot](https://github.com/CommanderRoot)) +- Improve Question Text + [\#1127](https://github.com/nextcloud/forms/pull/1127) ([jotoeri](https://github.com/jotoeri)) +- Fix Linting Warnings + [\#1082](https://github.com/nextcloud/forms/pull/1082) ([jotoeri](https://github.com/jotoeri)) +- Update version on master + [\#1071](https://github.com/nextcloud/forms/pull/1071) ([nickvergessen](https://github.com/nickvergessen)) +- Update master target versions + [\#1070](https://github.com/nextcloud/forms/pull/1070) ([nickvergessen](https://github.com/nickvergessen)) ## 2.4.0 - 2021-11-10 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.3.0...v2.4.0) ### Enhancements -- 2.4.0 - [\#1068](https://github.com/nextcloud/forms/pull/1068) ([skjnldsv](https://github.com/skjnldsv)) -- Enable HMR - [\#1024](https://github.com/nextcloud/forms/pull/1024) ([jotoeri](https://github.com/jotoeri)) +- 2.4.0 + [\#1068](https://github.com/nextcloud/forms/pull/1068) ([skjnldsv](https://github.com/skjnldsv)) +- Enable HMR + [\#1024](https://github.com/nextcloud/forms/pull/1024) ([jotoeri](https://github.com/jotoeri)) ## 2.3.0 - 2021-07-28 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.2.4...v2.3.0) ### Deprecated ⚠️ -- Question property `mandatory` is deprecated and replaced by `isRequired`. The old property will be removed in API version 2. - [\#882](https://github.com/nextcloud/forms/pull/882) ([chartman123](https://github.com/Chartman123)) + +- Question property `mandatory` is deprecated and replaced by `isRequired`. The old property will be removed in API version 2. + [\#882](https://github.com/nextcloud/forms/pull/882) ([chartman123](https://github.com/Chartman123)) ### Enhancements -- Add server-side validation of submissions - [\#895](https://github.com/nextcloud/forms/pull/895) ([Chartman123](https://github.com/Chartman123)) -- Delete a deleted Users Forms - [\#856](https://github.com/nextcloud/forms/pull/856) ([jotoeri](https://github.com/jotoeri)) + +- Add server-side validation of submissions + [\#895](https://github.com/nextcloud/forms/pull/895) ([Chartman123](https://github.com/Chartman123)) +- Delete a deleted Users Forms + [\#856](https://github.com/nextcloud/forms/pull/856) ([jotoeri](https://github.com/jotoeri)) ### Fixed -- Fix Activity Link - [\#976](https://github.com/nextcloud/forms/pull/976) ([jotoeri](https://github.com/jotoeri)) -- Allow non-admins to export to files - [\#923](https://github.com/nextcloud/forms/pull/923) ([skjnldsv](https://github.com/skjnldsv)) -- Fix result view for long text answers - [\#913](https://github.com/nextcloud/forms/pull/913) ([Chartman123](https://github.com/Chartman123)) -- Fix boolean columns nullable - [\#881](https://github.com/nextcloud/forms/pull/881) ([jotoeri](https://github.com/jotoeri)) + +- Fix Activity Link + [\#976](https://github.com/nextcloud/forms/pull/976) ([jotoeri](https://github.com/jotoeri)) +- Allow non-admins to export to files + [\#923](https://github.com/nextcloud/forms/pull/923) ([skjnldsv](https://github.com/skjnldsv)) +- Fix result view for long text answers + [\#913](https://github.com/nextcloud/forms/pull/913) ([Chartman123](https://github.com/Chartman123)) +- Fix boolean columns nullable + [\#881](https://github.com/nextcloud/forms/pull/881) ([jotoeri](https://github.com/jotoeri)) ### Merged -- Minversion 20 - [\#1021](https://github.com/nextcloud/forms/pull/1021) ([jotoeri](https://github.com/jotoeri)) -- Fix phpunit typo - [\#1020](https://github.com/nextcloud/forms/pull/1020) ([jotoeri](https://github.com/jotoeri)) -- Update version on master - [\#994](https://github.com/nextcloud/forms/pull/994) ([nickvergessen](https://github.com/nickvergessen)) -- Update master target versions - [\#993](https://github.com/nextcloud/forms/pull/993) ([nickvergessen](https://github.com/nickvergessen)) -- Bump node and npm version in package.json - [\#989](https://github.com/nextcloud/forms/pull/989) ([nickvergessen](https://github.com/nickvergessen)) -- Test FormsService - [\#921](https://github.com/nextcloud/forms/pull/921) ([jotoeri](https://github.com/jotoeri)) -- Some more tests - [\#893](https://github.com/nextcloud/forms/pull/893) ([jotoeri](https://github.com/jotoeri)) -- Refactor Mandatory - [\#882](https://github.com/nextcloud/forms/pull/882) ([Chartman123](https://github.com/Chartman123)) +- Minversion 20 + [\#1021](https://github.com/nextcloud/forms/pull/1021) ([jotoeri](https://github.com/jotoeri)) +- Fix phpunit typo + [\#1020](https://github.com/nextcloud/forms/pull/1020) ([jotoeri](https://github.com/jotoeri)) +- Update version on master + [\#994](https://github.com/nextcloud/forms/pull/994) ([nickvergessen](https://github.com/nickvergessen)) +- Update master target versions + [\#993](https://github.com/nextcloud/forms/pull/993) ([nickvergessen](https://github.com/nickvergessen)) +- Bump node and npm version in package.json + [\#989](https://github.com/nextcloud/forms/pull/989) ([nickvergessen](https://github.com/nickvergessen)) +- Test FormsService + [\#921](https://github.com/nextcloud/forms/pull/921) ([jotoeri](https://github.com/jotoeri)) +- Some more tests + [\#893](https://github.com/nextcloud/forms/pull/893) ([jotoeri](https://github.com/jotoeri)) +- Refactor Mandatory + [\#882](https://github.com/nextcloud/forms/pull/882) ([Chartman123](https://github.com/Chartman123)) ## 2.2.4 - 2021-03-30 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.2.3...v2.2.4) ### Fixed -- Fix export again - [\#871](https://github.com/nextcloud/forms/pull/871) ([jotoeri](https://github.com/jotoeri)) + +- Fix export again + [\#871](https://github.com/nextcloud/forms/pull/871) ([jotoeri](https://github.com/jotoeri)) ### Merged -- Bump dependencies - [\#872](https://github.com/nextcloud/forms/pull/872) ([skjnldsv](https://github.com/skjnldsv)) +- Bump dependencies + [\#872](https://github.com/nextcloud/forms/pull/872) ([skjnldsv](https://github.com/skjnldsv)) ## 2.2.3 - 2021-03-25 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.2.2...v2.2.3) ### Fixed -- Fix export multiple answers - [\#860](https://github.com/nextcloud/forms/pull/860) ([jotoeri](https://github.com/jotoeri)) -- Fix activity l10n - [\#845](https://github.com/nextcloud/forms/pull/845) ([jotoeri](https://github.com/jotoeri)) +- Fix export multiple answers + [\#860](https://github.com/nextcloud/forms/pull/860) ([jotoeri](https://github.com/jotoeri)) +- Fix activity l10n + [\#845](https://github.com/nextcloud/forms/pull/845) ([jotoeri](https://github.com/jotoeri)) ## 2.2.2 - 2021-03-15 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.2.1...v2.2.2) ### Fixed -- Fix Routing - [\#846](https://github.com/nextcloud/forms/pull/846) ([jotoeri](https://github.com/jotoeri)) -- Fix half access objects - [\#844](https://github.com/nextcloud/forms/pull/844) ([jotoeri](https://github.com/jotoeri)) +- Fix Routing + [\#846](https://github.com/nextcloud/forms/pull/846) ([jotoeri](https://github.com/jotoeri)) +- Fix half access objects + [\#844](https://github.com/nextcloud/forms/pull/844) ([jotoeri](https://github.com/jotoeri)) ## 2.2.1 - 2021-03-10 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.2.0...v2.2.1) ### Fixed -- Fix router naming conflict - [\#837](https://github.com/nextcloud/forms/pull/837) ([jotoeri](https://github.com/jotoeri)) -- Fix Summary Aggregation - [\#835](https://github.com/nextcloud/forms/pull/835) ([jotoeri](https://github.com/jotoeri)) +- Fix router naming conflict + [\#837](https://github.com/nextcloud/forms/pull/837) ([jotoeri](https://github.com/jotoeri)) +- Fix Summary Aggregation + [\#835](https://github.com/nextcloud/forms/pull/835) ([jotoeri](https://github.com/jotoeri)) ## 2.2.0 - 2021-03-09 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.1.0...v2.2.0) ### Enhancements -- Create Activities - [\#789](https://github.com/nextcloud/forms/pull/789) ([jotoeri](https://github.com/jotoeri)) -- Export csv to cloud - [\#780](https://github.com/nextcloud/forms/pull/780) ([jotoeri](https://github.com/jotoeri)) -- Show shared forms on navigation - [\#763](https://github.com/nextcloud/forms/pull/763) ([jotoeri](https://github.com/jotoeri)) -- Clone Forms - [\#756](https://github.com/nextcloud/forms/pull/756) ([jotoeri](https://github.com/jotoeri)) -- Include API Docs - [\#748](https://github.com/nextcloud/forms/pull/748) ([jotoeri](https://github.com/jotoeri)) - -### Fixed -- Disable iPhone Auto-Zoom - [\#816](https://github.com/nextcloud/forms/pull/816) ([jotoeri](https://github.com/jotoeri)) -- Clarify translations - [\#815](https://github.com/nextcloud/forms/pull/815) ([jotoeri](https://github.com/jotoeri)) -- Fix anonymous text - [\#804](https://github.com/nextcloud/forms/pull/804) ([jotoeri](https://github.com/jotoeri)) -- Fix header-height for NC19 - [\#802](https://github.com/nextcloud/forms/pull/802) ([jotoeri](https://github.com/jotoeri)) -- Manually set Types - [\#801](https://github.com/nextcloud/forms/pull/801) ([jotoeri](https://github.com/jotoeri)) -- Fix Sharing if deleted users are in list - [\#796](https://github.com/nextcloud/forms/pull/796) ([jotoeri](https://github.com/jotoeri)) -- Show all winners bold - [\#793](https://github.com/nextcloud/forms/pull/793) ([jotoeri](https://github.com/jotoeri)) -- Properly Scroll for required question - [\#792](https://github.com/nextcloud/forms/pull/792) ([jotoeri](https://github.com/jotoeri)) -- Fix toast svg - [\#791](https://github.com/nextcloud/forms/pull/791) ([jotoeri](https://github.com/jotoeri)) -- Properly delete Answers - [\#765](https://github.com/nextcloud/forms/pull/765) ([jotoeri](https://github.com/jotoeri)) -- Harden update restrictions - [\#750](https://github.com/nextcloud/forms/pull/750) ([jotoeri](https://github.com/jotoeri)) -- Make new option return similar to new question and form - [\#749](https://github.com/nextcloud/forms/pull/749) ([jotoeri](https://github.com/jotoeri)) -- Add csv export and prevents CSV formula injection - [\#746](https://github.com/nextcloud/forms/pull/746) ([skjnldsv](https://github.com/skjnldsv)) -- Add indexes - [\#744](https://github.com/nextcloud/forms/pull/744) ([skjnldsv](https://github.com/skjnldsv)) + +- Create Activities + [\#789](https://github.com/nextcloud/forms/pull/789) ([jotoeri](https://github.com/jotoeri)) +- Export csv to cloud + [\#780](https://github.com/nextcloud/forms/pull/780) ([jotoeri](https://github.com/jotoeri)) +- Show shared forms on navigation + [\#763](https://github.com/nextcloud/forms/pull/763) ([jotoeri](https://github.com/jotoeri)) +- Clone Forms + [\#756](https://github.com/nextcloud/forms/pull/756) ([jotoeri](https://github.com/jotoeri)) +- Include API Docs + [\#748](https://github.com/nextcloud/forms/pull/748) ([jotoeri](https://github.com/jotoeri)) + +### Fixed + +- Disable iPhone Auto-Zoom + [\#816](https://github.com/nextcloud/forms/pull/816) ([jotoeri](https://github.com/jotoeri)) +- Clarify translations + [\#815](https://github.com/nextcloud/forms/pull/815) ([jotoeri](https://github.com/jotoeri)) +- Fix anonymous text + [\#804](https://github.com/nextcloud/forms/pull/804) ([jotoeri](https://github.com/jotoeri)) +- Fix header-height for NC19 + [\#802](https://github.com/nextcloud/forms/pull/802) ([jotoeri](https://github.com/jotoeri)) +- Manually set Types + [\#801](https://github.com/nextcloud/forms/pull/801) ([jotoeri](https://github.com/jotoeri)) +- Fix Sharing if deleted users are in list + [\#796](https://github.com/nextcloud/forms/pull/796) ([jotoeri](https://github.com/jotoeri)) +- Show all winners bold + [\#793](https://github.com/nextcloud/forms/pull/793) ([jotoeri](https://github.com/jotoeri)) +- Properly Scroll for required question + [\#792](https://github.com/nextcloud/forms/pull/792) ([jotoeri](https://github.com/jotoeri)) +- Fix toast svg + [\#791](https://github.com/nextcloud/forms/pull/791) ([jotoeri](https://github.com/jotoeri)) +- Properly delete Answers + [\#765](https://github.com/nextcloud/forms/pull/765) ([jotoeri](https://github.com/jotoeri)) +- Harden update restrictions + [\#750](https://github.com/nextcloud/forms/pull/750) ([jotoeri](https://github.com/jotoeri)) +- Make new option return similar to new question and form + [\#749](https://github.com/nextcloud/forms/pull/749) ([jotoeri](https://github.com/jotoeri)) +- Add csv export and prevents CSV formula injection + [\#746](https://github.com/nextcloud/forms/pull/746) ([skjnldsv](https://github.com/skjnldsv)) +- Add indexes + [\#744](https://github.com/nextcloud/forms/pull/744) ([skjnldsv](https://github.com/skjnldsv)) ### Merged -- Use new RichObject - [\#820](https://github.com/nextcloud/forms/pull/820) ([jotoeri](https://github.com/jotoeri)) -- Introduce php-constants, use for predefined answerTypes - [\#795](https://github.com/nextcloud/forms/pull/795) ([jotoeri](https://github.com/jotoeri)) -- Include TopBar Share-button - [\#781](https://github.com/nextcloud/forms/pull/781) ([jotoeri](https://github.com/jotoeri)) -- Remove stale code - [\#757](https://github.com/nextcloud/forms/pull/757) ([jotoeri](https://github.com/jotoeri)) +- Use new RichObject + [\#820](https://github.com/nextcloud/forms/pull/820) ([jotoeri](https://github.com/jotoeri)) +- Introduce php-constants, use for predefined answerTypes + [\#795](https://github.com/nextcloud/forms/pull/795) ([jotoeri](https://github.com/jotoeri)) +- Include TopBar Share-button + [\#781](https://github.com/nextcloud/forms/pull/781) ([jotoeri](https://github.com/jotoeri)) +- Remove stale code + [\#757](https://github.com/nextcloud/forms/pull/757) ([jotoeri](https://github.com/jotoeri)) ## 2.1.0 - 2021-01-04 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.4...v2.1.0) ### Merged -- Add Date & Datetime Component - [\#672](https://github.com/nextcloud/forms/pull/672) ([jotoeri](https://github.com/jotoeri)) -- Bump eslint to 7 and associated dependencies - [\#661](https://github.com/nextcloud/forms/pull/661) ([skjnldsv](https://github.com/skjnldsv)) -- Inform user if the form is anonymous - [\#635](https://github.com/nextcloud/forms/pull/635) ([Nienzu](https://github.com/Nienzu)) + +- Add Date & Datetime Component + [\#672](https://github.com/nextcloud/forms/pull/672) ([jotoeri](https://github.com/jotoeri)) +- Bump eslint to 7 and associated dependencies + [\#661](https://github.com/nextcloud/forms/pull/661) ([skjnldsv](https://github.com/skjnldsv)) +- Inform user if the form is anonymous + [\#635](https://github.com/nextcloud/forms/pull/635) ([Nienzu](https://github.com/Nienzu)) ### Fixed -- Fix datetime mandatory - [\#696](https://github.com/nextcloud/forms/pull/696) ([jotoeri](https://github.com/jotoeri)) -- Fix Popover-Reference - [\#695](https://github.com/nextcloud/forms/pull/695) ([jotoeri](https://github.com/jotoeri)) -- Fix time-formatting - [\#671](https://github.com/nextcloud/forms/pull/671) ([jotoeri](https://github.com/jotoeri)) +- Fix datetime mandatory + [\#696](https://github.com/nextcloud/forms/pull/696) ([jotoeri](https://github.com/jotoeri)) +- Fix Popover-Reference + [\#695](https://github.com/nextcloud/forms/pull/695) ([jotoeri](https://github.com/jotoeri)) +- Fix time-formatting + [\#671](https://github.com/nextcloud/forms/pull/671) ([jotoeri](https://github.com/jotoeri)) ## 2.0.4 - 2020-09-01 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.3...v2.0.4) ### Merged -- NC 20 compatibility -- Move to OCS API - [\#556](https://github.com/nextcloud/forms/pull/556) ([skjnldsv](https://github.com/skjnldsv)) -- Translations update -- Dependencies update +- NC 20 compatibility +- Move to OCS API + [\#556](https://github.com/nextcloud/forms/pull/556) ([skjnldsv](https://github.com/skjnldsv)) +- Translations update +- Dependencies update ## 2.0.3 - 2020-08-20 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.2...v2.0.3) ### Merged -- Translations update -- Dependencies update +- Translations update +- Dependencies update ## 2.0.2 - 2020-07-30 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.1...v2.0.2) ### Fixed -- Increase description and long-text max length - [\#533](https://github.com/nextcloud/forms/pull/533) ([jotoeri](https://github.com/jotoeri)) +- Increase description and long-text max length + [\#533](https://github.com/nextcloud/forms/pull/533) ([jotoeri](https://github.com/jotoeri)) ## 2.0.1 - 2020-07-29 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0...v2.0.1) ### Fixed -- Fix substring utf8 - [\#528](https://github.com/nextcloud/forms/pull/528) ([jotoeri](https://github.com/jotoeri)) +- Fix substring utf8 + [\#528](https://github.com/nextcloud/forms/pull/528) ([jotoeri](https://github.com/jotoeri)) ## 2.0.0 - 2020-07-28 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0-rc.1...v2.0.0) ### Fixed -- Fix dropdown submission insert - [\#520](https://github.com/nextcloud/forms/pull/520) ([skjnldsv](https://github.com/skjnldsv)) +- Fix dropdown submission insert + [\#520](https://github.com/nextcloud/forms/pull/520) ([skjnldsv](https://github.com/skjnldsv)) ## 2.0.0-rc.1 - 2020-07-24 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0-beta.4...v2.0.0-rc.1) ### Enhancements -- Add screenshot of response visualization, adjust readme - [\#513](https://github.com/nextcloud/forms/pull/513) ([jancborchardt](https://github.com/jancborchardt)) -- Move to webpack vue global config & clean routes - [\#508](https://github.com/nextcloud/forms/pull/508) ([skjnldsv](https://github.com/skjnldsv)) -- Include version on feature-request template - [\#478](https://github.com/nextcloud/forms/pull/478) ([jotoeri](https://github.com/jotoeri)) -- Change 'Mandatory' to simpler 'Required' - [\#464](https://github.com/nextcloud/forms/pull/464) ([jancborchardt](https://github.com/jancborchardt)) -- Dropdown question type, ref \#340 - [\#461](https://github.com/nextcloud/forms/pull/461) ([jancborchardt](https://github.com/jancborchardt)) -- Add summary response visualization, fix \#314 - [\#460](https://github.com/nextcloud/forms/pull/460) ([jancborchardt](https://github.com/jancborchardt)) -- Add '\(responses\)' to export file name - [\#450](https://github.com/nextcloud/forms/pull/450) ([jancborchardt](https://github.com/jancborchardt)) -- Enh/invalid warning - [\#415](https://github.com/nextcloud/forms/pull/415) ([jotoeri](https://github.com/jotoeri)) -- Show MultipleInput icons in Edit-Mode - [\#409](https://github.com/nextcloud/forms/pull/409) ([jotoeri](https://github.com/jotoeri)) -- Put AppNavigationItems into proper Container - [\#406](https://github.com/nextcloud/forms/pull/406) ([jotoeri](https://github.com/jotoeri)) -- Question-specific placeholders - [\#389](https://github.com/nextcloud/forms/pull/389) ([jotoeri](https://github.com/jotoeri)) - -### Fixed -- Fix questions & submissions assignment - [\#485](https://github.com/nextcloud/forms/pull/485) ([skjnldsv](https://github.com/skjnldsv)) -- Revert "Allow navigation through edit via Tab-Key" - [\#484](https://github.com/nextcloud/forms/pull/484) ([skjnldsv](https://github.com/skjnldsv)) -- Fix submitting form with expiration-date. - [\#469](https://github.com/nextcloud/forms/pull/469) ([jotoeri](https://github.com/jotoeri)) -- Invert submitOnce on UI - [\#452](https://github.com/nextcloud/forms/pull/452) ([jotoeri](https://github.com/jotoeri)) -- Allow navigation through edit via Tab-Key - [\#427](https://github.com/nextcloud/forms/pull/427) ([jotoeri](https://github.com/jotoeri)) -- Fix public template header - [\#420](https://github.com/nextcloud/forms/pull/420) ([jotoeri](https://github.com/jotoeri)) -- Fix some small MultipleInput issues - [\#394](https://github.com/nextcloud/forms/pull/394) ([jotoeri](https://github.com/jotoeri)) +- Add screenshot of response visualization, adjust readme + [\#513](https://github.com/nextcloud/forms/pull/513) ([jancborchardt](https://github.com/jancborchardt)) +- Move to webpack vue global config & clean routes + [\#508](https://github.com/nextcloud/forms/pull/508) ([skjnldsv](https://github.com/skjnldsv)) +- Include version on feature-request template + [\#478](https://github.com/nextcloud/forms/pull/478) ([jotoeri](https://github.com/jotoeri)) +- Change 'Mandatory' to simpler 'Required' + [\#464](https://github.com/nextcloud/forms/pull/464) ([jancborchardt](https://github.com/jancborchardt)) +- Dropdown question type, ref \#340 + [\#461](https://github.com/nextcloud/forms/pull/461) ([jancborchardt](https://github.com/jancborchardt)) +- Add summary response visualization, fix \#314 + [\#460](https://github.com/nextcloud/forms/pull/460) ([jancborchardt](https://github.com/jancborchardt)) +- Add '\(responses\)' to export file name + [\#450](https://github.com/nextcloud/forms/pull/450) ([jancborchardt](https://github.com/jancborchardt)) +- Enh/invalid warning + [\#415](https://github.com/nextcloud/forms/pull/415) ([jotoeri](https://github.com/jotoeri)) +- Show MultipleInput icons in Edit-Mode + [\#409](https://github.com/nextcloud/forms/pull/409) ([jotoeri](https://github.com/jotoeri)) +- Put AppNavigationItems into proper Container + [\#406](https://github.com/nextcloud/forms/pull/406) ([jotoeri](https://github.com/jotoeri)) +- Question-specific placeholders + [\#389](https://github.com/nextcloud/forms/pull/389) ([jotoeri](https://github.com/jotoeri)) + +### Fixed + +- Fix questions & submissions assignment + [\#485](https://github.com/nextcloud/forms/pull/485) ([skjnldsv](https://github.com/skjnldsv)) +- Revert "Allow navigation through edit via Tab-Key" + [\#484](https://github.com/nextcloud/forms/pull/484) ([skjnldsv](https://github.com/skjnldsv)) +- Fix submitting form with expiration-date. + [\#469](https://github.com/nextcloud/forms/pull/469) ([jotoeri](https://github.com/jotoeri)) +- Invert submitOnce on UI + [\#452](https://github.com/nextcloud/forms/pull/452) ([jotoeri](https://github.com/jotoeri)) +- Allow navigation through edit via Tab-Key + [\#427](https://github.com/nextcloud/forms/pull/427) ([jotoeri](https://github.com/jotoeri)) +- Fix public template header + [\#420](https://github.com/nextcloud/forms/pull/420) ([jotoeri](https://github.com/jotoeri)) +- Fix some small MultipleInput issues + [\#394](https://github.com/nextcloud/forms/pull/394) ([jotoeri](https://github.com/jotoeri)) ## 2.0.0-beta.4 - 2020-06-09 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0-beta.3...v2.0.0-beta.4) ### Fixed -- Keep focus when copy Share-Link - [\#428](https://github.com/nextcloud/forms/pull/428) ([jotoeri](https://github.com/jotoeri)) -- Avoid Submit on Enter - [\#413](https://github.com/nextcloud/forms/pull/413) ([jotoeri](https://github.com/jotoeri)) -- Delete empty options from Db - [\#388](https://github.com/nextcloud/forms/pull/388) ([jotoeri](https://github.com/jotoeri)) +- Keep focus when copy Share-Link + [\#428](https://github.com/nextcloud/forms/pull/428) ([jotoeri](https://github.com/jotoeri)) +- Avoid Submit on Enter + [\#413](https://github.com/nextcloud/forms/pull/413) ([jotoeri](https://github.com/jotoeri)) +- Delete empty options from Db + [\#388](https://github.com/nextcloud/forms/pull/388) ([jotoeri](https://github.com/jotoeri)) ## 2.0.0-beta.3 - 2020-06-04 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0-beta2...v2.0.0-beta.3) ### Enhancements -- Sort Navigation newest forms first - [\#402](https://github.com/nextcloud/forms/pull/402) ([jotoeri](https://github.com/jotoeri)) -- Focus title after form load - [\#369](https://github.com/nextcloud/forms/pull/369) ([jancborchardt](https://github.com/jancborchardt)) - -### Fixed -- Use icon-add in primary-text color - [\#429](https://github.com/nextcloud/forms/pull/429) ([jotoeri](https://github.com/jotoeri)) -- Fix linebreak in description - [\#424](https://github.com/nextcloud/forms/pull/424) ([jotoeri](https://github.com/jotoeri)) -- Fix Screenshot directory - [\#421](https://github.com/nextcloud/forms/pull/421) ([jotoeri](https://github.com/jotoeri)) -- Fix variable-typo - [\#418](https://github.com/nextcloud/forms/pull/418) ([jotoeri](https://github.com/jotoeri)) -- Fix expiration editable - [\#414](https://github.com/nextcloud/forms/pull/414) ([jotoeri](https://github.com/jotoeri)) -- Adjust cut descenders on formtitle - [\#410](https://github.com/nextcloud/forms/pull/410) ([jotoeri](https://github.com/jotoeri)) -- Prevent question menu icon and menu itself overlapping top right actions - [\#404](https://github.com/nextcloud/forms/pull/404) ([jancborchardt](https://github.com/jancborchardt)) -- Fix remove empty questions on submit - [\#397](https://github.com/nextcloud/forms/pull/397) ([jotoeri](https://github.com/jotoeri)) -- Fix saving options on fast proceed - [\#396](https://github.com/nextcloud/forms/pull/396) ([jotoeri](https://github.com/jotoeri)) -- Use cancelable request - [\#393](https://github.com/nextcloud/forms/pull/393) ([jotoeri](https://github.com/jotoeri)) -- Fix key-exists error - [\#392](https://github.com/nextcloud/forms/pull/392) ([jotoeri](https://github.com/jotoeri)) -- Fix newQuestions console error mandatory null - [\#387](https://github.com/nextcloud/forms/pull/387) ([jotoeri](https://github.com/jotoeri)) -- Use proper exit code for composer lint - [\#384](https://github.com/nextcloud/forms/pull/384) ([MorrisJobke](https://github.com/MorrisJobke)) -- Close navigation on mobile on new form - [\#380](https://github.com/nextcloud/forms/pull/380) ([jotoeri](https://github.com/jotoeri)) -- Fix Navigation active on results - [\#379](https://github.com/nextcloud/forms/pull/379) ([jotoeri](https://github.com/jotoeri)) -- Fix redirects - [\#377](https://github.com/nextcloud/forms/pull/377) ([jotoeri](https://github.com/jotoeri)) -- Fix Results initalState missing - [\#376](https://github.com/nextcloud/forms/pull/376) ([jotoeri](https://github.com/jotoeri)) -- Correct fix window title - [\#375](https://github.com/nextcloud/forms/pull/375) ([jotoeri](https://github.com/jotoeri)) -- Set max-version to 20 for new development version of Nextcloud - [\#370](https://github.com/nextcloud/forms/pull/370) ([jancborchardt](https://github.com/jancborchardt)) -- Update window title - [\#368](https://github.com/nextcloud/forms/pull/368) ([jotoeri](https://github.com/jotoeri)) -- Do not prefill form or question title for less confusion - [\#367](https://github.com/nextcloud/forms/pull/367) ([jancborchardt](https://github.com/jancborchardt)) -- Fix overlapping text of long answers - [\#366](https://github.com/nextcloud/forms/pull/366) ([jancborchardt](https://github.com/jancborchardt)) -- Include more sharing links - [\#363](https://github.com/nextcloud/forms/pull/363) ([jotoeri](https://github.com/jotoeri)) -- Fix export-button - [\#362](https://github.com/nextcloud/forms/pull/362) ([jotoeri](https://github.com/jotoeri)) -- Fix Error-Messages - [\#360](https://github.com/nextcloud/forms/pull/360) ([jotoeri](https://github.com/jotoeri)) +- Sort Navigation newest forms first + [\#402](https://github.com/nextcloud/forms/pull/402) ([jotoeri](https://github.com/jotoeri)) +- Focus title after form load + [\#369](https://github.com/nextcloud/forms/pull/369) ([jancborchardt](https://github.com/jancborchardt)) + +### Fixed + +- Use icon-add in primary-text color + [\#429](https://github.com/nextcloud/forms/pull/429) ([jotoeri](https://github.com/jotoeri)) +- Fix linebreak in description + [\#424](https://github.com/nextcloud/forms/pull/424) ([jotoeri](https://github.com/jotoeri)) +- Fix Screenshot directory + [\#421](https://github.com/nextcloud/forms/pull/421) ([jotoeri](https://github.com/jotoeri)) +- Fix variable-typo + [\#418](https://github.com/nextcloud/forms/pull/418) ([jotoeri](https://github.com/jotoeri)) +- Fix expiration editable + [\#414](https://github.com/nextcloud/forms/pull/414) ([jotoeri](https://github.com/jotoeri)) +- Adjust cut descenders on formtitle + [\#410](https://github.com/nextcloud/forms/pull/410) ([jotoeri](https://github.com/jotoeri)) +- Prevent question menu icon and menu itself overlapping top right actions + [\#404](https://github.com/nextcloud/forms/pull/404) ([jancborchardt](https://github.com/jancborchardt)) +- Fix remove empty questions on submit + [\#397](https://github.com/nextcloud/forms/pull/397) ([jotoeri](https://github.com/jotoeri)) +- Fix saving options on fast proceed + [\#396](https://github.com/nextcloud/forms/pull/396) ([jotoeri](https://github.com/jotoeri)) +- Use cancelable request + [\#393](https://github.com/nextcloud/forms/pull/393) ([jotoeri](https://github.com/jotoeri)) +- Fix key-exists error + [\#392](https://github.com/nextcloud/forms/pull/392) ([jotoeri](https://github.com/jotoeri)) +- Fix newQuestions console error mandatory null + [\#387](https://github.com/nextcloud/forms/pull/387) ([jotoeri](https://github.com/jotoeri)) +- Use proper exit code for composer lint + [\#384](https://github.com/nextcloud/forms/pull/384) ([MorrisJobke](https://github.com/MorrisJobke)) +- Close navigation on mobile on new form + [\#380](https://github.com/nextcloud/forms/pull/380) ([jotoeri](https://github.com/jotoeri)) +- Fix Navigation active on results + [\#379](https://github.com/nextcloud/forms/pull/379) ([jotoeri](https://github.com/jotoeri)) +- Fix redirects + [\#377](https://github.com/nextcloud/forms/pull/377) ([jotoeri](https://github.com/jotoeri)) +- Fix Results initalState missing + [\#376](https://github.com/nextcloud/forms/pull/376) ([jotoeri](https://github.com/jotoeri)) +- Correct fix window title + [\#375](https://github.com/nextcloud/forms/pull/375) ([jotoeri](https://github.com/jotoeri)) +- Set max-version to 20 for new development version of Nextcloud + [\#370](https://github.com/nextcloud/forms/pull/370) ([jancborchardt](https://github.com/jancborchardt)) +- Update window title + [\#368](https://github.com/nextcloud/forms/pull/368) ([jotoeri](https://github.com/jotoeri)) +- Do not prefill form or question title for less confusion + [\#367](https://github.com/nextcloud/forms/pull/367) ([jancborchardt](https://github.com/jancborchardt)) +- Fix overlapping text of long answers + [\#366](https://github.com/nextcloud/forms/pull/366) ([jancborchardt](https://github.com/jancborchardt)) +- Include more sharing links + [\#363](https://github.com/nextcloud/forms/pull/363) ([jotoeri](https://github.com/jotoeri)) +- Fix export-button + [\#362](https://github.com/nextcloud/forms/pull/362) ([jotoeri](https://github.com/jotoeri)) +- Fix Error-Messages + [\#360](https://github.com/nextcloud/forms/pull/360) ([jotoeri](https://github.com/jotoeri)) ## 2.0.0-beta2 - 2020-05-06 [Full Changelog](https://github.com/nextcloud/forms/compare/v2.0.0-beta1...v2.0.0-beta2) ### Enhancements -- Mandatory option on questions - [\#347](https://github.com/nextcloud/forms/pull/347) ([jotoeri](https://github.com/jotoeri)) -- Fix users & groups sharing - [\#346](https://github.com/nextcloud/forms/pull/346) ([skjnldsv](https://github.com/skjnldsv)) -- New Result View - [\#341](https://github.com/nextcloud/forms/pull/341) ([jotoeri](https://github.com/jotoeri)) -- Fix multiple choice icon to make obvious it’s radio buttons - [\#329](https://github.com/nextcloud/forms/pull/329) ([jancborchardt](https://github.com/jancborchardt)) -- Comply to new Actions primary/title standard - [\#313](https://github.com/nextcloud/forms/pull/313) ([skjnldsv](https://github.com/skjnldsv)) -- Bump copyrights & add php cs & fixed linting - [\#311](https://github.com/nextcloud/forms/pull/311) ([skjnldsv](https://github.com/skjnldsv)) -- Cleanup old src code - [\#310](https://github.com/nextcloud/forms/pull/310) ([skjnldsv](https://github.com/skjnldsv)) - -### Fixed -- Revert topbar changes - [\#351](https://github.com/nextcloud/forms/pull/351) ([skjnldsv](https://github.com/skjnldsv)) -- Fix Submission Access - [\#345](https://github.com/nextcloud/forms/pull/345) ([jotoeri](https://github.com/jotoeri)) -- Prevent leaking personnal infos on forms - [\#343](https://github.com/nextcloud/forms/pull/343) ([skjnldsv](https://github.com/skjnldsv)) -- l10n: Changed casing of words - [\#339](https://github.com/nextcloud/forms/pull/339) ([rakekniven](https://github.com/rakekniven)) -- Provide DBs max string lengths as InitialState - [\#338](https://github.com/nextcloud/forms/pull/338) ([jotoeri](https://github.com/jotoeri)) -- Move "Add a question" button to bottom - [\#328](https://github.com/nextcloud/forms/pull/328) ([jotoeri](https://github.com/jotoeri)) -- Prevent letter debounce erasing when creating new answers - [\#327](https://github.com/nextcloud/forms/pull/327) ([skjnldsv](https://github.com/skjnldsv)) -- Fix expiration display - [\#326](https://github.com/nextcloud/forms/pull/326) ([skjnldsv](https://github.com/skjnldsv)) -- Design fixes for submission view - [\#325](https://github.com/nextcloud/forms/pull/325) ([jancborchardt](https://github.com/jancborchardt)) -- l10n: Fixed typo - [\#320](https://github.com/nextcloud/forms/pull/320) ([rakekniven](https://github.com/rakekniven)) -- Add title on public page - [\#315](https://github.com/nextcloud/forms/pull/315) ([skjnldsv](https://github.com/skjnldsv)) -- Fix question icons broken in dark theme - [\#312](https://github.com/nextcloud/forms/pull/312) ([skjnldsv](https://github.com/skjnldsv)) +- Mandatory option on questions + [\#347](https://github.com/nextcloud/forms/pull/347) ([jotoeri](https://github.com/jotoeri)) +- Fix users & groups sharing + [\#346](https://github.com/nextcloud/forms/pull/346) ([skjnldsv](https://github.com/skjnldsv)) +- New Result View + [\#341](https://github.com/nextcloud/forms/pull/341) ([jotoeri](https://github.com/jotoeri)) +- Fix multiple choice icon to make obvious it’s radio buttons + [\#329](https://github.com/nextcloud/forms/pull/329) ([jancborchardt](https://github.com/jancborchardt)) +- Comply to new Actions primary/title standard + [\#313](https://github.com/nextcloud/forms/pull/313) ([skjnldsv](https://github.com/skjnldsv)) +- Bump copyrights & add php cs & fixed linting + [\#311](https://github.com/nextcloud/forms/pull/311) ([skjnldsv](https://github.com/skjnldsv)) +- Cleanup old src code + [\#310](https://github.com/nextcloud/forms/pull/310) ([skjnldsv](https://github.com/skjnldsv)) + +### Fixed + +- Revert topbar changes + [\#351](https://github.com/nextcloud/forms/pull/351) ([skjnldsv](https://github.com/skjnldsv)) +- Fix Submission Access + [\#345](https://github.com/nextcloud/forms/pull/345) ([jotoeri](https://github.com/jotoeri)) +- Prevent leaking personnal infos on forms + [\#343](https://github.com/nextcloud/forms/pull/343) ([skjnldsv](https://github.com/skjnldsv)) +- l10n: Changed casing of words + [\#339](https://github.com/nextcloud/forms/pull/339) ([rakekniven](https://github.com/rakekniven)) +- Provide DBs max string lengths as InitialState + [\#338](https://github.com/nextcloud/forms/pull/338) ([jotoeri](https://github.com/jotoeri)) +- Move "Add a question" button to bottom + [\#328](https://github.com/nextcloud/forms/pull/328) ([jotoeri](https://github.com/jotoeri)) +- Prevent letter debounce erasing when creating new answers + [\#327](https://github.com/nextcloud/forms/pull/327) ([skjnldsv](https://github.com/skjnldsv)) +- Fix expiration display + [\#326](https://github.com/nextcloud/forms/pull/326) ([skjnldsv](https://github.com/skjnldsv)) +- Design fixes for submission view + [\#325](https://github.com/nextcloud/forms/pull/325) ([jancborchardt](https://github.com/jancborchardt)) +- l10n: Fixed typo + [\#320](https://github.com/nextcloud/forms/pull/320) ([rakekniven](https://github.com/rakekniven)) +- Add title on public page + [\#315](https://github.com/nextcloud/forms/pull/315) ([skjnldsv](https://github.com/skjnldsv)) +- Fix question icons broken in dark theme + [\#312](https://github.com/nextcloud/forms/pull/312) ([skjnldsv](https://github.com/skjnldsv)) ## 2.0.0-beta1 - 2020-04-29 [Full Changelog](https://github.com/nextcloud/forms/compare/v1.1.1...v2.0.0-beta1) ### Implemented enhancements: -- New creation UI with direct preview -- New voting UI -- Editing existing forms is now possible -- Removed dropdown question -- Added navigation -- Removed breadcrumbs + +- New creation UI with direct preview +- New voting UI +- Editing existing forms is now possible +- Removed dropdown question +- Added navigation +- Removed breadcrumbs ### Fixed bugs: -- Lots of bug fixed. The list is too complex + +- Lots of bug fixed. The list is too complex diff --git a/README.md b/README.md index f798b005a..0442418b5 100644 --- a/README.md +++ b/README.md @@ -8,19 +8,21 @@ **📝 Simple surveys and questionnaires, self-hosted** ### Straightforward form creation + ![](screenshots/forms1.png) ### Simple sharing and responding + ![](screenshots/forms2.png) ### Response visualization and exporting -![](screenshots/forms3.png) -- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course. -- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms. -- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance. -- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)! +![](screenshots/forms3.png) +- **📝 Simple design:** No mass of options, only the essentials. Works well on mobile of course. +- **📊 View & export results:** Results are visualized and can also be exported as CSV in the same format used by Google Forms. +- **🔒 Data under your control!** Unlike in Google Forms, Typeform, Doodle and others, the survey info and responses are kept private on your instance. +- **🙋 Get involved!** We have lots of stuff planned like more question types, collaboration on forms, [and much more](https://github.com/nextcloud/forms/milestones)! ## 🏗 Development setup @@ -29,25 +31,24 @@ 3. ✅ Enable the app through the app management of your Nextcloud 4. 🎉 Partytime! Help fix [some issues](https://github.com/nextcloud/forms/issues) and [review pull requests](https://github.com/nextcloud/forms/pulls) 👍 - ### 🧙 Advanced development stuff To build the Javascript whenever you make changes, you can use `npm run build`. Or `npm run watch` to automatically rebuild on every file save. You run several tests by: -- `npm run lint` for JavaScript linting -- `npm run stylelint` for CSS linting -- `composer cs:check` for the Nextcloud php coding standard -- `composer lint` for php linting -- `composer test:unit` and `composer test:integration` to run the php functionality tests -- `composer psalm` for static code analysis +- `npm run lint` for JavaScript linting +- `npm run stylelint` for CSS linting +- `composer cs:check` for the Nextcloud php coding standard +- `composer lint` for php linting +- `composer test:unit` and `composer test:integration` to run the php functionality tests +- `composer psalm` for static code analysis ## ♥ How to create a pull request This guide will help you get started: -- 💃 [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) +- 💃 [Opening a pull request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) ## ✌ Code of conduct diff --git a/codecov.yml b/codecov.yml index 3f1082b45..02b2f4b2b 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,3 +1,3 @@ comment: - require_changes: true - layout: "diff" + require_changes: true + layout: 'diff' diff --git a/composer.lock b/composer.lock index 0a038439e..d8d4fde46 100644 --- a/composer.lock +++ b/composer.lock @@ -1,2630 +1,2996 @@ { - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "9f8bb75cc8745c84b1408667f1ed4c46", - "packages": [ - { - "name": "maennchen/zipstream-php", - "version": "2.4.0", - "source": { - "type": "git", - "url": "https://github.com/maennchen/ZipStream-PHP.git", - "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", - "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "myclabs/php-enum": "^1.5", - "php": "^8.0", - "psr/http-message": "^1.0" - }, - "require-dev": { - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.9", - "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4", - "phpunit/phpunit": "^8.5.8 || ^9.4.2", - "vimeo/psalm": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZipStream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paul Duncan", - "email": "pabs@pablotron.org" - }, - { - "name": "Jonatan Männchen", - "email": "jonatan@maennchen.ch" - }, - { - "name": "Jesse Donat", - "email": "donatj@gmail.com" - }, - { - "name": "András Kolesár", - "email": "kolesar@kolesar.hu" - } - ], - "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", - "keywords": [ - "stream", - "zip" - ], - "support": { - "issues": "https://github.com/maennchen/ZipStream-PHP/issues", - "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.4.0" - }, - "funding": [ - { - "url": "https://github.com/maennchen", - "type": "github" - }, - { - "url": "https://opencollective.com/zipstream", - "type": "open_collective" - } - ], - "time": "2022-12-08T12:29:14+00:00" - }, - { - "name": "markbaker/complex", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/MarkBaker/PHPComplex.git", - "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", - "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Complex\\": "classes/src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Baker", - "email": "mark@lange.demon.co.uk" - } - ], - "description": "PHP Class for working with complex numbers", - "homepage": "https://github.com/MarkBaker/PHPComplex", - "keywords": [ - "complex", - "mathematics" - ], - "support": { - "issues": "https://github.com/MarkBaker/PHPComplex/issues", - "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" - }, - "time": "2022-12-06T16:21:08+00:00" - }, - { - "name": "markbaker/matrix", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/MarkBaker/PHPMatrix.git", - "reference": "728434227fe21be27ff6d86621a1b13107a2562c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", - "reference": "728434227fe21be27ff6d86621a1b13107a2562c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-master", - "phpcompatibility/php-compatibility": "^9.3", - "phpdocumentor/phpdocumentor": "2.*", - "phploc/phploc": "^4.0", - "phpmd/phpmd": "2.*", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "sebastian/phpcpd": "^4.0", - "squizlabs/php_codesniffer": "^3.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Matrix\\": "classes/src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Baker", - "email": "mark@demon-angel.eu" - } - ], - "description": "PHP Class for working with matrices", - "homepage": "https://github.com/MarkBaker/PHPMatrix", - "keywords": [ - "mathematics", - "matrix", - "vector" - ], - "support": { - "issues": "https://github.com/MarkBaker/PHPMatrix/issues", - "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" - }, - "time": "2022-12-02T22:17:43+00:00" - }, - { - "name": "myclabs/php-enum", - "version": "1.8.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/php-enum.git", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", - "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "1.*", - "vimeo/psalm": "^4.6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "MyCLabs\\Enum\\": "src/" - }, - "classmap": [ - "stubs/Stringable.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP Enum contributors", - "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" - } - ], - "description": "PHP Enum implementation", - "homepage": "http://github.com/myclabs/php-enum", - "keywords": [ - "enum" - ], - "support": { - "issues": "https://github.com/myclabs/php-enum/issues", - "source": "https://github.com/myclabs/php-enum/tree/1.8.4" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", - "type": "tidelift" - } - ], - "time": "2022-08-04T09:53:51+00:00" - }, - { - "name": "phpoffice/phpspreadsheet", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "dbed77bd3a0f68f96c0dd68ad4499d5674fecc3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/dbed77bd3a0f68f96c0dd68ad4499d5674fecc3e", - "reference": "dbed77bd3a0f68f96c0dd68ad4499d5674fecc3e", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-dom": "*", - "ext-fileinfo": "*", - "ext-gd": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-xml": "*", - "ext-xmlreader": "*", - "ext-xmlwriter": "*", - "ext-zip": "*", - "ext-zlib": "*", - "maennchen/zipstream-php": "^2.1 || ^3.0", - "markbaker/complex": "^3.0", - "markbaker/matrix": "^3.0", - "php": "^8.0", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "dev-main", - "dompdf/dompdf": "^2.0", - "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.3", - "mpdf/mpdf": "^8.1.1", - "phpcompatibility/php-compatibility": "^9.3", - "phpstan/phpstan": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.6", - "squizlabs/php_codesniffer": "^3.7", - "tecnickcom/tcpdf": "^6.5" - }, - "suggest": { - "dompdf/dompdf": "Option for rendering PDF with PDF Writer", - "ext-intl": "PHP Internationalization Functions", - "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", - "mpdf/mpdf": "Option for rendering PDF with PDF Writer", - "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" - }, - "type": "library", - "autoload": { - "psr-4": { - "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Maarten Balliauw", - "homepage": "https://blog.maartenballiauw.be" - }, - { - "name": "Mark Baker", - "homepage": "https://markbakeruk.net" - }, - { - "name": "Franck Lefevre", - "homepage": "https://rootslabs.net" - }, - { - "name": "Erik Tilt" - }, - { - "name": "Adrien Crivelli" - } - ], - "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", - "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", - "keywords": [ - "OpenXML", - "excel", - "gnumeric", - "ods", - "php", - "spreadsheet", - "xls", - "xlsx" - ], - "support": { - "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.1.0" - }, - "time": "2024-05-11T04:17:56+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" - }, - "time": "2023-04-04T09:50:52+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - } - ], - "packages-dev": [ - { - "name": "bamarni/composer-bin-plugin", - "version": "1.8.2", - "source": { - "type": "git", - "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", - "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.0", - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "composer/composer": "^2.0", - "ext-json": "*", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Bamarni\\Composer\\Bin\\BamarniBinPlugin" - }, - "autoload": { - "psr-4": { - "Bamarni\\Composer\\Bin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "No conflicts for your bin dependencies", - "keywords": [ - "composer", - "conflict", - "dependency", - "executable", - "isolation", - "tool" - ], - "support": { - "issues": "https://github.com/bamarni/composer-bin-plugin/issues", - "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.8.2" - }, - "time": "2022-10-31T08:38:03+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nextcloud/ocp", - "version": "dev-stable28", - "source": { - "type": "git", - "url": "https://github.com/nextcloud-deps/ocp.git", - "reference": "71201322c342a48ebc0825fcdd5e7507eac47824" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/71201322c342a48ebc0825fcdd5e7507eac47824", - "reference": "71201322c342a48ebc0825fcdd5e7507eac47824", - "shasum": "" - }, - "require": { - "php": "~8.0 || ~8.1 || ~8.2 || ~8.3", - "psr/clock": "^1.0", - "psr/container": "^2.0.2", - "psr/event-dispatcher": "^1.0", - "psr/log": "^1.1.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-stable28": "28.0.0-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "AGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Christoph Wurst", - "email": "christoph@winzerhof-wurst.at" - } - ], - "description": "Composer package containing Nextcloud's public API (classes, interfaces)", - "support": { - "issues": "https://github.com/nextcloud-deps/ocp/issues", - "source": "https://github.com/nextcloud-deps/ocp/tree/stable28" - }, - "time": "2024-03-12T00:31:36+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.0.2", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" - }, - "time": "2024-03-05T20:51:40+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.31", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:37:42+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.19", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-04-05T04:35:58+00:00" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T16:00:52+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "nextcloud/ocp": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "platform-overrides": { - "php": "8.0" - }, - "plugin-api-version": "2.6.0" + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9f8bb75cc8745c84b1408667f1ed4c46", + "packages": [ + { + "name": "maennchen/zipstream-php", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", + "reference": "3fa72e4c71a43f9e9118752a5c90e476a8dc9eb3", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "myclabs/php-enum": "^1.5", + "php": "^8.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.9", + "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^8.5.8 || ^9.4.2", + "vimeo/psalm": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": ["stream", "zip"], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.4.0" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + }, + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2022-12-08T12:29:14+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": ["complex", "mathematics"], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": ["mathematics", "matrix", "vector"], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": ["stubs/Stringable.php"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": ["enum"], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "4a77798f835119754961a97714f135826a323caa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/4a77798f835119754961a97714f135826a323caa", + "reference": "4a77798f835119754961a97714f135826a323caa", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "voku/anti-xss": "^4.1" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.6", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.0.0" + }, + "time": "2024-01-24T10:41:42+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": ["http", "http-client", "psr", "psr-18"], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": ["cache", "caching", "psr", "psr-16", "simple-cache"], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "reference": "cd4226d140ecd3d0f13d32ed0a4a095ffe871d2f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": ["compatibility", "iconv", "polyfill", "portable", "shim"], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": ["Resources/stubs"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": ["compatibility", "polyfill", "portable", "shim"], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "voku/anti-xss", + "version": "4.1.42", + "source": { + "type": "git", + "url": "https://github.com/voku/anti-xss.git", + "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/anti-xss/zipball/bca1f8607e55a3c5077483615cd93bd8f11bd675", + "reference": "bca1f8607e55a3c5077483615cd93bd8f11bd675", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "voku/portable-utf8": "~6.0.2" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "voku\\helper\\": "src/voku/helper/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "EllisLab Dev Team", + "homepage": "http://ellislab.com/" + }, + { + "name": "Lars Moelleken", + "email": "lars@moelleken.org", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "anti xss-library", + "homepage": "https://github.com/voku/anti-xss", + "keywords": ["anti-xss", "clean", "security", "xss"], + "support": { + "issues": "https://github.com/voku/anti-xss/issues", + "source": "https://github.com/voku/anti-xss/tree/4.1.42" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/anti-xss", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/anti-xss", + "type": "tidelift" + } + ], + "time": "2023-07-03T14:40:46+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": ["ascii", "clean", "php"], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "voku/portable-utf8", + "version": "6.0.13", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-utf8.git", + "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-utf8/zipball/b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", + "reference": "b8ce36bf26593e5c2e81b1850ef0ffb299d2043f", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "symfony/polyfill-iconv": "~1.0", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php72": "~1.0", + "voku/portable-ascii": "~2.0.0" + }, + "require-dev": { + "phpstan/phpstan": "1.9.*@dev", + "phpstan/phpstan-strict-rules": "1.4.*@dev", + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0", + "thecodingmachine/phpstan-strict-rules": "1.0.*@dev", + "voku/phpstan-rules": "3.1.*@dev" + }, + "suggest": { + "ext-ctype": "Use Ctype for e.g. hexadecimal digit detection", + "ext-fileinfo": "Use Fileinfo for better binary file detection", + "ext-iconv": "Use iconv for best performance", + "ext-intl": "Use Intl for best performance", + "ext-json": "Use JSON for string detection", + "ext-mbstring": "Use Mbstring for best performance" + }, + "type": "library", + "autoload": { + "files": ["bootstrap.php"], + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["(Apache-2.0 or GPL-2.0)"], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Hamid Sarfraz", + "homepage": "http://pageconfig.com/" + }, + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable UTF-8 library - performance optimized (unicode) string functions for php.", + "homepage": "https://github.com/voku/portable-utf8", + "keywords": ["UTF", "clean", "php", "unicode", "utf-8", "utf8"], + "support": { + "issues": "https://github.com/voku/portable-utf8/issues", + "source": "https://github.com/voku/portable-utf8/tree/6.0.13" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-utf8", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-utf8", + "type": "tidelift" + } + ], + "time": "2023-03-08T08:35:38+00:00" + } + ], + "packages-dev": [ + { + "name": "bamarni/composer-bin-plugin", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/bamarni/composer-bin-plugin.git", + "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", + "reference": "92fd7b1e6e9cdae19b0d57369d8ad31a37b6a880", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "ext-json": "*", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.5", + "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Bamarni\\Composer\\Bin\\BamarniBinPlugin" + }, + "autoload": { + "psr-4": { + "Bamarni\\Composer\\Bin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "description": "No conflicts for your bin dependencies", + "keywords": [ + "composer", + "conflict", + "dependency", + "executable", + "isolation", + "tool" + ], + "support": { + "issues": "https://github.com/bamarni/composer-bin-plugin/issues", + "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.8.2" + }, + "time": "2022-10-31T08:38:03+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": ["constructor", "instantiate"], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:15:36+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": ["src/DeepCopy/deep_copy.php"], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "description": "Create deep copies (clones) of your objects", + "keywords": ["clone", "copy", "duplicate", "object", "object graph"], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nextcloud/ocp", + "version": "dev-stable28", + "source": { + "type": "git", + "url": "https://github.com/nextcloud-deps/ocp.git", + "reference": "71201322c342a48ebc0825fcdd5e7507eac47824" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/71201322c342a48ebc0825fcdd5e7507eac47824", + "reference": "71201322c342a48ebc0825fcdd5e7507eac47824", + "shasum": "" + }, + "require": { + "php": "~8.0 || ~8.1 || ~8.2 || ~8.3", + "psr/clock": "^1.0", + "psr/container": "^2.0.2", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.1.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-stable28": "28.0.0-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["AGPL-3.0-or-later"], + "authors": [ + { + "name": "Christoph Wurst", + "email": "christoph@winzerhof-wurst.at" + } + ], + "description": "Composer package containing Nextcloud's public API (classes, interfaces)", + "support": { + "issues": "https://github.com/nextcloud-deps/ocp/issues", + "source": "https://github.com/nextcloud-deps/ocp/tree/stable28" + }, + "time": "2024-03-12T00:31:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": ["bin/php-parse"], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": ["parser", "php"], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + }, + "time": "2024-03-05T20:51:40+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.31", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": ["coverage", "testing", "xunit"], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:37:42+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": ["filesystem", "iterator"], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": ["process"], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": ["template"], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": ["timer"], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.19", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", + "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": ["phpunit"], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": ["src/Framework/Assert/Functions.php"], + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": ["phpunit", "testing", "xunit"], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-05T04:35:58+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": ["clock", "now", "psr", "psr-20", "time"], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": ["events", "psr", "psr-14"], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["MIT"], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": ["log", "psr", "psr-3"], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": ["comparator", "compare", "equality"], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": ["diff", "udiff", "unidiff", "unified diff"], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": ["Xdebug", "environment", "hhvm"], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": ["export", "exporter"], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": ["global state"], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": ["src/"] + }, + "notification-url": "https://packagist.org/downloads/", + "license": ["BSD-3-Clause"], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "nextcloud/ocp": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "platform-overrides": { + "php": "8.0" + }, + "plugin-api-version": "2.6.0" } diff --git a/cypress.config.ts b/cypress.config.ts index 06cadc93e..05ec94600 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -19,7 +19,11 @@ * along with this program. If not, see . * */ -import { startNextcloud, waitOnNextcloud, configureNextcloud } from '@nextcloud/cypress/docker' +import { + startNextcloud, + waitOnNextcloud, + configureNextcloud, +} from '@nextcloud/cypress/docker' import { defineConfig } from 'cypress' import { readFileSync } from 'node:fs' import cypressSplit from 'cypress-split' @@ -45,9 +49,13 @@ export default defineConfig({ cypressSplit(on, config) const appinfo = readFileSync('appinfo/info.xml').toString() - const maxVersion = appinfo.match(//)?.[1] + const maxVersion = appinfo.match( + //, + )?.[1] - const IP = await startNextcloud(maxVersion ? `stable${maxVersion}` : undefined) + const IP = await startNextcloud( + maxVersion ? `stable${maxVersion}` : undefined, + ) await waitOnNextcloud(IP) await configureNextcloud(['forms', 'viewer']) diff --git a/cypress/.eslintrc.json b/cypress/.eslintrc.json index 523133f60..6bdf57faf 100644 --- a/cypress/.eslintrc.json +++ b/cypress/.eslintrc.json @@ -2,10 +2,6 @@ "env": { "cypress/globals": true }, - "extends": [ - "plugin:cypress/recommended" - ], - "plugins": [ - "cypress" - ] + "extends": ["plugin:cypress/recommended"], + "plugins": ["cypress"] } diff --git a/cypress/e2e/create-form/create.cy.ts b/cypress/e2e/create-form/create.cy.ts index fea527af1..adb351e79 100644 --- a/cypress/e2e/create-form/create.cy.ts +++ b/cypress/e2e/create-form/create.cy.ts @@ -32,14 +32,11 @@ describe('Create empty form', () => { .should('exist') .and('be.visible') - cy.contains('button', 'Create a form') - .should('be.visible') + cy.contains('button', 'Create a form').should('be.visible') }) it('can use button to create new form', () => { - cy.contains('button', 'Create a form') - .first() - .click() + cy.contains('button', 'Create a form').first().click() cy.url().should('match', /apps\/forms\/.+/) @@ -48,9 +45,7 @@ describe('Create empty form', () => { }) it('can use app navigation to create new form', () => { - cy.get('nav').contains('button', 'New form') - .first() - .click() + cy.get('nav').contains('button', 'New form').first().click() cy.url().should('match', /apps\/forms\/.+/) @@ -59,23 +54,17 @@ describe('Create empty form', () => { }) it('Updates the form title in the navigation', () => { - cy.get('nav').contains('button', 'New form') - .first() - .click() + cy.get('nav').contains('button', 'New form').first().click() cy.url().then((url) => { expect(url).to.match(/apps\/forms\/.+/) const formId = url.match(/apps\/forms\/([^/?]+)/)[1] - cy.get(`nav a[href*="${formId}"]`) - .should('contain', 'New form') + cy.get(`nav a[href*="${formId}"]`).should('contain', 'New form') - cy.get('h2 textarea') - .should('have.focus') - .type('Test form') + cy.get('h2 textarea').should('have.focus').type('Test form') - cy.get(`nav a[href*="${formId}"]`) - .should('contain', 'Test form') + cy.get(`nav a[href*="${formId}"]`).should('contain', 'Test form') }) }) }) diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index 7cdb18c58..bfe05ba1a 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -22,4 +22,4 @@ import './commands' // Ignore resize observer errors of Chrome, they are unrelated and save to ignore -Cypress.on('uncaught:exception', err => !err.message.includes('ResizeObserver')) +Cypress.on('uncaught:exception', (err) => !err.message.includes('ResizeObserver')) diff --git a/cypress/tsconfig.json b/cypress/tsconfig.json index d745abf08..4050c3b65 100644 --- a/cypress/tsconfig.json +++ b/cypress/tsconfig.json @@ -2,9 +2,6 @@ "extends": "../tsconfig.json", "include": ["./**/*.ts"], "compilerOptions": { - "types": [ - "cypress", - "node" - ] + "types": ["cypress", "node"] } } diff --git a/docs/API.md b/docs/API.md index fd095861e..dccddaa16 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1,14 +1,17 @@ # Forms Public API + This file contains the API-Documentation. For more information on the returned Data-Structures, please refer to the [corresponding Documentation](DataStructure.md). ## Generals -- Base URL for all calls to the forms API is `/ocs/v2.php/apps/forms` -- All Requests need to provide some authentication information. -- All Requests to OCS-Endpoints require the Header `OCS-APIRequest: true` -- Unless otherwise specified, all parameters are mandatory. -- By default, the API returns data formatted as _xml_. If formatting as _json_ is desired, the request should contain the header `Accept: application/json`. For simple representation, the output presented in this document is all formatted as _json_. -- The OCS-Endpoint *always returns* an object called `ocs`. This contains an object `meta` holding some meta-data, as well as an object `data` holding the actual data. In this document, the response-blocks only show the `data`, if not explicitely stated different. +- Base URL for all calls to the forms API is `/ocs/v2.php/apps/forms` +- All Requests need to provide some authentication information. +- All Requests to OCS-Endpoints require the Header `OCS-APIRequest: true` +- Unless otherwise specified, all parameters are mandatory. + +- By default, the API returns data formatted as _xml_. If formatting as _json_ is desired, the request should contain the header `Accept: application/json`. For simple representation, the output presented in this document is all formatted as _json_. +- The OCS-Endpoint _always returns_ an object called `ocs`. This contains an object `meta` holding some meta-data, as well as an object `data` holding the actual data. In this document, the response-blocks only show the `data`, if not explicitely stated different. + ``` "ocs": { "meta": { @@ -19,35 +22,44 @@ This file contains the API-Documentation. For more information on the returned D "data": } ``` + ## API changes + ### Deprecation info -- Starting with API v2.2 all endpoints that update data will use PATCH/PUT as method. POST is now deprecated and will be removed in API v3 + +- Starting with API v2.2 all endpoints that update data will use PATCH/PUT as method. POST is now deprecated and will be removed in API v3 ### Breaking Changes on API v2 -- The `mandatory` property of questions has been removed. It is replaced by `isRequired`. -- Completely new way of handling access & shares. + +- The `mandatory` property of questions has been removed. It is replaced by `isRequired`. +- Completely new way of handling access & shares. ### Other API changes -- In API version 2.5 the following endpoints were introduced: - - `POST /api/2.5/uploadFiles/{formId}/{questionId}` to upload files to answer before form submitting -- In API version 2.4 the following endpoints were introduced: - - `POST /api/2.4/form/link/{fileFormat}` to link form to a file - - `POST /api/2.4/form/unlink` to unlink form from a file -- In API version 2.4 the following endpoints were changed: - - `GET /api/v2.4/submissions/export/{hash}` was extended with optional parameter `fileFormat` to export submissions in different formats - - `GET /api/v2.4/submissions/export` was extended with optional parameter `fileFormat` to export submissions to cloud in different formats - - `GET /api/v2.4/form/{id}` was extended with optional parameters `fileFormat`, `fileId`, `filePath` to link form to a file -- In API version 2.3 the endpoint `/api/v2.3/question/clone` was added to clone a question -- In API version 2.2 the endpoint `/api/v2.2/form/transfer` was added to transfer ownership of a form -- In API version 2.1 the endpoint `/api/v2.1/share/update` was added to update a Share + +- In API version 2.5 the following endpoints were introduced: + - `POST /api/2.5/uploadFiles/{formId}/{questionId}` to upload files to answer before form submitting +- In API version 2.4 the following endpoints were introduced: + - `POST /api/2.4/form/link/{fileFormat}` to link form to a file + - `POST /api/2.4/form/unlink` to unlink form from a file +- In API version 2.4 the following endpoints were changed: + - `GET /api/v2.4/submissions/export/{hash}` was extended with optional parameter `fileFormat` to export submissions in different formats + - `GET /api/v2.4/submissions/export` was extended with optional parameter `fileFormat` to export submissions to cloud in different formats + - `GET /api/v2.4/form/{id}` was extended with optional parameters `fileFormat`, `fileId`, `filePath` to link form to a file +- In API version 2.3 the endpoint `/api/v2.3/question/clone` was added to clone a question +- In API version 2.2 the endpoint `/api/v2.2/form/transfer` was added to transfer ownership of a form +- In API version 2.1 the endpoint `/api/v2.1/share/update` was added to update a Share ## Form Endpoints + ### List owned Forms + Returns condensed objects of all Forms beeing owned by the authenticated user. -- Endpoint: `/api/v2.4/forms` -- Method: `GET` -- Parameters: None -- Response: Array of condensed Form Objects, sorted as newest first. + +- Endpoint: `/api/v2.4/forms` +- Method: `GET` +- Parameters: None +- Response: Array of condensed Form Objects, sorted as newest first. + ``` "data": [ { @@ -80,24 +92,30 @@ Returns condensed objects of all Forms beeing owned by the authenticated user. ``` ### List shared Forms + Returns condensed objects of all Forms, that are shared & shown to the authenticated user and that have not expired yet. -- Endpoint: `/api/v2.4/shared_forms` -- Method: `GET` -- Parameters: None -- Response: Array of condensed Form Objects, sorted as newest first, similar to [List owned Forms](#list-owned-forms). + +- Endpoint: `/api/v2.4/shared_forms` +- Method: `GET` +- Parameters: None +- Response: Array of condensed Form Objects, sorted as newest first, similar to [List owned Forms](#list-owned-forms). + ``` See above, 'List owned forms' ``` ### Get a partial Form + Returns a single partial form object, corresponding to owned/shared form-listings. -- Endpoint: `/api/v2.4/partial_form/{hash}` -- Method: `GET` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _hash_ | String | Hash of the form to request | -- Response: Partial form object, similar to form-list elements. + +- Endpoint: `/api/v2.4/partial_form/{hash}` +- Method: `GET` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _hash_ | String | Hash of the form to request | +- Response: Partial form object, similar to form-list elements. + ``` "data": { "id": 6, @@ -113,23 +131,28 @@ Returns a single partial form object, corresponding to owned/shared form-listing ``` ### Create a new Form -- Endpoint: `/api/v2.4/form` -- Method: `POST` -- Parameters: None -- Response: The new form object, similar to requesting an existing form. + +- Endpoint: `/api/v2.4/form` +- Method: `POST` +- Parameters: None +- Response: The new form object, similar to requesting an existing form. + ``` See next section, 'Request full data of a form' ``` ### Request full data of a form + Returns the full-depth object of the requested form (without submissions). -- Endpoint: `/api/v2.4/form/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the form to request | -- Method: `GET` -- Response: A full object of the form, including access, questions and options in full depth. + +- Endpoint: `/api/v2.4/form/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the form to request | +- Method: `GET` +- Response: A full object of the form, including access, questions and options in full depth. + ``` "data": { "id": 3, @@ -214,73 +237,87 @@ Returns the full-depth object of the requested form (without submissions). ``` ### Clone a form + Creates a clone of a form (without submissions). -- Endpoint: `/api/v2.4/form/clone/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the form to clone | -- Method: `POST` -- Response: Returns the full object of the new form. See [Request full data of a Form](#request-full-data-of-a-form) + +- Endpoint: `/api/v2.4/form/clone/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the form to clone | +- Method: `POST` +- Response: Returns the full object of the new form. See [Request full data of a Form](#request-full-data-of-a-form) + ``` See section 'Request full data of a form'. ``` ### Update form properties + Update a single or multiple properties of a form-object. Concerns **only** the Form-Object, properties of Questions, Options and Submissions, as well as their creation or deletion, are handled separately. -- Endpoint: `/api/v2.4/form/update` -- Method: `PATCH` -- *Method: `POST` deprecated* -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the form to update | - | _keyValuePairs_ | Array | Array of key-value pairs to update | -- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, hash, ownerId, created_ -- Response: **Status-Code OK**, as well as the id of the updated form. + +- Endpoint: `/api/v2.4/form/update` +- Method: `PATCH` +- _Method: `POST` deprecated_ +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the form to update | + | _keyValuePairs_ | Array | Array of key-value pairs to update | +- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, hash, ownerId, created_ +- Response: **Status-Code OK**, as well as the id of the updated form. + ``` "data": 3 ``` + ### Transfer form ownership + Transfer the ownership of a form to another user -- Endpoint: `/api/v2.4/form/transfer` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _formId_ | Integer | ID of the form to tranfer | - | _uid_ | Integer | ID of the new form owner | -- Restrictions: The initiator must be the current form owner. -- Response: **Status-Code OK**, as well as the id of the new owner. + +- Endpoint: `/api/v2.4/form/transfer` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _formId_ | Integer | ID of the form to tranfer | + | _uid_ | Integer | ID of the new form owner | +- Restrictions: The initiator must be the current form owner. +- Response: **Status-Code OK**, as well as the id of the new owner. + ``` "data": "user1" ``` ### Delete a form -- Endpoint: `/api/v2.4/form/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the form to delete | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the deleted form. + +- Endpoint: `/api/v2.4/form/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the form to delete | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the deleted form. + ``` "data": 3 ``` ### Link a form to a file -- Endpoint: `/api/v2.4/form/link/{fileFormat}` -- Url-Parameter: - | Parameter | Type | Description | - |--------------|---------|--------------| - | _fileFormat_ | String | csv|ods|xlsx | -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |-----------|---------|--------------------------------------------| - | _hash_ | String | Hash of the form to update | - | _path_ | String | Path within User-Dir, to store the file to | -- Response: The new question object. + +- Endpoint: `/api/v2.4/form/link/{fileFormat}` +- Url-Parameter: + | Parameter | Type | Description | + |--------------|---------|--------------| + | _fileFormat_ | String | csv|ods|xlsx | +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |-----------|---------|--------------------------------------------| + | _hash_ | String | Hash of the form to update | + | _path_ | String | Path within User-Dir, to store the file to | +- Response: The new question object. + ``` "data": { "fileFormat": "csv", @@ -291,27 +328,31 @@ Transfer the ownership of a form to another user ``` ### Unlink file from form -- Endpoint: `/api/v2.4/form/unlink` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |-----------|---------|----------------------------| - | _hash_ | String | Hash of the form to update | -- Response: **Status-Code OK** + +- Endpoint: `/api/v2.4/form/unlink` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |-----------|---------|----------------------------| + | _hash_ | String | Hash of the form to update | +- Response: **Status-Code OK** ## Question Endpoints + Contains only manipulative question-endpoints. To retrieve questions, request the full form data. ### Create a new question -- Endpoint: `/api/v2.4/question` -- Method: `POST` -- Parameters: - | Parameter | Type | Optional | Description | - |-----------|---------|----------|-------------| - | _formId_ | Integer | | ID of the form, the new question will belong to | - | _type_ | [QuestionType](DataStructure.md#question-types) | | The question-type of the new question | - | _text_ | String | yes | *Optional* The text of the new question. | -- Response: The new question object. + +- Endpoint: `/api/v2.4/question` +- Method: `POST` +- Parameters: + | Parameter | Type | Optional | Description | + |-----------|---------|----------|-------------| + | _formId_ | Integer | | ID of the form, the new question will belong to | + | _type_ | [QuestionType](DataStructure.md#question-types) | | The question-type of the new question | + | _text_ | String | yes | _Optional_ The text of the new question. | +- Response: The new question object. + ``` "data": { "id": 3, @@ -327,33 +368,39 @@ Contains only manipulative question-endpoints. To retrieve questions, request th ``` ### Update question properties + Update a single or multiple properties of a question-object. -- Endpoint: `/api/v2.4/question/update` -- Method: `PATCH` -- *Method: `POST` deprecated* -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the question to update | - | _keyValuePairs_ | Array | Array of key-value pairs to update | -- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, formId, order_. -- Response: **Status-Code OK**, as well as the id of the updated question. + +- Endpoint: `/api/v2.4/question/update` +- Method: `PATCH` +- _Method: `POST` deprecated_ +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the question to update | + | _keyValuePairs_ | Array | Array of key-value pairs to update | +- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, formId, order_. +- Response: **Status-Code OK**, as well as the id of the updated question. + ``` "data": 1 ``` ### Reorder questions + Reorders all Questions of a single form -- Endpoint: `/api/v2.4/question/reorder` -- Method: `PUT` -- *Method: `POST` deprecated* -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _formId_ | Integer | ID of the form, the questions belong to | - | _newOrder_ | Array | Array of **all** Question-IDs, ordered in the desired order | -- Restrictions: The Array **must** contain all Question-IDs corresponding to the specified form and **must not** contain any duplicates. -- Response: Array of questionIDs and their corresponding order. + +- Endpoint: `/api/v2.4/question/reorder` +- Method: `PUT` +- _Method: `POST` deprecated_ +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _formId_ | Integer | ID of the form, the questions belong to | + | _newOrder_ | Array | Array of **all** Question-IDs, ordered in the desired order | +- Restrictions: The Array **must** contain all Question-IDs corresponding to the specified form and **must not** contain any duplicates. +- Response: Array of questionIDs and their corresponding order. + ``` "data": { "1": { @@ -369,42 +416,50 @@ Reorders all Questions of a single form ``` ### Delete a question -- Endpoint: `/api/v2.4/question/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the question to delete | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the deleted question. + +- Endpoint: `/api/v2.4/question/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the question to delete | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the deleted question. + ``` "data": 4 ``` ### Clone a question + Creates a clone of a question with all its options. -- Endpoint: `/api/v2.4/question/clone/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the question to clone | -- Method: `POST` -- Response: Returns cloned question object with the new ID set. + +- Endpoint: `/api/v2.4/question/clone/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the question to clone | +- Method: `POST` +- Response: Returns cloned question object with the new ID set. + ``` See section 'Create a new question'. ``` ## Option Endpoints + Contains only manipulative question-endpoints. To retrieve options, request the full form data. ### Create a new Option -- Endpoint: `/api/v2.4/option` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _questionId_ | Integer | ID of the question, the new option will belong to | - | _text_ | String | The text of the new option | -- Response: The new option object + +- Endpoint: `/api/v2.4/option` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _questionId_ | Integer | ID of the question, the new option will belong to | + | _text_ | String | The text of the new option | +- Response: The new option object + ``` "data": { "id": 7, @@ -414,45 +469,53 @@ Contains only manipulative question-endpoints. To retrieve options, request the ``` ### Update option properties + Update a single or all properties of an option-object -- Endpoint: `/api/v2.4/option/update` -- Method: `PATCH` -- *Method: `POST` deprecated* -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the option to update | - | _keyValuePairs_ | Array | Array of key-value pairs to update | -- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, questionId_. -- Response: **Status-Code OK**, as well as the id of the updated option. + +- Endpoint: `/api/v2.4/option/update` +- Method: `PATCH` +- _Method: `POST` deprecated_ +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the option to update | + | _keyValuePairs_ | Array | Array of key-value pairs to update | +- Restrictions: It is **not allowed** to update one of the following key-value pairs: _id, questionId_. +- Response: **Status-Code OK**, as well as the id of the updated option. + ``` "data": 7 ``` ### Delete an option -- Endpoint: `/api/v2.4/option/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the option to delete | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the deleted option. + +- Endpoint: `/api/v2.4/option/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the option to delete | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the deleted option. + ``` "data": 7 ``` ## Sharing Endpoints + ### Add a new Share -- Endpoint: `/api/v2.4/share` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |--------------|----------|-------------| - | _formId_ | Integer | Id of the form to share | - | _shareType_ | String | NC-shareType, out of the used shareTypes. | - | _shareWith_ | String | User/Group for the share. Not used for link-shares. | - | _permissions_ | String[] | Permissions of the sharees, see [DataStructure](DataStructure.md#Permissions). | -- Response: **Status-Code OK**, as well as the new share object. + +- Endpoint: `/api/v2.4/share` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |--------------|----------|-------------| + | _formId_ | Integer | Id of the form to share | + | _shareType_ | String | NC-shareType, out of the used shareTypes. | + | _shareWith_ | String | User/Group for the share. Not used for link-shares. | + | _permissions_ | String[] | Permissions of the sharees, see [DataStructure](DataStructure.md#Permissions). | +- Response: **Status-Code OK**, as well as the new share object. + ``` "data": { "id": 3, @@ -465,43 +528,52 @@ Update a single or all properties of an option-object ``` ### Delete a Share -- Endpoint: `/api/v2.4/share/{id}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _id_ | Integer | ID of the share to delete | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the deleted share. + +- Endpoint: `/api/v2.4/share/{id}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _id_ | Integer | ID of the share to delete | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the deleted share. + ``` "data": 5 ``` ### Update a Share -- Endpoint: `/api/v2.4/share/update` -- Parameters: - | Parameter | Type | Description | - |------------------|----------|-------------| - | _id_ | Integer | ID of the share to update | - | *keyValuePairs*¹ | Array | Array of key-value pairs to update | - - ¹Currently only the _permissions_ can be updated. -- Method: `PATCH` -- *Method: `POST` deprecated* -- Response: **Status-Code OK**, as well as the id of the share object. + +- Endpoint: `/api/v2.4/share/update` +- Parameters: + | Parameter | Type | Description | + |------------------|----------|-------------| + | _id_ | Integer | ID of the share to update | + | *keyValuePairs*¹ | Array | Array of key-value pairs to update | + + ¹Currently only the _permissions_ can be updated. + +- Method: `PATCH` +- _Method: `POST` deprecated_ +- Response: **Status-Code OK**, as well as the id of the share object. + ``` "data": 5 ``` ## Submission Endpoints + ### Get Form Submissions + Get all Submissions to a Form -- Endpoint: `/api/v2.4/submissions/{hash}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _hash_ | String | Hash of the form to get the submissions for | -- Method: `GET` -- Response: An Array of all submissions, sorted as newest first, as well as an array of the corresponding questions. + +- Endpoint: `/api/v2.4/submissions/{hash}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _hash_ | String | Hash of the form to get the submissions for | +- Method: `GET` +- Response: An Array of all submissions, sorted as newest first, as well as an array of the corresponding questions. + ``` "data": { "submissions": [ @@ -590,15 +662,18 @@ Get all Submissions to a Form ``` ### Get Submissions as csv (Download) + Returns all submissions to the form in form of a csv-file. -- Endpoint: `/api/v2.4/submissions/export/{hash}` -- Url-Parameter: - | Parameter | Type | Description | - |--------------|---------|-------------| - | _hash_ | String | Hash of the form to get the submissions for | - | _fileFormat_ | String | csv|ods|xlsx | -- Method: `GET` -- Response: A Data Download Response containing the headers `Content-Disposition: attachment; filename="Form 1 (responses).csv"` and `Content-Type: text/csv;charset=UTF-8`. The actual data contains all submissions to the referred form, formatted as comma separated and escaped csv. + +- Endpoint: `/api/v2.4/submissions/export/{hash}` +- Url-Parameter: + | Parameter | Type | Description | + |--------------|---------|-------------| + | _hash_ | String | Hash of the form to get the submissions for | + | _fileFormat_ | String | csv|ods|xlsx | +- Method: `GET` +- Response: A Data Download Response containing the headers `Content-Disposition: attachment; filename="Form 1 (responses).csv"` and `Content-Type: text/csv;charset=UTF-8`. The actual data contains all submissions to the referred form, formatted as comma separated and escaped csv. + ``` "User display name","Timestamp","Question 1","Question 2" "jonas","Friday, January 22, 2021 at 12:47:29 AM GMT+0:00","Option 2","Answer" @@ -606,125 +681,161 @@ Returns all submissions to the form in form of a csv-file. ``` ### Export Submissions to Cloud (Files-App) + Creates a csv file and stores it to the cloud, resp. Files-App. -- Endpoint: `/api/v2.4/submissions/export` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |--------------|---------|-------------| - | _hash_ | String | Hash of the form to get the submissions for | - | _path_ | String | Path within User-Dir, to store the file to | - | _fileFormat_ | String | csv|ods|xlsx | -- Response: Stores the file to the given path and returns the fileName. + +- Endpoint: `/api/v2.4/submissions/export` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |--------------|---------|-------------| + | _hash_ | String | Hash of the form to get the submissions for | + | _path_ | String | Path within User-Dir, to store the file to | + | _fileFormat_ | String | csv|ods|xlsx | +- Response: Stores the file to the given path and returns the fileName. + ``` "data": "Form 2 (responses).csv" ``` ### Delete Submissions + Delete all Submissions to a form -- Endpoint: `/api/v2.4/submissions/{formId}` -- Url-Parameter: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _formId_ | Integer | ID of the form to delete the submissions for | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the corresponding form. + +- Endpoint: `/api/v2.4/submissions/{formId}` +- Url-Parameter: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _formId_ | Integer | ID of the form to delete the submissions for | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the corresponding form. + ``` "data": 3 ``` ### Upload a file + Upload a files to answer before form submitting -- Endpoint: `/api/2.5/uploadFiles/{formId}/{questionId}` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |--------------|----------------|-------------| - | _formId_ | Integer | ID of the form to upload the file to | - | _questionId_ | Integer | ID of the question to upload the file to | - | _files_ | Array of files | Files to upload | -- Response: **Status-Code OK**, as well as the id of the uploaded file and it's name. + +- Endpoint: `/api/2.5/uploadFiles/{formId}/{questionId}` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |--------------|----------------|-------------| + | _formId_ | Integer | ID of the form to upload the file to | + | _questionId_ | Integer | ID of the question to upload the file to | + | _files_ | Array of files | Files to upload | +- Response: **Status-Code OK**, as well as the id of the uploaded file and it's name. + ``` "data": {"uploadedFileId": integer, "fileName": "string"} ``` ### Insert a Submission + Store Submission to Database -- Endpoint: `/api/v2.4/submission/insert` -- Method: `POST` -- Parameters: - | Parameter | Type | Description | - |-----------|---------|-------------| - | _formId_ | Integer | ID of the form to submit into | - | _answers_ | Array | Array of Answers | - | _shareHash_ | String | optional, only neccessary for submissions to a public share link | - - The Array of Answers has the following structure: - - QuestionID as key - - An **array** of values as value --> Even for short Text Answers, wrapped into Array. - - For Question-Types with pre-defined answers (`multiple`, `multiple_unique`, `dropdown`), the array contains the corresponding option-IDs. - - For File-Uploads, the array contains the objects with key `uploadedFileId` (value from Upload a file endpoint). - ``` + +- Endpoint: `/api/v2.4/submission/insert` +- Method: `POST` +- Parameters: + | Parameter | Type | Description | + |-----------|---------|-------------| + | _formId_ | Integer | ID of the form to submit into | + | _answers_ | Array | Array of Answers | + | _shareHash_ | String | optional, only neccessary for submissions to a public share link | + + The Array of Answers has the following structure: + + - QuestionID as key + - An **array** of values as value --> Even for short Text Answers, wrapped into Array. + - For Question-Types with pre-defined answers (`multiple`, `multiple_unique`, `dropdown`), the array contains the corresponding option-IDs. + + - For File-Uploads, the array contains the objects with key `uploadedFileId` (value from Upload a file endpoint). + +```` { "1":[27,32], // dropdown or multiple "2":["ShortTextAnswer"], // All Text-Based Question-Types "3":[ // File-Upload - {"uploadedFileId": integer}, - {"uploadedFileId": integer} - ], - } + {"uploadedFileId": integer}, + {"uploadedFileId": integer} + ], +} ``` -- Response: **Status-Code OK**. + +- Response: **Status-Code OK**. ### Delete a single Submission -- Endpoint: `/api/v2.4/submission/{id}` -- Url-Parameter: - | Parameter | Type | Description | + +- Endpoint: `/api/v2.4/submission/{id}` +- Url-Parameter: + | Parameter | Type | Description | |-----------|---------|-------------| - | _id_ | Integer | ID of the submission to delete | -- Method: `DELETE` -- Response: **Status-Code OK**, as well as the id of the deleted submission. -``` + | _id_ | Integer | ID of the submission to delete | +- Method: `DELETE` +- Response: **Status-Code OK**, as well as the id of the deleted submission. + +```` + "data": 5 -``` +``` ## Error Responses + All Endpoints return one of the following Error-Responses, if the request is not properly raised. This also results in a different `ocs:meta` object. + ### 400 - Bad Request + This returns in case the Request is not properly set. This can e.g. include: -- The corresponding form can not be found -- Request Parameters are wrong (including formatting or type of parameters) + +- The corresponding form can not be found +- Request Parameters are wrong (including formatting or type of parameters) + ``` + "ocs": { - "meta": { - "status": "failure", - "statuscode": 400, - "message": "" - }, - "data": [] +"meta": { +"status": "failure", +"statuscode": 400, +"message": "" +}, +"data": [] } + ``` + ### 403 - Forbidden + This returns in case the authenticated user is not allowed to access this resource/endpoint. This can e.g. include: -- The user has no write access to the form (only form owner is allowed to edit) -- The user is not allowed to submit to the form (access-settings, form expired, already submitted) + +- The user has no write access to the form (only form owner is allowed to edit) +- The user is not allowed to submit to the form (access-settings, form expired, already submitted) ``` + "ocs": { - "meta": { - "status": "failure", - "statuscode": 403, - "message": "" - }, - "data": [] +"meta": { +"status": "failure", +"statuscode": 403, +"message": "" +}, +"data": [] } + ``` ### 412 - Precondition Failed + This Error is not produed by the Forms-API, but comes from Nextclouds OCS API. Typically this is the result when missing the Request-Header `OCS-APIRequest: true`. + ``` + { - "message": "CSRF check failed" +"message": "CSRF check failed" } + +``` + ``` diff --git a/docs/DataStructure.md b/docs/DataStructure.md index a5865bf42..68925f7c2 100644 --- a/docs/DataStructure.md +++ b/docs/DataStructure.md @@ -1,30 +1,33 @@ # Forms Data Structure + **State: Forms v3.3.1 - 08.10.2023** This document describes the Object-Structure, that is used within the Forms App and on Forms API v2. It does partially **not** equal the actual database structure behind. ## Data Structures + ### Form -| Property | Type | Restrictions | Description | -|-------------|-----------------|---------------|-------------| -| id | Integer | unique | An instance-wide unique id of the form | -| hash | 16-char String | unique | An instance-wide unique hash | -| title | String | max. 256 ch. | The form title | -| description | String | max. 8192 ch. | The Form description | -| ownerId | String | | The nextcloud userId of the form owner | -| submissionMessage | String | max. 2048 ch. | Optional custom message, with Markdown support, to be shown to users when the form is submitted (default is used if set to null) | -| created | unix timestamp | | When the form has been created | -| access | [Access-Object](#access-object) | | Describing access-settings of the form | -| expires | unix-timestamp | | When the form should expire. Timestamp `0` indicates _never_ | -| isAnonymous | Boolean | | If Answers will be stored anonymously | -| state | Integer | [Form state](#form-state)| The state of the form | -| submitMultiple | Boolean | | If users are allowed to submit multiple times to the form | -| showExpiration | Boolean | | If the expiration date will be shown on the form | -| canSubmit | Boolean | | If the user can Submit to the form, i.e. calculated information out of `submitMultiple` and existing submissions. | -| permissions | Array of [Permissions](#permissions) | Array of permissions regarding the form | -| questions | Array of [Questions](#question) | | Array of questions belonging to the form | -| shares | Array of [Shares](#share) | | Array of shares of the form | -| submissions | Array of [Submissions](#submission) | | Array of submissions belonging to the form | + +| Property | Type | Restrictions | Description | +| ----------------- | ------------------------------------ | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| id | Integer | unique | An instance-wide unique id of the form | +| hash | 16-char String | unique | An instance-wide unique hash | +| title | String | max. 256 ch. | The form title | +| description | String | max. 8192 ch. | The Form description | +| ownerId | String | | The nextcloud userId of the form owner | +| submissionMessage | String | max. 2048 ch. | Optional custom message, with Markdown support, to be shown to users when the form is submitted (default is used if set to null) | +| created | unix timestamp | | When the form has been created | +| access | [Access-Object](#access-object) | | Describing access-settings of the form | +| expires | unix-timestamp | | When the form should expire. Timestamp `0` indicates _never_ | +| isAnonymous | Boolean | | If Answers will be stored anonymously | +| state | Integer | [Form state](#form-state) | The state of the form | +| submitMultiple | Boolean | | If users are allowed to submit multiple times to the form | +| showExpiration | Boolean | | If the expiration date will be shown on the form | +| canSubmit | Boolean | | If the user can Submit to the form, i.e. calculated information out of `submitMultiple` and existing submissions. | +| permissions | Array of [Permissions](#permissions) | Array of permissions regarding the form | +| questions | Array of [Questions](#question) | | Array of questions belonging to the form | +| shares | Array of [Shares](#share) | | Array of shares of the form | +| submissions | Array of [Submissions](#submission) | | Array of submissions belonging to the form | ``` { @@ -53,26 +56,29 @@ This document describes the Object-Structure, that is used within the Forms App ``` #### Form state + The form state is used for additional states, currently following states are defined: -| Value | Meaning | -|----------------|---------------------------------------------| -| 0 | Form is active and open for new submissions | -| 1 | Form is closed and does not allow new submissions | -| 2 | Form is archived, it does not allow new submissions and can also not be modified anymore | +| Value | Meaning | +| ----- | ---------------------------------------------------------------------------------------- | +| 0 | Form is active and open for new submissions | +| 1 | Form is closed and does not allow new submissions | +| 2 | Form is archived, it does not allow new submissions and can also not be modified anymore | ### Question -| Property | Type | Restrictions | Description | -|----------------|-----------------|--------------|-------------| -| id | Integer | unique | An instance-wide unique id of the question | -| formId | Integer | | The id of the form, the question belongs to | -| order | Integer | unique within form; *not* `0` | The order of the question within that form. Value `0` indicates deleted questions within database (typ. not visible outside) | -| type | [Question-Type](#question-types) | | Type of the question | -| isRequired | Boolean | | If the question is required to fill the form | -| text | String | max. 2048 ch. | The question-text | -| name | String | | Technical identifier of the question, e.g. used as HTML name attribute | -| options | Array of [Options](#option) | | Array of options belonging to the question. Only relevant for question-type with predefined options. | -| extraSettings | [Extra Settings](#extra-settings) | | Additional settings for the question. | + +| Property | Type | Restrictions | Description | +| ------------- | --------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| id | Integer | unique | An instance-wide unique id of the question | +| formId | Integer | | The id of the form, the question belongs to | +| order | Integer | unique within form; _not_ `0` | The order of the question within that form. Value `0` indicates deleted questions within database (typ. not visible outside) | +| type | [Question-Type](#question-types) | | Type of the question | +| isRequired | Boolean | | If the question is required to fill the form | +| text | String | max. 2048 ch. | The question-text | +| name | String | | Technical identifier of the question, e.g. used as HTML name attribute | +| options | Array of [Options](#option) | | Array of options belonging to the question. Only relevant for question-type with predefined options. | +| extraSettings | [Extra Settings](#extra-settings) | | Additional settings for the question. | + ``` { "id": 1, @@ -88,13 +94,15 @@ The form state is used for additional states, currently following states are def ``` ### Option + Options are predefined answer-possibilities corresponding to questions with appropriate question-type. -| Property | Type | Restrictions | Description | -|-------------|-----------------|--------------|-------------| -| id | Integer | unique | An instance-wide unique id of the option | -| questionId | Integer | | The id of the question, the option belongs to | -| text | String | max. 1024 ch.| The option-text | +| Property | Type | Restrictions | Description | +| ---------- | ------- | ------------- | --------------------------------------------- | +| id | Integer | unique | An instance-wide unique id of the option | +| questionId | Integer | | The id of the question, the option belongs to | +| text | String | max. 1024 ch. | The option-text | + ``` { "id": 1, @@ -104,26 +112,27 @@ Options are predefined answer-possibilities corresponding to questions with appr ``` ### Share + A share-object describes a single share of the form. -| Property | Type | Restrictions | Description | +| Property | Type | Restrictions | Description | |-------------|-----------------|--------------|-------------| -| id | Integer | unique | An instance-wide unique id of the share | -| formId | Integer | | The id of the form, the share belongs to | -| shareType | NC-IShareType (Int) | `IShare::TYPE_USER = 0`, `IShare::TYPE_GROUP = 1`, `IShare::TYPE_LINK = 3` | Type of the share. Thus also describes how to interpret shareWith. | -| shareWith | String | | User/Group/Hash - depending on the shareType | -| displayName | String | | Display name of share-target. | +| id | Integer | unique | An instance-wide unique id of the share | +| formId | Integer | | The id of the form, the share belongs to | +| shareType | NC-IShareType (Int) | `IShare::TYPE_USER = 0`, `IShare::TYPE_GROUP = 1`, `IShare::TYPE_LINK = 3` | Type of the share. Thus also describes how to interpret shareWith. | +| shareWith | String | | User/Group/Hash - depending on the shareType | +| displayName | String | | Display name of share-target. | ### Submission + A submission-object describes a single submission by a user to a form. -| Property | Type | Restrictions | Description | +| Property | Type | Restrictions | Description | |-------------|-----------------|--------------|-------------| -| id | Integer | unique | An instance-wide unique id of the submission | -| formId | Integer | | The id of the form, the submission belongs to | -| userId | String | | The nextcloud userId of the submitting user. If submission is anonymous, this contains `anon-user-` | -| timestamp | unix timestamp | | When the user submitted | -| answers | Array of [Answers](#answer) | | Array of the actual user answers, belonging to this submission. -| userDisplayName | String | | Display name of the nextcloud-user, derived from `userId`. Contains `Anonymous user` if submitted anonymously. Not stored in DB. - +| id | Integer | unique | An instance-wide unique id of the submission | +| formId | Integer | | The id of the form, the submission belongs to | +| userId | String | | The nextcloud userId of the submitting user. If submission is anonymous, this contains `anon-user-` | +| timestamp | unix timestamp | | When the user submitted | +| answers | Array of [Answers](#answer) | | Array of the actual user answers, belonging to this submission. +| userDisplayName | String | | Display name of the nextcloud-user, derived from `userId`. Contains `Anonymous user` if submitted anonymously. Not stored in DB. ``` { @@ -137,14 +146,16 @@ A submission-object describes a single submission by a user to a form. ``` ### Answer + The actual answers of users on submission. -| Property | Type | Restrictions | Description | -|-------------|-----------------|--------------|-------------| -| id | Integer | unique | An instance-wide unique id of the submission | -| submissionId | Integer | | The id of the submission, the answer belongs to | -| questionId | Integer | | The id of the question, the answer belongs to | -| text | String | max. 4096 ch. | The actual answer text, the user submitted | +| Property | Type | Restrictions | Description | +| ------------ | ------- | ------------- | ----------------------------------------------- | +| id | Integer | unique | An instance-wide unique id of the submission | +| submissionId | Integer | | The id of the submission, the answer belongs to | +| questionId | Integer | | The id of the question, the answer belongs to | +| text | String | max. 4096 ch. | The actual answer text, the user submitted | + ``` { "id": 5, @@ -155,20 +166,22 @@ The actual answers of users on submission. ``` ## Permissions + Array of permissions, the user has on the form. Permissions are named by resp. routes on frontend. -| Permission | Description | +| Permission | Description | | ---------------|-------------| -| edit | User is allowed to edit the form | -| results | User is allowed to access the form results | +| edit | User is allowed to edit the form | +| results | User is allowed to access the form results | | results_delete | User is allowed to delete form submissions | -| submit | User is allowed to submit to the form | +| submit | User is allowed to submit to the form | ## Access Object + Defines some extended options of sharing / access -| Property | Type | Description | +| Property | Type | Description | |------------------|-----------|-------------| -| permitAllUsers | Boolean | All logged in users of this instance are allowed to submit to the form | -| showToAllUsers | Boolean | Only active, if permitAllUsers is true - Show the form to all users on appNavigation | +| permitAllUsers | Boolean | All logged in users of this instance are allowed to submit to the form | +| showToAllUsers | Boolean | Only active, if permitAllUsers is true - Show the form to all users on appNavigation | ``` { @@ -178,24 +191,26 @@ Defines some extended options of sharing / access ``` ## Question Types + Currently supported Question-Types are: -| Type-ID | Description | -|-----------------|-------------| -| `multiple` | Typically known as 'Checkboxes'. Using pre-defined options, the user can select one or multiple from. Needs at least one option available. | -| `multiple_unique` | Typically known as 'Radio Buttons'. Using pre-defined options, the user can select exactly one from. Needs at least one option available. | -| `dropdown` | Similar to `multiple_unique`, but rendered as dropdown field. | -| `short` | A short text answer. Single text line | -| `long` | A long text answer. Multi-line supported | -| `date` | Showing a dropdown calendar to select a date. | -| _`datetime`_ | _deprecated: No longer available for new questions. Showing a dropdown calendar to select a date **and** a time._ | -| `time` | Showing a dropdown menu to select a time. | +| Type-ID | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `multiple` | Typically known as 'Checkboxes'. Using pre-defined options, the user can select one or multiple from. Needs at least one option available. | +| `multiple_unique` | Typically known as 'Radio Buttons'. Using pre-defined options, the user can select exactly one from. Needs at least one option available. | +| `dropdown` | Similar to `multiple_unique`, but rendered as dropdown field. | +| `short` | A short text answer. Single text line | +| `long` | A long text answer. Multi-line supported | +| `date` | Showing a dropdown calendar to select a date. | +| _`datetime`_ | _deprecated: No longer available for new questions. Showing a dropdown calendar to select a date **and** a time._ | +| `time` | Showing a dropdown menu to select a time. | ## Extra Settings + Optional extra settings for some [Question Types](#question-types) | Extra Setting | Question Type | Type | Values | Description | -|-------------------------|---------------------------------------|------------------|---------------------------------------------|-----------------------------------------------------------------------------| +| ----------------------- | ------------------------------------- | ---------------- | ------------------------------------------- | --------------------------------------------------------------------------- | | `allowOtherAnswer` | `multiple, multiple_unique` | Boolean | `true/false` | Allows the user to specify a custom answer | | `shuffleOptions` | `dropdown, multiple, multiple_unique` | Boolean | `true/false` | The list of options should be shuffled | | `optionsLimitMax` | `multiple` | Integer | - | Maximum number of options that can be selected | diff --git a/docs/Embedding.md b/docs/Embedding.md index 28da78fa5..826583aa6 100644 --- a/docs/Embedding.md +++ b/docs/Embedding.md @@ -1,11 +1,12 @@ # Embedding + Besides sharing and using the [API](./API.md) for custom forms it is possible to embed forms inside external websites. ## Obtaining the embedding code -For embedding a form it is **required** to create a *public share link* first and then *convert it to an embeddable link*.\ -The embedding code can be copied from the *sharing sidebar* or crafted manually by using the public share link: +For embedding a form it is **required** to create a _public share link_ first and then _convert it to an embeddable link_.\ +The embedding code can be copied from the _sharing sidebar_ or crafted manually by using the public share link: If the public share link looks like this:\ `https://SERVER_DOMAIN/apps/forms/s/SHARE_HASH` @@ -13,78 +14,92 @@ If the public share link looks like this:\ The embeddable URL looks like this:\ `https://SERVER_DOMAIN/apps/forms/embed/SHARE_HASH` -Using the copy-embedding-code button on the *sharing sidebar* will automatically generate ready-to-use HTML code for embedding which looks like this: +Using the copy-embedding-code button on the _sharing sidebar_ will automatically generate ready-to-use HTML code for embedding which looks like this: + ```html ``` + The size parameters are based on our default forms styling. -## Window message events +## Window message events + The embedded view provides a `MessageEvent` to communicate its size with its parent window. This is done as accessing the document within an `iframe` is not possible if not on the same domain. ### Auto resizing the `iframe` The emitted message on the embedded view looks like this: + ```json { "type": "resize-iframe", "payload": { "width": 750, - "height": 900, - }, + "height": 900 + } } ``` To receive this information on your parent site: + ```js -window.addEventListener("message", (event) => { - if (event.origin !== "http://your-nextcloud-server.com") { - return; - } +window.addEventListener( + 'message', + (event) => { + if (event.origin !== 'http://your-nextcloud-server.com') { + return + } - if (event.data.type !== "resize-iframe") { - return; - } + if (event.data.type !== 'resize-iframe') { + return + } - const { width, height } = event.data.payload; + const { width, height } = event.data.payload - iframe.width = width; - iframe.height = height; -}, false); + iframe.width = width + iframe.height = height + }, + false, +) ``` ### Form submitted + When the form is submitted a message event like this is emitted: The emitted message on the embedded view looks like this: + ```json { "type": "form-saved", "payload": { - "id": 1234, - }, + "id": 1234 + } } ``` ## Custom styling + To apply custom styles on the embedded forms the [Custom CSS App](https://apps.nextcloud.com/apps/theming_customcss) can be used. The embedded form provides the `app-forms-embedded` class, so you can apply your styles.\ For example if you want the form to be displayed without margins you can use this: + ```css #content-vue.app-forms-embedded { - width: 100%; - height: 100%; - border-radius: 0; - margin: 0; + width: 100%; + height: 100%; + border-radius: 0; + margin: 0; } ``` Or if you want the form to fill the screen: + ```css #content-vue.app-forms-embedded .app-content header, #content-vue.app-forms-embedded .app-content form { max-width: unset; } -``` \ No newline at end of file +``` diff --git a/package.json b/package.json index 7ca5789b3..c5c1c4a62 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,34 @@ { "name": "forms", - "description": "Forms app for nextcloud", "version": "4.2.4", + "private": true, + "description": "Forms app for nextcloud", + "homepage": "https://github.com/nextcloud/forms#readme", + "bugs": { + "url": "https://github.com/nextcloud/forms/issues" + }, "repository": { "type": "git", "url": "git+https://github.com/nextcloud/forms.git" }, - "bugs": { - "url": "https://github.com/nextcloud/forms/issues" - }, - "homepage": "https://github.com/nextcloud/forms#readme", "license": "AGPL-3.0", - "private": true, "type": "module", "scripts": { "build": "vite --mode production build", - "dev": "vite --mode development build", - "watch": "vite --mode development build --watch", "cypress": "cypress run --e2e", "cypress:gui": "cypress open", + "dev": "vite --mode development build", "format": "prettier --check .", "format:fix": "prettier --write .", "lint": "eslint --ext .js,.vue src", "lint:fix": "eslint --ext .js,.vue src --fix", "stylelint": "stylelint css/*.css css/*.scss src/**/*.vue", - "stylelint:fix": "stylelint css/*.css css/*.scss src/**/*.vue --fix" + "stylelint:fix": "stylelint css/*.css css/*.scss src/**/*.vue --fix", + "watch": "vite --mode development build --watch" }, + "browserslist": [ + "extends @nextcloud/browserslist-config" + ], "dependencies": { "@nextcloud/auth": "^2.3.0", "@nextcloud/axios": "^2.5.0", @@ -49,13 +52,6 @@ "vue-router": "^3.6.5", "vuedraggable": "^2.24.3" }, - "browserslist": [ - "extends @nextcloud/browserslist-config" - ], - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - }, "devDependencies": { "@mdi/js": "^7.4.47", "@mdi/svg": "^7.4.47", diff --git a/src/Forms.vue b/src/Forms.vue index dbdc7b69c..661a23c09 100644 --- a/src/Forms.vue +++ b/src/Forms.vue @@ -23,9 +23,11 @@