Compare commits
128 Commits
dependabot
...
v1.8.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1af1c7f581 | ||
|
|
87439dbaad | ||
|
|
c79ec72b79 | ||
|
|
beff26500a | ||
|
|
6df2e2b755 | ||
|
|
4b793d3738 | ||
|
|
399a85ce9f | ||
|
|
673222d37e | ||
|
|
eced4dd2d3 | ||
|
|
293f241aa6 | ||
|
|
5a79c61732 | ||
|
|
c28a877d0b | ||
|
|
484b9df8c9 | ||
|
|
db7403acc0 | ||
|
|
8c8788eab3 | ||
|
|
0f4ad52ca9 | ||
|
|
8b156958f8 | ||
|
|
88ba778e55 | ||
|
|
192314fb02 | ||
|
|
0bfb983a1c | ||
|
|
c3a8f797d1 | ||
|
|
b67ed2057c | ||
|
|
234ba20eba | ||
|
|
88097f98e8 | ||
|
|
4c3c483011 | ||
|
|
5a9cba00ed | ||
|
|
8f822cfd84 | ||
|
|
45c19c1c2d | ||
|
|
369749bb46 | ||
|
|
5ec04ac670 | ||
|
|
69b8ed2486 | ||
|
|
74d8fba022 | ||
|
|
2ca8863b5d | ||
|
|
63e57f2667 | ||
|
|
165ef3adf6 | ||
|
|
8ccdc6a2ed | ||
|
|
a04f2004bd | ||
|
|
ad00818bd1 | ||
|
|
138087b296 | ||
|
|
cd5500ee50 | ||
|
|
cda8a40607 | ||
|
|
84e6679704 | ||
|
|
7d8bc27d73 | ||
|
|
566de0f9e7 | ||
|
|
146fbbcb6f | ||
|
|
d2dd0d2914 | ||
|
|
6010e839d0 | ||
|
|
2895f563cd | ||
|
|
7663a4a346 | ||
|
|
864272c1a2 | ||
|
|
4f75064ba4 | ||
|
|
ffd6d4dedc | ||
|
|
891139f682 | ||
|
|
496304c896 | ||
|
|
9cfde4d80c | ||
|
|
eba4453728 | ||
|
|
f36a2a11a6 | ||
|
|
6c9af9cc12 | ||
|
|
de6604ad5f | ||
|
|
d4ebfc7ab1 | ||
|
|
2a2f578c13 | ||
|
|
f04cf33c78 | ||
|
|
6d89bbacf7 | ||
|
|
0010255391 | ||
|
|
50de5610b9 | ||
|
|
8def56fd8b | ||
|
|
bdbcb236a1 | ||
|
|
70fa18f186 | ||
|
|
43a7255c2a | ||
|
|
8c24def8d8 | ||
|
|
937f285689 | ||
|
|
a66c960b21 | ||
|
|
81d922c8bd | ||
|
|
347364543d | ||
|
|
6bc703a9b0 | ||
|
|
ee99a768f4 | ||
|
|
beee212fcb | ||
|
|
33145e377b | ||
|
|
5552a9d538 | ||
|
|
4fcdb6f304 | ||
|
|
0e4d345fc1 | ||
|
|
ee0092e7ca | ||
|
|
c3f0a1edc4 | ||
|
|
a8b46ad10f | ||
|
|
daa65b40fb | ||
|
|
fa6027f7ba | ||
|
|
f26a085b13 | ||
|
|
9d09916c17 | ||
|
|
f250d9956b | ||
|
|
93994bb39c | ||
|
|
17f7d19624 | ||
|
|
7e0c1a8024 | ||
|
|
f6dc22c545 | ||
|
|
d196956519 | ||
|
|
4769c69ba7 | ||
|
|
f322b6191e | ||
|
|
e076c76b3f | ||
|
|
df8257a18f | ||
|
|
e7f22ca0d3 | ||
|
|
a9921ecdf0 | ||
|
|
a5da643513 | ||
|
|
8c68b7ce83 | ||
|
|
a4137a4edd | ||
|
|
cb5a181993 | ||
|
|
46972646d8 | ||
|
|
8549d4a13f | ||
|
|
47077af838 | ||
|
|
6cc589539b | ||
|
|
2237745c09 | ||
|
|
b74569abef | ||
|
|
de67847ef1 | ||
|
|
a430eaf41f | ||
|
|
31b68ae5e5 | ||
|
|
fa1877ef7b | ||
|
|
5851c4a5f1 | ||
|
|
4fadb9a633 | ||
|
|
d021559d7c | ||
|
|
7f22925063 | ||
|
|
e65fa778cb | ||
|
|
003ee7a926 | ||
|
|
8b344a653f | ||
|
|
7403aafe16 | ||
|
|
f7b6e8a3bc | ||
|
|
ad051c5e0e | ||
|
|
7ceb23f7a2 | ||
|
|
9760c838aa | ||
|
|
8002cecda4 | ||
|
|
27b1c6a2f2 |
@@ -9,6 +9,6 @@ module.exports = {
|
||||
'jsdoc/check-param-names': ['off'],
|
||||
'jsdoc/no-undefined-types': ['off'],
|
||||
'jsdoc/require-property-description': ['off'],
|
||||
'import/no-named-as-default-member': ['off'],
|
||||
'import/no-named-as-default-member': ['off']
|
||||
},
|
||||
}
|
||||
|
||||
37
.github/dependabot.yml
vendored
37
.github/dependabot.yml
vendored
@@ -2,7 +2,7 @@ version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
target-branch: "main"
|
||||
target-branch: "master"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
@@ -11,41 +11,6 @@ updates:
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
- juliushaertl
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable25
|
||||
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: stable24
|
||||
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: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
|
||||
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@@ -1,6 +1,6 @@
|
||||
|
||||
* Resolves: # <!-- related github issue -->
|
||||
* Target version: main
|
||||
* Target version: master
|
||||
|
||||
### Summary
|
||||
|
||||
|
||||
8
.github/workflows/appbuild.yml
vendored
8
.github/workflows/appbuild.yml
vendored
@@ -9,7 +9,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -24,14 +24,14 @@ jobs:
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.23.0
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
- name: install dependencies
|
||||
run: |
|
||||
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
|
||||
sudo dpkg -i krankerl_0.14.0_amd64.deb
|
||||
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.12.2/krankerl_0.12.2_amd64.deb
|
||||
sudo dpkg -i krankerl_0.12.2_amd64.deb
|
||||
- name: package
|
||||
run: |
|
||||
uname -a
|
||||
|
||||
53
.github/workflows/appstore-build-publish.yml
vendored
53
.github/workflows/appstore-build-publish.yml
vendored
@@ -10,7 +10,7 @@ on:
|
||||
types: [published]
|
||||
|
||||
env:
|
||||
PHP_VERSION: 8.1
|
||||
PHP_VERSION: 7.4
|
||||
|
||||
jobs:
|
||||
build_and_publish:
|
||||
@@ -21,42 +21,42 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Check actor permission
|
||||
uses: skjnldsv/check-actor-permission@e591dbfe838300c007028e1219ca82cc26e8d7c5 # v2.1
|
||||
uses: skjnldsv/check-actor-permission@v2
|
||||
with:
|
||||
require: write
|
||||
|
||||
- name: Set app env
|
||||
run: |
|
||||
# Split and keep last
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: ${{ env.APP_NAME }}
|
||||
|
||||
- name: Get appinfo data
|
||||
id: appinfo
|
||||
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master
|
||||
uses: skjnldsv/xpath-action@master
|
||||
with:
|
||||
filename: ${{ env.APP_NAME }}/appinfo/info.xml
|
||||
expression: "//info//dependencies//nextcloud/@min-version"
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@1bdcee71fa343c46b18dc6aceffb4cd1e35209c6 # v1.2
|
||||
uses: skjnldsv/read-package-engines-version-actions@v1.2
|
||||
id: versions
|
||||
# Continue if no package.json
|
||||
continue-on-error: true
|
||||
with:
|
||||
path: ${{ env.APP_NAME }}
|
||||
fallbackNode: "^16"
|
||||
fallbackNpm: "^7"
|
||||
fallbackNode: "^12"
|
||||
fallbackNpm: "^6"
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
# Skip if no package.json
|
||||
if: ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # v3
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -66,16 +66,14 @@ jobs:
|
||||
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
|
||||
|
||||
- name: Set up php ${{ env.PHP_VERSION }}
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: ${{ env.PHP_VERSION }}
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check composer.json
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
|
||||
uses: andstor/file-existence-action@v1
|
||||
with:
|
||||
files: "${{ env.APP_NAME }}/composer.json"
|
||||
|
||||
@@ -93,29 +91,16 @@ jobs:
|
||||
npm ci
|
||||
npm run build
|
||||
|
||||
- name: Check Krankerl config
|
||||
id: krankerl
|
||||
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
|
||||
with:
|
||||
files: ${{ env.APP_NAME }}/krankerl.toml
|
||||
|
||||
- name: Install Krankerl
|
||||
if: steps.krankerl.outputs.files_exists == 'true'
|
||||
run: |
|
||||
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
|
||||
sudo dpkg -i krankerl_0.14.0_amd64.deb
|
||||
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.13.0/krankerl_0.13.0_amd64.deb
|
||||
sudo dpkg -i krankerl_0.13.0_amd64.deb
|
||||
|
||||
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl
|
||||
if: steps.krankerl.outputs.files_exists == 'true'
|
||||
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }}
|
||||
# Try krankerl, fallback to makefile
|
||||
run: |
|
||||
cd ${{ env.APP_NAME }}
|
||||
krankerl package
|
||||
|
||||
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with makefile
|
||||
if: steps.krankerl.outputs.files_exists != 'true'
|
||||
run: |
|
||||
cd ${{ env.APP_NAME }}
|
||||
make appstore
|
||||
krankerl package || make appstore
|
||||
|
||||
- name: Checkout server ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}
|
||||
continue-on-error: true
|
||||
@@ -126,7 +111,7 @@ jobs:
|
||||
unzip latest-$NCVERSION.zip
|
||||
|
||||
- name: Checkout server master fallback
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@v3
|
||||
if: ${{ steps.server-checkout.outcome != 'success' }}
|
||||
with:
|
||||
repository: nextcloud/server
|
||||
@@ -148,7 +133,7 @@ jobs:
|
||||
tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }}
|
||||
|
||||
- name: Attach tarball to github release
|
||||
uses: svenstaro/upload-release-action@133984371c30d34e38222a64855679a414cb7575 # v2
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
id: attach_to_release
|
||||
with:
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -158,7 +143,7 @@ jobs:
|
||||
overwrite: true
|
||||
|
||||
- name: Upload app to Nextcloud appstore
|
||||
uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1
|
||||
uses: nextcloud-releases/nextcloud-appstore-push-action@v1
|
||||
with:
|
||||
app_name: ${{ env.APP_NAME }}
|
||||
appstore_token: ${{ secrets.APPSTORE_TOKEN }}
|
||||
|
||||
12
.github/workflows/command-rebase.yml
vendored
12
.github/workflows/command-rebase.yml
vendored
@@ -9,8 +9,8 @@ on:
|
||||
issue_comment:
|
||||
types: created
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
rebase:
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Add reaction on start
|
||||
uses: peter-evans/create-or-update-comment@5adcb0bb0f9fb3f95ef05400558bdb3f329ee808 # v2.1.0
|
||||
uses: peter-evans/create-or-update-comment@v2
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
@@ -31,18 +31,18 @@ jobs:
|
||||
reaction-type: "+1"
|
||||
|
||||
- name: Checkout the latest code
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Automatic Rebase
|
||||
uses: cirrus-actions/rebase@b87d48154a87a85666003575337e27b8cd65f691 # 1.8
|
||||
uses: cirrus-actions/rebase@1.7
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@5adcb0bb0f9fb3f95ef05400558bdb3f329ee808 # v2.1.0
|
||||
uses: peter-evans/create-or-update-comment@v2
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
14
.github/workflows/cypress.yml
vendored
14
.github/workflows/cypress.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
env:
|
||||
@@ -21,9 +21,9 @@ jobs:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '8.0' ]
|
||||
php-versions: [ '7.4' ]
|
||||
databases: [ 'sqlite' ]
|
||||
server-versions: [ 'master' ]
|
||||
server-versions: [ 'stable25' ]
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.23.0
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
curl -v http://localhost:8081/index.php/login
|
||||
|
||||
- name: Cypress run
|
||||
uses: cypress-io/github-action@v5
|
||||
uses: cypress-io/github-action@v4
|
||||
with:
|
||||
record: true
|
||||
parallel: false
|
||||
@@ -96,7 +96,7 @@ jobs:
|
||||
npm_package_name: ${{ env.APP_NAME }}
|
||||
|
||||
- name: Upload test failure screenshots
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload screenshots
|
||||
@@ -104,7 +104,7 @@ jobs:
|
||||
retention-days: 5
|
||||
|
||||
- name: Upload nextcloud logs
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v2
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload nextcloud log
|
||||
|
||||
10
.github/workflows/dependabot-approve-merge.yml
vendored
10
.github/workflows/dependabot-approve-merge.yml
vendored
@@ -15,26 +15,22 @@ on:
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: dependabot-approve-merge-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.actor == 'dependabot[bot]'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
pull-requests: write
|
||||
pull-requests: write
|
||||
|
||||
steps:
|
||||
# Github actions bot approve
|
||||
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
|
||||
- uses: hmarr/auto-approve-action@v2
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Nextcloud bot approve and merge request
|
||||
- uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a # v2
|
||||
- uses: ahmadnassri/action-dependabot-auto-merge@v2
|
||||
with:
|
||||
target: minor
|
||||
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}
|
||||
|
||||
31
.github/workflows/fixup.yml
vendored
31
.github/workflows/fixup.yml
vendored
@@ -5,29 +5,16 @@
|
||||
|
||||
name: Pull request checks
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, ready_for_review, reopened, synchronize]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: fixup-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
commit-message-check:
|
||||
if: github.event.pull_request.draft == false
|
||||
commit-message-check:
|
||||
name: Block fixup and squash commits
|
||||
|
||||
permissions:
|
||||
pull-requests: write
|
||||
name: Block fixup and squash commits
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Run check
|
||||
uses: xt0rted/block-autosquash-commits-action@79880c36b4811fe549cfffe20233df88876024e7 # v2
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
steps:
|
||||
- name: Run check
|
||||
uses: xt0rted/block-autosquash-commits-action@v2
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
9
.github/workflows/integration.yml
vendored
9
.github/workflows/integration.yml
vendored
@@ -12,7 +12,6 @@ on:
|
||||
- 'composer.lock'
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
@@ -26,9 +25,9 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
php-versions: ['7.4']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['master']
|
||||
server-versions: ['stable25']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -71,7 +70,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.23.0
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit
|
||||
@@ -80,7 +79,7 @@ jobs:
|
||||
|
||||
- name: Set up PHPUnit
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i --no-dev
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
run: |
|
||||
|
||||
62
.github/workflows/lint-eslint.yml
vendored
62
.github/workflows/lint-eslint.yml
vendored
@@ -1,62 +0,0 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
#
|
||||
# Use lint-eslint together with lint-eslint-when-unrelated to make eslint a required check for GitHub actions
|
||||
# https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks
|
||||
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/**'
|
||||
- 'src/**'
|
||||
- 'appinfo/info.xml'
|
||||
- 'package.json'
|
||||
- 'package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '.eslintrc.*'
|
||||
- '.eslintignore'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-eslint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: eslint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@1bdcee71fa343c46b18dc6aceffb4cd1e35209c6 # v1.2
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^16'
|
||||
fallbackNpm: '^7'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # 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
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run lint
|
||||
39
.github/workflows/lint-php-cs.yml
vendored
39
.github/workflows/lint-php-cs.yml
vendored
@@ -1,39 +0,0 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
|
||||
name: Lint
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-php-cs-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: php-cs
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
with:
|
||||
php-version: 8.1
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Lint
|
||||
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )
|
||||
59
.github/workflows/lint-php.yml
vendored
59
.github/workflows/lint-php.yml
vendored
@@ -1,59 +0,0 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-php-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
php-lint:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: [ "8.0", "8.1", "8.2" ]
|
||||
|
||||
name: php-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Lint
|
||||
run: composer run lint
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
needs: php-lint
|
||||
|
||||
if: always()
|
||||
|
||||
name: php-lint-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.php-lint.result != 'success' && needs.php-lint.result != 'skipped' }}; then exit 1; fi
|
||||
46
.github/workflows/lint-stylelint.yml
vendored
46
.github/workflows/lint-stylelint.yml
vendored
@@ -1,46 +0,0 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
|
||||
name: Lint
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-stylelint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: stylelint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@1bdcee71fa343c46b18dc6aceffb4cd1e35209c6 # v1.2
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^16'
|
||||
fallbackNpm: '^7'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # 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
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run stylelint
|
||||
88
.github/workflows/lint.yml
vendored
Normal file
88
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,88 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- stable*
|
||||
|
||||
jobs:
|
||||
php:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
|
||||
name: php${{ matrix.php-versions }} lint
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set up php${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
- name: Lint
|
||||
run: composer run lint
|
||||
|
||||
php-cs-fixer:
|
||||
name: php-cs check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
- name: Run coding standards check
|
||||
run: composer run cs:check
|
||||
|
||||
node:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Use node ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: ESLint
|
||||
run: npm run lint
|
||||
|
||||
stylelint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
|
||||
name: stylelint node${{ matrix.node-version }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up node ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run stylelint
|
||||
6
.github/workflows/nightly.yml
vendored
6
.github/workflows/nightly.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.23.0
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
@@ -44,14 +44,14 @@ jobs:
|
||||
git config --local user.name "GitHub Action"
|
||||
git tag -f nightly
|
||||
- name: Push tag
|
||||
uses: juliushaertl/github-push-action@main
|
||||
uses: juliushaertl/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tags: true
|
||||
force: true
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: juliushaertl/action-release@main
|
||||
uses: juliushaertl/action-release@master
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag: nightly
|
||||
|
||||
8
.github/workflows/phpunit.yml
vendored
8
.github/workflows/phpunit.yml
vendored
@@ -21,14 +21,14 @@ env:
|
||||
|
||||
jobs:
|
||||
integration:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-18.04
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.0', '8.1']
|
||||
php-versions: ['7.4', '8.0', '8.1']
|
||||
databases: ['sqlite', 'mysql', 'pgsql']
|
||||
server-versions: ['master']
|
||||
server-versions: ['stable25']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.23.0
|
||||
uses: shivammathur/setup-php@2.21.2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
tools: phpunit
|
||||
|
||||
12
.github/workflows/psalm.yml
vendored
12
.github/workflows/psalm.yml
vendored
@@ -13,10 +13,6 @@ on:
|
||||
- main
|
||||
- stable*
|
||||
|
||||
concurrency:
|
||||
group: psalm-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -24,15 +20,13 @@ jobs:
|
||||
name: Nextcloud
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.1
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
|
||||
19
.github/workflows/update-nextcloud-ocp.yml
vendored
19
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -17,24 +17,22 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ["master", "stable25", "stable24"]
|
||||
branches: ["master", "stable25", "stable24", "stable23"]
|
||||
|
||||
name: update-nextcloud-ocp-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
|
||||
- name: Set up php8.1
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
- name: Set up php7.4
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: 8.1
|
||||
php-version: 7.4
|
||||
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer install
|
||||
@@ -47,15 +45,14 @@ jobs:
|
||||
run: |
|
||||
git clean -f 3rdparty
|
||||
git clean -f vendor
|
||||
git clean -f vendor-bin
|
||||
git checkout 3rdparty vendor vendor-bin
|
||||
git checkout 3rdparty vendor
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@18f7dc018cc2cd597073088f7c7591b9d1c02672 # v3
|
||||
uses: peter-evans/create-pull-request@v3
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: "chore(dev-deps): Bump nextcloud/ocp package"
|
||||
commit-message: Update psalm baseline
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,11 +3,9 @@ js/
|
||||
build/
|
||||
css/style.css
|
||||
css/vendor.css
|
||||
cypress/videos/
|
||||
tests/integration/vendor/
|
||||
tests/integration/composer.lock
|
||||
tests/.phpunit.result.cache
|
||||
vendor/
|
||||
.php_cs.cache
|
||||
\.idea/
|
||||
settings.json
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi
|
||||
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
|
||||
|
||||
[o:nextcloud:p:nextcloud:r:deck]
|
||||
file_filter = translationfiles/<lang>/deck.po
|
||||
|
||||
57
CHANGELOG.md
57
CHANGELOG.md
@@ -1,8 +1,33 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.8.0-beta.1
|
||||
### Enhancements
|
||||
## 1.8.3
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix component renaming so that acl works on shares again [#4328](https://github.com/nextcloud/deck/pull/4328)
|
||||
- Permanently delete deck cards marked as deleted after 5 min in a cron job [#4301](https://github.com/nextcloud/deck/pull/4301)
|
||||
- Dependency updates
|
||||
|
||||
|
||||
## 1.8.2
|
||||
|
||||
### Fixed
|
||||
|
||||
- minor style fixes [#4201](https://github.com/nextcloud/deck/pull/4201)
|
||||
- feat: add validators to check values in services [#4174](https://github.com/nextcloud/deck/pull/4174)
|
||||
- Add integration test for attachment handling on cards [#4179](https://github.com/nextcloud/deck/pull/4179)
|
||||
- Add missing userId property [#4198](https://github.com/nextcloud/deck/pull/4198)
|
||||
|
||||
## 1.8.1
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix Duedate activity @nickvergessen [#4155](https://github.com/nextcloud/deck/pull/4155)
|
||||
|
||||
## 1.8.0
|
||||
|
||||
### Added
|
||||
|
||||
- Nextcloud 25 compatibility
|
||||
- Performance improvements
|
||||
@@ -14,10 +39,26 @@ All notable changes to this project will be documented in this file.
|
||||
- Improve filter popover accessibility @juliushaertl [#3820](https://github.com/nextcloud/deck/pull/3820)
|
||||
- Set ids to skip to content/navigation @juliushaertl [#3924](https://github.com/nextcloud/deck/pull/3924)
|
||||
- Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939)
|
||||
- Bump dependencies
|
||||
- Implement card reference widget @eneiluj [#4031](https://github.com/nextcloud/deck/pull/4031)
|
||||
- Implement new dashboard widget interfaces @eneiluj [#4033](https://github.com/nextcloud/deck/pull/4033)
|
||||
- Add related resources panel to board sharing tab sidebar @Pytal [#4000](https://github.com/nextcloud/deck/pull/4000)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix sorting stacks [#4116](https://github.com/nextcloud/deck/pull/4116)
|
||||
- Fix issue with duedate format [#4140](https://github.com/nextcloud/deck/pull/4140)
|
||||
- Fix missing icon for activity rendering [#4090](https://github.com/nextcloud/deck/pull/4090)
|
||||
- disables autocomplete on card creation [#4142](https://github.com/nextcloud/deck/pull/4142)
|
||||
- Set event link also for notifications that get emitted from activities [#4117](https://github.com/nextcloud/deck/pull/4117)
|
||||
- Fix attachment creator name: show display name @eneiluj [#4036](https://github.com/nextcloud/deck/pull/4036)
|
||||
- Fix reference provider when caching @eneiluj [#4056](https://github.com/nextcloud/deck/pull/4056)
|
||||
- Use global import for nextcloud-vue [#4072](https://github.com/nextcloud/deck/pull/4072)
|
||||
- Disable Create card button while no stack is chosen @icewind1991 [#4014](https://github.com/nextcloud/deck/pull/4014)
|
||||
- Adjust testing matrix for Nextcloud 25 on stable25 @nickvergessen [#4068](https://github.com/nextcloud/deck/pull/4068)
|
||||
- Fix Card menu not displaying when description is not set @marcelklehr [#4105](https://github.com/nextcloud/deck/pull/4105)
|
||||
- Reference widget adjustments for Text [#4075](https://github.com/nextcloud/deck/pull/4075)
|
||||
- use OCP\Collaboration\Reference\Reference [#4078](https://github.com/nextcloud/deck/pull/4078)
|
||||
- Cache user membership for circles [#4141](https://github.com/nextcloud/deck/pull/4141)
|
||||
- set last modified when the card was found. Fixes #3763 @ylebre [#3796](https://github.com/nextcloud/deck/pull/3796)
|
||||
- Increase file count after sharing @luka-nextcloud [#3682](https://github.com/nextcloud/deck/pull/3682)
|
||||
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811)
|
||||
@@ -462,7 +503,7 @@ Android app team for helping to improve our REST API:
|
||||
- Fix comment activities on Nextcloud 15
|
||||
- Fix issues with Edge
|
||||
- API: Fix numeric types that were returned as strings
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
- API: Fix If-Modified-Since header parsing
|
||||
|
||||
|
||||
## 0.5.1 - 2018-12-05
|
||||
@@ -589,7 +630,7 @@ Android app team for helping to improve our REST API:
|
||||
### Fixed
|
||||
- Various frontend fixes
|
||||
- Fix sidebar drag issues
|
||||
- Improvements for IE11
|
||||
- Improvements for IE11
|
||||
- Fix bug when draging a card to an empty stack
|
||||
|
||||
## 0.2.1 - 2017-07-04
|
||||
@@ -663,7 +704,7 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Fixed
|
||||
- Various styling improvements
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Fix problems with MySQL and PostgreSQL
|
||||
- Select first color by default when creating boards
|
||||
- Fix error when changing board permissions
|
||||
|
||||
@@ -671,9 +712,9 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
### Added
|
||||
- Sharing boards with other users
|
||||
- Create and manage boards
|
||||
- Create and manage boards
|
||||
- Sort cards on stacks by drag-and-drop
|
||||
- Assign labels
|
||||
- Markdown notes for each card
|
||||
- Archive cards
|
||||
- Archive cards
|
||||
|
||||
|
||||
10
Makefile
10
Makefile
@@ -30,16 +30,6 @@ build: clean-dist install-deps build-js
|
||||
|
||||
release: clean-dist install-deps-nodev build-js
|
||||
|
||||
lint: lint-js lint-php
|
||||
|
||||
lint-js:
|
||||
npm run lint
|
||||
npm run stylelint
|
||||
|
||||
lint-php:
|
||||
composer run lint 1>/dev/null
|
||||
composer run cs:check
|
||||
|
||||
build-js: install-deps-js
|
||||
npm run build
|
||||
|
||||
|
||||
10
README.md
10
README.md
@@ -1,6 +1,6 @@
|
||||
# Deck
|
||||
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/deck&utm_campaign=Badge_Grade) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=main) [](https://webchat.freenode.net/?channels=nextcloud-deck)
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/deck&utm_campaign=Badge_Grade) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [](https://webchat.freenode.net/?channels=nextcloud-deck)
|
||||
|
||||
|
||||
Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
|
||||
@@ -20,7 +20,6 @@ Deck is a kanban style organization tool aimed at personal planning and project
|
||||
### Mobile apps
|
||||
|
||||
- [Nextcloud Deck app for Android](https://github.com/stefan-niedermann/nextcloud-deck) - It is available in [F-Droid](https://f-droid.org/de/packages/it.niedermann.nextcloud.deck/) and the [Google Play Store](https://play.google.com/store/apps/details?id=it.niedermann.nextcloud.deck.play)
|
||||
- [deck NG for Android and iOS](https://github.com/meltzow/deck-ng) - It is available in [Google Play Store](https://play.google.com/store/apps/details?id=net.meltzow.deckng) and [Apple App Store](https://apps.apple.com/us/app/deck-ng/id6443334702)
|
||||
|
||||
### 3rd-Party Integrations
|
||||
|
||||
@@ -66,18 +65,13 @@ Improvements on Nextcloud server and Deck itself will improve the situation.
|
||||
|
||||
## Developing
|
||||
|
||||
### Nextcloud environment
|
||||
|
||||
You need to setup a [development environment](https://docs.nextcloud.com/server/latest/developer_manual//getting_started/devenv.html) of the current nextcloud version. You can also alternatively install & run the [nextcloud docker container](https://github.com/juliushaertl/nextcloud-docker-dev).
|
||||
After the finished installation, you can clone the deck project directly in the `/[nextcloud-docker-dev-dir]/workspace/server/apps/` folder.
|
||||
|
||||
### PHP
|
||||
|
||||
Nothing to prepare, just dig into the code.
|
||||
|
||||
### JavaScript
|
||||
|
||||
This requires at least Node 16 and npm 7 to be installed.
|
||||
This requires at least Node 14 and npm 7 to be installed.
|
||||
|
||||
Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ Your report should include:
|
||||
- Reproduction steps
|
||||
|
||||
A member of the security team will confirm the vulnerability, determine its impact, and develop a fix.
|
||||
The fix will be applied to the main branch, tested, and packaged in the next security release.
|
||||
The fix will be applied to the master branch, tested, and packaged in the next security release.
|
||||
The vulnerability will be publicly announced after the release. Finally, your name will be added
|
||||
to the [hall of fame](https://hackerone.com/nextcloud/thanks) as a thank you from the entire Nextcloud community. Note our
|
||||
[threat model](https://nextcloud.com/security/threat-model) to know what is expected behavior.
|
||||
|
||||
@@ -16,13 +16,9 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>1.9.0-beta.1</version>
|
||||
<version>1.8.3</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<documentation>
|
||||
<user>https://deck.readthedocs.io/en/latest/User_documentation_en/</user>
|
||||
<developer>https://deck.readthedocs.io/en/latest/API/</developer>
|
||||
</documentation>
|
||||
<namespace>Deck</namespace>
|
||||
<types>
|
||||
<dav/>
|
||||
@@ -38,19 +34,13 @@
|
||||
<database min-version="9.4">pgsql</database>
|
||||
<database>sqlite</database>
|
||||
<database min-version="8.0">mysql</database>
|
||||
<nextcloud min-version="26" max-version="26"/>
|
||||
<nextcloud min-version="25" max-version="25"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\Deck\Cron\DeleteCron</job>
|
||||
<job>OCA\Deck\Cron\ScheduledNotifications</job>
|
||||
<job>OCA\Deck\Cron\CardDescriptionActivity</job>
|
||||
<job>OCA\Deck\Cron\SessionsCleanup</job>
|
||||
</background-jobs>
|
||||
<repair-steps>
|
||||
<live-migration>
|
||||
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
|
||||
</live-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
<command>OCA\Deck\Command\BoardImport</command>
|
||||
|
||||
@@ -40,7 +40,6 @@ return [
|
||||
['name' => 'board#deleteAcl', 'url' => '/boards/{boardId}/acl/{aclId}', 'verb' => 'DELETE'],
|
||||
['name' => 'board#clone', 'url' => '/boards/{boardId}/clone', 'verb' => 'POST'],
|
||||
['name' => 'board#transferOwner', 'url' => '/boards/{boardId}/transferOwner', 'verb' => 'PUT'],
|
||||
['name' => 'board#export', 'url' => '/boards/{boardId}/export', 'verb' => 'GET'],
|
||||
|
||||
// stacks
|
||||
['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'],
|
||||
@@ -150,10 +149,5 @@ return [
|
||||
['name' => 'overview_api#upcomingCards', 'url' => '/api/v{apiVersion}/overview/upcoming', 'verb' => 'GET'],
|
||||
|
||||
['name' => 'search#search', 'url' => '/api/v{apiVersion}/search', 'verb' => 'GET'],
|
||||
|
||||
// sessions
|
||||
['name' => 'Session#create', 'url' => '/api/v{apiVersion}/session/create', 'verb' => 'PUT'],
|
||||
['name' => 'Session#sync', 'url' => '/api/v{apiVersion}/session/sync', 'verb' => 'POST'],
|
||||
['name' => 'Session#close', 'url' => '/api/v{apiVersion}/session/close', 'verb' => 'POST'],
|
||||
]
|
||||
];
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
"phpunit/phpunit": "^9",
|
||||
"nextcloud/coding-standard": "^1.0.0",
|
||||
"symfony/event-dispatcher": "^4.0",
|
||||
"vimeo/psalm": "^5.4",
|
||||
"vimeo/psalm": "^4.3",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"nextcloud/ocp": "dev-master"
|
||||
"nextcloud/ocp": "dev-stable25"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
@@ -28,7 +28,7 @@
|
||||
"composer/package-versions-deprecated": true
|
||||
},
|
||||
"platform": {
|
||||
"php": "8.0"
|
||||
"php": "7.4"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
@@ -42,8 +42,8 @@
|
||||
"@test:unit",
|
||||
"@test:integration"
|
||||
],
|
||||
"test:unit": "vendor/bin/phpunit -c tests/phpunit.xml",
|
||||
"test:integration": "vendor/bin/phpunit -c tests/phpunit.integration.xml && cd tests/integration && ./run.sh"
|
||||
"test:unit": "phpunit -c tests/phpunit.xml",
|
||||
"test:integration": "phpunit -c tests/phpunit.integration.xml && cd tests/integration && ./run.sh"
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
|
||||
612
composer.lock
generated
612
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,17 @@
|
||||
const { defineConfig } = require('cypress')
|
||||
|
||||
module.exports = defineConfig({
|
||||
projectId: '1s7wkc',
|
||||
viewportWidth: 1280,
|
||||
viewportHeight: 720,
|
||||
e2e: {
|
||||
// We've imported your old cypress plugins here.
|
||||
// You may want to clean this up later by importing these.
|
||||
setupNodeEvents(on, config) {
|
||||
return require('./cypress/plugins/index.js')(on, config)
|
||||
},
|
||||
baseUrl: 'http://nextcloud.local/index.php',
|
||||
specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
|
||||
},
|
||||
projectId: '1s7wkc',
|
||||
viewportWidth: 1280,
|
||||
viewportHeight: 720,
|
||||
e2e: {
|
||||
// We've imported your old cypress plugins here.
|
||||
// You may want to clean this up later by importing these.
|
||||
setupNodeEvents(on, config) {
|
||||
return require('./cypress/plugins/index.js')(on, config)
|
||||
},
|
||||
baseUrl: 'http://nextcloud.local/index.php',
|
||||
experimentalSessionAndOrigin: true,
|
||||
specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
|
||||
},
|
||||
})
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
'plugin:cypress/recommended',
|
||||
],
|
||||
}
|
||||
@@ -1,17 +1,15 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
const user = randUser()
|
||||
const recipient = randUser()
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe('Board', function() {
|
||||
const password = 'pass123'
|
||||
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.createUser(recipient)
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
cy.visit('/apps/deck')
|
||||
cy.login(randUser, password)
|
||||
})
|
||||
|
||||
it('Can create a board', function() {
|
||||
@@ -23,6 +21,7 @@ describe('Board', function() {
|
||||
}).as('createBoardRequest')
|
||||
|
||||
// Click "Add board"
|
||||
cy.openLeftSidebar()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.eq(3).find('a').first().click({ force: true })
|
||||
|
||||
@@ -39,18 +38,4 @@ describe('Board', function() {
|
||||
cy.get('.app-navigation__list .app-navigation-entry__children .app-navigation-entry')
|
||||
.contains(board).should('be.visible')
|
||||
})
|
||||
|
||||
it('Shows and hides the navigation', () => {
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.contains('Upcoming cards')
|
||||
.should('be.visible')
|
||||
cy.openLeftSidebar()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.contains('Upcoming cards')
|
||||
.should('not.be.visible')
|
||||
cy.openLeftSidebar()
|
||||
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
|
||||
.contains('Upcoming cards')
|
||||
.should('be.visible')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,29 +1,38 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
import { sampleBoard } from '../utils/sampleBoard'
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
const user = randUser()
|
||||
const boardData = sampleBoard()
|
||||
const testBoardData = {
|
||||
title: 'MyBoardTest',
|
||||
color: '00ff00',
|
||||
stacks: [
|
||||
{
|
||||
title: 'TestList',
|
||||
cards: [
|
||||
{
|
||||
title: 'Hello world',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
describe('Card', function() {
|
||||
let boardId
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.login(user)
|
||||
cy.nextcloudCreateUser(randUser, randUser)
|
||||
cy.createExampleBoard({
|
||||
user,
|
||||
board: boardData,
|
||||
}).then((board) => {
|
||||
boardId = board.id
|
||||
user: randUser,
|
||||
password: randUser,
|
||||
board: testBoardData,
|
||||
})
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.login(randUser, randUser)
|
||||
})
|
||||
|
||||
it('Can show card details modal', function() {
|
||||
cy.getNavigationEntry(boardData.title)
|
||||
cy.openLeftSidebar()
|
||||
cy.getNavigationEntry(testBoardData.title)
|
||||
.first().click({ force: true })
|
||||
|
||||
cy.get('.board .stack').eq(0).within(() => {
|
||||
@@ -37,7 +46,8 @@ describe('Card', function() {
|
||||
it('Can add a card', function() {
|
||||
const newCardTitle = 'Write some cypress tests'
|
||||
|
||||
cy.getNavigationEntry(boardData.title)
|
||||
cy.openLeftSidebar()
|
||||
cy.getNavigationEntry(testBoardData.title)
|
||||
.first().click({ force: true })
|
||||
|
||||
cy.get('.board .stack').eq(0).within(() => {
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
const user = randUser()
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe('Deck dashboard', function() {
|
||||
const password = 'pass123'
|
||||
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
cy.visit('/apps/deck')
|
||||
cy.login(randUser, password)
|
||||
})
|
||||
|
||||
it('Can show the right title on the dashboard', function() {
|
||||
cy.get('.board-title h2')
|
||||
.should('have.length', 1).first()
|
||||
.should('have.text', 'Upcoming cards')
|
||||
.should('have.length', 1).first()
|
||||
.should('have.text', 'Upcoming cards')
|
||||
})
|
||||
|
||||
it('Can see the default "Personal Board" created for user by default', function() {
|
||||
const defaultBoard = 'Personal'
|
||||
|
||||
cy.openLeftSidebar()
|
||||
cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + defaultBoard + ')')
|
||||
.first()
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
import { sampleBoard } from '../utils/sampleBoard'
|
||||
const user = randUser()
|
||||
const recipient = randUser()
|
||||
|
||||
describe('Board', function() {
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.createUser(recipient)
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
})
|
||||
|
||||
it('Share a board to a user', function() {
|
||||
const board = sampleBoard('Read only board')
|
||||
cy.createExampleBoard({ user, board }).then((board) => {
|
||||
const boardId = board.id
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board-title').contains(board.title)
|
||||
|
||||
cy.shareBoardWithUi(recipient.userId)
|
||||
|
||||
cy.login(recipient)
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board-title').contains(board.title)
|
||||
cy.get('.button-vue[aria-label*="Add card"]')
|
||||
.should('not.exist')
|
||||
})
|
||||
})
|
||||
|
||||
it('Share a board to a user as writable', function() {
|
||||
const board = sampleBoard('Editable board')
|
||||
cy.createExampleBoard({ user, board }).then((board) => {
|
||||
const boardId = board.id
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board-title').contains(board.title)
|
||||
|
||||
cy.shareBoardWithUi(recipient.userId)
|
||||
cy.get(`[data-cy="acl-participant:${recipient.userId}"]`).find('[data-cy="action:permission-edit"]').click()
|
||||
|
||||
cy.login(recipient)
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board-title').contains(board.title)
|
||||
cy.get('.button-vue[aria-label*="Add card"]')
|
||||
.first().click()
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -1,68 +1,30 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
const user = randUser()
|
||||
|
||||
const boardTitle = 'TestBoard'
|
||||
const testBoardData = {
|
||||
title: boardTitle,
|
||||
stacks: [
|
||||
{ title: 'Existing Stack1' },
|
||||
{ title: 'Existing Stack2' },
|
||||
],
|
||||
}
|
||||
import { randHash } from '../utils'
|
||||
const randUser = randHash()
|
||||
|
||||
describe('Stack', function() {
|
||||
const board = 'TestBoard'
|
||||
const password = 'pass123'
|
||||
const stack = 'List 1'
|
||||
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.login(user)
|
||||
cy.createExampleBoard({
|
||||
user,
|
||||
board: testBoardData,
|
||||
})
|
||||
cy.nextcloudCreateUser(randUser, password)
|
||||
cy.deckCreateBoard({ user: randUser, password }, board)
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
cy.visit('/apps/deck')
|
||||
|
||||
cy.openLeftSidebar()
|
||||
cy.getNavigationEntry(boardTitle)
|
||||
.click({ force: true })
|
||||
cy.logout()
|
||||
cy.login(randUser, password)
|
||||
})
|
||||
|
||||
it('Can create a stack', function() {
|
||||
cy.openLeftSidebar()
|
||||
cy.getNavigationEntry(board)
|
||||
.click({ force: true })
|
||||
|
||||
cy.get('#stack-add button').first().click()
|
||||
cy.focused().type('List 1')
|
||||
cy.get('#stack-add form input#new-stack-input-main').type(stack)
|
||||
cy.get('#stack-add form input[type=submit]').first().click()
|
||||
|
||||
cy.contains('List 1').should('be.visible')
|
||||
})
|
||||
|
||||
it('Can edit a stack title', function() {
|
||||
cy.contains('Existing Stack1')
|
||||
cy.get('[data-cy-stack="Existing Stack1"]').within(() => {
|
||||
cy.contains('Existing Stack1').click()
|
||||
cy.focused().type(' renamed')
|
||||
cy.get('[data-cy="editStackTitleForm"] input[type="submit"]').click()
|
||||
})
|
||||
cy.contains('Existing Stack1 renamed').should('be.visible')
|
||||
})
|
||||
|
||||
it('Can abort a stack title edit via esc', function() {
|
||||
cy.contains('Existing Stack2').click()
|
||||
cy.focused().type(' with a new title, maybe?')
|
||||
cy.focused().type('{esc}')
|
||||
|
||||
cy.contains('Existing Stack2').should('be.visible')
|
||||
cy.contains('Existing Stack2 with a new title, maybe?').should('not.exist')
|
||||
})
|
||||
|
||||
it('Can abort a stack title edit via click outside', function() {
|
||||
cy.contains('Existing Stack2').click()
|
||||
cy.focused().type(' with a new title, maybe?')
|
||||
cy.get('[data-cy-stack="Existing Stack2"]').click('bottom')
|
||||
|
||||
cy.contains('Existing Stack2').should('be.visible')
|
||||
cy.contains('Existing Stack2 with a new title, maybe?').should('not.exist')
|
||||
cy.get('.board .stack').eq(0).contains(stack).should('be.visible')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -20,13 +20,61 @@
|
||||
*
|
||||
*/
|
||||
|
||||
import { addCommands } from '@nextcloud/cypress'
|
||||
|
||||
addCommands()
|
||||
|
||||
const url = Cypress.config('baseUrl').replace(/\/index.php\/?$/g, '')
|
||||
Cypress.env('baseUrl', url)
|
||||
|
||||
Cypress.Commands.add('login', (user, password, route = '/apps/deck/') => {
|
||||
const session = `${user}-${Date.now()}`
|
||||
cy.session(session, function() {
|
||||
cy.visit(route)
|
||||
cy.get('input[name=user]').type(user)
|
||||
cy.get('input[name=password]').type(password)
|
||||
cy.get('form[name=login] [type=submit]').click()
|
||||
cy.url().should('include', route)
|
||||
})
|
||||
cy.visit(route)
|
||||
})
|
||||
|
||||
Cypress.Commands.add('logout', (route = '/') => {
|
||||
cy.session('_guest', function() {})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('nextcloudCreateUser', (user, password) => {
|
||||
cy.clearCookies()
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/ocs/v1.php/cloud/users?format=json`,
|
||||
form: true,
|
||||
body: {
|
||||
userid: user,
|
||||
password,
|
||||
},
|
||||
auth: { user: 'admin', pass: 'admin' },
|
||||
headers: {
|
||||
'OCS-ApiRequest': 'true',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
}).then((response) => {
|
||||
cy.log(`Created user ${user}`, response.status)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('nextcloudUpdateUser', (user, password, key, value) => {
|
||||
cy.request({
|
||||
method: 'PUT',
|
||||
url: `${Cypress.env('baseUrl')}/ocs/v2.php/cloud/users/${user}`,
|
||||
form: true,
|
||||
body: { key, value },
|
||||
auth: { user, pass: password },
|
||||
headers: {
|
||||
'OCS-ApiRequest': 'true',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
}).then((response) => {
|
||||
cy.log(`Updated user ${user} ${key} to ${value}`, response.status)
|
||||
})
|
||||
})
|
||||
|
||||
Cypress.Commands.add('openLeftSidebar', () => {
|
||||
cy.get('.app-navigation button.app-navigation-toggle').click()
|
||||
})
|
||||
@@ -63,15 +111,14 @@ Cypress.Commands.add('deckCreateList', ({ user, password }, title) => {
|
||||
cy.get('#stack-add form input[type=submit]').first().click()
|
||||
})
|
||||
|
||||
Cypress.Commands.add('createExampleBoard', ({ user, board }) => {
|
||||
const auth = {
|
||||
user: user.userId,
|
||||
password: user.password,
|
||||
}
|
||||
Cypress.Commands.add('createExampleBoard', ({ user, password, board }) => {
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards`,
|
||||
auth,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: board.title, color: board.color ?? 'ff0000' },
|
||||
}).then((boardResponse) => {
|
||||
expect(boardResponse.status).to.eq(200)
|
||||
@@ -81,7 +128,10 @@ Cypress.Commands.add('createExampleBoard', ({ user, board }) => {
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks`,
|
||||
auth,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: stack.title, order: 0 },
|
||||
}).then((stackResponse) => {
|
||||
const stackData = stackResponse.body
|
||||
@@ -90,13 +140,15 @@ Cypress.Commands.add('createExampleBoard', ({ user, board }) => {
|
||||
cy.request({
|
||||
method: 'POST',
|
||||
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks/${stackData.id}/cards`,
|
||||
auth,
|
||||
auth: {
|
||||
user,
|
||||
password,
|
||||
},
|
||||
body: { title: card.title },
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
cy.wrap(boardData)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -105,13 +157,3 @@ Cypress.Commands.add('getNavigationEntry', (boardTitle) => {
|
||||
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + boardTitle + ')')
|
||||
.find('a.app-navigation-entry-link')
|
||||
})
|
||||
|
||||
Cypress.Commands.add('shareBoardWithUi', (userId) => {
|
||||
cy.get('[aria-label="Open details"]').click()
|
||||
cy.get('.app-sidebar').should('be.visible')
|
||||
cy.get('.multiselect__input').type(`${userId}`)
|
||||
cy.get('.multiselect__content .multiselect__element').first().contains(userId)
|
||||
cy.get('.multiselect__input').type('{enter}')
|
||||
|
||||
cy.get('.shareWithList').contains(userId)
|
||||
})
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>Components App</title>
|
||||
</head>
|
||||
<body>
|
||||
<div data-cy-root></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,27 +0,0 @@
|
||||
// ***********************************************************
|
||||
// This example support/component.js is processed and
|
||||
// loaded automatically before your test files.
|
||||
//
|
||||
// This is a great place to put global configuration and
|
||||
// behavior that modifies Cypress.
|
||||
//
|
||||
// You can change the location of this file or turn off
|
||||
// automatically serving support files with the
|
||||
// 'supportFile' configuration option.
|
||||
//
|
||||
// You can read more here:
|
||||
// https://on.cypress.io/configuration
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands'
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
||||
import { mount } from 'cypress/vue2'
|
||||
|
||||
Cypress.Commands.add('mount', mount)
|
||||
|
||||
// Example use:
|
||||
// cy.mount(MyComponent)
|
||||
@@ -14,7 +14,7 @@
|
||||
// ***********************************************************
|
||||
|
||||
// Import commands.js using ES2015 syntax:
|
||||
import './commands.js'
|
||||
import './commands'
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
|
||||
@@ -1,4 +1 @@
|
||||
import { User } from '@nextcloud/cypress'
|
||||
|
||||
export const randHash = () => Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 10)
|
||||
export const randUser = () => new User(randHash(), randHash())
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
export const sampleBoard = (title = 'MyTestBoard') => {
|
||||
return {
|
||||
title: title,
|
||||
color: '00ff00',
|
||||
stacks: [
|
||||
{
|
||||
title: 'TestList',
|
||||
cards: [
|
||||
{
|
||||
title: 'Hello world',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
110
docs/API.md
110
docs/API.md
@@ -1066,7 +1066,6 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
| --- | --- |
|
||||
| calendar | Determines if the calendar/tasks integration through the CalDAV backend is enabled for the user (boolean) |
|
||||
| cardDetailsInModal | Determines if the bigger view is used (boolean) |
|
||||
| cardIdBadge | Determines if the ID badges are displayed on cards (boolean) |
|
||||
| groupLimit | Determines if creating new boards is limited to certain groups of the instance. The resulting output is an array of group objects with the id and the displayname (Admin only)|
|
||||
|
||||
```
|
||||
@@ -1080,7 +1079,6 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
"data": {
|
||||
"calendar": true,
|
||||
"cardDetailsInModal": true,
|
||||
"cardIdBadge": true,
|
||||
"groupLimit": [
|
||||
{
|
||||
"id": "admin",
|
||||
@@ -1111,7 +1109,6 @@ Deck stores user and app configuration values globally and per board. The GET en
|
||||
| notify-due | `off`, `assigned` or `all` |
|
||||
| calendar | Boolean |
|
||||
| cardDetailsInModal | Boolean |
|
||||
| cardIdBadge | Boolean |
|
||||
|
||||
#### Example request
|
||||
|
||||
@@ -1394,110 +1391,3 @@ A bad request response is returned if invalid input values are provided. The res
|
||||
A not found response might be returned if:
|
||||
- The card for the given cardId could not be found
|
||||
- The comment could not be found
|
||||
|
||||
|
||||
## Sessions
|
||||
|
||||
### PUT /session/create - creates a new session
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ------- | ---------------------------------------------------- |
|
||||
| boardId | Integer | The id of the opened board |
|
||||
|
||||
```
|
||||
curl -X PUT 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/create' \
|
||||
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
|
||||
-H 'Content-Type: application/json;charset=utf-8' \
|
||||
--data '{"boardId":1}'
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
##### 200 Success
|
||||
|
||||
```json
|
||||
{
|
||||
"ocs": {
|
||||
"meta": {
|
||||
"status": "ok",
|
||||
"statuscode": 200,
|
||||
"message": "OK"
|
||||
},
|
||||
"data": {
|
||||
"token": "+zcJHf4rC6dobVSbuNa3delkCSfTW8OvYWTyLFvSpIv80FjtgLIj0ARlxspsazNQ"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### POST /session/sync - notifies the server, that the session is still open
|
||||
|
||||
#### Request body
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ------- | ---------------------------------------------------- |
|
||||
| boardId | Integer | The id of the opened board |
|
||||
| token | String | The session token from the /sessions/create response |
|
||||
|
||||
|
||||
```
|
||||
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/create' \
|
||||
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
|
||||
-H 'Content-Type: application/json;charset=utf-8' \
|
||||
--data '{"boardId":1, "token":"X3DyyoFslArF0t0NBZXzZXzcy8feoX/OEytSNXZtPg9TpUgO5wrkJ38IW3T/FfpV"}'
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
##### 200 Success
|
||||
```json
|
||||
{
|
||||
"ocs": {
|
||||
"meta": {
|
||||
"status": "ok",
|
||||
"statuscode": 200,
|
||||
"message": "OK"
|
||||
},
|
||||
"data": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
##### 404 Not Found
|
||||
the provided token is invalid or expired
|
||||
|
||||
|
||||
### POST /session/close - closes the session
|
||||
|
||||
#### Request body
|
||||
|
||||
| Parameter | Type | Description |
|
||||
| --------- | ------- | ---------------------------------------------------- |
|
||||
| boardId | Integer | The id of the opened board |
|
||||
| token | String | The session token from the /sessions/create response |
|
||||
|
||||
```
|
||||
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/close' \
|
||||
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
|
||||
-H 'Content-Type: application/json;charset=utf-8' \
|
||||
--data '{"boardId":1, "token":"X3DyyoFslArF0t0NBZXzZXzcy8feoX/OEytSNXZtPg9TpUgO5wrkJ38IW3T/FfpV"}'
|
||||
```
|
||||
|
||||
#### Response
|
||||
|
||||
##### 200 Success
|
||||
```json
|
||||
{
|
||||
"ocs": {
|
||||
"meta": {
|
||||
"status": "ok",
|
||||
"statuscode": 200,
|
||||
"message": "OK"
|
||||
},
|
||||
"data": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -90,7 +90,7 @@ Steps:
|
||||
* Create the configuration file
|
||||
* Execute the import informing the import file path, data file and source as `Trello JSON`
|
||||
|
||||
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloJson-schema.json) for import `Trello JSON`
|
||||
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/master/lib/Service/Importer/fixtures/config-trelloJson-schema.json) for import `Trello JSON`
|
||||
|
||||
Example configuration file:
|
||||
```json
|
||||
@@ -120,7 +120,7 @@ https://api.trello.com/1/members/me/boards?key={yourKey}&token={yourToken}&field
|
||||
This ID you will use in the configuration file in the `board` property
|
||||
* Create the configuration file
|
||||
|
||||
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloApi-schema.json) for import `Trello JSON`
|
||||
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/master/lib/Service/Importer/fixtures/config-trelloApi-schema.json) for import `Trello JSON`
|
||||
|
||||
Example configuration file:
|
||||
```json
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Превключване на компактен режим",
|
||||
"Open details" : "Отваряне на подробности",
|
||||
"Details" : "Подробности",
|
||||
"Currently present people" : "Хора присъстващи в момента",
|
||||
"Loading board" : "Зареждане на табло",
|
||||
"No lists available" : "Няма налична списъци.",
|
||||
"Create a new list to add cards to this board" : "Създайте нов списък, за да добавите карти към това табло",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Прехвърляне",
|
||||
"The board has been transferred to {user}" : "Таблото беше прехвърлено на {user}",
|
||||
"Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}",
|
||||
"Edit list title" : "Редактиране на заглавието на списъка",
|
||||
"Archive all cards" : "Архивира всички карти",
|
||||
"Unarchive all cards" : "Разархивиране на всички карти",
|
||||
"Delete list" : "Изтрива списък",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : " Клониране на табло",
|
||||
"Unarchive board" : "Разархивиране натабло",
|
||||
"Archive board" : "Архивиране на табло",
|
||||
"Export board" : "Експортиране на табло",
|
||||
"Turn on due date reminders" : "Включва напомнянията за краен срок",
|
||||
"Turn off due date reminders" : "Изключва напомнянията за краен срок",
|
||||
"Due date reminders" : " Напомняния за краен срок",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Превключване на компактен режим",
|
||||
"Open details" : "Отваряне на подробности",
|
||||
"Details" : "Подробности",
|
||||
"Currently present people" : "Хора присъстващи в момента",
|
||||
"Loading board" : "Зареждане на табло",
|
||||
"No lists available" : "Няма налична списъци.",
|
||||
"Create a new list to add cards to this board" : "Създайте нов списък, за да добавите карти към това табло",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Прехвърляне",
|
||||
"The board has been transferred to {user}" : "Таблото беше прехвърлено на {user}",
|
||||
"Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}",
|
||||
"Edit list title" : "Редактиране на заглавието на списъка",
|
||||
"Archive all cards" : "Архивира всички карти",
|
||||
"Unarchive all cards" : "Разархивиране на всички карти",
|
||||
"Delete list" : "Изтрива списък",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : " Клониране на табло",
|
||||
"Unarchive board" : "Разархивиране натабло",
|
||||
"Archive board" : "Архивиране на табло",
|
||||
"Export board" : "Експортиране на табло",
|
||||
"Turn on due date reminders" : "Включва напомнянията за краен срок",
|
||||
"Turn off due date reminders" : "Изключва напомнянията за краен срок",
|
||||
"Due date reminders" : " Напомняния за краен срок",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Vyp/zap. kompaktní režim",
|
||||
"Open details" : "Otevřít podorobnosti",
|
||||
"Details" : "Podrobnosti",
|
||||
"Currently present people" : "Nyní přítomní lidé",
|
||||
"Loading board" : "Načítání tabule",
|
||||
"No lists available" : "Nejsou k dispozici žádné seznamy",
|
||||
"Create a new list to add cards to this board" : "Pro přidání karet na tuto tabuli vytvořte nový seznam",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Vyp/zap. kompaktní režim",
|
||||
"Open details" : "Otevřít podorobnosti",
|
||||
"Details" : "Podrobnosti",
|
||||
"Currently present people" : "Nyní přítomní lidé",
|
||||
"Loading board" : "Načítání tabule",
|
||||
"No lists available" : "Nejsou k dispozici žádné seznamy",
|
||||
"Create a new list to add cards to this board" : "Pro přidání karet na tuto tabuli vytvořte nový seznam",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Kompaktmodus umschalten",
|
||||
"Open details" : "Details öffnen",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Aktuell Anwesende",
|
||||
"Loading board" : "Lade Board",
|
||||
"No lists available" : "Keine Listen verfügbar",
|
||||
"Create a new list to add cards to this board" : "Erstelle eine neue Liste, um diesem Board Karten hinzuzufügen",
|
||||
@@ -165,7 +164,7 @@ OC.L10N.register(
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Share board with a user, group or circle …" : "Board mit Benutzer, Gruppe oder Kreis teilen …",
|
||||
"Share board with a user, group or circle …" : "Board mit Benutzer, Gruppe oder Kreis teilen…",
|
||||
"Searching for users, groups and circles …" : "Suche nach Benutzern, Gruppen und Kreisen …",
|
||||
"No participants found" : "Keine Teilnehmer gefunden",
|
||||
"Board owner" : "Board-Besitzer",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Übertragen",
|
||||
"The board has been transferred to {user}" : "Das Board wurde an {user} übertragen",
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
|
||||
"Edit list title" : "Listentitel bearbeiten",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
@@ -237,7 +235,7 @@ OC.L10N.register(
|
||||
"Update" : "Aktualisieren",
|
||||
"Description" : "Beschreibung",
|
||||
"(Unsaved)" : "(nicht gespeichert)",
|
||||
"(Saving…)" : "(Speichere …)",
|
||||
"(Saving…)" : "(Speichere…)",
|
||||
"Formatting help" : "Hilfe zur Formatierung",
|
||||
"Edit description" : "Beschreibung bearbeiten",
|
||||
"View description" : "Beschreibung anzeigen",
|
||||
@@ -263,7 +261,6 @@ OC.L10N.register(
|
||||
"Shared with you" : "Mit dir geteilt",
|
||||
"Deck settings" : "Deck-Einstellungen",
|
||||
"Use bigger card view" : "Größere Kartenansicht verwenden",
|
||||
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
|
||||
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
|
||||
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn du Deck einschränkst, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
|
||||
@@ -272,7 +269,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Board klonen",
|
||||
"Unarchive board" : "Board dearchivieren",
|
||||
"Archive board" : "Board archivieren",
|
||||
"Export board" : "Board exportieren",
|
||||
"Turn on due date reminders" : "Fälligkeitserinnerungen einschalten",
|
||||
"Turn off due date reminders" : "Fälligkeitserinnerungen ausschalten",
|
||||
"Due date reminders" : "Fälligkeitserinnerungen",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Kompaktmodus umschalten",
|
||||
"Open details" : "Details öffnen",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Aktuell Anwesende",
|
||||
"Loading board" : "Lade Board",
|
||||
"No lists available" : "Keine Listen verfügbar",
|
||||
"Create a new list to add cards to this board" : "Erstelle eine neue Liste, um diesem Board Karten hinzuzufügen",
|
||||
@@ -163,7 +162,7 @@
|
||||
"Deleted lists" : "Gelöschte Listen",
|
||||
"Undo" : "Rückgängig",
|
||||
"Deleted cards" : "Gelöschte Karten",
|
||||
"Share board with a user, group or circle …" : "Board mit Benutzer, Gruppe oder Kreis teilen …",
|
||||
"Share board with a user, group or circle …" : "Board mit Benutzer, Gruppe oder Kreis teilen…",
|
||||
"Searching for users, groups and circles …" : "Suche nach Benutzern, Gruppen und Kreisen …",
|
||||
"No participants found" : "Keine Teilnehmer gefunden",
|
||||
"Board owner" : "Board-Besitzer",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Übertragen",
|
||||
"The board has been transferred to {user}" : "Das Board wurde an {user} übertragen",
|
||||
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
|
||||
"Edit list title" : "Listentitel bearbeiten",
|
||||
"Archive all cards" : "Alle Karten archivieren",
|
||||
"Unarchive all cards" : "Alle Karten dearchivieren",
|
||||
"Delete list" : "Liste löschen",
|
||||
@@ -235,7 +233,7 @@
|
||||
"Update" : "Aktualisieren",
|
||||
"Description" : "Beschreibung",
|
||||
"(Unsaved)" : "(nicht gespeichert)",
|
||||
"(Saving…)" : "(Speichere …)",
|
||||
"(Saving…)" : "(Speichere…)",
|
||||
"Formatting help" : "Hilfe zur Formatierung",
|
||||
"Edit description" : "Beschreibung bearbeiten",
|
||||
"View description" : "Beschreibung anzeigen",
|
||||
@@ -261,7 +259,6 @@
|
||||
"Shared with you" : "Mit dir geteilt",
|
||||
"Deck settings" : "Deck-Einstellungen",
|
||||
"Use bigger card view" : "Größere Kartenansicht verwenden",
|
||||
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
|
||||
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
|
||||
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
|
||||
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn du Deck einschränkst, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
|
||||
@@ -270,7 +267,6 @@
|
||||
"Clone board" : "Board klonen",
|
||||
"Unarchive board" : "Board dearchivieren",
|
||||
"Archive board" : "Board archivieren",
|
||||
"Export board" : "Board exportieren",
|
||||
"Turn on due date reminders" : "Fälligkeitserinnerungen einschalten",
|
||||
"Turn off due date reminders" : "Fälligkeitserinnerungen ausschalten",
|
||||
"Due date reminders" : "Fälligkeitserinnerungen",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Kompaktmodus umschalten",
|
||||
"Open details" : "Details öffnen",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Aktuell Anwesende",
|
||||
"Loading board" : "Lade Board",
|
||||
"No lists available" : "Keine Listen verfügbar",
|
||||
"Create a new list to add cards to this board" : "Erstellen Sie eine neue Liste, um diesem Board Karten hinzuzufügen",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Kompaktmodus umschalten",
|
||||
"Open details" : "Details öffnen",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Aktuell Anwesende",
|
||||
"Loading board" : "Lade Board",
|
||||
"No lists available" : "Keine Listen verfügbar",
|
||||
"Create a new list to add cards to this board" : "Erstellen Sie eine neue Liste, um diesem Board Karten hinzuzufügen",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Toggle compact mode",
|
||||
"Open details" : "Open details",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Currently present people",
|
||||
"Loading board" : "Loading board",
|
||||
"No lists available" : "No lists available",
|
||||
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Toggle compact mode",
|
||||
"Open details" : "Open details",
|
||||
"Details" : "Details",
|
||||
"Currently present people" : "Currently present people",
|
||||
"Loading board" : "Loading board",
|
||||
"No lists available" : "No lists available",
|
||||
"Create a new list to add cards to this board" : "Create a new list to add cards to this board",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Mostrar/ocultar modo compacto",
|
||||
"Open details" : "Abrir detalles",
|
||||
"Details" : "Detalles",
|
||||
"Currently present people" : "Personas presentes actualmente",
|
||||
"Loading board" : "Cargando tablero",
|
||||
"No lists available" : "No hay listas disponibles",
|
||||
"Create a new list to add cards to this board" : "Crea una lista nueva para añadir tarjetas a este tablero",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Mostrar/ocultar modo compacto",
|
||||
"Open details" : "Abrir detalles",
|
||||
"Details" : "Detalles",
|
||||
"Currently present people" : "Personas presentes actualmente",
|
||||
"Loading board" : "Cargando tablero",
|
||||
"No lists available" : "No hay listas disponibles",
|
||||
"Create a new list to add cards to this board" : "Crea una lista nueva para añadir tarjetas a este tablero",
|
||||
|
||||
@@ -124,7 +124,7 @@ OC.L10N.register(
|
||||
"Create card" : "Sortu txartela",
|
||||
"Select a card" : "Hautatu txartel bat",
|
||||
"Select the card to link to a project" : "Hautatu proiektu bati estekatzeko txartela",
|
||||
"Link to card" : "Lotu txartelera",
|
||||
"Link to card" : "Estekatu txartelera",
|
||||
"File already exists" : "Badago izen bereko fitxategi bat",
|
||||
"A file with the name {filename} already exists." : "{filename} izeneko fitxategia existitzen da dagoeneko.",
|
||||
"Do you want to overwrite it?" : "Gainidatzi nahi duzu?",
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Txandakatu modu trinkoa",
|
||||
"Open details" : "Ireki xehetasunak",
|
||||
"Details" : "Xehetasunak",
|
||||
"Currently present people" : "Unean dauden pertsonak",
|
||||
"Loading board" : "Taula kargatzen",
|
||||
"No lists available" : "Ez dago zerrendarik eskuragarri",
|
||||
"Create a new list to add cards to this board" : "Sortu zerrenda berria, taula honetan txartelak gehitzeko",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Transferitu",
|
||||
"The board has been transferred to {user}" : "Arbela {user}-(a)ri transferitu zaio",
|
||||
"Failed to transfer the board to {user}" : "Ezin izan zaio transferitu arbela {use}-(a)ri",
|
||||
"Edit list title" : "Editatu zerrendaren izenburua",
|
||||
"Archive all cards" : "Artxibatu txartel guztiak",
|
||||
"Unarchive all cards" : "Berreskuratu txartel guztiak artxibotik",
|
||||
"Delete list" : "Zerrenda ezabatu",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Klonatu taula",
|
||||
"Unarchive board" : "Atera taula artxibotik",
|
||||
"Archive board" : "Artxibatu taula",
|
||||
"Export board" : "Esportatu taula",
|
||||
"Turn on due date reminders" : "Aktibatu epemugako abisuak",
|
||||
"Turn off due date reminders" : "Desaktibatu epemugako abisuak",
|
||||
"Due date reminders" : "Epemugako abisuak",
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
"Create card" : "Sortu txartela",
|
||||
"Select a card" : "Hautatu txartel bat",
|
||||
"Select the card to link to a project" : "Hautatu proiektu bati estekatzeko txartela",
|
||||
"Link to card" : "Lotu txartelera",
|
||||
"Link to card" : "Estekatu txartelera",
|
||||
"File already exists" : "Badago izen bereko fitxategi bat",
|
||||
"A file with the name {filename} already exists." : "{filename} izeneko fitxategia existitzen da dagoeneko.",
|
||||
"Do you want to overwrite it?" : "Gainidatzi nahi duzu?",
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Txandakatu modu trinkoa",
|
||||
"Open details" : "Ireki xehetasunak",
|
||||
"Details" : "Xehetasunak",
|
||||
"Currently present people" : "Unean dauden pertsonak",
|
||||
"Loading board" : "Taula kargatzen",
|
||||
"No lists available" : "Ez dago zerrendarik eskuragarri",
|
||||
"Create a new list to add cards to this board" : "Sortu zerrenda berria, taula honetan txartelak gehitzeko",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Transferitu",
|
||||
"The board has been transferred to {user}" : "Arbela {user}-(a)ri transferitu zaio",
|
||||
"Failed to transfer the board to {user}" : "Ezin izan zaio transferitu arbela {use}-(a)ri",
|
||||
"Edit list title" : "Editatu zerrendaren izenburua",
|
||||
"Archive all cards" : "Artxibatu txartel guztiak",
|
||||
"Unarchive all cards" : "Berreskuratu txartel guztiak artxibotik",
|
||||
"Delete list" : "Zerrenda ezabatu",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Klonatu taula",
|
||||
"Unarchive board" : "Atera taula artxibotik",
|
||||
"Archive board" : "Artxibatu taula",
|
||||
"Export board" : "Esportatu taula",
|
||||
"Turn on due date reminders" : "Aktibatu epemugako abisuak",
|
||||
"Turn off due date reminders" : "Desaktibatu epemugako abisuak",
|
||||
"Due date reminders" : "Epemugako abisuak",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Activer/Désactiver l'affichage compact",
|
||||
"Open details" : "Ouvrir les détails",
|
||||
"Details" : "Détails",
|
||||
"Currently present people" : "Personnes actuellement présentes",
|
||||
"Loading board" : "Chargement du tableau…",
|
||||
"No lists available" : "Aucune liste disponible",
|
||||
"Create a new list to add cards to this board" : "Créer une nouvelle liste pour ajouter des cartes à ce tableau",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Transférer",
|
||||
"The board has been transferred to {user}" : "Le tableau a été transféré à {user}",
|
||||
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
|
||||
"Edit list title" : "Modifier le titre de la liste",
|
||||
"Archive all cards" : "Archiver toutes les cartes",
|
||||
"Unarchive all cards" : "Désarchiver toutes les cartes",
|
||||
"Delete list" : "Supprimer la liste",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Dupliquer le tableau",
|
||||
"Unarchive board" : "Désarchiver le tableau",
|
||||
"Archive board" : "Archiver le tableau",
|
||||
"Export board" : "Exporter le tableau",
|
||||
"Turn on due date reminders" : "Activer les rappels",
|
||||
"Turn off due date reminders" : "Désactiver les rappels",
|
||||
"Due date reminders" : "Rappels",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Activer/Désactiver l'affichage compact",
|
||||
"Open details" : "Ouvrir les détails",
|
||||
"Details" : "Détails",
|
||||
"Currently present people" : "Personnes actuellement présentes",
|
||||
"Loading board" : "Chargement du tableau…",
|
||||
"No lists available" : "Aucune liste disponible",
|
||||
"Create a new list to add cards to this board" : "Créer une nouvelle liste pour ajouter des cartes à ce tableau",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Transférer",
|
||||
"The board has been transferred to {user}" : "Le tableau a été transféré à {user}",
|
||||
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
|
||||
"Edit list title" : "Modifier le titre de la liste",
|
||||
"Archive all cards" : "Archiver toutes les cartes",
|
||||
"Unarchive all cards" : "Désarchiver toutes les cartes",
|
||||
"Delete list" : "Supprimer la liste",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Dupliquer le tableau",
|
||||
"Unarchive board" : "Désarchiver le tableau",
|
||||
"Archive board" : "Archiver le tableau",
|
||||
"Export board" : "Exporter le tableau",
|
||||
"Turn on due date reminders" : "Activer les rappels",
|
||||
"Turn off due date reminders" : "Désactiver les rappels",
|
||||
"Due date reminders" : "Rappels",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Kompakt mód be/ki",
|
||||
"Open details" : "Részletek megnyitása",
|
||||
"Details" : "Részletek",
|
||||
"Currently present people" : "Jelenleg jelenlévő emberek",
|
||||
"Loading board" : "Tábla betöltése",
|
||||
"No lists available" : "Nincs elérhető lista",
|
||||
"Create a new list to add cards to this board" : "Hozzon létre egy új listát a kártyák ehhez a táblához való hozzáadásához",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Átadás",
|
||||
"The board has been transferred to {user}" : "A tábla átadása {user} számára sikeres",
|
||||
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
|
||||
"Edit list title" : "Listacím szerkesztése",
|
||||
"Archive all cards" : "Az összes kártya archiválása",
|
||||
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
|
||||
"Delete list" : "Lista törlése",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Tábla klónozása",
|
||||
"Unarchive board" : "Tábla archiválásának visszavonása",
|
||||
"Archive board" : "Tábla archiválása",
|
||||
"Export board" : "Tábla exportálása",
|
||||
"Turn on due date reminders" : "Határidő emlékeztető beállítása",
|
||||
"Turn off due date reminders" : "Határidő emlékeztető kikapcsolása",
|
||||
"Due date reminders" : "Határidő emlékeztetők",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Kompakt mód be/ki",
|
||||
"Open details" : "Részletek megnyitása",
|
||||
"Details" : "Részletek",
|
||||
"Currently present people" : "Jelenleg jelenlévő emberek",
|
||||
"Loading board" : "Tábla betöltése",
|
||||
"No lists available" : "Nincs elérhető lista",
|
||||
"Create a new list to add cards to this board" : "Hozzon létre egy új listát a kártyák ehhez a táblához való hozzáadásához",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Átadás",
|
||||
"The board has been transferred to {user}" : "A tábla átadása {user} számára sikeres",
|
||||
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
|
||||
"Edit list title" : "Listacím szerkesztése",
|
||||
"Archive all cards" : "Az összes kártya archiválása",
|
||||
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
|
||||
"Delete list" : "Lista törlése",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Tábla klónozása",
|
||||
"Unarchive board" : "Tábla archiválásának visszavonása",
|
||||
"Archive board" : "Tábla archiválása",
|
||||
"Export board" : "Tábla exportálása",
|
||||
"Turn on due date reminders" : "Határidő emlékeztető beállítása",
|
||||
"Turn off due date reminders" : "Határidő emlékeztető kikapcsolása",
|
||||
"Due date reminders" : "Határidő emlékeztetők",
|
||||
|
||||
@@ -3,7 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Personal" : "Udmawan",
|
||||
"Finished" : "Immed",
|
||||
"Done" : "Immed",
|
||||
"The file was uploaded" : "Ulac afaylu yettwaznen",
|
||||
"The file was only partially uploaded" : "Afaylu, cwiṭ kan i yettwaznen segs",
|
||||
"No file was uploaded" : "Ulac afaylu i d-yettwasulin",
|
||||
@@ -13,17 +12,12 @@ OC.L10N.register(
|
||||
"Details" : "Talqayt",
|
||||
"Sharing" : "Beṭṭu",
|
||||
"Tags" : "Tibzimin",
|
||||
"Owner" : "Bab",
|
||||
"Delete" : "Kkes",
|
||||
"Edit" : "Ẓreg",
|
||||
"Download" : "Sider",
|
||||
"Attachments" : "Ticeqqufin",
|
||||
"Comments" : "Commentaires",
|
||||
"Modified" : "Yettwabeddel",
|
||||
"Today" : "Ass-a",
|
||||
"Save" : "Sekles",
|
||||
"Cancel reply" : "Semmet tiririt.",
|
||||
"Reply" : "Err",
|
||||
"No notifications" : "Ulac tisezmal",
|
||||
"Share" : "Bḍu"
|
||||
},
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ "translations": {
|
||||
"Personal" : "Udmawan",
|
||||
"Finished" : "Immed",
|
||||
"Done" : "Immed",
|
||||
"The file was uploaded" : "Ulac afaylu yettwaznen",
|
||||
"The file was only partially uploaded" : "Afaylu, cwiṭ kan i yettwaznen segs",
|
||||
"No file was uploaded" : "Ulac afaylu i d-yettwasulin",
|
||||
@@ -11,17 +10,12 @@
|
||||
"Details" : "Talqayt",
|
||||
"Sharing" : "Beṭṭu",
|
||||
"Tags" : "Tibzimin",
|
||||
"Owner" : "Bab",
|
||||
"Delete" : "Kkes",
|
||||
"Edit" : "Ẓreg",
|
||||
"Download" : "Sider",
|
||||
"Attachments" : "Ticeqqufin",
|
||||
"Comments" : "Commentaires",
|
||||
"Modified" : "Yettwabeddel",
|
||||
"Today" : "Ass-a",
|
||||
"Save" : "Sekles",
|
||||
"Cancel reply" : "Semmet tiririt.",
|
||||
"Reply" : "Err",
|
||||
"No notifications" : "Ulac tisezmal",
|
||||
"Share" : "Bḍu"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -119,7 +119,7 @@ OC.L10N.register(
|
||||
"Cancel" : "Annuleren",
|
||||
"Creating the new card …" : "Aanmaken nieuwe kaart...",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "Kaart \"{card}\" is toegevoegd aan \"{board}\"",
|
||||
"Open card" : "Open kaart",
|
||||
"Open card" : "Open kaard",
|
||||
"Close" : "Sluiten",
|
||||
"Create card" : "Aanmaken kaart",
|
||||
"Select a card" : "Selecteer een kaart",
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
"Cancel" : "Annuleren",
|
||||
"Creating the new card …" : "Aanmaken nieuwe kaart...",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "Kaart \"{card}\" is toegevoegd aan \"{board}\"",
|
||||
"Open card" : "Open kaart",
|
||||
"Open card" : "Open kaard",
|
||||
"Close" : "Sluiten",
|
||||
"Create card" : "Aanmaken kaart",
|
||||
"Select a card" : "Selecteer een kaart",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Przełącz w tryb kompaktowy",
|
||||
"Open details" : "Otwórz szczegóły",
|
||||
"Details" : "Szczegóły",
|
||||
"Currently present people" : "Aktualnie obecne osoby",
|
||||
"Loading board" : "Wczytywanie tablicy",
|
||||
"No lists available" : "Brak dostępnych list",
|
||||
"Create a new list to add cards to this board" : "Utwórz nową listę, aby dodać karty do tej tablicy",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Przenieś",
|
||||
"The board has been transferred to {user}" : "Tablica została przeniesiona do {user}",
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Edit list title" : "Edytuj tytuł listy",
|
||||
"Archive all cards" : "Zarchiwizuj wszystkie karty",
|
||||
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
|
||||
"Delete list" : "Usuń listę",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Klonuj tablicę",
|
||||
"Unarchive board" : "Przywróć tablicę",
|
||||
"Archive board" : "Zarchiwizuj tablicę",
|
||||
"Export board" : "Eksportuj tablicę",
|
||||
"Turn on due date reminders" : "Włącz przypomnienia o terminach",
|
||||
"Turn off due date reminders" : "Wyłącz przypomnienia o terminach",
|
||||
"Due date reminders" : "Przypomnienia o terminach",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Przełącz w tryb kompaktowy",
|
||||
"Open details" : "Otwórz szczegóły",
|
||||
"Details" : "Szczegóły",
|
||||
"Currently present people" : "Aktualnie obecne osoby",
|
||||
"Loading board" : "Wczytywanie tablicy",
|
||||
"No lists available" : "Brak dostępnych list",
|
||||
"Create a new list to add cards to this board" : "Utwórz nową listę, aby dodać karty do tej tablicy",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Przenieś",
|
||||
"The board has been transferred to {user}" : "Tablica została przeniesiona do {user}",
|
||||
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
|
||||
"Edit list title" : "Edytuj tytuł listy",
|
||||
"Archive all cards" : "Zarchiwizuj wszystkie karty",
|
||||
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
|
||||
"Delete list" : "Usuń listę",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Klonuj tablicę",
|
||||
"Unarchive board" : "Przywróć tablicę",
|
||||
"Archive board" : "Zarchiwizuj tablicę",
|
||||
"Export board" : "Eksportuj tablicę",
|
||||
"Turn on due date reminders" : "Włącz przypomnienia o terminach",
|
||||
"Turn off due date reminders" : "Wyłącz przypomnienia o terminach",
|
||||
"Due date reminders" : "Przypomnienia o terminach",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Alternar modo compacto",
|
||||
"Open details" : "Abrir detalhes",
|
||||
"Details" : "Detalhes",
|
||||
"Currently present people" : "Pessoas atualmente presentes",
|
||||
"Loading board" : "Carregando painel",
|
||||
"No lists available" : "Nenhuma lista disponível",
|
||||
"Create a new list to add cards to this board" : "Criar uma nova lista para adicionar cartões a este painel",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Edit list title" : "Editar título da lista",
|
||||
"Archive all cards" : "Arquivar todos os cartões",
|
||||
"Unarchive all cards" : "Desarquivar todos os cartões",
|
||||
"Delete list" : "Excluir lista",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Clonar painel",
|
||||
"Unarchive board" : "Desarquivar painel",
|
||||
"Archive board" : "Arquivar painel",
|
||||
"Export board" : "Quadro de exportação",
|
||||
"Turn on due date reminders" : "Ativar lembretes de vencimento",
|
||||
"Turn off due date reminders" : "Desativar lembretes de vencimento",
|
||||
"Due date reminders" : "Lembretes de vencimento",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Alternar modo compacto",
|
||||
"Open details" : "Abrir detalhes",
|
||||
"Details" : "Detalhes",
|
||||
"Currently present people" : "Pessoas atualmente presentes",
|
||||
"Loading board" : "Carregando painel",
|
||||
"No lists available" : "Nenhuma lista disponível",
|
||||
"Create a new list to add cards to this board" : "Criar uma nova lista para adicionar cartões a este painel",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Transferir",
|
||||
"The board has been transferred to {user}" : "A painel foi transferida para {user}",
|
||||
"Failed to transfer the board to {user}" : "Não foi possível transferir o painel para {user}",
|
||||
"Edit list title" : "Editar título da lista",
|
||||
"Archive all cards" : "Arquivar todos os cartões",
|
||||
"Unarchive all cards" : "Desarquivar todos os cartões",
|
||||
"Delete list" : "Excluir lista",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Clonar painel",
|
||||
"Unarchive board" : "Desarquivar painel",
|
||||
"Archive board" : "Arquivar painel",
|
||||
"Export board" : "Quadro de exportação",
|
||||
"Turn on due date reminders" : "Ativar lembretes de vencimento",
|
||||
"Turn off due date reminders" : "Desativar lembretes de vencimento",
|
||||
"Due date reminders" : "Lembretes de vencimento",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Växla kompakt läge",
|
||||
"Open details" : "Öppna detaljer",
|
||||
"Details" : "Detaljer",
|
||||
"Currently present people" : "Närvarande personer",
|
||||
"Loading board" : "Läser in tavla",
|
||||
"No lists available" : "Inga listor tillgängliga",
|
||||
"Create a new list to add cards to this board" : "Skapa en ny lista för att lägga till kort på denna tavla",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Växla kompakt läge",
|
||||
"Open details" : "Öppna detaljer",
|
||||
"Details" : "Detaljer",
|
||||
"Currently present people" : "Närvarande personer",
|
||||
"Loading board" : "Läser in tavla",
|
||||
"No lists available" : "Inga listor tillgängliga",
|
||||
"Create a new list to add cards to this board" : "Skapa en ny lista för att lägga till kort på denna tavla",
|
||||
|
||||
33
l10n/th.js
33
l10n/th.js
@@ -3,48 +3,43 @@ OC.L10N.register(
|
||||
{
|
||||
"Personal" : "ส่วนตัว",
|
||||
"copy" : "คัดลอก",
|
||||
"Done" : "เสร็จสิ้น",
|
||||
"Done" : "Done",
|
||||
"The file was uploaded" : "ไฟล์อัปโหลดแล้ว",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "ขนาดไฟล์ที่อัปโหลดมีขนาดเกินค่า upload_max_filesize ที่ระบุไว้ใน php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ไฟล์ที่อัปโหลดมีขนาดใหญ่เกินค่า MAX_FILE_SIZE ที่ระบุไว้ในรูปแบบของ HTML",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหญ่เกินจำนวนที่กำหนดไว้ในคำสั่ง MAX_FILE_SIZE ที่ถูกระบุไว้ในรูปแบบของ HTML",
|
||||
"The file was only partially uploaded" : "ไฟล์ถูกอัปโหลดเพียงบางส่วน",
|
||||
"No file was uploaded" : "ไม่มีไฟล์ที่ถูกอัปโหลด",
|
||||
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวขาดหาย",
|
||||
"No file was uploaded" : "ไม่มีไฟล์ที่ถูกอัพโหลด",
|
||||
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
|
||||
"Could not write file to disk" : "ไม่สามารถเขียนไฟล์ลงดิสก์",
|
||||
"A PHP extension stopped the file upload" : "ส่วนขยาย PHP ได้หยุดการอัปโหลดไฟล์",
|
||||
"Card not found" : "ไม่พบการ์ด",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น ปปปป-ดด-วว",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น YYYY-MM-DD",
|
||||
"Cancel" : "ยกเลิก",
|
||||
"Close" : "ปิด",
|
||||
"File already exists" : "ไฟล์นี้มีอยู่แล้ว",
|
||||
"Overdue" : "เกินกำหนด",
|
||||
"File already exists" : "ไฟล์นี้มีแล้ว",
|
||||
"Details" : "รายละเอียด",
|
||||
"Sharing" : "การแชร์",
|
||||
"Tags" : "แท็ก",
|
||||
"Sharing" : "แชร์ข้อมูล",
|
||||
"Tags" : "ป้ายกำกับ",
|
||||
"Undo" : "เลิกทำ",
|
||||
"Can edit" : "สามารถแก้ไข",
|
||||
"Can share" : "สามารถแชร์",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "เจ้าของ",
|
||||
"Delete" : "ลบ",
|
||||
"Transfer" : "โอนย้าย",
|
||||
"Edit" : "แก้ไข",
|
||||
"Download" : "ดาวน์โหลด",
|
||||
"Invalid path selected" : "เลือกเส้นทางไม่ถูกต้อง",
|
||||
"Attachments" : "ไฟล์แนบ",
|
||||
"Comments" : "ความคิดเห็น",
|
||||
"Modified" : "แก้ไขเมื่อ",
|
||||
"Due date" : "วันที่ครบกำหนด",
|
||||
"Today" : "วันนี้",
|
||||
"Tomorrow" : "พรุ่งนี้",
|
||||
"Tomorrow" : "วันพรุ่งนี้",
|
||||
"Save" : "บันทึก",
|
||||
"Reply" : "ตอบกลับ",
|
||||
"Update" : "อัปเดต",
|
||||
"Update" : "อัพเดท",
|
||||
"Description" : "รายละเอียด",
|
||||
"(group)" : "(กลุ่ม)",
|
||||
"seconds ago" : "วินาทีที่ผ่านมา",
|
||||
"Shared with you" : "แชร์กับคุณ",
|
||||
"Edit board" : "แก้ไขกระดาน",
|
||||
"Delete board" : "ลบกระดาน",
|
||||
"seconds ago" : "วินาที ก่อนหน้านี้",
|
||||
"Shared with you" : "Shared with you",
|
||||
"An error occurred" : "เกิดข้อผิดพลาด",
|
||||
"Share" : "แชร์"
|
||||
},
|
||||
|
||||
33
l10n/th.json
33
l10n/th.json
@@ -1,48 +1,43 @@
|
||||
{ "translations": {
|
||||
"Personal" : "ส่วนตัว",
|
||||
"copy" : "คัดลอก",
|
||||
"Done" : "เสร็จสิ้น",
|
||||
"Done" : "Done",
|
||||
"The file was uploaded" : "ไฟล์อัปโหลดแล้ว",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "ขนาดไฟล์ที่อัปโหลดมีขนาดเกินค่า upload_max_filesize ที่ระบุไว้ใน php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ไฟล์ที่อัปโหลดมีขนาดใหญ่เกินค่า MAX_FILE_SIZE ที่ระบุไว้ในรูปแบบของ HTML",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "ไฟล์ที่อัพโหลดมีขนาดไฟล์ใหญ่เกินจำนวนที่กำหนดไว้ในคำสั่ง MAX_FILE_SIZE ที่ถูกระบุไว้ในรูปแบบของ HTML",
|
||||
"The file was only partially uploaded" : "ไฟล์ถูกอัปโหลดเพียงบางส่วน",
|
||||
"No file was uploaded" : "ไม่มีไฟล์ที่ถูกอัปโหลด",
|
||||
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวขาดหาย",
|
||||
"No file was uploaded" : "ไม่มีไฟล์ที่ถูกอัพโหลด",
|
||||
"Missing a temporary folder" : "โฟลเดอร์ชั่วคราวเกิดการสูญหาย",
|
||||
"Could not write file to disk" : "ไม่สามารถเขียนไฟล์ลงดิสก์",
|
||||
"A PHP extension stopped the file upload" : "ส่วนขยาย PHP ได้หยุดการอัปโหลดไฟล์",
|
||||
"Card not found" : "ไม่พบการ์ด",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น ปปปป-ดด-วว",
|
||||
"Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น YYYY-MM-DD",
|
||||
"Cancel" : "ยกเลิก",
|
||||
"Close" : "ปิด",
|
||||
"File already exists" : "ไฟล์นี้มีอยู่แล้ว",
|
||||
"Overdue" : "เกินกำหนด",
|
||||
"File already exists" : "ไฟล์นี้มีแล้ว",
|
||||
"Details" : "รายละเอียด",
|
||||
"Sharing" : "การแชร์",
|
||||
"Tags" : "แท็ก",
|
||||
"Sharing" : "แชร์ข้อมูล",
|
||||
"Tags" : "ป้ายกำกับ",
|
||||
"Undo" : "เลิกทำ",
|
||||
"Can edit" : "สามารถแก้ไข",
|
||||
"Can share" : "สามารถแชร์",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "เจ้าของ",
|
||||
"Delete" : "ลบ",
|
||||
"Transfer" : "โอนย้าย",
|
||||
"Edit" : "แก้ไข",
|
||||
"Download" : "ดาวน์โหลด",
|
||||
"Invalid path selected" : "เลือกเส้นทางไม่ถูกต้อง",
|
||||
"Attachments" : "ไฟล์แนบ",
|
||||
"Comments" : "ความคิดเห็น",
|
||||
"Modified" : "แก้ไขเมื่อ",
|
||||
"Due date" : "วันที่ครบกำหนด",
|
||||
"Today" : "วันนี้",
|
||||
"Tomorrow" : "พรุ่งนี้",
|
||||
"Tomorrow" : "วันพรุ่งนี้",
|
||||
"Save" : "บันทึก",
|
||||
"Reply" : "ตอบกลับ",
|
||||
"Update" : "อัปเดต",
|
||||
"Update" : "อัพเดท",
|
||||
"Description" : "รายละเอียด",
|
||||
"(group)" : "(กลุ่ม)",
|
||||
"seconds ago" : "วินาทีที่ผ่านมา",
|
||||
"Shared with you" : "แชร์กับคุณ",
|
||||
"Edit board" : "แก้ไขกระดาน",
|
||||
"Delete board" : "ลบกระดาน",
|
||||
"seconds ago" : "วินาที ก่อนหน้านี้",
|
||||
"Shared with you" : "Shared with you",
|
||||
"An error occurred" : "เกิดข้อผิดพลาด",
|
||||
"Share" : "แชร์"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "Sıkışık kipi değiştir",
|
||||
"Open details" : "Ayrıntıları aç",
|
||||
"Details" : "Ayrıntılar",
|
||||
"Currently present people" : "Şu anda var olan kişiler",
|
||||
"Loading board" : "Pano yükleniyor",
|
||||
"No lists available" : "Kullanılabilecek bir liste yok",
|
||||
"Create a new list to add cards to this board" : "Bu panoya kartlar eklemek için yeni bir liste ekleyin",
|
||||
@@ -182,7 +181,6 @@ OC.L10N.register(
|
||||
"Transfer" : "Aktar",
|
||||
"The board has been transferred to {user}" : "Pano {user} kullanıcısına aktarıldı",
|
||||
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
|
||||
"Edit list title" : "Liste başlığını düzenle",
|
||||
"Archive all cards" : "Tüm kartları arşivle",
|
||||
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
|
||||
"Delete list" : "Listeyi sil",
|
||||
@@ -272,7 +270,6 @@ OC.L10N.register(
|
||||
"Clone board" : "Panoyu kopyala",
|
||||
"Unarchive board" : "Panoyu arşivden çıkar",
|
||||
"Archive board" : "Panoyu arşivle",
|
||||
"Export board" : "Panoyu dışa aktar",
|
||||
"Turn on due date reminders" : "Tarih anımsatıcılarını aç",
|
||||
"Turn off due date reminders" : "Tarih anımsatıcılarını kapat",
|
||||
"Due date reminders" : "Bitiş tarihi anımsatıcıları",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "Sıkışık kipi değiştir",
|
||||
"Open details" : "Ayrıntıları aç",
|
||||
"Details" : "Ayrıntılar",
|
||||
"Currently present people" : "Şu anda var olan kişiler",
|
||||
"Loading board" : "Pano yükleniyor",
|
||||
"No lists available" : "Kullanılabilecek bir liste yok",
|
||||
"Create a new list to add cards to this board" : "Bu panoya kartlar eklemek için yeni bir liste ekleyin",
|
||||
@@ -180,7 +179,6 @@
|
||||
"Transfer" : "Aktar",
|
||||
"The board has been transferred to {user}" : "Pano {user} kullanıcısına aktarıldı",
|
||||
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
|
||||
"Edit list title" : "Liste başlığını düzenle",
|
||||
"Archive all cards" : "Tüm kartları arşivle",
|
||||
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
|
||||
"Delete list" : "Listeyi sil",
|
||||
@@ -270,7 +268,6 @@
|
||||
"Clone board" : "Panoyu kopyala",
|
||||
"Unarchive board" : "Panoyu arşivden çıkar",
|
||||
"Archive board" : "Panoyu arşivle",
|
||||
"Export board" : "Panoyu dışa aktar",
|
||||
"Turn on due date reminders" : "Tarih anımsatıcılarını aç",
|
||||
"Turn off due date reminders" : "Tarih anımsatıcılarını kapat",
|
||||
"Due date reminders" : "Bitiş tarihi anımsatıcıları",
|
||||
|
||||
@@ -12,7 +12,7 @@ OC.L10N.register(
|
||||
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
|
||||
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
|
||||
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} змінив(-ла) назву дошки {before} на {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
|
||||
"You have archived the board {board}" : "Ви заархівували дошку {board}",
|
||||
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
|
||||
"You have unarchived the board {board}" : "Ви розархівували дошку {board}",
|
||||
@@ -20,7 +20,7 @@ OC.L10N.register(
|
||||
"You have created a new list {stack} on board {board}" : "Ви створили новий список {stack} на борту {board}",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} створив новий список {stack} на дошці {board}",
|
||||
"You have renamed list {before} to {stack} on board {board}" : "Ви перейменували список {before} на {stack} на дошці {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив(-ла) назву списку {before} на {stack} на дошці {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив назву списку {before} на {stack} на дошці {board}",
|
||||
"You have deleted list {stack} on board {board}" : "Ви видалили список {stack} на дошці {board}",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} видалив список {stack} на дошці {board}",
|
||||
"You have created card {card} in list {stack} on board {board}" : "Ви створили картку {card} у списку {stack} на дошці {board}",
|
||||
@@ -28,7 +28,7 @@ OC.L10N.register(
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "Ви видалили картку {card} у списку {stack} на дошці {board}",
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} видалив картку {card} у списку {stack} на дошці {board}",
|
||||
"You have renamed the card {before} to {card}" : "Ви перейменували картку {before} на {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} змінив(-ла) назву картки {before} на {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} змінив назву картки {before} на {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Ви додали опис картки {card} у списку {stack} на дошці {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} додав опис до картки {card} у списку {stack} на дошці {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Ви оновили опис картки {card} у списку {stack} на дошці {board}",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
|
||||
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
|
||||
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} змінив(-ла) назву дошки {before} на {board}",
|
||||
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
|
||||
"You have archived the board {board}" : "Ви заархівували дошку {board}",
|
||||
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
|
||||
"You have unarchived the board {board}" : "Ви розархівували дошку {board}",
|
||||
@@ -18,7 +18,7 @@
|
||||
"You have created a new list {stack} on board {board}" : "Ви створили новий список {stack} на борту {board}",
|
||||
"{user} has created a new list {stack} on board {board}" : "{user} створив новий список {stack} на дошці {board}",
|
||||
"You have renamed list {before} to {stack} on board {board}" : "Ви перейменували список {before} на {stack} на дошці {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив(-ла) назву списку {before} на {stack} на дошці {board}",
|
||||
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив назву списку {before} на {stack} на дошці {board}",
|
||||
"You have deleted list {stack} on board {board}" : "Ви видалили список {stack} на дошці {board}",
|
||||
"{user} has deleted list {stack} on board {board}" : "{user} видалив список {stack} на дошці {board}",
|
||||
"You have created card {card} in list {stack} on board {board}" : "Ви створили картку {card} у списку {stack} на дошці {board}",
|
||||
@@ -26,7 +26,7 @@
|
||||
"You have deleted card {card} in list {stack} on board {board}" : "Ви видалили картку {card} у списку {stack} на дошці {board}",
|
||||
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} видалив картку {card} у списку {stack} на дошці {board}",
|
||||
"You have renamed the card {before} to {card}" : "Ви перейменували картку {before} на {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} змінив(-ла) назву картки {before} на {card}",
|
||||
"{user} has renamed the card {before} to {card}" : "{user} змінив назву картки {before} на {card}",
|
||||
"You have added a description to card {card} in list {stack} on board {board}" : "Ви додали опис картки {card} у списку {stack} на дошці {board}",
|
||||
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} додав опис до картки {card} у списку {stack} на дошці {board}",
|
||||
"You have updated the description of card {card} in list {stack} on board {board}" : "Ви оновили опис картки {card} у списку {stack} на дошці {board}",
|
||||
|
||||
@@ -153,7 +153,6 @@ OC.L10N.register(
|
||||
"Toggle compact mode" : "切換簡潔模式",
|
||||
"Open details" : "開啟細節",
|
||||
"Details" : "詳情",
|
||||
"Currently present people" : "目前在場人仕",
|
||||
"Loading board" : "正在加載面板",
|
||||
"No lists available" : "無清單可用",
|
||||
"Create a new list to add cards to this board" : "創建一張新清單來添加卡片到這個看板",
|
||||
|
||||
@@ -151,7 +151,6 @@
|
||||
"Toggle compact mode" : "切換簡潔模式",
|
||||
"Open details" : "開啟細節",
|
||||
"Details" : "詳情",
|
||||
"Currently present people" : "目前在場人仕",
|
||||
"Loading board" : "正在加載面板",
|
||||
"No lists available" : "無清單可用",
|
||||
"Create a new list to add cards to this board" : "創建一張新清單來添加卡片到這個看板",
|
||||
|
||||
@@ -325,6 +325,7 @@ class ActivityManager {
|
||||
*/
|
||||
$eventType = 'deck';
|
||||
$subjectParams = [];
|
||||
$message = null;
|
||||
switch ($subject) {
|
||||
// No need to enhance parameters since entity already contains the required data
|
||||
case self::SUBJECT_BOARD_CREATE:
|
||||
@@ -433,6 +434,10 @@ class ActivityManager {
|
||||
->setSubject($subject, $subjectParams)
|
||||
->setTimestamp(time());
|
||||
|
||||
if ($message !== null) {
|
||||
$event->setMessage($message);
|
||||
}
|
||||
|
||||
// FIXME: We currently require activities for comments even if they are disabled though settings
|
||||
// Get rid of this once the frontend fetches comments/activity individually
|
||||
if ($eventType === 'deck_comment') {
|
||||
|
||||
@@ -77,7 +77,7 @@ class DeckProvider implements IProvider {
|
||||
* @throws \InvalidArgumentException Should be thrown if your provider does not know this event
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function parse($language, IEvent $event, IEvent $previousEvent = null): IEvent {
|
||||
public function parse($language, IEvent $event, IEvent $previousEvent = null) {
|
||||
if ($event->getApp() !== 'deck') {
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
@@ -294,7 +294,7 @@ class DeckProvider implements IProvider {
|
||||
if (array_key_exists('comment', $subjectParams)) {
|
||||
/** @var IComment $comment */
|
||||
try {
|
||||
$comment = $this->commentsManager->get($subjectParams['comment']);
|
||||
$comment = $this->commentsManager->get((int)$subjectParams['comment']);
|
||||
$event->setParsedMessage($comment->getMessage());
|
||||
$params['comment'] = [
|
||||
'type' => 'highlight',
|
||||
|
||||
@@ -29,7 +29,7 @@ class DescriptionSetting extends Setting {
|
||||
* @return string Lowercase a-z and underscore only identifier
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getIdentifier(): string {
|
||||
public function getIdentifier() {
|
||||
return 'deck_card_description';
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class DescriptionSetting extends Setting {
|
||||
* @return string A translated string
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getName(): string {
|
||||
public function getName() {
|
||||
return $this->l->t('A <strong>card description</strong> inside the Deck app has been changed');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* @return string Lowercase a-z and underscore only identifier
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getIdentifier(): string {
|
||||
public function getIdentifier() {
|
||||
return 'deck';
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* @return string A translated string
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getName(): string {
|
||||
public function getName() {
|
||||
return $this->l10n->t('Deck');
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* priority values. It is required to return a value between 0 and 100.
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getPriority(): int {
|
||||
public function getPriority() {
|
||||
return 90;
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* @return string Full URL to an icon, empty string when none is given
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getIcon(): string {
|
||||
public function getIcon() {
|
||||
return $this->urlGenerator->imagePath('deck', 'deck-dark.svg');
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* @return string[] An array of allowed apps from which activities should be displayed
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function filterTypes(array $types): array {
|
||||
public function filterTypes(array $types) {
|
||||
return array_merge($types, ['deck_comment']);
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ class Filter implements \OCP\Activity\IFilter {
|
||||
* @return string[] An array of allowed apps from which activities should be displayed
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function allowedApps(): array {
|
||||
public function allowedApps() {
|
||||
return ['deck'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return string Lowercase a-z and underscore only identifier
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getIdentifier(): string {
|
||||
public function getIdentifier() {
|
||||
return 'deck';
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return string A translated string
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getName(): string {
|
||||
public function getName() {
|
||||
return $this->l->t('Changes in the <strong>Deck app</strong>');
|
||||
}
|
||||
|
||||
@@ -59,7 +59,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* priority values. It is required to return a value between 0 and 100.
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getPriority(): int {
|
||||
public function getPriority() {
|
||||
return 90;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return bool True when the option can be changed for the stream
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function canChangeStream(): bool {
|
||||
public function canChangeStream() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return bool True when the option can be changed for the stream
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function isDefaultEnabledStream(): bool {
|
||||
public function isDefaultEnabledStream() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return bool True when the option can be changed for the mail
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function canChangeMail(): bool {
|
||||
public function canChangeMail() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ class Setting implements \OCP\Activity\ISetting {
|
||||
* @return bool True when the option can be changed for the stream
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function isDefaultEnabledMail(): bool {
|
||||
public function isDefaultEnabledMail() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ class SettingComment extends Setting {
|
||||
* @return string Lowercase a-z and underscore only identifier
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getIdentifier(): string {
|
||||
public function getIdentifier() {
|
||||
return 'deck_comment';
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ class SettingComment extends Setting {
|
||||
* @return string A translated string
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function getName(): string {
|
||||
public function getName() {
|
||||
return $this->l->t('A <strong>comment</strong> was created on a card');
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ class SettingComment extends Setting {
|
||||
* @return bool True when the option can be changed for the stream
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function canChangeStream(): bool {
|
||||
public function canChangeStream() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,13 +26,15 @@ namespace OCA\Deck\AppInfo;
|
||||
use Closure;
|
||||
use Exception;
|
||||
use OC\EventDispatcher\SymfonyAdapter;
|
||||
use OCA\Circles\Events\CircleDestroyedEvent;
|
||||
use OCA\Deck\Activity\CommentEventHandler;
|
||||
use OCA\Deck\Capabilities;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProvider;
|
||||
use OCA\Deck\Collaboration\Resources\ResourceProviderCard;
|
||||
use OCA\Deck\Dashboard\DeckWidget;
|
||||
use OCA\Deck\Db\Acl;
|
||||
use OCA\Deck\Db\AclMapper;
|
||||
use OCA\Deck\Db\AssignmentMapper;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Event\AclCreatedEvent;
|
||||
use OCA\Deck\Event\AclDeletedEvent;
|
||||
@@ -40,13 +42,8 @@ use OCA\Deck\Event\AclUpdatedEvent;
|
||||
use OCA\Deck\Event\CardCreatedEvent;
|
||||
use OCA\Deck\Event\CardDeletedEvent;
|
||||
use OCA\Deck\Event\CardUpdatedEvent;
|
||||
use OCA\Deck\Event\SessionClosedEvent;
|
||||
use OCA\Deck\Event\SessionCreatedEvent;
|
||||
use OCA\Deck\Listeners\BeforeTemplateRenderedListener;
|
||||
use OCA\Deck\Listeners\ParticipantCleanupListener;
|
||||
use OCA\Deck\Listeners\FullTextSearchEventListener;
|
||||
use OCA\Deck\Listeners\ResourceListener;
|
||||
use OCA\Deck\Listeners\LiveUpdateListener;
|
||||
use OCA\Deck\Middleware\DefaultBoardMiddleware;
|
||||
use OCA\Deck\Middleware\ExceptionMiddleware;
|
||||
use OCA\Deck\Notification\Notifier;
|
||||
@@ -65,12 +62,15 @@ use OCP\Collaboration\Reference\RenderReferenceEvent;
|
||||
use OCP\Collaboration\Resources\IProviderManager;
|
||||
use OCP\Comments\CommentsEntityEvent;
|
||||
use OCP\Comments\ICommentsManager;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Group\Events\GroupDeletedEvent;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IRequest;
|
||||
use OCP\Server;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Notification\IManager as NotificationManager;
|
||||
use OCP\Share\IManager;
|
||||
use OCP\User\Events\UserDeletedEvent;
|
||||
@@ -95,6 +95,7 @@ class Application extends App implements IBootstrap {
|
||||
}
|
||||
|
||||
public function boot(IBootContext $context): void {
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerUserGroupHooks']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEntity']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerCommentsEventHandler']));
|
||||
$context->injectFn(Closure::fromCallable([$this, 'registerNotifications']));
|
||||
@@ -142,24 +143,59 @@ class Application extends App implements IBootstrap {
|
||||
$context->registerEventListener(AclCreatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclUpdatedEvent::class, FullTextSearchEventListener::class);
|
||||
$context->registerEventListener(AclDeletedEvent::class, FullTextSearchEventListener::class);
|
||||
|
||||
// Handling cache invalidation for collections
|
||||
$context->registerEventListener(AclCreatedEvent::class, ResourceListener::class);
|
||||
$context->registerEventListener(AclDeletedEvent::class, ResourceListener::class);
|
||||
|
||||
$context->registerEventListener(UserDeletedEvent::class, ParticipantCleanupListener::class);
|
||||
$context->registerEventListener(GroupDeletedEvent::class, ParticipantCleanupListener::class);
|
||||
$context->registerEventListener(CircleDestroyedEvent::class, ParticipantCleanupListener::class);
|
||||
|
||||
// Event listening for realtime updates via notify_push
|
||||
$context->registerEventListener(SessionCreatedEvent::class, LiveUpdateListener::class);
|
||||
$context->registerEventListener(SessionClosedEvent::class, LiveUpdateListener::class);
|
||||
}
|
||||
|
||||
public function registerNotifications(NotificationManager $notificationManager): void {
|
||||
$notificationManager->registerNotifierService(Notifier::class);
|
||||
}
|
||||
|
||||
private function registerUserGroupHooks(IUserManager $userManager, IGroupManager $groupManager): void {
|
||||
$container = $this->getContainer();
|
||||
/** @var IEventDispatcher $eventDispatcher */
|
||||
$eventDispatcher = $container->get(IEventDispatcher::class);
|
||||
// Delete user/group acl entries when they get deleted
|
||||
$eventDispatcher->addListener(UserDeletedEvent::class, static function (Event $event) use ($container): void {
|
||||
if (!($event instanceof UserDeletedEvent)) {
|
||||
return;
|
||||
}
|
||||
$user = $event->getUser();
|
||||
// delete existing acl entries for deleted user
|
||||
/** @var AclMapper $aclMapper */
|
||||
$aclMapper = $container->get(AclMapper::class);
|
||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_USER, $user->getUID());
|
||||
foreach ($acls as $acl) {
|
||||
$aclMapper->delete($acl);
|
||||
}
|
||||
// delete existing user assignments
|
||||
$assignmentMapper = $container->get(AssignmentMapper::class);
|
||||
$assignments = $assignmentMapper->findByParticipant($user->getUID());
|
||||
foreach ($assignments as $assignment) {
|
||||
$assignmentMapper->delete($assignment);
|
||||
}
|
||||
|
||||
/** @var BoardMapper $boardMapper */
|
||||
$boardMapper = $container->get(BoardMapper::class);
|
||||
$boards = $boardMapper->findAllByOwner($user->getUID());
|
||||
foreach ($boards as $board) {
|
||||
$boardMapper->delete($board);
|
||||
}
|
||||
});
|
||||
|
||||
$eventDispatcher->addListener(GroupDeletedEvent::class, static function (Event $event) use ($container): void {
|
||||
if (!($event instanceof GroupDeletedEvent)) {
|
||||
return;
|
||||
}
|
||||
$group = $event->getGroup();
|
||||
/** @var AclMapper $aclMapper */
|
||||
$aclMapper = $container->get(AclMapper::class);
|
||||
$aclMapper->findByParticipant(Acl::PERMISSION_TYPE_GROUP, $group->getGID());
|
||||
$acls = $aclMapper->findByParticipant(Acl::PERMISSION_TYPE_GROUP, $group->getGID());
|
||||
foreach ($acls as $acl) {
|
||||
$aclMapper->delete($acl);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public function registerCommentsEntity(IEventDispatcher $eventDispatcher): void {
|
||||
$eventDispatcher->addListener(CommentsEntityEvent::EVENT_ENTITY, function (CommentsEntityEvent $event) {
|
||||
$event->addEntityCollection(self::COMMENT_ENTITY_TYPE, function ($name) {
|
||||
|
||||
@@ -169,15 +169,4 @@ class BoardController extends ApiController {
|
||||
|
||||
return new DataResponse([], HTTP::STATUS_UNAUTHORIZED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
* @param $boardId
|
||||
* @return Board
|
||||
* @throws \OCP\AppFramework\Db\DoesNotExistException
|
||||
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
|
||||
*/
|
||||
public function export($boardId) {
|
||||
return $this->boardService->export($boardId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022, chandi Langecker (git@chandi.it)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Controller;
|
||||
|
||||
use OCA\Deck\Service\SessionService;
|
||||
use OCA\Deck\Service\PermissionService;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Http\DataResponse;
|
||||
use OCP\AppFramework\OCSController;
|
||||
use OCP\IRequest;
|
||||
use OCA\Deck\Db\Acl;
|
||||
|
||||
class SessionController extends OCSController {
|
||||
private SessionService $sessionService;
|
||||
private PermissionService $permissionService;
|
||||
private BoardMapper $boardMapper;
|
||||
|
||||
public function __construct($appName,
|
||||
IRequest $request,
|
||||
SessionService $sessionService,
|
||||
PermissionService $permissionService,
|
||||
BoardMapper $boardMapper
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
$this->sessionService = $sessionService;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->boardMapper = $boardMapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function create(int $boardId): DataResponse {
|
||||
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
||||
|
||||
$session = $this->sessionService->initSession($boardId);
|
||||
return new DataResponse([
|
||||
'token' => $session->getToken(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* notifies the server that the session is still active
|
||||
* @NoAdminRequired
|
||||
* @param $boardId
|
||||
*/
|
||||
public function sync(int $boardId, string $token): DataResponse {
|
||||
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
||||
try {
|
||||
$this->sessionService->syncSession($boardId, $token);
|
||||
return new DataResponse([]);
|
||||
} catch (DoesNotExistException $e) {
|
||||
return new DataResponse([], 404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* delete a session if existing
|
||||
* @NoAdminRequired
|
||||
* @NoCSRFRequired
|
||||
* @param $boardId
|
||||
*/
|
||||
public function close(int $boardId, string $token) {
|
||||
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
|
||||
$this->sessionService->closeSession($boardId, $token);
|
||||
return new DataResponse();
|
||||
}
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022, chandi Langecker (git@chandi.it)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
namespace OCA\Deck\Cron;
|
||||
|
||||
use OCA\Deck\Service\SessionService;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\TimedJob;
|
||||
use OCP\ILogger;
|
||||
|
||||
class SessionsCleanup extends TimedJob {
|
||||
private $sessionService;
|
||||
private $documentService;
|
||||
private $logger;
|
||||
private $imageService;
|
||||
|
||||
|
||||
public function __construct(ITimeFactory $time,
|
||||
SessionService $sessionService,
|
||||
ILogger $logger) {
|
||||
parent::__construct($time);
|
||||
$this->sessionService = $sessionService;
|
||||
$this->logger = $logger;
|
||||
$this->setInterval(SessionService::SESSION_VALID_TIME);
|
||||
}
|
||||
|
||||
protected function run($argument) {
|
||||
$this->logger->debug('Run cleanup job for deck sessions');
|
||||
|
||||
$removedSessions = $this->sessionService->removeInactiveSessions();
|
||||
$this->logger->debug('Removed ' . $removedSessions . ' inactive sessions');
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,6 @@ use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
/** @template-extends DeckMapper<Acl> */
|
||||
class AclMapper extends DeckMapper implements IPermissionMapper {
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, 'deck_board_acl', Acl::class);
|
||||
@@ -111,12 +110,4 @@ class AclMapper extends DeckMapper implements IPermissionMapper {
|
||||
->andWhere($qb->expr()->eq('board_id', $qb->createNamedParameter($boardId, IQueryBuilder::PARAM_INT)));
|
||||
$qb->executeStatement();
|
||||
}
|
||||
|
||||
public function findByType(int $type): array {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('deck_board_acl')
|
||||
->where($qb->expr()->eq('type', $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT)));
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@ use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use PDO;
|
||||
|
||||
/** @template-extends QBMapper<Assignment> */
|
||||
class AssignmentMapper extends QBMapper implements IPermissionMapper {
|
||||
|
||||
/** @var CardMapper */
|
||||
|
||||
@@ -31,7 +31,6 @@ use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IUserManager;
|
||||
|
||||
/** @template-extends DeckMapper<Attachment> */
|
||||
class AttachmentMapper extends DeckMapper implements IPermissionMapper {
|
||||
private $cardMapper;
|
||||
private $userManager;
|
||||
|
||||
@@ -44,7 +44,6 @@ class Board extends RelationalEntity {
|
||||
protected $users = [];
|
||||
protected $shared;
|
||||
protected $stacks = [];
|
||||
protected $activeSessions = [];
|
||||
protected $deletedAt = 0;
|
||||
protected $lastModified = 0;
|
||||
|
||||
@@ -60,7 +59,6 @@ class Board extends RelationalEntity {
|
||||
$this->addRelation('acl');
|
||||
$this->addRelation('shared');
|
||||
$this->addRelation('users');
|
||||
$this->addRelation('activeSessions');
|
||||
$this->addRelation('permissions');
|
||||
$this->addRelation('stacks');
|
||||
$this->addRelation('settings');
|
||||
|
||||
@@ -33,7 +33,6 @@ use OCP\IUserManager;
|
||||
use OCP\IGroupManager;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/** @template-extends QBMapper<Board> */
|
||||
class BoardMapper extends QBMapper implements IPermissionMapper {
|
||||
private $labelMapper;
|
||||
private $aclMapper;
|
||||
|
||||
@@ -38,7 +38,6 @@ use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Notification\IManager;
|
||||
|
||||
/** @template-extends QBMapper<Card> */
|
||||
class CardMapper extends QBMapper implements IPermissionMapper {
|
||||
|
||||
/** @var LabelMapper */
|
||||
|
||||
@@ -23,15 +23,15 @@
|
||||
|
||||
namespace OCA\Deck\Db;
|
||||
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
|
||||
/**
|
||||
* @template T of Entity
|
||||
* @template-extends QBMapper<T>
|
||||
* Class DeckMapper
|
||||
*
|
||||
* @package OCA\Deck\Db
|
||||
*/
|
||||
abstract class DeckMapper extends QBMapper {
|
||||
class DeckMapper extends QBMapper {
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
|
||||
@@ -29,7 +29,6 @@ use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
/** @template-extends DeckMapper<Label> */
|
||||
class LabelMapper extends DeckMapper implements IPermissionMapper {
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, 'deck_labels', Label::class);
|
||||
@@ -52,6 +51,11 @@ class LabelMapper extends DeckMapper implements IPermissionMapper {
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Entity $entity
|
||||
* @return Entity
|
||||
* @throws \OCP\DB\Exception
|
||||
*/
|
||||
public function delete(Entity $entity): Entity {
|
||||
// delete assigned labels
|
||||
$this->deleteLabelAssignments($entity->getId());
|
||||
@@ -101,12 +105,23 @@ class LabelMapper extends DeckMapper implements IPermissionMapper {
|
||||
return $this->findEntities($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Entity $entity
|
||||
* @return Entity
|
||||
* @throws \OCP\DB\Exception
|
||||
*/
|
||||
public function insert(Entity $entity): Entity {
|
||||
$entity->setLastModified(time());
|
||||
return parent::insert($entity);
|
||||
}
|
||||
|
||||
public function update(Entity $entity, bool $updateModified = true): Entity {
|
||||
/**
|
||||
* @param Entity $entity
|
||||
* @param bool $updateModified
|
||||
* @return Entity
|
||||
* @throws \OCP\DB\Exception
|
||||
*/
|
||||
public function update(Entity $entity, $updateModified = true): Entity {
|
||||
if ($updateModified) {
|
||||
$entity->setLastModified(time());
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ class RelationalEntity extends Entity implements \JsonSerializable {
|
||||
* @param string $attribute the name of the attribute
|
||||
* @since 7.0.0
|
||||
*/
|
||||
protected function markFieldUpdated(string $attribute): void {
|
||||
protected function markFieldUpdated($attribute) {
|
||||
if (!in_array($attribute, $this->_relations, true)) {
|
||||
parent::markFieldUpdated($attribute);
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2022, chandi Langecker (git@chandi.it)
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Db;
|
||||
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
|
||||
class Session extends Entity implements \JsonSerializable {
|
||||
public $id;
|
||||
protected $userId;
|
||||
protected $token;
|
||||
protected $lastContact;
|
||||
protected $boardId;
|
||||
|
||||
public function __construct() {
|
||||
$this->addType('id', 'integer');
|
||||
$this->addType('boardId', 'integer');
|
||||
$this->addType('lastContact', 'integer');
|
||||
}
|
||||
|
||||
public function jsonSerialize(): array {
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'userId' => $this->userId,
|
||||
'token' => $this->token,
|
||||
'lastContact' => $this->lastContact,
|
||||
'boardId' => $this->boardId,
|
||||
];
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user