Compare commits

..

1 Commits

Author SHA1 Message Date
Git'Fellow a1654ae274 refactor: use strict operator 2026-01-29 11:32:56 +01:00
3904 changed files with 40997 additions and 49102 deletions
+43
View File
@@ -165,3 +165,46 @@ updates:
# no major updates on stable branches
- dependency-name: "*"
update-types: ["version-update:semver-major"]
# Composer dependencies for linting and testing
- package-ecosystem: composer
target-branch: stable31
directories:
- "/"
- "/build/integration"
- "/vendor-bin/cs-fixer"
- "/vendor-bin/openapi-extractor"
- "/vendor-bin/phpunit"
- "/vendor-bin/psalm"
schedule:
interval: weekly
day: saturday
time: "04:00"
timezone: Europe/Paris
labels:
- "3. to review"
- "feature: dependencies"
ignore:
# only patch updates on stable branches
- dependency-name: "*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
# frontend dependencies
- package-ecosystem: npm
target-branch: stable31
directory: "/"
schedule:
interval: weekly
day: saturday
time: "04:00"
timezone: Europe/Paris
open-pull-requests-limit: 20
labels:
- "3. to review"
- "feature: dependencies"
# Disable automatic rebasing because without a build CI will likely fail anyway
rebase-strategy: "disabled"
ignore:
# no major updates on stable branches
- dependency-name: "*"
update-types: ["version-update:semver-major"]
+2 -2
View File
@@ -52,7 +52,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -82,7 +82,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -31,7 +31,7 @@ jobs:
- 'version.php'
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+3 -3
View File
@@ -32,18 +32,18 @@ jobs:
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
config-file: ./.github/codeql-config.yml
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
with:
category: "/language:${{matrix.language}}"
+1 -1
View File
@@ -103,7 +103,7 @@ jobs:
key: git-repo
- name: Checkout ${{ needs.init.outputs.head_ref }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
# Needed to allow force push later
persist-credentials: true
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
id: comment-branch
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
fetch-depth: 0
+2 -2
View File
@@ -48,7 +48,7 @@ jobs:
exit 1
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
# We need to checkout submodules for 3rdparty
@@ -171,7 +171,7 @@ jobs:
run: ./node_modules/cypress/bin/cypress install
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
uses: cypress-io/github-action@84d178e4bbce871e23f2ffa3085898cde0e4f0ec # v7.1.2
uses: cypress-io/github-action@dca986193e4336cb32820819b07e9ecacacaaaf6 # v7.0.0
with:
# We already installed the dependencies in the init job
install: false
+1 -1
View File
@@ -65,7 +65,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+2 -2
View File
@@ -74,7 +74,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -163,7 +163,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -65,7 +65,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -56,13 +56,13 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Checkout user_saml
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/user_saml
+1 -1
View File
@@ -75,7 +75,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -70,7 +70,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -64,7 +64,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -24,14 +24,14 @@ jobs:
require: write
- name: Checkout github_helper
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/github_helper
path: github_helper
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
path: server
+2 -2
View File
@@ -53,7 +53,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -71,7 +71,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python
uses: LizardByte/actions/actions/setup_python@9bf3ef783775e17fe6b8dde3585d94ec570b93c2 # v2026.212.22356
uses: LizardByte/actions/actions/setup_python@e6bc045033a5614035b66daafc38ff86faecb23a # v2026.116.208
with:
python-version: '2.7'
+1 -1
View File
@@ -52,7 +52,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -76,7 +76,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+3 -3
View File
@@ -97,14 +97,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Checkout Talk app
if: ${{ matrix.test-suite == 'videoverification_features' }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/spreed
@@ -113,7 +113,7 @@ jobs:
- name: Checkout Activity app
if: ${{ matrix.test-suite == 'sharing_features' }}
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/activity
+1 -1
View File
@@ -56,7 +56,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -48,7 +48,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -53,7 +53,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -59,7 +59,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -58,7 +58,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -56,7 +56,7 @@ jobs:
name: NPM build
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
steps:
- name: Checkout
id: checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
+1 -1
View File
@@ -79,7 +79,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -80,7 +80,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -77,7 +77,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -35,7 +35,7 @@ jobs:
exit 1
- name: Checkout server before PR
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -92,7 +92,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -72,7 +72,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -121,7 +121,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -92,7 +92,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -75,7 +75,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -72,7 +72,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -99,7 +99,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -92,7 +92,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -75,7 +75,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
-69
View File
@@ -1,69 +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
#
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: Apply rector changes
on:
workflow_dispatch:
schedule:
# At 14:30 on Sundays
- cron: '30 14 * * 0'
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-versions: [ '8.2' ]
name: rector-apply
steps:
- name: Checkout
id: checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
ref: ${{ github.event.repository.default_branch }}
- name: Set up php${{ matrix.php-versions }}
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
coverage: none
ini-file: development
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: |
composer remove nextcloud/ocp --dev --no-scripts
composer i
- name: Rector
run: composer run rector
- name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: 'refactor: Apply rector changes'
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
signoff: true
branch: automated/noid/rector-changes
title: 'Apply rector changes'
labels: |
technical debt
3. to review
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest-low
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+7 -7
View File
@@ -28,7 +28,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
@@ -63,7 +63,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
@@ -88,7 +88,7 @@ jobs:
- name: Upload Security Analysis results to GitHub
if: always()
uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v3
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3
with:
sarif_file: results.sarif
@@ -99,7 +99,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
@@ -131,7 +131,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
@@ -159,13 +159,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
with:
persist-credentials: false
submodules: true
- name: Set up php
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 #v2.35.4
with:
php-version: '8.2'
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
+1 -1
View File
@@ -22,7 +22,7 @@ jobs:
name: update-ca-certificate-bundle-${{ matrix.branches }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
@@ -22,7 +22,7 @@ jobs:
name: update-code-signing-crl-${{ matrix.branches }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest-low
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
-7
View File
@@ -1,7 +0,0 @@
OC.L10N.register(
"admin_audit",
{
"Auditing / Logging" : "Аудит / Лог",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud-д файл нэвтрэлт болон мэдрэмтгий үйлдлүүдийг бүртгэх зэрэг лог хөтлөх чадварыг олгодог."
},
"nplurals=2; plural=(n != 1);");
-5
View File
@@ -1,5 +0,0 @@
{ "translations": {
"Auditing / Logging" : "Аудит / Лог",
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud-д файл нэвтрэлт болон мэдрэмтгий үйлдлүүдийг бүртгэх зэрэг лог хөтлөх чадварыг олгодог."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-2
View File
@@ -1,7 +1,5 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
-8
View File
@@ -1,8 +0,0 @@
OC.L10N.register(
"cloud_federation_api",
{
"Cloud Federation API" : "Cloud Federation API",
"Enable clouds to communicate with each other and exchange data" : "Үүлнүүдийг хоорондоо холбогдож өгөгдөл солилцох боломжтой болгох",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API нь янз бүрийн Nextcloud инстанцуудад хоорондоо харилцах болон өгөгдөл солилцох боломжийг олгодог."
},
"nplurals=2; plural=(n != 1);");
-6
View File
@@ -1,6 +0,0 @@
{ "translations": {
"Cloud Federation API" : "Cloud Federation API",
"Enable clouds to communicate with each other and exchange data" : "Үүлнүүдийг хоорондоо холбогдож өгөгдөл солилцох боломжтой болгох",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API нь янз бүрийн Nextcloud инстанцуудад хоорондоо харилцах болон өгөгдөл солилцох боломжийг олгодог."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -2
View File
@@ -1,8 +1,8 @@
OC.L10N.register(
"cloud_federation_api",
{
"Cloud Federation API" : "Jamg'armaning bulutli APIsi",
"Cloud Federation API" : "Asl faylni o'chirishda kutilmagan xatolik yuz berdi.",
"Enable clouds to communicate with each other and exchange data" : "Bulutlar bir-biri bilan aloqa qilish va ma'lumot almashish imkonini beradi",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Jamoada API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
},
"nplurals=1; plural=0;");
+2 -2
View File
@@ -1,6 +1,6 @@
{ "translations": {
"Cloud Federation API" : "Jamg'armaning bulutli APIsi",
"Cloud Federation API" : "Asl faylni o'chirishda kutilmagan xatolik yuz berdi.",
"Enable clouds to communicate with each other and exchange data" : "Bulutlar bir-biri bilan aloqa qilish va ma'lumot almashish imkonini beradi",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Jamoada API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
},"pluralForm" :"nplurals=1; plural=0;"
}
-2
View File
@@ -1,7 +1,5 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Comments" : "Сэтгэгдэл",
"You commented" : "Та сэтгэгдэл бичсэн байна",
"{author} commented" : "{author} сэтгэгдэл бичсэн",
"You commented on %1$s" : "Та %1$s нийтлэл дээр сэтгэгдэл бичсэн байна",
"You commented on {file}" : "Та {file} сэтгэгдэл бичсэн байна",
"%1$s commented on %2$s" : "%1$s нь %2$s-д сэтгэгдэл бичсэн",
"{author} commented on {file}" : "{author} нь {file}-д сэтгэгдэл бичсэн",
"<strong>Comments</strong> for files" : "Файлууд дахь<strong>Сэтгэгдэлүүд</strong>",
"Files" : "Файлууд",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Та \"{file}\" дээр, устгагдсан акаунтын сэтгэгдэлд дурдагдсан байна",
"{user} mentioned you in a comment on \"{file}\"" : "{user} таныг \"{file}\" дээрх сэтгэгдэлд дурдсан",
"Files app plugin to add comments to files" : "Файлд сэтгэгдэл нэмэх Файлын апп плагин",
"Edit comment" : "Сэтгэгдэл засах",
"Delete comment" : "Сэтгэгдэл устгах",
"Cancel edit" : "Засварлахыг болих",
"New comment" : "Шинэ сэтгэгдэл",
"Write a comment …" : "Сэтгэгдэл бичих …",
"Post comment" : "Сэтгэгдэл илгээх",
"@ for mentions, : for emoji, / for smart picker" : "@ дурдахад, : эможид, / ухаалаг сонгогчид",
"Could not reload comments" : "Сэтгэгдлүүдийг дахин ачаалж чадсангүй",
"Failed to mark comments as read" : "Сэтгэгдлүүдийг уншсан гэж тэмдэглэж чадсангүй",
"Unable to load the comments list" : "Сэтгэгдлүүдийн жагсаалтыг ачаалж чадсангүй",
"No comments yet, start the conversation!" : "Сэтгэгдэл байхгүй байна",
"No more messages" : "Илүү мессеж байхгүй",
"Retry" : "Дахин оролдох",
"_1 new comment_::_{unread} new comments_" : ["1 шинэ сэтгэгдэл","{unread} шинэ сэтгэгдэл"],
"Comment" : "Сэтгэгдэл",
"An error occurred while trying to edit the comment" : "Сэтгэгдэл засварлах үед алдаа гарлаа",
"Comment deleted" : "Сэтгэгдэл устгагдсан",
"An error occurred while trying to delete the comment" : "Сэтгэгдэл устгах үед алдаа гарлаа",
"An error occurred while trying to create the comment" : "Сэтгэгдэл үүсгэх үед алдаа гарлаа",
"Write a comment …" : "Сэтгэгдэл бичих …"
},
"nplurals=2; plural=(n != 1);");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Comments" : "Сэтгэгдэл",
"You commented" : "Та сэтгэгдэл бичсэн байна",
"{author} commented" : "{author} сэтгэгдэл бичсэн",
"You commented on %1$s" : "Та %1$s нийтлэл дээр сэтгэгдэл бичсэн байна",
"You commented on {file}" : "Та {file} сэтгэгдэл бичсэн байна",
"%1$s commented on %2$s" : "%1$s нь %2$s-д сэтгэгдэл бичсэн",
"{author} commented on {file}" : "{author} нь {file}-д сэтгэгдэл бичсэн",
"<strong>Comments</strong> for files" : "Файлууд дахь<strong>Сэтгэгдэлүүд</strong>",
"Files" : "Файлууд",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Та \"{file}\" дээр, устгагдсан акаунтын сэтгэгдэлд дурдагдсан байна",
"{user} mentioned you in a comment on \"{file}\"" : "{user} таныг \"{file}\" дээрх сэтгэгдэлд дурдсан",
"Files app plugin to add comments to files" : "Файлд сэтгэгдэл нэмэх Файлын апп плагин",
"Edit comment" : "Сэтгэгдэл засах",
"Delete comment" : "Сэтгэгдэл устгах",
"Cancel edit" : "Засварлахыг болих",
"New comment" : "Шинэ сэтгэгдэл",
"Write a comment …" : "Сэтгэгдэл бичих …",
"Post comment" : "Сэтгэгдэл илгээх",
"@ for mentions, : for emoji, / for smart picker" : "@ дурдахад, : эможид, / ухаалаг сонгогчид",
"Could not reload comments" : "Сэтгэгдлүүдийг дахин ачаалж чадсангүй",
"Failed to mark comments as read" : "Сэтгэгдлүүдийг уншсан гэж тэмдэглэж чадсангүй",
"Unable to load the comments list" : "Сэтгэгдлүүдийн жагсаалтыг ачаалж чадсангүй",
"No comments yet, start the conversation!" : "Сэтгэгдэл байхгүй байна",
"No more messages" : "Илүү мессеж байхгүй",
"Retry" : "Дахин оролдох",
"_1 new comment_::_{unread} new comments_" : ["1 шинэ сэтгэгдэл","{unread} шинэ сэтгэгдэл"],
"Comment" : "Сэтгэгдэл",
"An error occurred while trying to edit the comment" : "Сэтгэгдэл засварлах үед алдаа гарлаа",
"Comment deleted" : "Сэтгэгдэл устгагдсан",
"An error occurred while trying to delete the comment" : "Сэтгэгдэл устгах үед алдаа гарлаа",
"An error occurred while trying to create the comment" : "Сэтгэгдэл үүсгэх үед алдаа гарлаа",
"Write a comment …" : "Сэтгэгдэл бичих …"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
-1
View File
@@ -17,7 +17,6 @@ OC.L10N.register(
"Delete comment" : "Zmazať komentár",
"Cancel edit" : "Zrušiť upravovanie",
"New comment" : "Nový komentár",
"Write a comment …" : "Napísať komentár ...",
"Post comment" : "Odoslať komentár",
"@ for mentions, : for emoji, / for smart picker" : "@ pre spomienky, : pre emotikony, / pre inteligentný výber",
"Could not reload comments" : "Nepodarilo sa obnoviť komentáre",
-1
View File
@@ -15,7 +15,6 @@
"Delete comment" : "Zmazať komentár",
"Cancel edit" : "Zrušiť upravovanie",
"New comment" : "Nový komentár",
"Write a comment …" : "Napísať komentár ...",
"Post comment" : "Odoslať komentár",
"@ for mentions, : for emoji, / for smart picker" : "@ pre spomienky, : pre emotikony, / pre inteligentný výber",
"Could not reload comments" : "Nepodarilo sa obnoviť komentáre",
-37
View File
@@ -1,37 +0,0 @@
OC.L10N.register(
"comments",
{
"Comments" : "Izohlar",
"You commented" : "Siz fikr bildirgansiz",
"{author} commented" : "{author} izoh qoldirdi",
"You commented on %1$s" : "Siz %1$s haqida fikr bildirdingiz",
"You commented on {file}" : "Siz {file} ga izoh qoldirdingiz",
"%1$s commented on %2$s" : "%1$s %2$s haqida fikr bildirdi",
"{author} commented on {file}" : "{author} {file} ga izoh qoldirdi",
"<strong>Comments</strong> for files" : "Fayllar uchun <strong>Izohlar</strong>",
"Files" : "Fayllar",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Siz \"{file}\"da, keyinchalik o'chirilgan hisob tomonidan izohda tilga olingansiz",
"{user} mentioned you in a comment on \"{file}\"" : "{user} sizni \"{file}\" dagi izohda tilga oldi",
"Files app plugin to add comments to files" : "Fayllarga izohlar qo'shish ilova plagini",
"Edit comment" : "Izohni tahrirlash",
"Delete comment" : "Izohni o'chirish",
"Cancel edit" : "Tahrirni bekor qilish",
"New comment" : "Yangi izoh",
"Write a comment …" : "Fikr yozing…",
"Post comment" : "Fikr qoldirish",
"@ for mentions, : for emoji, / for smart picker" : "@ eslatmalar uchun, : emojilar uchun, / aqlli tanlovclar uchun",
"Could not reload comments" : "Izohlarni qayta yuklab bo'lmadi",
"Failed to mark comments as read" : "Izohlarni o'qilgan deb belgilashda xatolik yuz berdi",
"Unable to load the comments list" : "Izohlar ro'yxatini yuklab bo'lmadi",
"No comments yet, start the conversation!" : "Hali izohlar yo'q, suhbatni boshlang!",
"No more messages" : "Boshqa xabarlar yo'q",
"Retry" : "Qayta urinish",
"_1 new comment_::_{unread} new comments_" : ["{unread} ta yangi izoh"],
"Comment" : "Izoh",
"An error occurred while trying to edit the comment" : "Izohni tahrirlashda xatolik yuz berdi",
"Comment deleted" : "Izoh o'chirildi",
"An error occurred while trying to delete the comment" : "Izohni o'chirishda xatolik yuz berdi",
"An error occurred while trying to create the comment" : "Izoh yaratishda xatolik yuz berdi",
"Write a comment …" : "Izoh yozing..."
},
"nplurals=1; plural=0;");
-35
View File
@@ -1,35 +0,0 @@
{ "translations": {
"Comments" : "Izohlar",
"You commented" : "Siz fikr bildirgansiz",
"{author} commented" : "{author} izoh qoldirdi",
"You commented on %1$s" : "Siz %1$s haqida fikr bildirdingiz",
"You commented on {file}" : "Siz {file} ga izoh qoldirdingiz",
"%1$s commented on %2$s" : "%1$s %2$s haqida fikr bildirdi",
"{author} commented on {file}" : "{author} {file} ga izoh qoldirdi",
"<strong>Comments</strong> for files" : "Fayllar uchun <strong>Izohlar</strong>",
"Files" : "Fayllar",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Siz \"{file}\"da, keyinchalik o'chirilgan hisob tomonidan izohda tilga olingansiz",
"{user} mentioned you in a comment on \"{file}\"" : "{user} sizni \"{file}\" dagi izohda tilga oldi",
"Files app plugin to add comments to files" : "Fayllarga izohlar qo'shish ilova plagini",
"Edit comment" : "Izohni tahrirlash",
"Delete comment" : "Izohni o'chirish",
"Cancel edit" : "Tahrirni bekor qilish",
"New comment" : "Yangi izoh",
"Write a comment …" : "Fikr yozing…",
"Post comment" : "Fikr qoldirish",
"@ for mentions, : for emoji, / for smart picker" : "@ eslatmalar uchun, : emojilar uchun, / aqlli tanlovclar uchun",
"Could not reload comments" : "Izohlarni qayta yuklab bo'lmadi",
"Failed to mark comments as read" : "Izohlarni o'qilgan deb belgilashda xatolik yuz berdi",
"Unable to load the comments list" : "Izohlar ro'yxatini yuklab bo'lmadi",
"No comments yet, start the conversation!" : "Hali izohlar yo'q, suhbatni boshlang!",
"No more messages" : "Boshqa xabarlar yo'q",
"Retry" : "Qayta urinish",
"_1 new comment_::_{unread} new comments_" : ["{unread} ta yangi izoh"],
"Comment" : "Izoh",
"An error occurred while trying to edit the comment" : "Izohni tahrirlashda xatolik yuz berdi",
"Comment deleted" : "Izoh o'chirildi",
"An error occurred while trying to delete the comment" : "Izohni o'chirishda xatolik yuz berdi",
"An error occurred while trying to create the comment" : "Izoh yaratishda xatolik yuz berdi",
"Write a comment …" : "Izoh yozing..."
},"pluralForm" :"nplurals=1; plural=0;"
}
-2
View File
@@ -1,7 +1,5 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
+5 -2
View File
@@ -12,6 +12,7 @@ use OCP\App\IAppManager;
use OCP\Comments\CommentsEvent;
use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
use OCP\IUser;
use OCP\IUserSession;
use OCP\Share\IShareHelper;
@@ -46,8 +47,10 @@ class Listener {
foreach ($mounts as $mount) {
$owner = $mount->getUser()->getUID();
$ownerFolder = $this->rootFolder->getUserFolder($owner);
$node = $ownerFolder->getFirstNodeById((int)$event->getComment()->getObjectId());
if ($node !== null) {
$nodes = $ownerFolder->getById((int)$event->getComment()->getObjectId());
if (!empty($nodes)) {
/** @var Node $node */
$node = array_shift($nodes);
$al = $this->shareHelper->getPathsForAccessList($node);
$users += $al['users'];
}
-2
View File
@@ -1,7 +1,5 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -1,7 +1,5 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -70,11 +70,11 @@ class NotificationsController extends Controller {
return new NotFoundResponse();
}
$userFolder = $this->rootFolder->getUserFolder($currentUser->getUID());
$file = $userFolder->getFirstNodeById((int)$comment->getObjectId());
$files = $userFolder->getById((int)$comment->getObjectId());
$this->markProcessed($comment, $currentUser);
if ($file === null) {
if (empty($files)) {
return new NotFoundResponse();
}
@@ -32,8 +32,8 @@ class CommentsEntityEventListener implements IEventListener {
}
$event->addEntityCollection('files', function ($name): bool {
$node = $this->rootFolder->getUserFolder($this->userId)->getFirstNodeById((int)$name);
return $node !== null;
$nodes = $this->rootFolder->getUserFolder($this->userId)->getById((int)$name);
return !empty($nodes);
});
}
}
+3 -2
View File
@@ -84,10 +84,11 @@ class Notifier implements INotifier {
throw new UnknownNotificationException('Unsupported comment object');
}
$userFolder = $this->rootFolder->getUserFolder($notification->getUser());
$node = $userFolder->getFirstNodeById((int)$parameters[1]);
if ($node === null) {
$nodes = $userFolder->getById((int)$parameters[1]);
if (empty($nodes)) {
throw new AlreadyProcessedException();
}
$node = $nodes[0];
$path = rtrim($node->getPath(), '/');
if (str_starts_with($path, '/' . $notification->getUser() . '/files/')) {
@@ -116,11 +116,11 @@ class CommentsSearchProvider implements IProvider {
* @throws NotFoundException
*/
protected function getFileForComment(Folder $userFolder, IComment $comment): Node {
$node = $userFolder->getFirstNodeById((int)$comment->getObjectId());
if ($node === null) {
$nodes = $userFolder->getById((int)$comment->getObjectId());
if (empty($nodes)) {
throw new NotFoundException('File not found');
}
return $node;
return array_shift($nodes);
}
}
@@ -1,11 +1,11 @@
/*!
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { IFolder, IView } from '@nextcloud/files'
import type { Folder, View } from '@nextcloud/files'
import { File, Permission } from '@nextcloud/files'
import { File, FileAction, Permission } from '@nextcloud/files'
import { describe, expect, test, vi } from 'vitest'
import logger from '../logger.js'
import { action } from './inlineUnreadCommentsAction.ts'
@@ -13,7 +13,7 @@ import { action } from './inlineUnreadCommentsAction.ts'
const view = {
id: 'files',
name: 'Files',
} as IView
} as View
describe('Inline unread comments action display name tests', () => {
test('Default values', () => {
@@ -29,35 +29,36 @@ describe('Inline unread comments action display name tests', () => {
root: '/files/admin',
})
expect(action).toBeInstanceOf(FileAction)
expect(action.id).toBe('comments-unread')
expect(action.displayName({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe('')
expect(action.title!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe('1 new comment')
expect(action.iconSvgInline({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toMatch(/<svg.+<\/svg>/)
expect(action.enabled!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(true)
expect(action.inline!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(true)
expect(action.default).toBeUndefined()
@@ -80,13 +81,13 @@ describe('Inline unread comments action display name tests', () => {
expect(action.displayName({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe('')
expect(action.title!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe('2 new comments')
})
@@ -107,7 +108,7 @@ describe('Inline unread comments action enabled tests', () => {
expect(action.enabled!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(false)
})
@@ -128,7 +129,7 @@ describe('Inline unread comments action enabled tests', () => {
expect(action.enabled!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(false)
})
@@ -149,7 +150,7 @@ describe('Inline unread comments action enabled tests', () => {
expect(action.enabled!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(true)
})
@@ -170,7 +171,7 @@ describe('Inline unread comments action enabled tests', () => {
expect(action.enabled!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})).toBe(true)
})
@@ -203,7 +204,7 @@ describe('Inline unread comments action execute tests', () => {
const result = await action.exec!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})
@@ -240,7 +241,7 @@ describe('Inline unread comments action execute tests', () => {
const result = await action.exec!({
nodes: [file],
view,
folder: {} as IFolder,
folder: {} as Folder,
contents: [],
})
@@ -3,15 +3,12 @@
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { IFileAction } from '@nextcloud/files'
import CommentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw'
import { getSidebar } from '@nextcloud/files'
import { FileAction, getSidebar } from '@nextcloud/files'
import { n, t } from '@nextcloud/l10n'
import logger from '../logger.js'
import { isUsingActivityIntegration } from '../utils/activity.js'
export const action: IFileAction = {
export const action = new FileAction({
id: 'comments-unread',
title({ nodes }) {
@@ -39,13 +36,7 @@ export const action: IFileAction = {
try {
const sidebar = getSidebar()
const sidebarTabId = isUsingActivityIntegration() ? 'activity' : 'comments'
if (sidebar.isOpen && sidebar.node?.source === nodes[0].source) {
logger.debug('Sidebar already open for this node, just activating comments tab')
sidebar.setActiveTab(sidebarTabId)
return null
}
sidebar.open(nodes[0], sidebarTabId)
sidebar.open(nodes[0], 'comments')
return null
} catch (error) {
logger.error('Error while opening sidebar', { error })
@@ -56,4 +47,4 @@ export const action: IFileAction = {
inline: () => true,
order: -140,
}
})
+3 -3
View File
@@ -1,4 +1,4 @@
/*!
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -6,18 +6,18 @@
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
import { getCSPNonce } from '@nextcloud/auth'
import { registerSidebarTab } from '@nextcloud/files'
import { loadState } from '@nextcloud/initial-state'
import { t } from '@nextcloud/l10n'
import wrap from '@vue/web-component-wrapper'
import { createPinia, PiniaVuePlugin } from 'pinia'
import Vue from 'vue'
import { registerCommentsPlugins } from './comments-activity-tab.ts'
import { isUsingActivityIntegration } from './utils/activity.ts'
__webpack_nonce__ = getCSPNonce()
const tagName = 'comments_files-sidebar-tab'
if (isUsingActivityIntegration()) {
if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {
// Do not mount own tab but mount into activity
window.addEventListener('DOMContentLoaded', function() {
registerCommentsPlugins()
-13
View File
@@ -1,13 +0,0 @@
/*!
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { loadState } from '@nextcloud/initial-state'
/**
* Check if the comments app is using the Activity app integration for the sidebar.
*/
export function isUsingActivityIntegration() {
return loadState('comments', 'activityEnabled', false) && window.OCA?.Activity?.registerSidebarAction !== undefined
}
@@ -92,11 +92,12 @@ class ListenerTest extends TestCase {
->willReturn($userMountCache);
$node = $this->createMock(Node::class);
$nodes = [ $node ];
$ownerFolder = $this->createMock(Folder::class);
$ownerFolder->expects($this->any())
->method('getFirstNodeById')
->willReturn($node);
->method('getById')
->willReturn($nodes);
$this->rootFolder->expects($this->any())
->method('getUserFolder')
@@ -107,8 +107,8 @@ class NotificationsTest extends TestCase {
->willReturn($folder);
$folder->expects($this->once())
->method('getFirstNodeById')
->willReturn($file);
->method('getById')
->willReturn([$file]);
$this->session->expects($this->once())
->method('getUser')
@@ -183,8 +183,8 @@ class NotificationsTest extends TestCase {
->willReturn($folder);
$folder->expects($this->once())
->method('getFirstNodeById')
->willReturn(null);
->method('getById')
->willReturn([]);
$user = $this->createMock(IUser::class);
@@ -86,9 +86,9 @@ class NotifierTest extends TestCase {
->with('you')
->willReturn($userFolder);
$userFolder->expects($this->once())
->method('getFirstNodeById')
->method('getById')
->with('678')
->willReturn($node);
->willReturn([$node]);
$this->notification->expects($this->exactly(2))
->method('getUser')
@@ -202,9 +202,9 @@ class NotifierTest extends TestCase {
->with('you')
->willReturn($userFolder);
$userFolder->expects($this->once())
->method('getFirstNodeById')
->method('getById')
->with('678')
->willReturn($node);
->willReturn([$node]);
$this->notification->expects($this->exactly(2))
->method('getUser')
@@ -301,7 +301,7 @@ class NotifierTest extends TestCase {
$this->folder
->expects($this->never())
->method('getFirstNodeById');
->method('getById');
$this->notification
->expects($this->once())
@@ -338,7 +338,7 @@ class NotifierTest extends TestCase {
$this->folder
->expects($this->never())
->method('getFirstNodeById');
->method('getById');
$this->notification
->expects($this->once())
@@ -378,7 +378,7 @@ class NotifierTest extends TestCase {
$this->folder
->expects($this->never())
->method('getFirstNodeById');
->method('getById');
$this->notification
->expects($this->once())
@@ -435,7 +435,7 @@ class NotifierTest extends TestCase {
$this->folder
->expects($this->never())
->method('getFirstNodeById');
->method('getById');
$this->notification
->expects($this->once())
@@ -497,9 +497,9 @@ class NotifierTest extends TestCase {
->with('you')
->willReturn($userFolder);
$userFolder->expects($this->once())
->method('getFirstNodeById')
->method('getById')
->with('678')
->willReturn(null);
->willReturn([]);
$this->notification->expects($this->once())
->method('getUser')
+1 -3
View File
@@ -2,8 +2,6 @@ OC.L10N.register(
"contactsinteraction",
{
"Recently contacted" : "Nedavno kontaktiran",
"Contacts Interaction" : "Interakcija kontakata",
"Manages interaction between accounts and contacts" : "Upravlja interakcijom između računa i kontakata",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Prikuplja podatke o interakcijama između računa i kontakata te pruža adresar za te podatke"
"Contacts Interaction" : "Interakcija kontakata"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
+1 -3
View File
@@ -1,7 +1,5 @@
{ "translations": {
"Recently contacted" : "Nedavno kontaktiran",
"Contacts Interaction" : "Interakcija kontakata",
"Manages interaction between accounts and contacts" : "Upravlja interakcijom između računa i kontakata",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Prikuplja podatke o interakcijama između računa i kontakata te pruža adresar za te podatke"
"Contacts Interaction" : "Interakcija kontakata"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
}
-9
View File
@@ -1,9 +0,0 @@
OC.L10N.register(
"contactsinteraction",
{
"Recently contacted" : "Саяхан холбоо барьсан",
"Contacts Interaction" : "Харилцагчийн харилцан үйлдэл",
"Manages interaction between accounts and contacts" : "Бүртгэл ба харилцагчдын хоорондын харилцааг удирддаг",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Бүртгэл болон харилцагчдын харилцан үйлчлэлийн өгөгдлийг цуглуулж, тэдгээр өгөгдлийн хаягийн дэвтрийг хангана"
},
"nplurals=2; plural=(n != 1);");
-7
View File
@@ -1,7 +0,0 @@
{ "translations": {
"Recently contacted" : "Саяхан холбоо барьсан",
"Contacts Interaction" : "Харилцагчийн харилцан үйлдэл",
"Manages interaction between accounts and contacts" : "Бүртгэл ба харилцагчдын хоорондын харилцааг удирддаг",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Бүртгэл болон харилцагчдын харилцан үйлчлэлийн өгөгдлийг цуглуулж, тэдгээр өгөгдлийн хаягийн дэвтрийг хангана"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -22,6 +22,7 @@ OC.L10N.register(
"Weather service" : "خدمة الطقس",
"Weather data from Met.no" : "بيانات الطقس من Met.no",
"geocoding with Nominatim" : "الترميز الجغرافي مع Nominatim",
"elevation data from OpenTopoData" : "بيانات التقييم من OpenTopoData"
"elevation data from OpenTopoData" : "بيانات التقييم من OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "للحفاظ على خصوصيتك، يتم استدعاء بيانات حالة الطقس عبر خادم NextCloud الخاص بك نيابه عنك، وبالتالي فإن خدمة حالة الطقس لا تشارك معلوماتك الشخصية."
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
+2 -1
View File
@@ -20,6 +20,7 @@
"Weather service" : "خدمة الطقس",
"Weather data from Met.no" : "بيانات الطقس من Met.no",
"geocoding with Nominatim" : "الترميز الجغرافي مع Nominatim",
"elevation data from OpenTopoData" : "بيانات التقييم من OpenTopoData"
"elevation data from OpenTopoData" : "بيانات التقييم من OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "للحفاظ على خصوصيتك، يتم استدعاء بيانات حالة الطقس عبر خادم NextCloud الخاص بك نيابه عنك، وبالتالي فإن خدمة حالة الطقس لا تشارك معلوماتك الشخصية."
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
+2 -1
View File
@@ -20,6 +20,7 @@ OC.L10N.register(
"Weather service" : "Serviciu del clima",
"Weather data from Met.no" : "datos del clima de Met.no",
"geocoding with Nominatim" : "xeocodificación con Nominatim",
"elevation data from OpenTopoData" : "datos d'elevaciones d'OpenTopoData"
"elevation data from OpenTopoData" : "datos d'elevaciones d'OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Pa la to privacidá, los datos del clima solicítense dende esta instancia de Nextcloud y, polo tanto, el serviciu del clima no recibe nenguna información personal."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -18,6 +18,7 @@
"Weather service" : "Serviciu del clima",
"Weather data from Met.no" : "datos del clima de Met.no",
"geocoding with Nominatim" : "xeocodificación con Nominatim",
"elevation data from OpenTopoData" : "datos d'elevaciones d'OpenTopoData"
"elevation data from OpenTopoData" : "datos d'elevaciones d'OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Pa la to privacidá, los datos del clima solicítense dende esta instancia de Nextcloud y, polo tanto, el serviciu del clima no recibe nenguna información personal."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -19,6 +19,7 @@ OC.L10N.register(
"Weather service" : "Метеорологична услуга",
"Weather data from Met.no" : "Данни за времето от Met.no",
"geocoding with Nominatim" : "геокодиране с Nominatim",
"elevation data from OpenTopoData" : " кота данни от OpenTopoData"
"elevation data from OpenTopoData" : " кота данни от OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "За вашата поверителност данните за времето се изискват от Nextcloud сървъра ви от ваше име, така че метеорологичната служба не получава лична информация."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -17,6 +17,7 @@
"Weather service" : "Метеорологична услуга",
"Weather data from Met.no" : "Данни за времето от Met.no",
"geocoding with Nominatim" : "геокодиране с Nominatim",
"elevation data from OpenTopoData" : " кота данни от OpenTopoData"
"elevation data from OpenTopoData" : " кота данни от OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "За вашата поверителност данните за времето се изискват от Nextcloud сървъра ви от ваше име, така че метеорологичната служба не получава лична информация."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -22,6 +22,7 @@ OC.L10N.register(
"Weather service" : "Servei meteorològic",
"Weather data from Met.no" : "Dades meteorològiques de Met.no",
"geocoding with Nominatim" : "codis geogràfics amb Nominatim",
"elevation data from OpenTopoData" : "dades d'altitud d'OpenTopoData"
"elevation data from OpenTopoData" : "dades d'altitud d'OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Per a la vostra privadesa, les dades meteorològiques les sol·licita el servidor del Nextcloud en nom vostre perquè el servei meteorològic no rebi cap informació personal."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -20,6 +20,7 @@
"Weather service" : "Servei meteorològic",
"Weather data from Met.no" : "Dades meteorològiques de Met.no",
"geocoding with Nominatim" : "codis geogràfics amb Nominatim",
"elevation data from OpenTopoData" : "dades d'altitud d'OpenTopoData"
"elevation data from OpenTopoData" : "dades d'altitud d'OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Per a la vostra privadesa, les dades meteorològiques les sol·licita el servidor del Nextcloud en nom vostre perquè el servei meteorològic no rebi cap informació personal."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -23,6 +23,7 @@ OC.L10N.register(
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Vaše soukromí je chráněno tím, že komunikaci se službou předpovědi počasí zprostředkovává vámi využívaný {productName} server. Díky tomu služba, která tyto údaje poskytuje, neobdrží z vašeho počítače žádné osobní údaje.",
"Weather data from Met.no" : "Údaje o počasí z Met.no",
"geocoding with Nominatim" : "z popisu polohy na souřadnice převáděno službou Nominatim",
"elevation data from OpenTopoData" : "data o nadmořských výškách z OpenTopoData"
"elevation data from OpenTopoData" : "data o nadmořských výškách z OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Vaše soukromí je chráněno tím, že komunikaci se službou předpovědi počasí zprostředkovává vámi využívaný Nextcloud server. Díky tomu služba, která tyto údaje poskytuje, neobdrží z vašeho počítače žádné osobní údaje."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+2 -1
View File
@@ -21,6 +21,7 @@
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Vaše soukromí je chráněno tím, že komunikaci se službou předpovědi počasí zprostředkovává vámi využívaný {productName} server. Díky tomu služba, která tyto údaje poskytuje, neobdrží z vašeho počítače žádné osobní údaje.",
"Weather data from Met.no" : "Údaje o počasí z Met.no",
"geocoding with Nominatim" : "z popisu polohy na souřadnice převáděno službou Nominatim",
"elevation data from OpenTopoData" : "data o nadmořských výškách z OpenTopoData"
"elevation data from OpenTopoData" : "data o nadmořských výškách z OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Vaše soukromí je chráněno tím, že komunikaci se službou předpovědi počasí zprostředkovává vámi využívaný Nextcloud server. Díky tomu služba, která tyto údaje poskytuje, neobdrží z vašeho počítače žádné osobní údaje."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+2 -1
View File
@@ -23,6 +23,7 @@ OC.L10N.register(
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv anmoder din {productName} server om vejrdata på dine vegne, så vejrtjenesten ikke modtager personlige oplysninger.",
"Weather data from Met.no" : "Vejr-data leveres af Met.no",
"geocoding with Nominatim" : "Geocoding med Nominatim",
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData"
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv, er det din Nextcloud-server der henter vejr-data og udbyderen modtager således ingen oplysninger om dig."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -21,6 +21,7 @@
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv anmoder din {productName} server om vejrdata på dine vegne, så vejrtjenesten ikke modtager personlige oplysninger.",
"Weather data from Met.no" : "Vejr-data leveres af Met.no",
"geocoding with Nominatim" : "Geocoding med Nominatim",
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData"
"elevation data from OpenTopoData" : "Højde-data fra OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Af hensyn til dit privatliv, er det din Nextcloud-server der henter vejr-data og udbyderen modtager således ingen oplysninger om dig."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -23,6 +23,7 @@ OC.L10N.register(
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Zu deinem Datenschutz werden die Wetterdaten von deinem {productName}-Server für dich angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält.",
"Weather data from Met.no" : "Wetterdaten von Met.no",
"geocoding with Nominatim" : "Geokodierung mit Nominatim",
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData"
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Zu deinem Datenschutz werden die Wetterdaten von deinem Nextcloud-Server für dich angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -21,6 +21,7 @@
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Zu deinem Datenschutz werden die Wetterdaten von deinem {productName}-Server für dich angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält.",
"Weather data from Met.no" : "Wetterdaten von Met.no",
"geocoding with Nominatim" : "Geokodierung mit Nominatim",
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData"
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Zu deinem Datenschutz werden die Wetterdaten von deinem Nextcloud-Server für dich angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+2 -1
View File
@@ -23,6 +23,7 @@ OC.L10N.register(
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Zu Ihrem Datenschutz werden die Wetterdaten von Ihrem {productName}-Server für Sie angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält.",
"Weather data from Met.no" : "Wetterdaten von Met.no",
"geocoding with Nominatim" : "Geokodierung mit Nominatim",
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData"
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Zu Ihrem Datenschutz werden die Wetterdaten von Ihrem Nextcloud-Server für Sie angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält."
},
"nplurals=2; plural=(n != 1);");
+2 -1
View File
@@ -21,6 +21,7 @@
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Zu Ihrem Datenschutz werden die Wetterdaten von Ihrem {productName}-Server für Sie angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält.",
"Weather data from Met.no" : "Wetterdaten von Met.no",
"geocoding with Nominatim" : "Geokodierung mit Nominatim",
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData"
"elevation data from OpenTopoData" : "Höhendaten von OpenTopoData",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Zu Ihrem Datenschutz werden die Wetterdaten von Ihrem Nextcloud-Server für Sie angefordert, so dass der Wetterdienst keine persönlichen Informationen erhält."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

Some files were not shown because too many files have changed in this diff Show More