Compare commits
165 Commits
v1.15.1
...
ci/self-ho
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac6fcf2d4b | ||
|
|
9f06a43d4b | ||
|
|
d31e31735d | ||
|
|
4a05762c0a | ||
|
|
a72f48f9ce | ||
|
|
7e6f23fa82 | ||
|
|
a72f4e3aa3 | ||
|
|
ec8945bb54 | ||
|
|
760f771e11 | ||
|
|
f0a443cbb6 | ||
|
|
69b9c09a14 | ||
|
|
7c93108172 | ||
|
|
899d8a6531 | ||
|
|
60b34d190a | ||
|
|
438a149304 | ||
|
|
9a2fcf6925 | ||
|
|
e3c802c0f3 | ||
|
|
ea84743864 | ||
|
|
abd38e0c15 | ||
|
|
0ec1f7151c | ||
|
|
a27cbf8bad | ||
|
|
f4a1424e90 | ||
|
|
a92dc282a8 | ||
|
|
e3ffbf73c3 | ||
|
|
c6e075af92 | ||
|
|
144f293231 | ||
|
|
6d78bc70f3 | ||
|
|
bf15865957 | ||
|
|
d2e5c0c515 | ||
|
|
933f2515db | ||
|
|
17bf361767 | ||
|
|
1df731396f | ||
|
|
968ea30fd4 | ||
|
|
8f75c7f92d | ||
|
|
234be011cc | ||
|
|
685014ec48 | ||
|
|
1cd6c55d30 | ||
|
|
6dbcf5d17b | ||
|
|
f84d7c372b | ||
|
|
8be8647f6d | ||
|
|
eb878055ae | ||
|
|
00b334d3d9 | ||
|
|
5905154fe0 | ||
|
|
8280f0796f | ||
|
|
18ea2f9a7e | ||
|
|
3cbddae6bc | ||
|
|
aac11e96b5 | ||
|
|
2e62a9c82a | ||
|
|
ec18ec758b | ||
|
|
8f3e2ae1d9 | ||
|
|
7f00601007 | ||
|
|
175c10c146 | ||
|
|
8dc0933c47 | ||
|
|
8c52b9bad9 | ||
|
|
a1c9396946 | ||
|
|
b0fbb386b8 | ||
|
|
e77a2fcd79 | ||
|
|
89152325be | ||
|
|
03cb9e2bc5 | ||
|
|
3c6f8ec419 | ||
|
|
3cfb1f6bfe | ||
|
|
96ad191ce2 | ||
|
|
52d4039dc8 | ||
|
|
73b3517840 | ||
|
|
3d78802446 | ||
|
|
8a99e6d539 | ||
|
|
0e08ad16e1 | ||
|
|
d04ab25315 | ||
|
|
19d35c65a0 | ||
|
|
1783914d3a | ||
|
|
c837dd4db6 | ||
|
|
db22052729 | ||
|
|
116babcaaf | ||
|
|
94da732bfb | ||
|
|
86d42b7060 | ||
|
|
122387a195 | ||
|
|
028f26a969 | ||
|
|
13c13b8dde | ||
|
|
5df4a49ff5 | ||
|
|
97902d2f6a | ||
|
|
db6221d1c9 | ||
|
|
0223dd9a3a | ||
|
|
974a4c979a | ||
|
|
51ba51fe33 | ||
|
|
4d5c69f250 | ||
|
|
9bddab4928 | ||
|
|
6dcb1d4b8b | ||
|
|
9ed384fa20 | ||
|
|
7cdc79a9ef | ||
|
|
852770c574 | ||
|
|
74afeb85d0 | ||
|
|
12a494720b | ||
|
|
b3261e0b56 | ||
|
|
88dbb010d0 | ||
|
|
d8adaf5fe6 | ||
|
|
2a36b45072 | ||
|
|
4e6474fa99 | ||
|
|
dbe7536339 | ||
|
|
b5e08110ab | ||
|
|
a7f2558aab | ||
|
|
3c3e6fa7d2 | ||
|
|
6a2b092ad6 | ||
|
|
5f2c300b21 | ||
|
|
439e44128a | ||
|
|
55056e27f1 | ||
|
|
22c36a0d77 | ||
|
|
1ebaa0c41f | ||
|
|
a2dbb94179 | ||
|
|
6f6f54965c | ||
|
|
5a833ec367 | ||
|
|
f1161be49f | ||
|
|
c0731ce142 | ||
|
|
4534ad5a92 | ||
|
|
6788210c27 | ||
|
|
1051dea281 | ||
|
|
eb9fce2e5f | ||
|
|
955a16f1c5 | ||
|
|
f38773473b | ||
|
|
b15254f1ed | ||
|
|
6dd623f796 | ||
|
|
41e97d7281 | ||
|
|
1b2a352df1 | ||
|
|
7fcad2425d | ||
|
|
5fb43086b6 | ||
|
|
7b4586a43a | ||
|
|
aaa76f7bd0 | ||
|
|
8260296d64 | ||
|
|
b02bc530f1 | ||
|
|
1b4e859431 | ||
|
|
acc61ad584 | ||
|
|
cb1d5c49e0 | ||
|
|
0c7b1c4731 | ||
|
|
629ef85d64 | ||
|
|
914f1d76ac | ||
|
|
0923070c45 | ||
|
|
bbf51952e0 | ||
|
|
1d1c2df8f3 | ||
|
|
0780b10170 | ||
|
|
fd6ef9b6eb | ||
|
|
da4a54900c | ||
|
|
53bd32d6b6 | ||
|
|
f7fa419105 | ||
|
|
023ab01e93 | ||
|
|
615d5ef871 | ||
|
|
a52b7b9742 | ||
|
|
dcbc6bc604 | ||
|
|
ce13d89e07 | ||
|
|
7114b10871 | ||
|
|
100404d25f | ||
|
|
60bfc192d3 | ||
|
|
fd090c7749 | ||
|
|
d735308bd3 | ||
|
|
4ec068ca62 | ||
|
|
f5e3e5e0f8 | ||
|
|
94aee3e07a | ||
|
|
b1f7c623a1 | ||
|
|
afa95d3c50 | ||
|
|
ba8e77abfe | ||
|
|
8c09047203 | ||
|
|
baa85e8947 | ||
|
|
f1e5acc52e | ||
|
|
d76b7a4667 | ||
|
|
df32a3ee34 | ||
|
|
2fa74662db | ||
|
|
d5fd80d116 |
17
.github/dependabot.yml
vendored
17
.github/dependabot.yml
vendored
@@ -13,6 +13,23 @@ updates:
|
||||
- juliushaertl
|
||||
- luka-nextcloud
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable31
|
||||
versioning-strategy: lockfile-only
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
open-pull-requests-limit: 30
|
||||
labels:
|
||||
- 3. to review
|
||||
- dependencies
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable30
|
||||
versioning-strategy: lockfile-only
|
||||
|
||||
6
.github/workflows/appbuild.yml
vendored
6
.github/workflows/appbuild.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -18,13 +18,13 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.32.0
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
|
||||
6
.github/workflows/appstore-build-publish.yml
vendored
6
.github/workflows/appstore-build-publish.yml
vendored
@@ -17,7 +17,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
build_and_publish:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
# Only allowed to be run on nextcloud-releases repositories
|
||||
if: ${{ github.repository_owner == 'nextcloud-releases' }}
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
# Skip if no package.json
|
||||
if: ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
|
||||
- name: Set up php ${{ steps.php-versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ steps.php-versions.outputs.php-min }}
|
||||
coverage: none
|
||||
|
||||
8
.github/workflows/cypress-e2e.yml
vendored
8
.github/workflows/cypress-e2e.yml
vendored
@@ -14,7 +14,7 @@ env:
|
||||
jobs:
|
||||
cypress:
|
||||
|
||||
runs-on: 'ubuntu-latest'
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -22,7 +22,7 @@ jobs:
|
||||
node-version: [20.x]
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '8.2' ]
|
||||
server-versions: [ 'stable31' ]
|
||||
server-versions: [ 'master' ]
|
||||
|
||||
env:
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
restore-keys: ${{ steps.extcache.outputs.key }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ${{ env.extensions }}
|
||||
|
||||
4
.github/workflows/integration.yml
vendored
4
.github/workflows/integration.yml
vendored
@@ -21,7 +21,7 @@ env:
|
||||
|
||||
jobs:
|
||||
integration:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -78,7 +78,7 @@ jobs:
|
||||
path: apps/activity
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.31.1
|
||||
uses: shivammathur/setup-php@2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, apcu, gd
|
||||
|
||||
4
.github/workflows/lint-eslint.yml
vendored
4
.github/workflows/lint-eslint.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
||||
- '**.vue'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
6
.github/workflows/lint-php-cs.yml
vendored
6
.github/workflows/lint-php-cs.yml
vendored
@@ -19,7 +19,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
name: php-cs
|
||||
|
||||
@@ -33,8 +33,8 @@ jobs:
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
4
.github/workflows/lint-php.yml
vendored
4
.github/workflows/lint-php.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0
|
||||
|
||||
php-lint:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
needs: matrix
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
4
.github/workflows/lint-stylelint.yml
vendored
4
.github/workflows/lint-stylelint.yml
vendored
@@ -19,7 +19,7 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
name: stylelint
|
||||
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
4
.github/workflows/nodejs.yml
vendored
4
.github/workflows/nodejs.yml
vendored
@@ -5,7 +5,7 @@ on: [push]
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.1.0
|
||||
uses: actions/setup-node@v4.4.0
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
|
||||
20
.github/workflows/npm-audit-fix.yml
vendored
20
.github/workflows/npm-audit-fix.yml
vendored
@@ -14,22 +14,28 @@ on:
|
||||
# At 2:30 on Sundays
|
||||
- cron: '30 2 * * 0'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['main', 'master', 'stable30', 'stable29', 'stable28']
|
||||
branches: ['main', 'master', 'stable31', 'stable30', 'stable29']
|
||||
|
||||
name: npm-audit-fix-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
id: checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
ref: ${{ matrix.branches }}
|
||||
continue-on-error: true
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -39,7 +45,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.1.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -48,10 +54,10 @@ jobs:
|
||||
|
||||
- name: Fix npm audit
|
||||
id: npm-audit
|
||||
uses: nextcloud-libraries/npm-audit-action@2a60bd2e79cc77f2cc4d9a3fe40f1a69896f3a87 # v0.1.0
|
||||
uses: nextcloud-libraries/npm-audit-action@1b1728b2b4a7a78d69de65608efcf4db0e3e42d0 # v0.2.0
|
||||
|
||||
- name: Run npm ci and npm run build
|
||||
if: always()
|
||||
if: steps.checkout.outcome == 'success'
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
@@ -59,8 +65,8 @@ jobs:
|
||||
npm run build --if-present
|
||||
|
||||
- name: Create Pull Request
|
||||
if: always()
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(deps): Fix npm audit'
|
||||
|
||||
4
.github/workflows/phpunit-mysql.yml
vendored
4
.github/workflows/phpunit-mysql.yml
vendored
@@ -62,7 +62,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-mysql:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
4
.github/workflows/phpunit-pgsql.yml
vendored
4
.github/workflows/phpunit-pgsql.yml
vendored
@@ -61,7 +61,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-pgsql:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -106,7 +106,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
4
.github/workflows/phpunit-sqlite.yml
vendored
4
.github/workflows/phpunit-sqlite.yml
vendored
@@ -61,7 +61,7 @@ jobs:
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-sqlite:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
@@ -95,7 +95,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
7
.github/workflows/pr-feedback.yml
vendored
7
.github/workflows/pr-feedback.yml
vendored
@@ -15,9 +15,14 @@ on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
pr-feedback:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.repository_owner == 'nextcloud' }}
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
steps:
|
||||
- name: The get-github-handles-from-website action
|
||||
uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1
|
||||
|
||||
6
.github/workflows/psalm.yml
vendored
6
.github/workflows/psalm.yml
vendored
@@ -19,7 +19,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
name: static-psalm-analysis
|
||||
steps:
|
||||
@@ -35,8 +35,8 @@ jobs:
|
||||
- name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml
|
||||
run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml
|
||||
|
||||
- name: Set up php${{ steps.versions.outputs.php-available }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
- name: Set up php${{ steps.versions.outputs.php-min }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: ${{ steps.versions.outputs.php-min }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
2
.github/workflows/reuse.yml
vendored
2
.github/workflows/reuse.yml
vendored
@@ -16,7 +16,7 @@ permissions:
|
||||
|
||||
jobs:
|
||||
reuse-compliance-check:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
8
.github/workflows/update-nextcloud-ocp.yml
vendored
8
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -18,12 +18,12 @@ permissions:
|
||||
|
||||
jobs:
|
||||
update-nextcloud-ocp:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ${{ github.repository_owner == 'nextcloud-gmbh' && fromJSON('["self-hosted", "ubuntu-latest"]') || 'ubuntu-latest' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['main', 'master', 'stable30', 'stable29', 'stable28']
|
||||
branches: ['main', 'master', 'stable31', 'stable30', 'stable29']
|
||||
|
||||
name: update-nextcloud-ocp-${{ matrix.branches }}
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Set up php8.2
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
|
||||
with:
|
||||
php-version: 8.2
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -107,7 +107,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'chore(dev-deps): Bump nextcloud/ocp package'
|
||||
|
||||
30
CHANGELOG.md
30
CHANGELOG.md
@@ -5,36 +5,6 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.15.1
|
||||
### Fixed
|
||||
* [stable31] fix: Properly show attachment extension by @backportbot in https://github.com/nextcloud/deck/pull/6701
|
||||
* [stable31] Clear selected stack when selected board changed by @backportbot in https://github.com/nextcloud/deck/pull/6915
|
||||
* [stable31] fix: Use strings as rich object ids by @backportbot in https://github.com/nextcloud/deck/pull/6951
|
||||
* [stable31] fix: Limit label actions to labels of the cards board by @backportbot in https://github.com/nextcloud/deck/pull/6954
|
||||
* [stable31] fix: only delete assignments on unshared board by @grnd-alt in https://github.com/nextcloud/deck/pull/6934
|
||||
|
||||
### Improvements
|
||||
* [stable31] perf: Skip doing a query just to check if a board is deleted by @backportbot in https://github.com/nextcloud/deck/pull/6894
|
||||
|
||||
## 1.15.0
|
||||
### Fixed
|
||||
- Fix: Adapt URLs generated in the backend to new routes #6743
|
||||
- Fix npm audit #6719
|
||||
- Fix: skip exporting a deleted card #6723
|
||||
|
||||
## 1.15.0-beta.2
|
||||
|
||||
### Added
|
||||
|
||||
- feat: Implement reference resolving for cards that have a link in the title @juliusknorr [#6286](https://github.com/nextcloud/deck/pull/6286)
|
||||
|
||||
### Other
|
||||
|
||||
- Remove old project from README @edent [#6658](https://github.com/nextcloud/deck/pull/6658)
|
||||
- devcontainer(image): Fix package path @niclasheinz [#6653](https://github.com/nextcloud/deck/pull/6653)
|
||||
- remove deprecated nextcloud-vue-collections @grnd-alt [#6664](https://github.com/nextcloud/deck/pull/6664)
|
||||
- fix: set cypress ci server version to stable31 @grnd-alt [#6705](https://github.com/nextcloud/deck/pull/6705)
|
||||
|
||||
## 1.15.0-beta.1
|
||||
### Fixed
|
||||
- fix: Catch not found card @juliusknorr [#6646](https://github.com/nextcloud/deck/pull/6646)
|
||||
|
||||
@@ -12,7 +12,7 @@ SPDX-FileCopyrightText = "none"
|
||||
SPDX-License-Identifier = "CC0-1.0"
|
||||
|
||||
[[annotations]]
|
||||
path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "lib/Service/Importer/fixtures/config-deckJson-schema.json", "lib/Service/Importer/fixtures/config-trelloApi-schema.json", "lib/Service/Importer/fixtures/config-trelloJson-schema.json", "screenshots/screenshot1.png", "src/assets/file-placeholder.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/activity.svg", "img/activity-dark.svg", "img/deck.svg", "img/deck-current.svg", "img/deck-dark.svg", "img/details-white.svg", "img/card.svg"]
|
||||
path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "lib/Service/Importer/fixtures/config-deckJson-schema.json", "lib/Service/Importer/fixtures/config-trelloApi-schema.json", "lib/Service/Importer/fixtures/config-trelloJson-schema.json", "lib/Service/fixtures/default-board.json", "screenshots/screenshot1.png", "src/assets/file-placeholder.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/activity.svg", "img/activity-dark.svg", "img/deck.svg", "img/deck-current.svg", "img/deck-dark.svg", "img/details-white.svg", "img/card.svg", "img/sample-image.jpg"]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "2019 Nextcloud GmbH and Nextcloud contributors"
|
||||
SPDX-License-Identifier = "AGPL-3.0-or-later"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.15.1</version>
|
||||
<version>2.0.0-dev.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -42,7 +42,7 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="8.0">mysql</database>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
<nextcloud min-version="32" max-version="32"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
@@ -54,6 +54,9 @@
|
||||
<live-migration>
|
||||
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
|
||||
</live-migration>
|
||||
<post-migration>
|
||||
<step>OCA\Deck\Migration\LabelMismatchCleanup</step>
|
||||
</post-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
|
||||
152
composer.lock
generated
152
composer.lock
generated
@@ -6,144 +6,32 @@
|
||||
],
|
||||
"content-hash": "6950663d9d213151028e780637480220",
|
||||
"packages": [
|
||||
{
|
||||
"name": "icecave/parity",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icecave/parity.git",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icecave/parity/zipball/0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"reference": "0109fef58b3230d23b20b2ac52ecdf477218d300",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"icecave/repr": "~1",
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"eloquent/liberator": "~1",
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Icecave\\Parity": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A customizable deep comparison library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/parity",
|
||||
"keywords": [
|
||||
"compare",
|
||||
"comparison",
|
||||
"equal",
|
||||
"equality",
|
||||
"greater",
|
||||
"less",
|
||||
"sort",
|
||||
"sorting"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/parity/issues",
|
||||
"source": "https://github.com/icecave/parity/tree/1.0.0"
|
||||
},
|
||||
"time": "2014-01-17T05:56:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "icecave/repr",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/icecave/repr.git",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/icecave/repr/zipball/8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"reference": "8a3d2953adf5f464a06e3e2587aeacc97e2bed07",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"icecave/archer": "~1"
|
||||
},
|
||||
"suggest": {
|
||||
"eloquent/asplode": "Drop-in exception-based error handling."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Icecave\\Repr\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "James Harris",
|
||||
"email": "james.harris@icecave.com.au",
|
||||
"homepage": "https://github.com/jmalloc"
|
||||
}
|
||||
],
|
||||
"description": "A library for generating string representations of any value, inspired by Python's reprlib library.",
|
||||
"homepage": "https://github.com/IcecaveStudios/repr",
|
||||
"keywords": [
|
||||
"human",
|
||||
"readable",
|
||||
"repr",
|
||||
"representation",
|
||||
"string"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/icecave/repr/issues",
|
||||
"source": "https://github.com/icecave/repr/tree/1.0.1"
|
||||
},
|
||||
"time": "2014-07-25T05:44:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "justinrainbow/json-schema",
|
||||
"version": "6.0.0",
|
||||
"version": "6.4.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/jsonrainbow/json-schema.git",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9"
|
||||
"reference": "35d262c94959571e8736db1e5c9bc36ab94ae900"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"reference": "a38c6198d53b09c0702f440585a4f4a5d9137bd9",
|
||||
"url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/35d262c94959571e8736db1e5c9bc36ab94ae900",
|
||||
"reference": "35d262c94959571e8736db1e5c9bc36ab94ae900",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"icecave/parity": "1.0.0",
|
||||
"marc-mabe/php-enum": "^2.0 || ^3.0 || ^4.0",
|
||||
"php": ">=5.3.3"
|
||||
"ext-json": "*",
|
||||
"marc-mabe/php-enum": "^4.0",
|
||||
"php": "^7.2 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "~2.2.20 || ~2.19.0",
|
||||
"friendsofphp/php-cs-fixer": "3.3.0",
|
||||
"json-schema/json-schema-test-suite": "1.2.0",
|
||||
"phpunit/phpunit": "^4.8.35"
|
||||
"marc-mabe/php-enum-phpstan": "^2.0",
|
||||
"phpspec/prophecy": "^1.19",
|
||||
"phpstan/phpstan": "^1.12",
|
||||
"phpunit/phpunit": "^8.5"
|
||||
},
|
||||
"bin": [
|
||||
"bin/validate-json"
|
||||
@@ -189,9 +77,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/jsonrainbow/json-schema/issues",
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.0.0"
|
||||
"source": "https://github.com/jsonrainbow/json-schema/tree/6.4.1"
|
||||
},
|
||||
"time": "2024-07-30T17:49:21+00:00"
|
||||
"time": "2025-04-04T13:08:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "marc-mabe/php-enum",
|
||||
@@ -492,16 +380,16 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nextcloud-deps/ocp.git",
|
||||
"reference": "ed23f703c172ba167a62a76f7b2d8a6b4e37f44f"
|
||||
"reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/ed23f703c172ba167a62a76f7b2d8a6b4e37f44f",
|
||||
"reference": "ed23f703c172ba167a62a76f7b2d8a6b4e37f44f",
|
||||
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461",
|
||||
"reference": "8f470f66ec1d0d2e209c8a8a8a6ec30d4598e461",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "~8.1 || ~8.2 || ~8.3",
|
||||
"php": "~8.1 || ~8.2 || ~8.3 || ~8.4",
|
||||
"psr/clock": "^1.0",
|
||||
"psr/container": "^2.0.2",
|
||||
"psr/event-dispatcher": "^1.0",
|
||||
@@ -511,7 +399,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "31.0.0-dev"
|
||||
"dev-master": "32.0.0-dev"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
@@ -533,7 +421,7 @@
|
||||
"issues": "https://github.com/nextcloud-deps/ocp/issues",
|
||||
"source": "https://github.com/nextcloud-deps/ocp/tree/master"
|
||||
},
|
||||
"time": "2025-01-10T00:44:36+00:00"
|
||||
"time": "2025-04-24T00:50:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
|
||||
@@ -87,8 +87,8 @@ describe('Card', function () {
|
||||
cy.get('.modal-mask.card-selector button.button-vue--vue-primary').should('be.visible').click()
|
||||
cy.wait('@save', { timeout: 7000 })
|
||||
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.reload()
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board .stack').eq(0).within(() => {
|
||||
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
|
||||
})
|
||||
|
||||
@@ -22,10 +22,10 @@ describe('Deck dashboard', function() {
|
||||
.should($el => expect($el.text().trim()).to.equal('Upcoming cards'))
|
||||
})
|
||||
|
||||
it('Can see the default "Personal Board" created for user by default', function() {
|
||||
it('Can see the default "Welcome Board" created for user by default', function() {
|
||||
cy.visit('/apps/deck')
|
||||
|
||||
const defaultBoard = 'Personal'
|
||||
const defaultBoard = 'Welcome to Nextcloud Deck!'
|
||||
|
||||
cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + defaultBoard + ')')
|
||||
|
||||
BIN
img/sample-image.jpg
Normal file
BIN
img/sample-image.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 188 KiB |
@@ -27,7 +27,7 @@ class DefaultBoardMiddleware extends Middleware {
|
||||
public function beforeController($controller, $methodName) {
|
||||
try {
|
||||
if ($this->userId !== null && $this->defaultBoardService->checkFirstRun($this->userId) && $this->permissionService->canCreate()) {
|
||||
$this->defaultBoardService->createDefaultBoard($this->l10n->t('Personal'), $this->userId, '0087C5');
|
||||
$this->defaultBoardService->createDefaultBoard($this->l10n->t('Welcome to Nextcloud Deck!'), $this->userId, 'bf678b');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$this->logger->error('Could not create default board', ['exception' => $e]);
|
||||
|
||||
78
lib/Migration/LabelMismatchCleanup.php
Normal file
78
lib/Migration/LabelMismatchCleanup.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\Deck\Migration;
|
||||
|
||||
use OCP\IDBConnection;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\IRepairStep;
|
||||
|
||||
class LabelMismatchCleanup implements IRepairStep {
|
||||
|
||||
public function __construct(
|
||||
private IDBConnection $db,
|
||||
) {
|
||||
}
|
||||
|
||||
public function getName() {
|
||||
return 'Migrate labels with wrong board mapping';
|
||||
}
|
||||
|
||||
public function run(IOutput $output) {
|
||||
// Find assingments where a label of another (wrong) board is used
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('al.id', 'al.label_id', 'al.card_id', 's.board_id as actual_board_id', 'l.board_id as wrong_id', 'l.color', 'l.title')
|
||||
->from('deck_assigned_labels', 'al')
|
||||
->innerJoin('al', 'deck_cards', 'c', 'c.id = al.card_id')
|
||||
->innerJoin('c', 'deck_stacks', 's', 'c.stack_id = s.id')
|
||||
->innerJoin('al', 'deck_labels', 'l', 'l.id = al.label_id')
|
||||
->where($qb->expr()->neq('l.board_id', 's.board_id'));
|
||||
|
||||
$labels = $qb->executeQUery()->fetchAll();
|
||||
if (count($labels) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$output->info('Found ' . count($labels) . ' labels with wrong board mapping');
|
||||
|
||||
foreach ($labels as $label) {
|
||||
// Select existing label on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('id')
|
||||
->from('deck_labels')
|
||||
->where($qb->expr()->eq('title', $qb->createNamedParameter($label['title'])))
|
||||
->andWhere($qb->expr()->eq('color', $qb->createNamedParameter($label['color'])))
|
||||
->andWhere($qb->expr()->eq('board_id', $qb->createNamedParameter($label['actual_board_id'])));
|
||||
$result = $qb->executeQuery();
|
||||
$newLabel = $result->fetchOne();
|
||||
$result->closeCursor();
|
||||
|
||||
if (!$newLabel) {
|
||||
// Create a new label with the same title and color on the correct board
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->insert('deck_labels')
|
||||
->values([
|
||||
'title' => $qb->createNamedParameter($label['title']),
|
||||
'color' => $qb->createNamedParameter($label['color']),
|
||||
'board_id' => $qb->createNamedParameter($label['actual_board_id']),
|
||||
]);
|
||||
$qb->executeStatement();
|
||||
$newLabel = $qb->getLastInsertId();
|
||||
$output->debug('Created new label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
} else {
|
||||
$output->debug('Found existing label ' . $label['title'] . ' on board ' . $label['actual_board_id']);
|
||||
}
|
||||
|
||||
// Update the assignment to use the new label
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->update('deck_assigned_labels')
|
||||
->set('label_id', $qb->createNamedParameter($newLabel))
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($label['id'])));
|
||||
$qb->executeStatement();
|
||||
$output->debug('Updated label assignment ' . $label['id'] . ' to use label ' . $newLabel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -762,6 +762,8 @@ class BoardService {
|
||||
$fullCards = [];
|
||||
foreach ($cards as $card) {
|
||||
$fullCard = $this->cardMapper->find($card->getId());
|
||||
$assignedUsers = $this->assignedUsersMapper->findAll($card->getId());
|
||||
$fullCard->setAssignedUsers($assignedUsers);
|
||||
array_push($fullCards, $fullCard);
|
||||
}
|
||||
$stack->setCards($fullCards);
|
||||
|
||||
@@ -9,6 +9,7 @@ namespace OCA\Deck\Service;
|
||||
|
||||
use OCA\Deck\AppInfo\Application;
|
||||
use OCA\Deck\BadRequestException;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
@@ -21,6 +22,8 @@ class DefaultBoardService {
|
||||
private $cardService;
|
||||
private $config;
|
||||
private $l10n;
|
||||
private LabelService $labelService;
|
||||
private AttachmentService $attachmentService;
|
||||
|
||||
public function __construct(
|
||||
IL10N $l10n,
|
||||
@@ -29,6 +32,8 @@ class DefaultBoardService {
|
||||
StackService $stackService,
|
||||
CardService $cardService,
|
||||
IConfig $config,
|
||||
LabelService $labelService,
|
||||
AttachmentService $attachmentService,
|
||||
) {
|
||||
$this->boardService = $boardService;
|
||||
$this->stackService = $stackService;
|
||||
@@ -36,6 +41,8 @@ class DefaultBoardService {
|
||||
$this->config = $config;
|
||||
$this->boardMapper = $boardMapper;
|
||||
$this->l10n = $l10n;
|
||||
$this->labelService = $labelService;
|
||||
$this->attachmentService = $attachmentService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,10 +66,13 @@ class DefaultBoardService {
|
||||
return false;
|
||||
}
|
||||
|
||||
private function getDefaultBoardData(): array {
|
||||
$defaultBoardDataJson = file_get_contents(__DIR__ . '/fixtures/default-board.json');
|
||||
return json_decode($defaultBoardDataJson, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $title
|
||||
* @param $userId
|
||||
* @param $color
|
||||
* @return \OCP\AppFramework\Db\Entity
|
||||
* @throws \OCA\Deck\NoPermissionException
|
||||
* @throws \OCA\Deck\StatusException
|
||||
@@ -71,19 +81,71 @@ class DefaultBoardService {
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function createDefaultBoard(string $title, string $userId, string $color) {
|
||||
$defaultBoard = $this->boardService->create($title, $userId, $color);
|
||||
$defaultStacks = [];
|
||||
$defaultCards = [];
|
||||
$boardData = $this->getDefaultBoardData();
|
||||
|
||||
/** @var Board $defaultBoard */
|
||||
$defaultBoard = $this->boardService->create(
|
||||
$boardData['title'] ?? $title,
|
||||
$userId,
|
||||
$boardData['color'] ?? $color,
|
||||
);
|
||||
$boardId = $defaultBoard->getId();
|
||||
$additionLabels = [];
|
||||
$translatedLabelTitles = [
|
||||
'Read more inside' => $this->l10n->t('Read more inside'),
|
||||
];
|
||||
$translatedStackTitles = [
|
||||
'Custom lists - click to rename!' => $this->l10n->t('Custom lists - click to rename!'),
|
||||
'To Do' => $this->l10n->t('To Do'),
|
||||
'In Progress' => $this->l10n->t('In Progress'),
|
||||
'Done' => $this->l10n->t('Done'),
|
||||
];
|
||||
$translatedCardTitles = [
|
||||
'1. Open to learn more about boards and cards' => $this->l10n->t('1. Open to learn more about boards and cards'),
|
||||
'2. Drag cards left and right, up and down' => $this->l10n->t('2. Drag cards left and right, up and down'),
|
||||
'3. Apply rich formatting and link content' => $this->l10n->t('3. Apply rich formatting and link content'),
|
||||
'4. Share, comment and collaborate!' => $this->l10n->t('4. Share, comment and collaborate!'),
|
||||
'Create your first card!' => $this->l10n->t('Create your first card!'),
|
||||
];
|
||||
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('To do'), $boardId, 1);
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('Doing'), $boardId, 1);
|
||||
$defaultStacks[] = $this->stackService->create($this->l10n->t('Done'), $boardId, 1);
|
||||
foreach ($boardData['addition_labels'] as $labelData) {
|
||||
$additionLabels[] = $this->labelService->create(
|
||||
$translatedLabelTitles[$labelData['title']] ?? $labelData['title'],
|
||||
$labelData['color'],
|
||||
$boardId
|
||||
);
|
||||
}
|
||||
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 3'), $defaultStacks[0]->getId(), 'text', 0, $userId);
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 2'), $defaultStacks[1]->getId(), 'text', 0, $userId);
|
||||
$defaultCards[] = $this->cardService->create($this->l10n->t('Example Task 1'), $defaultStacks[2]->getId(), 'text', 0, $userId);
|
||||
$defaultLabels = array_merge($defaultBoard->getLabels() ?? [], $additionLabels);
|
||||
|
||||
foreach ($boardData['stacks'] as $stackData) {
|
||||
$stack = $this->stackService->create(
|
||||
$translatedStackTitles[$stackData['title']] ?? $stackData['title'],
|
||||
$boardId,
|
||||
$stackData['order']
|
||||
);
|
||||
|
||||
foreach ($stackData['cards'] as $cardData) {
|
||||
$card = $this->cardService->create(
|
||||
$translatedCardTitles[$cardData['title']] ?? $cardData['title'],
|
||||
$stack->getId(),
|
||||
$cardData['type'],
|
||||
$cardData['order'],
|
||||
$userId,
|
||||
$cardData['description'],
|
||||
);
|
||||
|
||||
foreach ($defaultLabels as $defaultLabel) {
|
||||
if ($defaultLabel && in_array($defaultLabel->getTitle(), $cardData['labels'])) {
|
||||
$this->cardService->assignLabel($card->getId(), $defaultLabel->getId());
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($cardData['has_example_attachment'])) {
|
||||
$this->attachmentService->create($card->getId(), 'file', 'DEFAULT_SAMPLE_FILE');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $defaultBoard;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,15 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
|
||||
}
|
||||
|
||||
public function create(Attachment $attachment) {
|
||||
$file = $this->getUploadedFile();
|
||||
if ($attachment->getData() === 'DEFAULT_SAMPLE_FILE' && !$this->request->getUploadedFile('file')) {
|
||||
$file = [
|
||||
'name' => 'Nextcloud sample image - add your image here!.jpg',
|
||||
'tmp_name' => __DIR__ . '/../../img/sample-image.jpg',
|
||||
];
|
||||
} else {
|
||||
$file = $this->getUploadedFile();
|
||||
}
|
||||
|
||||
$fileName = $file['name'];
|
||||
|
||||
// get shares for current card
|
||||
|
||||
81
lib/Service/fixtures/default-board.json
Normal file
81
lib/Service/fixtures/default-board.json
Normal file
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"color": "bf678b",
|
||||
"addition_labels": [
|
||||
{
|
||||
"title": "Read more inside",
|
||||
"color": "CC317C"
|
||||
}
|
||||
],
|
||||
"stacks": [
|
||||
{
|
||||
"title": "Custom lists - click to rename!",
|
||||
"order": 0,
|
||||
"cards": [
|
||||
{
|
||||
"title": "1. Open to learn more about boards and cards",
|
||||
"description": "## Welcome to Nextcloud Deck!\n\nNextcloud Deck is a kanban style project management app that integrates seamlessly with the Nextcloud ecosystem. Here, you can create and manage boards to streamline your projects and organize project tasks visually using cards. A versatile tool, Nextcloud Deck will help you stay efficient in both personal and collaborative settings!\n\n### \ud83d\udccc How to set up a new board?\n\nAdd a new board via the \u201c+\u201d button or \u201cAdd board\u201d. Name your board and add a description to clarify its purpose if you wish.\n\nAdd task lists to your board via \u201cAdd List\u201d (e.g., \"To Do\"). Add cards to these lists to represent individual tasks or items. Organize your cards visually by assigning labels or colors.\n\nManage your board list: In the board menu next to the board name, you can edit, clone, archive and export your boards.\n\n### \ud83d\uddc2\ufe0f How to create and edit task cards?\n\nAdd cards via the \u201c+\u201d button on top of the list of your choice. Name your card and add a description using the available rich text formatting instruments.\n\nSet a due date to track deadlines and add responsible team members. Label your cards with tags for better navigation. You can create and manage tags in the sidebar, which is accessible via the toolbar button.\n\n### \ud83d\udca1Useful tips for Nextcloud Deck\n\n- Integrate Nextcloud Deck with Nextcloud Calendar and track the upcoming card deadlines.\n- Use comments to keep discussions around a task within its dedicated card.\n- Enable Nextcloud Deck notifications to always stay updated on changes to your boards.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "To Do",
|
||||
"order": 1,
|
||||
"cards": [
|
||||
{
|
||||
"title": "2. Drag cards left and right, up and down",
|
||||
"description": "## \ud83d\udea6 Manage your boards and cards\n\nDrag your cards around the board to change position in the list or move them to other lists.\n\nArchive cards to remove them from the board without losing your content. You can always access archived cards and put them back by going to \"Show archived cards\" in the board menu.\n\nUse tags to assign types, statuses and other special attributes to your cards to aid visual navigation. Open the \"Tags\" tab in the sidebar of Nextcloud Deck to manage tags you can add to your cards.\n\n## \ud83d\udc53 Change how you view your boards\n\nTo navigate large boards easily, you can filter your cards by tags, team members, statuses and due dates. Open filter menu via Nextcloud Deck toolbar.\n\nEnable compact display mode in the Deck Board menu via the three dots menu in the toolbar. In the same menu, you can disable and enable cover images.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
},
|
||||
{
|
||||
"title": "Create your first card!",
|
||||
"description": "",
|
||||
"labels": [
|
||||
"Action needed"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "In Progress",
|
||||
"order": 2,
|
||||
"cards": [
|
||||
{
|
||||
"title": "3. Apply rich formatting and link content",
|
||||
"description": "## \ud83c\udfa8 Make use of rich formatting in card descriptions\n\nYou can use various instruments to make your content more structured and informative. Try all the instruments yourself - use this checklist!\n\n- [ ] Apply headings of different hierarchy (H1-H6).\n- [ ] Use **bold** *italic* __underline__ and ~~strikethrough~~ text formatting.\n- [ ] Create unordered, ordered and to-do lists.\n- [ ] Highlight code and blockquotes, add various illustrated callouts.\n- [ ] Create and format tables\n- [ ] Add details\n- [ ] Add links, for example to [the Nextcloud website](https:\/\/nextcloud.com\/)\n- [ ] Insert attachments\n- [ ] Add emojis \ud83d\udd76\ufe0f \n\n## \ud83d\udd17 Attach files to cards\n\nYou can upload any files from your machine or pick from your Nextcloud Files, such as documents, presentations, images, video clips and anything else. Add files via \"Attachments\" tab.\n\n## \ud83c\udf04 Illustrate cards with images\n\nAttach images to your cards - they will automatically work as card covers.",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0,
|
||||
"has_example_attachment": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Done",
|
||||
"order": 3,
|
||||
"cards": [
|
||||
{
|
||||
"title": "4. Share, comment and collaborate!",
|
||||
"description": "## \ud83e\udd1d How to collaborate in your board?\n\nShare your cards and boards with others. In many Nextcloud apps, linked Nextcloud Deck items will appear as rich, interactive widgets. Once you assign someone to a card, they will receive a notification.\n\nEdit cards together, leave notes for your teammates, share task-related files by adding attachments and discuss your tasks using card comments.\n\n### ",
|
||||
"labels": [
|
||||
"Read more inside"
|
||||
],
|
||||
"type": "text",
|
||||
"order": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
1099
package-lock.json
generated
1099
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
20
package.json
20
package.json
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "deck",
|
||||
"description": "",
|
||||
"version": "1.15.1",
|
||||
"version": "2.0.0-dev.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Julius Härtl",
|
||||
@@ -31,22 +31,22 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/polyfill": "^7.12.1",
|
||||
"@babel/runtime": "^7.26.0",
|
||||
"@babel/runtime": "^7.26.10",
|
||||
"@nextcloud/auth": "^2.4.0",
|
||||
"@nextcloud/axios": "^2.5.1",
|
||||
"@nextcloud/capabilities": "^1.2.0",
|
||||
"@nextcloud/dialogs": "^6.0.1",
|
||||
"@nextcloud/event-bus": "^3.3.1",
|
||||
"@nextcloud/event-bus": "^3.3.2",
|
||||
"@nextcloud/files": "^3.10.1",
|
||||
"@nextcloud/initial-state": "^2.2.0",
|
||||
"@nextcloud/l10n": "^3.1.0",
|
||||
"@nextcloud/moment": "^1.3.2",
|
||||
"@nextcloud/notify_push": "^1.3.0",
|
||||
"@nextcloud/router": "^3.0.1",
|
||||
"@nextcloud/vue": "^8.22.0",
|
||||
"@nextcloud/vue": "^8.25.1",
|
||||
"blueimp-md5": "^2.19.0",
|
||||
"chroma-js": "^3.1.2",
|
||||
"dompurify": "^3.2.3",
|
||||
"dompurify": "^3.2.5",
|
||||
"lodash": "^4.17.21",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-link-attributes": "^4.0.1",
|
||||
@@ -75,16 +75,16 @@
|
||||
"devDependencies": {
|
||||
"@nextcloud/babel-config": "^1.2.0",
|
||||
"@nextcloud/browserslist-config": "^3.0.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.12",
|
||||
"@nextcloud/eslint-config": "^8.4.1",
|
||||
"@nextcloud/cypress": "^1.0.0-beta.13",
|
||||
"@nextcloud/eslint-config": "^8.4.2",
|
||||
"@nextcloud/stylelint-config": "^3.0.1",
|
||||
"@nextcloud/webpack-vue-config": "^6.2.0",
|
||||
"@nextcloud/webpack-vue-config": "^6.3.0",
|
||||
"@relative-ci/agent": "^4.2.14",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"@vue/vue2-jest": "^29.2.6",
|
||||
"cypress": "^13.17.0",
|
||||
"eslint-plugin-cypress": "^3.6.0",
|
||||
"eslint-webpack-plugin": "^4.2.0",
|
||||
"eslint-webpack-plugin": "^5.0.1",
|
||||
"jest": "^29.7.0",
|
||||
"jest-serializer-vue": "^3.1.0",
|
||||
"stylelint-webpack-plugin": "^5.0.1",
|
||||
@@ -106,4 +106,4 @@
|
||||
"<rootDir>/node_modules/jest-serializer-vue"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +143,7 @@ export class BoardApi {
|
||||
return axios.get(this.url(`/boards/${board.id}/export`))
|
||||
.then(
|
||||
(response) => {
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
const fields = { title: t('deck', 'Card title'), description: t('deck', 'Description'), stackId: t('deck', 'List name'), labels: t('deck', 'Tags'), assignedUsers: t('deck', 'Assigned users'), duedate: t('deck', 'Due date'), createdAt: t('deck', 'Created'), lastModified: t('deck', 'Modified') }
|
||||
let row = ''
|
||||
Object.keys(fields).forEach(field => {
|
||||
row += '"' + fields[field] + '"' + '\t'
|
||||
@@ -160,16 +160,27 @@ export class BoardApi {
|
||||
const date = new Date(Number(card[field]) * 1000)
|
||||
row += '"' + date.toLocaleDateString() + '"' + '\t'
|
||||
} else if (field === 'stackId') {
|
||||
row += '"' + stack.title + '"' + '\t'
|
||||
row += '"' + stack.title.replaceAll('"', '""') + '"' + '\t'
|
||||
} else if (field === 'labels') {
|
||||
row += '"'
|
||||
card[field].forEach(label => {
|
||||
row += label.title + ', '
|
||||
row += label.title.replaceAll('"', '""') + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'assignedUsers') {
|
||||
row += '"'
|
||||
card[field].forEach(assignedUsers => {
|
||||
row += assignedUsers.participant.displayname.replaceAll('"', '""') + ', '
|
||||
})
|
||||
if (card[field].length > 0) {
|
||||
row = row.slice(0, -1)
|
||||
}
|
||||
row += '"' + '\t'
|
||||
} else if (field === 'description' || field === 'title') {
|
||||
row += '"' + card[field].replaceAll('"', '""') + '"' + '\t'
|
||||
} else {
|
||||
row += '"' + card[field] + '"' + '\t'
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
71780
|
||||
81091
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~9",
|
||||
"behat/behat": "~3.15.0",
|
||||
"behat/behat": "~3.18.1",
|
||||
"guzzlehttp/guzzle": "7.9.2",
|
||||
"jarnaiz/behat-junit-formatter": "^1.3",
|
||||
"sabre/dav": "4.7.0",
|
||||
|
||||
@@ -46,6 +46,12 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
/** @var CardService */
|
||||
private $cardService;
|
||||
|
||||
/** @var LabelService */
|
||||
private $labelService;
|
||||
|
||||
/** @var AttachmentService */
|
||||
private $attachmentService;
|
||||
|
||||
/** @var BoardMapper */
|
||||
private $boardMapper;
|
||||
|
||||
@@ -62,6 +68,8 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
$this->boardService = $this->createMock(BoardService::class);
|
||||
$this->stackService = $this->createMock(StackService::class);
|
||||
$this->cardService = $this->createMock(CardService::class);
|
||||
$this->labelService = $this->createMock(LabelService::class);
|
||||
$this->attachmentService = $this->createMock(AttachmentService::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->userId = 'admin';
|
||||
@@ -72,7 +80,9 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
$this->boardService,
|
||||
$this->stackService,
|
||||
$this->cardService,
|
||||
$this->config
|
||||
$this->config,
|
||||
$this->labelService,
|
||||
$this->attachmentService,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -109,8 +119,8 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testCreateDefaultBoard() {
|
||||
$title = 'Personal';
|
||||
$color = '317CCC';
|
||||
$title = 'Welcome to Nextcloud Deck!';
|
||||
$color = 'bf678b';
|
||||
$boardId = 5;
|
||||
|
||||
$board = new Board();
|
||||
@@ -128,34 +138,70 @@ class DefaultBoardServiceTest extends TestCase {
|
||||
return $text;
|
||||
});
|
||||
|
||||
$stackCustomId = '122';
|
||||
$stackCustom = $this->assembleTestStack('Custom lists - click to rename!', $stackCustomId, $boardId);
|
||||
|
||||
$stackToDoId = '123';
|
||||
$stackToDo = $this->assembleTestStack('To do', $stackToDoId, $boardId);
|
||||
$stackToDo = $this->assembleTestStack('To Do', $stackToDoId, $boardId);
|
||||
|
||||
$stackDoingId = '124';
|
||||
$stackDoing = $this->assembleTestStack('Doing', $stackDoingId, $boardId);
|
||||
$stackDoing = $this->assembleTestStack('In Progress', $stackDoingId, $boardId);
|
||||
|
||||
$stackDoneId = '125';
|
||||
$stackDone = $this->assembleTestStack('Done', $stackDoneId, $boardId);
|
||||
$this->stackService->expects($this->exactly(3))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
[$this->l10n->t('To do'), $boardId, 1],
|
||||
[$this->l10n->t('Doing'), $boardId, 1],
|
||||
[$this->l10n->t('Done'), $boardId, 1]
|
||||
)
|
||||
->willReturnOnConsecutiveCalls($stackToDo, $stackDoing, $stackDone);
|
||||
|
||||
$cardExampleTask3 = $this->assembleTestCard('Example Task 3', $stackToDoId, $this->userId);
|
||||
$cardExampleTask2 = $this->assembleTestCard('Example Task 2', $stackDoingId, $this->userId);
|
||||
$cardExampleTask1 = $this->assembleTestCard('Example Task 1', $stackDoneId, $this->userId);
|
||||
$this->cardService->expects($this->exactly(3))
|
||||
$this->stackService->expects($this->exactly(4))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
['Example Task 3', $stackToDoId, 'text', 0, $this->userId],
|
||||
['Example Task 2', $stackDoingId, 'text', 0, $this->userId],
|
||||
['Example Task 1', $stackDoneId, 'text', 0, $this->userId]
|
||||
[$this->l10n->t('Custom lists - click to rename!'), $boardId, 0],
|
||||
[$this->l10n->t('To Do'), $boardId, 1],
|
||||
[$this->l10n->t('In Progress'), $boardId, 2],
|
||||
[$this->l10n->t('Done'), $boardId, 3]
|
||||
)
|
||||
->willReturnonConsecutiveCalls($cardExampleTask3, $cardExampleTask2, $cardExampleTask1);
|
||||
->willReturnOnConsecutiveCalls($stackCustom, $stackToDo, $stackDoing, $stackDone);
|
||||
|
||||
$cardExampleTask1 = $this->assembleTestCard(
|
||||
'1. Open to learn more about boards and cards',
|
||||
$stackCustomId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask2 = $this->assembleTestCard(
|
||||
'2. Drag cards left and right, up and down',
|
||||
$stackToDoId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask3 = $this->assembleTestCard(
|
||||
'Create your first card!',
|
||||
$stackToDoId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask4 = $this->assembleTestCard(
|
||||
'3. Apply rich formatting and link content',
|
||||
$stackDoingId,
|
||||
$this->userId
|
||||
);
|
||||
$cardExampleTask5 = $this->assembleTestCard(
|
||||
'4. Share, comment and collaborate!',
|
||||
$stackDoneId,
|
||||
$this->userId
|
||||
);
|
||||
|
||||
$this->cardService->expects($this->exactly(5))
|
||||
->method('create')
|
||||
->withConsecutive(
|
||||
['1. Open to learn more about boards and cards', $stackCustomId, 'text', 0, $this->userId],
|
||||
['2. Drag cards left and right, up and down', $stackToDoId, 'text', 0, $this->userId],
|
||||
['Create your first card!', $stackToDoId, 'text', 1, $this->userId],
|
||||
['3. Apply rich formatting and link content', $stackDoingId, 'text', 0, $this->userId],
|
||||
['4. Share, comment and collaborate!', $stackDoneId, 'text', 0, $this->userId]
|
||||
)
|
||||
->willReturnonConsecutiveCalls(
|
||||
$cardExampleTask1,
|
||||
$cardExampleTask2,
|
||||
$cardExampleTask3,
|
||||
$cardExampleTask4,
|
||||
$cardExampleTask5
|
||||
);
|
||||
|
||||
$result = $this->service->createDefaultBoard($title, $this->userId, $color);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user