Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5f0a45ee1c | |||
| fb87dc331b |
@@ -11,7 +11,3 @@ aa5f037af71c915424c6dcfd5ad2dc82797dc0d6
|
||||
af6de04e9e141466dc229e444ff3f146f4a34765
|
||||
0bd284cb81b6866338aaaa67aa1d81ef9bfbb2ab
|
||||
8af7ecb2576071f170ecbb0aa2311b26581e40e2
|
||||
# Update to coding-standard 1.3.1
|
||||
9836e9b16484582d309c8437ab46d82e34956941
|
||||
# Automated refactorings
|
||||
49dd79eabb2b8902559a7a4e8f8fcad54f46b604
|
||||
|
||||
+1
-1
@@ -37,9 +37,9 @@
|
||||
/apps/files_trashbin/src* @skjnldsv
|
||||
|
||||
# Security team
|
||||
/build/psalm-baseline-security.xml @nickvergessen
|
||||
/resources/codesigning @mgallien @miaulalala @nickvergessen
|
||||
/resources/config/ca-bundle.crt @ChristophWurst @miaulalala @nickvergessen
|
||||
/.drone.yml @nickvergessen
|
||||
|
||||
# Two-Factor Authentication
|
||||
# https://github.com/nextcloud/wg-two-factor-authentication#members
|
||||
|
||||
@@ -72,7 +72,6 @@ body:
|
||||
options:
|
||||
- "28"
|
||||
- "29"
|
||||
- "30"
|
||||
- "master"
|
||||
validations:
|
||||
required: true
|
||||
|
||||
@@ -59,20 +59,6 @@ updates:
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# phpunit
|
||||
- package-ecosystem: composer
|
||||
directory: "/vendor-bin/phpunit"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:40"
|
||||
timezone: Europe/Madrid
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# Main master npm
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- 'version.php'
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: 3rdparty commit hash on current branch
|
||||
id: actual
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- uses: webiny/action-conventional-commits@8bc41ff4e7d423d56fa4905f6ff79209a78776c7 # v1.3.0
|
||||
with:
|
||||
|
||||
@@ -100,7 +100,7 @@ jobs:
|
||||
key: git-repo
|
||||
|
||||
- name: Checkout ${{ needs.init.outputs.head_ref }}
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
fetch-depth: 0
|
||||
@@ -119,7 +119,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v3
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v3
|
||||
with:
|
||||
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
cache: npm
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
id: comment-branch
|
||||
|
||||
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
exit 1
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
# We need to checkout submodules for 3rdparty
|
||||
submodules: true
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
fallbackNpm: "^10"
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -80,7 +80,7 @@ jobs:
|
||||
run: npm run cypress:version
|
||||
|
||||
- name: Save context
|
||||
uses: buildjet/cache/save@v4
|
||||
uses: buildjet/cache/save@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3
|
||||
with:
|
||||
key: cypress-context-${{ github.run_id }}
|
||||
path: ./
|
||||
@@ -103,14 +103,14 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Restore context
|
||||
uses: buildjet/cache/restore@v4
|
||||
uses: buildjet/cache/restore@e376f15c6ec6dc595375c78633174c7e5f92dc0e # v3
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: cypress-context-${{ github.run_id }}
|
||||
path: ./
|
||||
|
||||
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
||||
with:
|
||||
node-version: ${{ needs.init.outputs.nodeVersion }}
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
run: ./node_modules/cypress/bin/cypress install
|
||||
|
||||
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
|
||||
uses: cypress-io/github-action@0da3c06ed8217b912deea9d8ee69630baed1737e # v6.7.6
|
||||
uses: cypress-io/github-action@496e7dc0edc421a9de8a36a31c793340e00c61bf # v6.7.5
|
||||
with:
|
||||
# We already installed the dependencies in the init job
|
||||
install: false
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -135,7 +135,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -43,12 +43,12 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Checkout user_saml
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
repository: nextcloud/user_saml
|
||||
path: apps/user_saml
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -99,9 +99,9 @@ jobs:
|
||||
|
||||
- name: Run CalDAVTester
|
||||
run: |
|
||||
cp "apps/dav/tests/testsuits/caldavtest/serverinfo-${{ matrix.endpoint }}${{ matrix.endpoint == 'old' && (matrix.service == 'CardDAV' && '-carddav' || '-caldav') || '' }}-endpoint.xml" "apps/dav/tests/testsuits/caldavtest/serverinfo.xml"
|
||||
cp "apps/dav/tests/travis/caldavtest/serverinfo-${{ matrix.endpoint }}${{ matrix.endpoint == 'old' && (matrix.service == 'CardDAV' && '-carddav' || '-caldav') || '' }}-endpoint.xml" "apps/dav/tests/travis/caldavtest/serverinfo.xml"
|
||||
pushd CalDAVTester
|
||||
PYTHONPATH="../pycalendar/src" python testcaldav.py --print-details-onfail --basedir "../apps/dav/tests/testsuits/caldavtest" -o cdt.txt \
|
||||
PYTHONPATH="../pycalendar/src" python testcaldav.py --print-details-onfail --basedir "../apps/dav/tests/travis/caldavtest" -o cdt.txt \
|
||||
"${{ matrix.service }}/current-user-principal.xml" \
|
||||
"${{ matrix.service }}/sync-report.xml" \
|
||||
${{ matrix.endpoint == 'new' && format('{0}/sharing-{1}.xml', matrix.service, matrix.service == 'CalDAV' && 'calendars' || 'addressbooks') || ';' }}
|
||||
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -91,13 +91,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Checkout Talk app
|
||||
if: ${{ matrix.test-suite == 'videoverification_features' }}
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
repository: nextcloud/spreed
|
||||
path: apps/spreed
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v3
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php8.1
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -80,10 +80,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -114,10 +114,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -142,10 +142,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
name: NPM build
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v3
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v3
|
||||
uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: always()
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(deps): Fix npm audit'
|
||||
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
exit 1
|
||||
|
||||
- name: Checkout server before PR
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: PHPUnit primary object store
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "15 2 * * *"
|
||||
|
||||
concurrency:
|
||||
group: phpunit-object-store-primary-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/appinfo/**'
|
||||
- '**/lib/**'
|
||||
- '**/templates/**'
|
||||
- '**/tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
object-store-primary-tests-minio:
|
||||
runs-on: ubuntu-latest
|
||||
needs: changes
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }}
|
||||
|
||||
strategy:
|
||||
# do not stop on another job's failure
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
key: ['s3', 's3-multibucket']
|
||||
|
||||
name: php${{ matrix.php-versions }}-${{ matrix.key }}-minio
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
minio:
|
||||
image: bitnami/minio
|
||||
env:
|
||||
MINIO_ROOT_USER: nextcloud
|
||||
MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
MINIO_DEFAULT_BUCKETS: nextcloud
|
||||
ports:
|
||||
- "9000:9000"
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@c5fc0d8281aba02c7fda07d3a70cc5371548067d #v2.25.2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
OBJECT_STORE: ${{ matrix.key }}
|
||||
OBJECT_STORE_KEY: nextcloud
|
||||
OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
run: |
|
||||
composer install
|
||||
cp tests/redis.config.php config/
|
||||
cp tests/preseed-config.php config/config.php
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: Wait for S3
|
||||
run: |
|
||||
sleep 10
|
||||
curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
docker ps -a
|
||||
docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done
|
||||
|
||||
|
||||
object-store-primary-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes,object-store-primary-tests-minio]
|
||||
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.object-store-primary-tests-minio.result != 'success' }}; then exit 1; fi
|
||||
@@ -96,7 +96,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
||||
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@3ae3c6bdf1257ab19397fab11fd3312144692083 # v4.0.0
|
||||
|
||||
@@ -4,14 +4,6 @@ name: Psalm static code analysis
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
paths:
|
||||
- '.github/workflows/static-code-analysis.yml'
|
||||
- '**.php'
|
||||
|
||||
concurrency:
|
||||
group: static-code-analysis-${{ github.head_ref || github.run_id }}
|
||||
@@ -21,11 +13,11 @@ jobs:
|
||||
static-code-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -42,20 +34,24 @@ jobs:
|
||||
run: composer i
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=github --update-baseline --report=results.sarif
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
run: git diff -- . ':!lib/composer'
|
||||
|
||||
- name: Upload Analysis results to GitHub
|
||||
if: always()
|
||||
uses: github/codeql-action/upload-sarif@v3
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
||||
static-code-analysis-security:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -70,11 +66,7 @@ jobs:
|
||||
run: composer i
|
||||
|
||||
- name: Psalm taint analysis
|
||||
run: composer run psalm:security -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline --report=results.sarif
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=github --report=results.sarif --taint-analysis
|
||||
|
||||
- name: Upload Security Analysis results to GitHub
|
||||
if: always()
|
||||
@@ -85,11 +77,9 @@ jobs:
|
||||
static-code-analysis-ocp:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.event_name != 'push' && github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
@@ -106,8 +96,8 @@ jobs:
|
||||
run: composer i
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm:ocp -- --threads=1 --monochrome --no-progress --output-format=github --update-baseline
|
||||
run: composer run psalm:ci -- -c psalm-ocp.xml --monochrome --no-progress --output-format=github --update-baseline
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
run: git diff -- . ':!lib/composer'
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
name: update-ca-certificate-bundle-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
@@ -28,7 +28,7 @@ jobs:
|
||||
run: curl --etag-compare build/ca-bundle-etag.txt --etag-save build/ca-bundle-etag.txt --output resources/config/ca-bundle.crt https://curl.se/ca/cacert.pem
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(security): Update CA certificate bundle'
|
||||
|
||||
@@ -19,7 +19,7 @@ jobs:
|
||||
name: update-code-signing-crl-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938
|
||||
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
run: openssl crl -verify -in resources/codesigning/root.crl -CAfile resources/codesigning/root.crt -noout
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(security): Update code signing revocation list'
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Auto approve psalm baseline update
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: update-psalm-baseline-approve-merge-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.actor == 'nextcloud-command'
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
pull-requests: write
|
||||
# for alexwilson/enable-github-automerge-action to approve PRs
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not approve PRs from forks'
|
||||
exit 1
|
||||
|
||||
- uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0
|
||||
id: branchname
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# GitHub actions bot approve
|
||||
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-psalm-baseline')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # main
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-psalm-baseline')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,69 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update Psalm baseline
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
jobs:
|
||||
update-psalm-baseline:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable30', 'stable29', 'stable28']
|
||||
|
||||
name: update-psalm-baseline-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer install
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=text --update-baseline
|
||||
continue-on-error: true
|
||||
|
||||
- name: Psalm OCP
|
||||
run: composer run psalm:ci -- -c psalm-ocp.xml --monochrome --no-progress --output-format=github --update-baseline
|
||||
continue-on-error: true
|
||||
|
||||
- name: Reset composer
|
||||
run: |
|
||||
git clean -f lib/composer
|
||||
git checkout composer.json composer.lock lib/composer
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'chore(tests): Update psalm baseline'
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
branch: 'automated/noid/${{ matrix.branches }}-update-psalm-baseline'
|
||||
title: '[${{ matrix.branches }}] Update psalm-baseline.xml'
|
||||
body: |
|
||||
Auto-generated update psalm-baseline.xml with fixed psalm warnings
|
||||
labels: |
|
||||
automated pr
|
||||
3. to review
|
||||
team-reviewers: server-backend
|
||||
@@ -151,7 +151,6 @@ Vagrantfile
|
||||
|
||||
# Tests - auto-generated files
|
||||
/data-autotest
|
||||
/results.sarif
|
||||
/tests/.phpunit.result.cache
|
||||
/tests/coverage*
|
||||
/tests/css
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
</Else>
|
||||
</FilesMatch>
|
||||
|
||||
# Let browsers cache OTF and WOFF files for a week
|
||||
<FilesMatch "\.(otf|woff2?)$">
|
||||
# Let browsers cache WOFF files for a week
|
||||
<FilesMatch "\.woff2?$">
|
||||
Header set Cache-Control "max-age=604800"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
@@ -106,7 +106,7 @@
|
||||
SetEnvIf Transfer-Encoding "chunked" proxy-sendcl=1
|
||||
</IfModule>
|
||||
|
||||
# Apache disabled the sending of the server-side content-length header
|
||||
# Apache disabled the sending of the server-side content-length header
|
||||
# in their 2.4.59 patch updated which breaks some use-cases in Nextcloud.
|
||||
# Setting ap_trust_cgilike_cl allows to bring back the usual behaviour.
|
||||
# See https://bz.apache.org/bugzilla/show_bug.cgi?id=68973
|
||||
|
||||
+11
-11
@@ -7,7 +7,7 @@ Files: lib/l10n/*.js lib/l10n/*.json core/l10n/*.js core/l10n/*.json apps/admin_
|
||||
Copyright: 2016 ownCloud, Inc., 2016-2024 Nextcloud translators
|
||||
License: AGPL-3.0-only OR AGPL-3.0-or-later
|
||||
|
||||
Files: tests/data/block-aligned-plus-one.txt tests/data/block-aligned.txt tests/data/data.tar.gz tests/data/data.zip tests/data/desktopapp.png tests/data/desktopapp.svg tests/data/certificates/badCertificate.crt tests/data/certificates/expiredCertificate.crt tests/data/certificates/goodCertificate.crt tests/data/certificates/openSslTrustedCertificate.crt tests/data/integritycheck/app/AnotherFile.txt tests/data/integritycheck/app/subfolder/file.txt tests/data/integritycheck/appWithInvalidData/AnotherFile.txt tests/data/integritycheck/appWithInvalidData/UnecessaryFile apps/user_ldap/tests/Integration/data/avatar-invalid.gif apps/user_ldap/tests/Integration/data/avatar-valid.jpg apps/user_ldap/img/copy.png apps/user_ldap/img/copy.svg
|
||||
Files: tests/data/block-aligned-plus-one.txt tests/data/block-aligned.txt tests/data/data.tar.gz tests/data/data.zip tests/data/desktopapp.png tests/data/desktopapp.svg tests/data/certificates/badCertificate.crt tests/data/certificates/expiredCertificate.crt tests/data/certificates/goodCertificate.crt tests/data/integritycheck/app/AnotherFile.txt tests/data/integritycheck/app/subfolder/file.txt tests/data/integritycheck/appWithInvalidData/AnotherFile.txt tests/data/integritycheck/appWithInvalidData/UnecessaryFile apps/user_ldap/tests/Integration/data/avatar-invalid.gif apps/user_ldap/tests/Integration/data/avatar-valid.jpg apps/user_ldap/img/copy.png apps/user_ldap/img/copy.svg
|
||||
Copyright: 2015 ownCloud, Inc.
|
||||
License: AGPL-3.0-only
|
||||
|
||||
@@ -15,7 +15,7 @@ Files: .tx/config
|
||||
Copyright: 2011-2012 ownCloud, Inc., 2017-2023 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-only
|
||||
|
||||
Files: .htaccess
|
||||
Files: .htaccess
|
||||
Copyright: 2011-2016 ownCloud, Inc., 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-only
|
||||
|
||||
@@ -71,7 +71,7 @@ Files: themes/example/core/img/favicon-touch.png themes/example/core/img/favicon
|
||||
Copyright: 2015 ownCloud, Inc., 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-only
|
||||
|
||||
Files: tests/data/testapp.zip tests/data/testapp2.zip tests/docker/mariadb/oc.cnf apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/1.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/2.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/3.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/4.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/5.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/reports/put/6.txt apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/5.ics apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/6.ics apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/7.ics apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/8.ics apps/dav/tests/testsuits/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/9.ics apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/sharing/read-write/6.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/sharing/read-write/7.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/sharing/read-write/8.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/sharing/read-write/9.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/vreports/put/1.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/vreports/put/2.vcf apps/dav/tests/testsuits/caldavtest/data/Resource/CardDAV/vreports/put/3.vcf
|
||||
Files: tests/data/testapp.zip tests/data/testapp2.zip tests/docker/mariadb/oc.cnf apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/1.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/2.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/3.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/4.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/5.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/reports/put/6.txt apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/5.ics apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/6.ics apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/7.ics apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/8.ics apps/dav/tests/travis/caldavtest/data/Resource/CalDAV/sharing/calendars/read-write/9.ics apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/sharing/read-write/6.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/sharing/read-write/7.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/sharing/read-write/8.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/sharing/read-write/9.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/vreports/put/1.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/vreports/put/2.vcf apps/dav/tests/travis/caldavtest/data/Resource/CardDAV/vreports/put/3.vcf
|
||||
Copyright: 2016 ownCloud, Inc.
|
||||
License: AGPL-3.0-only
|
||||
|
||||
@@ -103,7 +103,7 @@ Files: core/img/desktopapp.svg
|
||||
Copyright: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
Files: build/psalm-baseline-ocp.xml build/psalm-baseline-security.xml build/psalm-baseline.xml build/stubs/xsl.php build/stubs/gd.php build/stubs/imagick.php build/stubs/intl.php build/stubs/IntlChar.php build/stubs/ldap.php build/stubs/memcached.php build/stubs/redis.php build/stubs/redis_cluster.php build/stubs/sftp.php build/stubs/ssh2.php build/stubs/apcu.php
|
||||
Files: build/psalm-baseline-ocp.xml build/psalm-baseline.xml build/stubs/xsl.php build/stubs/gd.php build/stubs/imagick.php build/stubs/intl.php build/stubs/IntlChar.php build/stubs/ldap.php build/stubs/memcached.php build/stubs/redis.php build/stubs/redis_cluster.php build/stubs/sftp.php build/stubs/ssh2.php build/stubs/apcu.php
|
||||
Copyright: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
@@ -147,7 +147,7 @@ Files: build/stubs/app_api.php build/stubs/SensitiveParameter.phpstub build/stub
|
||||
Copyright: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
Files: apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-1.ics apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-2.ics apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-3.ics apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-4.ics apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-5.ics apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-6.ics apps/dav/tests/unit/test_fixtures/caldav-search-missing-start-1.ics apps/dav/tests/unit/test_fixtures/caldav-search-missing-start-2.ics
|
||||
Files: apps/dav/tests/misc/caldav-search-limit-timerange-1.ics apps/dav/tests/misc/caldav-search-limit-timerange-2.ics apps/dav/tests/misc/caldav-search-limit-timerange-3.ics apps/dav/tests/misc/caldav-search-limit-timerange-4.ics apps/dav/tests/misc/caldav-search-limit-timerange-5.ics apps/dav/tests/misc/caldav-search-limit-timerange-6.ics apps/dav/tests/misc/caldav-search-missing-start-1.ics apps/dav/tests/misc/caldav-search-missing-start-2.ics
|
||||
Copyright: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
@@ -204,7 +204,7 @@ Copyright: 2016-2024 Collabora Ltd.
|
||||
License: LicenseRef-CollaboraTrademarks
|
||||
|
||||
Files: core/img/twitter.svg core/img/actions/twitter.svg apps/federatedfilesharing/img/social-twitter.svg
|
||||
Copyright: X Corp.
|
||||
Copyright: X Corp.
|
||||
License: LicenseRef-XTrademarks
|
||||
|
||||
Files: core/img/facebook.svg apps/federatedfilesharing/img/social-facebook.svg
|
||||
@@ -227,9 +227,9 @@ Files: core/img/appstore.svg
|
||||
Copyright: 2024 Apple Inc.
|
||||
License: LicenseRef-AppleAppStoreBadge
|
||||
|
||||
Files: apps/weather_status/img/met.no.icons/*.svg
|
||||
Copyright: 2015-2017 NRK og Meteorologisk institutt <https://github.com/metno/weathericons>
|
||||
License: MIT
|
||||
Files: apps/weather_status/img/cloud-cloud.svg apps/weather_status/img/cloud-dots.svg apps/weather_status/img/cross.svg apps/weather_status/img/drop.svg apps/weather_status/img/fog.svg apps/weather_status/img/half-sun.svg apps/weather_status/img/heavy-rain.svg apps/weather_status/img/light-rain.svg apps/weather_status/img/moon-cloud-heavy-rain.svg apps/weather_status/img/moon-cloud-light-rain.svg apps/weather_status/img/moon-cloud-rain.svg apps/weather_status/img/moon-cloud.svg apps/weather_status/img/moon-small-cloud.svg apps/weather_status/img/moon.svg apps/weather_status/img/rain.svg apps/weather_status/img/snow.svg apps/weather_status/img/sun-cloud-heavy-rain.svg apps/weather_status/img/sun-cloud-light-rain.svg apps/weather_status/img/sun-cloud-rain.svg apps/weather_status/img/sun-cloud.svg apps/weather_status/img/sun-small-cloud.svg apps/weather_status/img/sun.svg apps/weather_status/img/thunder.svg apps/weather_status/img/umbrella.svg
|
||||
Copyright: 2024 Designed by Freepik, titusurya <https://www.freepik.com/author/titusurya> at <https://www.freepik.com/free-vector/coloured-weather-icons-collection_895655.htm>
|
||||
License: LicenseRef-freepikLicense
|
||||
|
||||
Files: core/img/f-droid.svg
|
||||
Copyright: 2016 Andrew Nayenko <relan@airpost.net>
|
||||
@@ -327,6 +327,6 @@ Files: apps/settings/tests/UserMigration/assets/account.png
|
||||
Copyright: 2019 Fabian Wiktor <https://www.pexels.com/photo/green-and-brown-island-on-blue-sea-under-blue-sky-4011450/>
|
||||
License: CC0-1.0
|
||||
|
||||
Files: apps/theming/fonts/OpenDyslexic-Bold.otf apps/theming/fonts/OpenDyslexic-Regular.otf
|
||||
Copyright: 2012-2019 Abbie Gonzalez <https://abbiecod.es|support@abbiecod.es>, with Reserved Font Name OpenDyslexic.
|
||||
Files: apps/theming/fonts/OpenDyslexic-Bold.otf apps/theming/fonts/OpenDyslexic-Bold.ttf apps/theming/fonts/OpenDyslexic-Bold.woff apps/theming/fonts/OpenDyslexic-Regular.otf apps/theming/fonts/OpenDyslexic-Regular.ttf apps/theming/fonts/OpenDyslexic-Regular.woff
|
||||
Copyright: 2012-2019 Abbie Gonzalez <https://abbiecod.es|support@abbiecod.es<, with Reserved Font Name OpenDyslexic.
|
||||
License: OFL-1.1-RFN
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: 9e36079193...9e4e23d28d
@@ -6,4 +6,4 @@ and our products: “Nextcloud Files”; “Nextcloud Groupware” and “Nextcl
|
||||
This set of marks is collectively referred to as the “Nextcloud marks.”
|
||||
|
||||
Use of Nextcloud logos and other marks is only permitted under the guidelines provided by the Nextcloud GmbH.
|
||||
A copy can be found at https://nextcloud.com/trademarks/
|
||||
A copy can be found at https://discord.com/branding
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
License Agreement for Freepik Content
|
||||
|
||||
The Company authorizes the User to download and use the Freepik Content under the terms of this Section (see Section 7 in relation to Sponsored Content). The Company and its licensors reserve all rights over the Freepik Content not expressly granted in this license to the User.
|
||||
|
||||
Subject to the fulfillment of these Terms, the Company authorizes the User in a non-transferable, revocable, limited, non-exclusive manner and on a worldwide basis for the duration of the relevant rights; to download, use and modify the Freepik Content, in a device the User owns or controls and only for the purposes and uses allowed in these Terms.
|
||||
|
||||
The User may use the Freepik Content (including any derivative work), either using the Freepik Contents in its entirety or using only some or some of its elements, either using the Freepik Contents without modification, combining them with other contents or having previously modified them, being the license granted with respect to the Freepik content, provided that it:
|
||||
|
||||
* Does not involve collective use;
|
||||
* The Freepik Content is not used in a manner that suggests an association or endorsement of any kind by the Company or the Website;
|
||||
* The Freepik Content or any derivative work is not used or included (in whole or in part) in a database, archive or in any other media/stock product, collection, set of clips, or library, for distribution or resale or used in any other way that could prevent or limit future visits or downloads from the Website;
|
||||
* Does not resell, assign, transfer or sublicense the Freepik Content or any derived work from the Freepik Content;
|
||||
* Does not use the Freepik Content in printed or electronic items (e.g. t-shirts, cups, postcards, birthday or greeting cards, invitations, calendars, web models or electronic devices, apps, NFTs, videogames, advertising spots, audiovisual animations) aimed to be resold, in which the content in the Freepik Content is the main element (because of size, relevance or any other cause, in case of doubt about whether the content is main element, it shall be deemed that the content is main element);
|
||||
* Does not use the Freepik Content (totally or partially) in any trademark, or part of the same, which may be used by any other means to guarantee or to imply a guaranty of any product and/or service, unless the Freepik Content used in such cases is modified in such a way as to be a new and different content not confusingly similar with the original Freepik Content or implies a use of the Freepik Content as a template or test, and not as a final item or material;
|
||||
* Does not use the Freepik Content (including any caption information, title, keywords or other metadata associated with the Freepik Content) for any machine learning and/or artificial intelligence purposes, or for any technologies designed or intended for the identification of natural persons.
|
||||
* Does not make any use of the Freepik Content which might be considered defamatory, libellous, obscene, immoral or illegal, including, without limitation, using it in a way that places any person appearing in the Freepik Content in a negative light or depicts them in a way that they may find offensive such as the use in pornography, advertisements for escort or similar services, political endorsements, birth control products, and;
|
||||
* Does not make any use of the Freepik Content to slander, libel or to vilify a person, race, sex, culture, sexual orientation, religion, country, region, town, village or any other place, or any other human group.
|
||||
|
||||
When any Freepik Content is marked or identified as for editorial use, or when within the same there are logos, recognizable products, public buildings, public events or images taken in places where recognizable persons appear in the background, the User shall only be entitled to use it for such editorial use. In such cases, the User undertakes not to use that content in any manner that entails any connection with any business activity, the use in economic traffic or advertising, marketing or commercialization of any product or service. The User shall be directly liable and the Company shall not assume any liability as a result of the use for commercial purposes by the User of any content belonging to the Freepik Content, which according to this paragraph should be for editorial use only.
|
||||
|
||||
The authorization to use the Freepik Content shall be free provided that any use of the content in the Freepik Content by the User is credited to the Company/Website as stated by the Company from time to time. In order to benefit from the Service or to use the Freepik Content without acknowledging the Company/Website, the User must purchase a premium subscription (hereinafter, the "Premium Subscription") in the Website and download the Freepik Content during the term of any such Premium Subscription. Conditions in Section 10 shall apply to the purchase of the Premium Subscription.
|
||||
|
||||
As a general rule, it is forbidden for a User to authorize any third parties to use the Freepik Content (or any modification of any content in the Freepik Content). As an exception to the prohibition, the User may allow third parties to use the Freepik Content, when each and every of the following conditions are met:
|
||||
|
||||
* The third party has professionally instructed the User to produce goods or provide services to it/him/her and the User uses a limited number of items within the Freepik Content to produce such goods or provide such services to the instructing third party;
|
||||
* The authorization granted by the User to the third party is in writing and complies with every restriction of the User’s authorization to use the relevant Freepik Content and includes, without limitation, a restriction for the third party to distribute, resell or license the relevant content in the Freepik Content (i.e. the third party is the final user of the relevant content in the Freepik Content);
|
||||
* None of the contents in the Freepik Content which are subject to the authorization are used as the main element (because of size, relevance or any other cause; in case of doubt about whether the content is the main element, it shall be deemed as the main element) in printed or electronic items (e.g. t-shirts, cups, postcards, birthday or greeting cards, invitations, calendars, web models or electronic devices, apps, NFTs, videogames, advertising spots, audiovisual animations) aimed to be resold by the third party;
|
||||
* The production of goods or provision of services by the User to the third party is not done by automatic means, it is tailor-made for the third party (and therefore its use is not authorized by the User to any other third party) and requires a specific substantial human intervention from the User in relation to each third party; and
|
||||
* The User -and not the third party- chooses the specific items within the content of the Freepik Content to be used in the production of goods or provision of services for the third party.
|
||||
|
||||
When all of the above conditions are met, the User shall be entitled to authorize a third party to use the relevant content in the Freepik Content. This exception refers only to the prohibition for the User to authorize third parties to use the content in the Freepik Content without affecting or limiting in any way the remaining conditions of the User’s right to use the Freepik Content. Whether the above conditions regarding the exception to the prohibition for Users to authorize third parties to use the content in the Freepik Content are met shall be interpreted restrictively so that, in case of doubt, it shall be deemed that the conditions are not met.
|
||||
|
||||
The User does not acquire any right as a result of the use of the content in the Freepik Content. In particular, the User is not authorized to distribute, resell or rent any content in the Freepik Content (or any modification of any content in the Freepik Content).
|
||||
|
||||
The Company may, at any time, offer any content on the Website under a different license from the one included in this Section (the "Specific License"). The Company will inform on the Website which content is licensed under an Specific License. The Specific License will be made available to the User and will include, without limitation, a description of the license itself, as well as the permitted and prohibited uses in relation to the content. In the event that a particular content is offered under a Specific License, the Specific License shall apply over the general license described in this Section. Notwithstanding the foregoing, all other obligations contained in these Terms shall continue to be binding on the User, unless they conflict with the Specific License, in which case the Specific License shall prevail.
|
||||
|
||||
The User’s rights under this Section will end automatically without any notice if the User breaches any of the Terms. In case of termination of the rights hereunder, the User shall cease using content in the Freepik Content and will destroy every copy, whether total or partial, thereof.
|
||||
|
||||
A copy can be found at <https://www.freepikcompany.com/legal/#nav-freepik-agreement>
|
||||
@@ -1,7 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -32,13 +32,13 @@ class Action {
|
||||
if (!isset($params[$element])) {
|
||||
if ($obfuscateParameters) {
|
||||
$this->logger->critical(
|
||||
'$params["' . $element . '"] was missing.',
|
||||
'$params["'.$element.'"] was missing.',
|
||||
['app' => 'admin_audit']
|
||||
);
|
||||
} else {
|
||||
$this->logger->critical(
|
||||
sprintf(
|
||||
'$params["' . $element . '"] was missing. Transferred value: %s',
|
||||
'$params["'.$element.'"] was missing. Transferred value: %s',
|
||||
print_r($params, true)
|
||||
),
|
||||
['app' => 'admin_audit']
|
||||
|
||||
@@ -8,11 +8,12 @@ declare(strict_types=1);
|
||||
namespace OCA\AdminAudit\Actions;
|
||||
|
||||
use OC\Files\Node\NonExistingFile;
|
||||
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeReadEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeWrittenEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeWrittenEvent;
|
||||
use OCP\Files\InvalidPathException;
|
||||
@@ -27,9 +28,10 @@ use Psr\Log\LoggerInterface;
|
||||
class Files extends Action {
|
||||
|
||||
private array $renamedNodes = [];
|
||||
|
||||
/**
|
||||
* Logs file read actions
|
||||
*
|
||||
* @param BeforeNodeReadEvent $event
|
||||
*/
|
||||
public function read(BeforeNodeReadEvent $event): void {
|
||||
try {
|
||||
@@ -40,7 +42,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file read: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file read: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -53,6 +55,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*
|
||||
* @param BeforeNodeRenamedEvent $event
|
||||
*/
|
||||
public function beforeRename(BeforeNodeRenamedEvent $event): void {
|
||||
try {
|
||||
@@ -60,7 +64,7 @@ class Files extends Action {
|
||||
$this->renamedNodes[$source->getId()] = $source;
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file rename: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file rename: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -68,6 +72,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*
|
||||
* @param NodeRenamedEvent $event
|
||||
*/
|
||||
public function afterRename(NodeRenamedEvent $event): void {
|
||||
try {
|
||||
@@ -80,7 +86,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file rename: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file rename: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -95,6 +101,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs creation of files
|
||||
*
|
||||
* @param NodeCreatedEvent $event
|
||||
*/
|
||||
public function create(NodeCreatedEvent $event): void {
|
||||
try {
|
||||
@@ -104,7 +112,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file create: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file create: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -120,6 +128,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs copying of files
|
||||
*
|
||||
* @param NodeCopiedEvent $event
|
||||
*/
|
||||
public function copy(NodeCopiedEvent $event): void {
|
||||
try {
|
||||
@@ -131,7 +141,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file copy: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file copy: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -144,17 +154,19 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs writing of files
|
||||
*
|
||||
* @param BeforeNodeWrittenEvent $event
|
||||
*/
|
||||
public function write(NodeWrittenEvent $event): void {
|
||||
public function write(BeforeNodeWrittenEvent $event): void {
|
||||
$node = $event->getNode();
|
||||
try {
|
||||
$params = [
|
||||
'id' => $node->getId(),
|
||||
'id' => $node instanceof NonExistingFile ? null : $node->getId(),
|
||||
'path' => mb_substr($node->getInternalPath(), 5),
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file write: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file write: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -170,9 +182,11 @@ class Files extends Action {
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs deletions of files
|
||||
* Logs update of files
|
||||
*
|
||||
* @param NodeWrittenEvent $event
|
||||
*/
|
||||
public function delete(BeforeNodeDeletedEvent $event): void {
|
||||
public function update(NodeWrittenEvent $event): void {
|
||||
try {
|
||||
$params = [
|
||||
'id' => $event->getNode()->getId(),
|
||||
@@ -180,7 +194,31 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file delete: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file update: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
$this->log(
|
||||
'File with id "%s" updated: "%s"',
|
||||
$params,
|
||||
array_keys($params)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs deletions of files
|
||||
*
|
||||
* @param NodeDeletedEvent $event
|
||||
*/
|
||||
public function delete(NodeDeletedEvent $event): void {
|
||||
try {
|
||||
$params = [
|
||||
'id' => $event->getNode()->getId(),
|
||||
'path' => mb_substr($event->getNode()->getInternalPath(), 5),
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file delete: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,11 +38,12 @@ use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengeFailed;
|
||||
use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengePassed;
|
||||
use OCP\Console\ConsoleEvent;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeReadEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeWrittenEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeWrittenEvent;
|
||||
use OCP\Group\Events\GroupCreatedEvent;
|
||||
@@ -156,7 +157,7 @@ class Application extends App implements IBootstrap {
|
||||
|
||||
private function tagHooks(IAuditLogger $logger,
|
||||
IEventDispatcher $eventDispatcher): void {
|
||||
$eventDispatcher->addListener(\OCP\SystemTag\ManagerEvent::EVENT_CREATE, function (\OCP\SystemTag\ManagerEvent $event) use ($logger): void {
|
||||
$eventDispatcher->addListener(\OCP\SystemTag\ManagerEvent::EVENT_CREATE, function (\OCP\SystemTag\ManagerEvent $event) use ($logger) {
|
||||
$tagActions = new TagManagement($logger);
|
||||
$tagActions->createTag($event->getTag());
|
||||
});
|
||||
@@ -167,49 +168,56 @@ class Application extends App implements IBootstrap {
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeRenamedEvent::class,
|
||||
function (BeforeNodeRenamedEvent $event) use ($fileActions): void {
|
||||
function (BeforeNodeRenamedEvent $event) use ($fileActions) {
|
||||
$fileActions->beforeRename($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeRenamedEvent::class,
|
||||
function (NodeRenamedEvent $event) use ($fileActions): void {
|
||||
function (NodeRenamedEvent $event) use ($fileActions) {
|
||||
$fileActions->afterRename($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeCreatedEvent::class,
|
||||
function (NodeCreatedEvent $event) use ($fileActions): void {
|
||||
function (NodeCreatedEvent $event) use ($fileActions) {
|
||||
$fileActions->create($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeCopiedEvent::class,
|
||||
function (NodeCopiedEvent $event) use ($fileActions): void {
|
||||
function (NodeCopiedEvent $event) use ($fileActions) {
|
||||
$fileActions->copy($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeWrittenEvent::class,
|
||||
function (NodeWrittenEvent $event) use ($fileActions): void {
|
||||
BeforeNodeWrittenEvent::class,
|
||||
function (BeforeNodeWrittenEvent $event) use ($fileActions) {
|
||||
$fileActions->write($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeWrittenEvent::class,
|
||||
function (NodeWrittenEvent $event) use ($fileActions) {
|
||||
$fileActions->update($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeReadEvent::class,
|
||||
function (BeforeNodeReadEvent $event) use ($fileActions): void {
|
||||
function (BeforeNodeReadEvent $event) use ($fileActions) {
|
||||
$fileActions->read($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeDeletedEvent::class,
|
||||
function (BeforeNodeDeletedEvent $event) use ($fileActions): void {
|
||||
NodeDeletedEvent::class,
|
||||
function (NodeDeletedEvent $event) use ($fileActions) {
|
||||
$fileActions->delete($event);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -48,7 +48,7 @@ class FileEventListener extends Action implements IEventListener {
|
||||
);
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file preview: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file preview: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
namespace OCA\AdminAudit\Tests\Actions;
|
||||
|
||||
use OCA\AdminAudit\IAuditLogger;
|
||||
use OCA\AdminAudit\Listener\UserManagementEventListener;
|
||||
use OCP\IUser;
|
||||
use OCP\User\Events\UserChangedEvent;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class UserManagementEventListenerTest extends TestCase {
|
||||
private IAuditLogger&MockObject $logger;
|
||||
|
||||
private UserManagementEventListener $listener;
|
||||
|
||||
private MockObject&IUser $user;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->logger = $this->createMock(IAuditLogger::class);
|
||||
$this->listener = new UserManagementEventListener($this->logger);
|
||||
|
||||
$this->user = $this->createMock(IUser::class);
|
||||
$this->user->method('getUID')->willReturn('alice');
|
||||
$this->user->method('getDisplayName')->willReturn('Alice');
|
||||
}
|
||||
|
||||
public function testSkipUnsupported(): void {
|
||||
$this->logger->expects($this->never())
|
||||
->method('info');
|
||||
|
||||
$event = new UserChangedEvent(
|
||||
$this->user,
|
||||
'unsupported',
|
||||
'value',
|
||||
);
|
||||
|
||||
$this->listener->handle($event);
|
||||
}
|
||||
|
||||
public function testUserEnabled(): void {
|
||||
$this->logger->expects($this->once())
|
||||
->method('info')
|
||||
->with('User enabled: "alice"', ['app' => 'admin_audit']);
|
||||
|
||||
$event = new UserChangedEvent(
|
||||
$this->user,
|
||||
'enabled',
|
||||
true,
|
||||
false,
|
||||
);
|
||||
|
||||
$this->listener->handle($event);
|
||||
}
|
||||
|
||||
public function testUserDisabled(): void {
|
||||
$this->logger->expects($this->once())
|
||||
->method('info')
|
||||
->with('User disabled: "alice"', ['app' => 'admin_audit']);
|
||||
|
||||
$event = new UserChangedEvent(
|
||||
$this->user,
|
||||
'enabled',
|
||||
false,
|
||||
true,
|
||||
);
|
||||
|
||||
$this->listener->handle($event);
|
||||
}
|
||||
|
||||
public function testEmailChanged(): void {
|
||||
$this->logger->expects($this->once())
|
||||
->method('info')
|
||||
->with('Email address changed for user alice', ['app' => 'admin_audit']);
|
||||
|
||||
$event = new UserChangedEvent(
|
||||
$this->user,
|
||||
'eMailAddress',
|
||||
'alice@alice.com',
|
||||
'',
|
||||
);
|
||||
|
||||
$this->listener->handle($event);
|
||||
}
|
||||
}
|
||||
@@ -50,7 +50,7 @@ class RequestHandlerController extends Controller {
|
||||
private ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
private Config $config,
|
||||
private ICloudFederationFactory $factory,
|
||||
private ICloudIdManager $cloudIdManager,
|
||||
private ICloudIdManager $cloudIdManager
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ OC.L10N.register(
|
||||
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> k souborům",
|
||||
"Files" : "Soubory",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vás zmínil(a) v komentáři u „{file}“",
|
||||
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
|
||||
"Edit comment" : "Upravit komentář",
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> k souborům",
|
||||
"Files" : "Soubory",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vás zmínil(a) v komentáři u „{file}“",
|
||||
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
|
||||
"Edit comment" : "Upravit komentář",
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
*/
|
||||
namespace OCA\Comments\Activity;
|
||||
|
||||
use OCP\Activity\Exceptions\UnknownActivityException;
|
||||
use OCP\Activity\IEvent;
|
||||
use OCP\Activity\IManager;
|
||||
use OCP\Activity\IProvider;
|
||||
@@ -33,12 +32,12 @@ class Provider implements IProvider {
|
||||
* @param IEvent $event
|
||||
* @param IEvent|null $previousEvent
|
||||
* @return IEvent
|
||||
* @throws UnknownActivityException
|
||||
* @throws \InvalidArgumentException
|
||||
* @since 11.0.0
|
||||
*/
|
||||
public function parse($language, IEvent $event, ?IEvent $previousEvent = null): IEvent {
|
||||
if ($event->getApp() !== 'comments') {
|
||||
throw new UnknownActivityException();
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
|
||||
$this->l = $this->languageFactory->get('comments', $language);
|
||||
@@ -54,19 +53,19 @@ class Provider implements IProvider {
|
||||
if ($this->activityManager->isFormattingFilteredObject()) {
|
||||
try {
|
||||
return $this->parseShortVersion($event);
|
||||
} catch (UnknownActivityException) {
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
// Ignore and simply use the long version...
|
||||
}
|
||||
}
|
||||
|
||||
return $this->parseLongVersion($event);
|
||||
} else {
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
throw new UnknownActivityException();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws UnknownActivityException
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
protected function parseShortVersion(IEvent $event): IEvent {
|
||||
$subjectParameters = $this->getSubjectParameters($event);
|
||||
@@ -81,14 +80,14 @@ class Provider implements IProvider {
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
throw new UnknownActivityException();
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws UnknownActivityException
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
protected function parseLongVersion(IEvent $event): IEvent {
|
||||
$subjectParameters = $this->getSubjectParameters($event);
|
||||
@@ -113,7 +112,7 @@ class Provider implements IProvider {
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
throw new UnknownActivityException();
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
|
||||
return $event;
|
||||
|
||||
@@ -33,7 +33,7 @@ class NotificationsController extends Controller {
|
||||
protected IRootFolder $rootFolder,
|
||||
protected IURLGenerator $urlGenerator,
|
||||
protected IManager $notificationManager,
|
||||
protected IUserSession $userSession,
|
||||
protected IUserSession $userSession
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ use OCP\Notification\INotification;
|
||||
class Listener {
|
||||
public function __construct(
|
||||
protected IManager $notificationManager,
|
||||
protected IUserManager $userManager,
|
||||
protected IUserManager $userManager
|
||||
) {
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class Notifier implements INotifier {
|
||||
protected IRootFolder $rootFolder,
|
||||
protected ICommentsManager $commentsManager,
|
||||
protected IURLGenerator $url,
|
||||
protected IUserManager $userManager,
|
||||
protected IUserManager $userManager
|
||||
) {
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ class ListenerTest extends TestCase {
|
||||
);
|
||||
}
|
||||
|
||||
public function testCommentEvent(): void {
|
||||
public function testCommentEvent() {
|
||||
$this->appManager->expects($this->any())
|
||||
->method('isInstalled')
|
||||
->with('activity')
|
||||
|
||||
@@ -30,7 +30,7 @@ class ApplicationTest extends TestCase {
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
public function test(): void {
|
||||
public function test() {
|
||||
$app = new Application();
|
||||
$c = $app->getContainer();
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ class CommentersSorterTest extends TestCase {
|
||||
* @dataProvider sortDataProvider
|
||||
* @param $data
|
||||
*/
|
||||
public function testSort($data): void {
|
||||
public function testSort($data) {
|
||||
$commentMocks = [];
|
||||
foreach ($data['actors'] as $actorType => $actors) {
|
||||
foreach ($actors as $actorId => $noOfComments) {
|
||||
|
||||
@@ -63,7 +63,7 @@ class NotificationsTest extends TestCase {
|
||||
);
|
||||
}
|
||||
|
||||
public function testViewGuestRedirect(): void {
|
||||
public function testViewGuestRedirect() {
|
||||
$this->commentsManager->expects($this->never())
|
||||
->method('get');
|
||||
|
||||
@@ -96,7 +96,7 @@ class NotificationsTest extends TestCase {
|
||||
$this->assertSame('link-to-login', $response->getRedirectURL());
|
||||
}
|
||||
|
||||
public function testViewSuccess(): void {
|
||||
public function testViewSuccess() {
|
||||
$comment = $this->createMock(IComment::class);
|
||||
$comment->expects($this->any())
|
||||
->method('getObjectType')
|
||||
@@ -146,7 +146,7 @@ class NotificationsTest extends TestCase {
|
||||
$this->assertInstanceOf(RedirectResponse::class, $response);
|
||||
}
|
||||
|
||||
public function testViewInvalidComment(): void {
|
||||
public function testViewInvalidComment() {
|
||||
$this->commentsManager->expects($this->any())
|
||||
->method('get')
|
||||
->with('42')
|
||||
@@ -174,7 +174,7 @@ class NotificationsTest extends TestCase {
|
||||
$this->assertInstanceOf(NotFoundResponse::class, $response);
|
||||
}
|
||||
|
||||
public function testViewNoFile(): void {
|
||||
public function testViewNoFile() {
|
||||
$comment = $this->createMock(IComment::class);
|
||||
$comment->expects($this->any())
|
||||
->method('getObjectType')
|
||||
|
||||
@@ -36,7 +36,7 @@ class EventHandlerTest extends TestCase {
|
||||
$this->eventHandler = new CommentsEventListener($this->activityListener, $this->notificationListener);
|
||||
}
|
||||
|
||||
public function testNotFiles(): void {
|
||||
public function testNotFiles() {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->once())
|
||||
@@ -69,7 +69,7 @@ class EventHandlerTest extends TestCase {
|
||||
* @dataProvider handledProvider
|
||||
* @param string $eventType
|
||||
*/
|
||||
public function testHandled($eventType): void {
|
||||
public function testHandled($eventType) {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->once())
|
||||
|
||||
@@ -55,7 +55,7 @@ class ListenerTest extends TestCase {
|
||||
* @param string $eventType
|
||||
* @param string $notificationMethod
|
||||
*/
|
||||
public function testEvaluate($eventType, $notificationMethod): void {
|
||||
public function testEvaluate($eventType, $notificationMethod) {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
@@ -123,7 +123,7 @@ class ListenerTest extends TestCase {
|
||||
* @dataProvider eventProvider
|
||||
* @param string $eventType
|
||||
*/
|
||||
public function testEvaluateNoMentions($eventType): void {
|
||||
public function testEvaluateNoMentions($eventType) {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
@@ -160,7 +160,7 @@ class ListenerTest extends TestCase {
|
||||
$this->listener->evaluate($event);
|
||||
}
|
||||
|
||||
public function testEvaluateUserDoesNotExist(): void {
|
||||
public function testEvaluateUserDoesNotExist() {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
|
||||
@@ -72,7 +72,7 @@ class NotifierTest extends TestCase {
|
||||
$this->comment = $this->createMock(IComment::class);
|
||||
}
|
||||
|
||||
public function testPrepareSuccess(): void {
|
||||
public function testPrepareSuccess() {
|
||||
$fileName = 'Gre\'thor.odp';
|
||||
$displayName = 'Huraga';
|
||||
$message = '@Huraga mentioned you in a comment on "Gre\'thor.odp"';
|
||||
@@ -190,7 +190,7 @@ class NotifierTest extends TestCase {
|
||||
$this->notifier->prepare($this->notification, $this->lc);
|
||||
}
|
||||
|
||||
public function testPrepareSuccessDeletedUser(): void {
|
||||
public function testPrepareSuccessDeletedUser() {
|
||||
$fileName = 'Gre\'thor.odp';
|
||||
$message = 'You were mentioned on "Gre\'thor.odp", in a comment by an account that has since been deleted';
|
||||
|
||||
@@ -305,7 +305,7 @@ class NotifierTest extends TestCase {
|
||||
}
|
||||
|
||||
|
||||
public function testPrepareDifferentApp(): void {
|
||||
public function testPrepareDifferentApp() {
|
||||
$this->expectException(UnknownNotificationException::class);
|
||||
|
||||
$this->folder
|
||||
@@ -342,7 +342,7 @@ class NotifierTest extends TestCase {
|
||||
}
|
||||
|
||||
|
||||
public function testPrepareNotFound(): void {
|
||||
public function testPrepareNotFound() {
|
||||
$this->expectException(UnknownNotificationException::class);
|
||||
|
||||
$this->folder
|
||||
@@ -380,7 +380,7 @@ class NotifierTest extends TestCase {
|
||||
}
|
||||
|
||||
|
||||
public function testPrepareDifferentSubject(): void {
|
||||
public function testPrepareDifferentSubject() {
|
||||
$this->expectException(UnknownNotificationException::class);
|
||||
|
||||
$displayName = 'Huraga';
|
||||
@@ -437,7 +437,7 @@ class NotifierTest extends TestCase {
|
||||
}
|
||||
|
||||
|
||||
public function testPrepareNotFiles(): void {
|
||||
public function testPrepareNotFiles() {
|
||||
$this->expectException(UnknownNotificationException::class);
|
||||
|
||||
$displayName = 'Huraga';
|
||||
@@ -495,7 +495,7 @@ class NotifierTest extends TestCase {
|
||||
}
|
||||
|
||||
|
||||
public function testPrepareUnresolvableFileID(): void {
|
||||
public function testPrepareUnresolvableFileID() {
|
||||
$this->expectException(AlreadyProcessedException::class);
|
||||
|
||||
$displayName = 'Huraga';
|
||||
|
||||
@@ -3,8 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Recently contacted" : "Contactes recents",
|
||||
"Contacts Interaction" : "Interacció amb contactes",
|
||||
"Manages interaction between accounts and contacts" : "Gestiona la interacció entre comptes i contactes",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Reculliu dades sobre comptes i interaccions de contactes i proporcioneu una llibreta d'adreces per a les dades",
|
||||
"Manages interaction between users and contacts" : "Administra la interacció entre usuaris i contactes",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Recopileu dades sobre les interaccions d'usuaris i contactes i proporcioneu una llibreta d'adreces amb les dades"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Contactes recents",
|
||||
"Contacts Interaction" : "Interacció amb contactes",
|
||||
"Manages interaction between accounts and contacts" : "Gestiona la interacció entre comptes i contactes",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Reculliu dades sobre comptes i interaccions de contactes i proporcioneu una llibreta d'adreces per a les dades",
|
||||
"Manages interaction between users and contacts" : "Administra la interacció entre usuaris i contactes",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Recopileu dades sobre les interaccions d'usuaris i contactes i proporcioneu una llibreta d'adreces amb les dades"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -3,8 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Recently contacted" : "Nedávno kontaktovaní",
|
||||
"Contacts Interaction" : "Interakce s kontakty",
|
||||
"Manages interaction between accounts and contacts" : "Spravuje interakci mezi účty a kontakty",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi účty a kontakty a poskytuje pro tato data adresář kontaktů",
|
||||
"Manages interaction between users and contacts" : "Spravuje interakci mezi uživateli a kontakty",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi uživatelem a kontakty a poskytuje pro tato data adresář kontaktů"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Nedávno kontaktovaní",
|
||||
"Contacts Interaction" : "Interakce s kontakty",
|
||||
"Manages interaction between accounts and contacts" : "Spravuje interakci mezi účty a kontakty",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi účty a kontakty a poskytuje pro tato data adresář kontaktů",
|
||||
"Manages interaction between users and contacts" : "Spravuje interakci mezi uživateli a kontakty",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi uživatelem a kontakty a poskytuje pro tato data adresář kontaktů"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
|
||||
@@ -54,7 +54,7 @@ class ContactInteractionListener implements IEventListener {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->atomic(function () use ($event): void {
|
||||
$this->atomic(function () use ($event) {
|
||||
$uid = $event->getUid();
|
||||
$email = $event->getEmail();
|
||||
$federatedCloudId = $event->getFederatedCloudId();
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
OC.L10N.register(
|
||||
"dashboard",
|
||||
{
|
||||
"Dashboard" : "الرئيسية",
|
||||
"Dashboard" : "لوحة التحكم",
|
||||
"Dashboard app" : "تطبيق الصفحة الرئيسية",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "ابدأ يومك على اطِّلاع. \n\nتُعدُّ لوحة المعلومات dashboard في نكست كلاود هي نقطة البداية لليوم. إذ هي تُوفِّر لك نظرة عامة على مواعيدك القادمة و رسائل بريدك العاجلة و رسائل الدردشة و التذاكر الواردة و أحدث التغريدات و غير ذلك الكثير! يُمكِن للمستخدِم إضافة الأدوات التي يحبها و تغيير الخلفية حسب رغبته.",
|
||||
"\"{title} icon\"" : "\"{title} أيقونة\"",
|
||||
"Customize" : "تعديل",
|
||||
"Edit widgets" : "تعديل أدوات الصفحة الرئيسية",
|
||||
"Edit widgets" : "تعديل الودجات",
|
||||
"Get more widgets from the App Store" : "يمكنك الحصول على المزيد من الأدوات من متجر التطبيقات",
|
||||
"Weather service" : "خدمة الطقس",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "للحفاظ على خصوصيتك، يتم استدعاء بيانات حالة الطقس عبر خادم NextCloud الخاص بك نيابه عنك، وبالتالي فإن خدمة حالة الطقس لا تشارك معلوماتك الشخصية.",
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{ "translations": {
|
||||
"Dashboard" : "الرئيسية",
|
||||
"Dashboard" : "لوحة التحكم",
|
||||
"Dashboard app" : "تطبيق الصفحة الرئيسية",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "ابدأ يومك على اطِّلاع. \n\nتُعدُّ لوحة المعلومات dashboard في نكست كلاود هي نقطة البداية لليوم. إذ هي تُوفِّر لك نظرة عامة على مواعيدك القادمة و رسائل بريدك العاجلة و رسائل الدردشة و التذاكر الواردة و أحدث التغريدات و غير ذلك الكثير! يُمكِن للمستخدِم إضافة الأدوات التي يحبها و تغيير الخلفية حسب رغبته.",
|
||||
"\"{title} icon\"" : "\"{title} أيقونة\"",
|
||||
"Customize" : "تعديل",
|
||||
"Edit widgets" : "تعديل أدوات الصفحة الرئيسية",
|
||||
"Edit widgets" : "تعديل الودجات",
|
||||
"Get more widgets from the App Store" : "يمكنك الحصول على المزيد من الأدوات من متجر التطبيقات",
|
||||
"Weather service" : "خدمة الطقس",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "للحفاظ على خصوصيتك، يتم استدعاء بيانات حالة الطقس عبر خادم NextCloud الخاص بك نيابه عنك، وبالتالي فإن خدمة حالة الطقس لا تشارك معلوماتك الشخصية.",
|
||||
|
||||
@@ -3,7 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Dashboard" : "Nástěnka",
|
||||
"Dashboard app" : "Aplikace Nástěnka",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Začněte svůj den informovaní\n\nNextcloud Nástěnka je váš úvodní bod dne, který vám podává přehled\nnadcházejících schůzek, neodkladných e-mailů, zpráv v chatech, příchozích\npožadavků, nejnovějších tweetů a mnoha dalšího! Lidé si\nmohou přidávat ovládací prvky, které chtějí a měnit pozadí dle své libosti.",
|
||||
"\"{title} icon\"" : "„ikona {title}“",
|
||||
"Customize" : "Přizpůsobit si",
|
||||
"Edit widgets" : "Upravit ovládací prvky",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{ "translations": {
|
||||
"Dashboard" : "Nástěnka",
|
||||
"Dashboard app" : "Aplikace Nástěnka",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Začněte svůj den informovaní\n\nNextcloud Nástěnka je váš úvodní bod dne, který vám podává přehled\nnadcházejících schůzek, neodkladných e-mailů, zpráv v chatech, příchozích\npožadavků, nejnovějších tweetů a mnoha dalšího! Lidé si\nmohou přidávat ovládací prvky, které chtějí a měnit pozadí dle své libosti.",
|
||||
"\"{title} icon\"" : "„ikona {title}“",
|
||||
"Customize" : "Přizpůsobit si",
|
||||
"Edit widgets" : "Upravit ovládací prvky",
|
||||
|
||||
@@ -53,9 +53,7 @@
|
||||
|
||||
<commands>
|
||||
<command>OCA\DAV\Command\CreateAddressBook</command>
|
||||
<command>OCA\DAV\Command\ListAddressbooks</command>
|
||||
<command>OCA\DAV\Command\CreateCalendar</command>
|
||||
<command>OCA\DAV\Command\CreateSubscription</command>
|
||||
<command>OCA\DAV\Command\DeleteCalendar</command>
|
||||
<command>OCA\DAV\Command\FixCalendarSyncCommand</command>
|
||||
<command>OCA\DAV\Command\MoveCalendar</command>
|
||||
|
||||
@@ -153,10 +153,8 @@ return array(
|
||||
'OCA\\DAV\\CardDAV\\Xml\\Groups' => $baseDir . '/../lib/CardDAV/Xml/Groups.php',
|
||||
'OCA\\DAV\\Command\\CreateAddressBook' => $baseDir . '/../lib/Command/CreateAddressBook.php',
|
||||
'OCA\\DAV\\Command\\CreateCalendar' => $baseDir . '/../lib/Command/CreateCalendar.php',
|
||||
'OCA\\DAV\\Command\\CreateSubscription' => $baseDir . '/../lib/Command/CreateSubscription.php',
|
||||
'OCA\\DAV\\Command\\DeleteCalendar' => $baseDir . '/../lib/Command/DeleteCalendar.php',
|
||||
'OCA\\DAV\\Command\\FixCalendarSyncCommand' => $baseDir . '/../lib/Command/FixCalendarSyncCommand.php',
|
||||
'OCA\\DAV\\Command\\ListAddressbooks' => $baseDir . '/../lib/Command/ListAddressbooks.php',
|
||||
'OCA\\DAV\\Command\\ListCalendars' => $baseDir . '/../lib/Command/ListCalendars.php',
|
||||
'OCA\\DAV\\Command\\MoveCalendar' => $baseDir . '/../lib/Command/MoveCalendar.php',
|
||||
'OCA\\DAV\\Command\\RemoveInvalidShares' => $baseDir . '/../lib/Command/RemoveInvalidShares.php',
|
||||
@@ -214,7 +212,6 @@ return array(
|
||||
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => $baseDir . '/../lib/Connector/Sabre/SharesPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagList' => $baseDir . '/../lib/Connector/Sabre/TagList.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => $baseDir . '/../lib/Connector/Sabre/TagsPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => $baseDir . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => $baseDir . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => $baseDir . '/../lib/Controller/DirectController.php',
|
||||
'OCA\\DAV\\Controller\\InvitationResponseController' => $baseDir . '/../lib/Controller/InvitationResponseController.php',
|
||||
|
||||
@@ -168,10 +168,8 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\CardDAV\\Xml\\Groups' => __DIR__ . '/..' . '/../lib/CardDAV/Xml/Groups.php',
|
||||
'OCA\\DAV\\Command\\CreateAddressBook' => __DIR__ . '/..' . '/../lib/Command/CreateAddressBook.php',
|
||||
'OCA\\DAV\\Command\\CreateCalendar' => __DIR__ . '/..' . '/../lib/Command/CreateCalendar.php',
|
||||
'OCA\\DAV\\Command\\CreateSubscription' => __DIR__ . '/..' . '/../lib/Command/CreateSubscription.php',
|
||||
'OCA\\DAV\\Command\\DeleteCalendar' => __DIR__ . '/..' . '/../lib/Command/DeleteCalendar.php',
|
||||
'OCA\\DAV\\Command\\FixCalendarSyncCommand' => __DIR__ . '/..' . '/../lib/Command/FixCalendarSyncCommand.php',
|
||||
'OCA\\DAV\\Command\\ListAddressbooks' => __DIR__ . '/..' . '/../lib/Command/ListAddressbooks.php',
|
||||
'OCA\\DAV\\Command\\ListCalendars' => __DIR__ . '/..' . '/../lib/Command/ListCalendars.php',
|
||||
'OCA\\DAV\\Command\\MoveCalendar' => __DIR__ . '/..' . '/../lib/Command/MoveCalendar.php',
|
||||
'OCA\\DAV\\Command\\RemoveInvalidShares' => __DIR__ . '/..' . '/../lib/Command/RemoveInvalidShares.php',
|
||||
@@ -229,7 +227,6 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/SharesPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagList.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagsPlugin.php',
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => __DIR__ . '/..' . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => __DIR__ . '/..' . '/../lib/Controller/DirectController.php',
|
||||
'OCA\\DAV\\Controller\\InvitationResponseController' => __DIR__ . '/..' . '/../lib/Controller/InvitationResponseController.php',
|
||||
|
||||
+6
-7
@@ -77,11 +77,11 @@ OC.L10N.register(
|
||||
"In %1$s %2$s on %3$s for the entire day" : "عند %1$s %2$s في %3$s كامل اليوم",
|
||||
"In %1$s %2$s on %3$s between %4$s - %5$s" : "عند %1$s %2$s في %3$s بين %4$s - %5$s",
|
||||
"Could not generate when statement" : "يتعذّر تكوين عبارة \"متى\"",
|
||||
"Every Day for the entire day" : "كل يوم لكامل اليوم",
|
||||
"Every Day for the entire day" : "كل يوم كامل اليوم",
|
||||
"Every Day for the entire day until %1$s" : "كل يوم كامل اليوم حتى %1$s",
|
||||
"Every Day between %1$s - %2$s" : "كل يوم بين%1$s - %2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "كل يوم بين %1$s - %2$s حتى %3$s",
|
||||
"Every %1$d Days for the entire day" : "كل أيام %1$d لكامل اليوم",
|
||||
"Every %1$d Days for the entire day" : "كل أيام %1$d كامل اليوم",
|
||||
"Every %1$d Days for the entire day until %2$s" : "كل أيام %1$d كل اليوم حتى %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "كل أيام %1$d بين %2$s - %3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "كل أيام %1$d بين %2$s - %3$s حتى %4$s",
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "حسابات",
|
||||
"System address book which holds all accounts" : "دفتر عناوين النظام الذي يحوي كل الحسابات",
|
||||
"File is not updatable: %1$s" : "ملف غير قابل للتعديل: %1$s",
|
||||
"Failed to get storage for file" : "تعذّر الحصول على مكان لتخزين الملف",
|
||||
"Could not write to final file, canceled by hook" : "تعذرت الكتابة إلى الملف النهائي، تم إلغاؤه بواسطة خطّاف hook",
|
||||
"Could not write file contents" : "تعذرت كتابة محتويات الملف",
|
||||
"_%n byte_::_%n bytes_" : ["بايت","بايت","بايت","بايت","بايت","%n بايت"],
|
||||
@@ -228,9 +227,9 @@ OC.L10N.register(
|
||||
"No outstanding DAV system address book sync." : "لا توجد أي مزامنات معلقة لدفتر عناوني نظام DAV.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "لم يتم تشغيل مزامنة دفتر عناوين نظام DAV حتى الآن بسبب أن خادومك يحتوي على أكثر من 1000 مستخدم أو بسبب حدوث خطأ. يرجى تشغيل المزامنة يدويًا عن طريق الأمر السطري:\n\"occ dav:sync-system-addressbook\"",
|
||||
"WebDAV endpoint" : "النقطة الحدّيّة endpoint لـ WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "تعذر التحقُّق من إعداد خادم الويب عندك بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV. يرجى التحقُّق يدوياً.",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "تعذر التحقُّق من إعداد خادوم الويب عندك بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV. يرجى التحقُّق يدوياً.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : " لم يتم تعيين السماح لخادمك السحابي بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "خادم الويب عندك مُهيّءٌ بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "خادوم الويب عندك مُهيّءٌ بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV.",
|
||||
"Migrated calendar (%1$s)" : "تقويم مُرحّل (%1$s)",
|
||||
"Calendars including events, details and attendees" : "تحوي التقاويم الأحداث، و تفاصيلها، و الحُضُور",
|
||||
"Contacts and groups" : "جهات الاتصال والمجموعات",
|
||||
@@ -265,7 +264,7 @@ OC.L10N.register(
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "قٌم بتهيئة فترة غيابك القادمة.",
|
||||
"Calendar server" : "خادم التقويم",
|
||||
"Calendar server" : "خادوم التقويم",
|
||||
"Send invitations to attendees" : "إرسال دعوات للمُستهدفين بالحُضُُور",
|
||||
"Automatically generate a birthday calendar" : "تجاهل تقويم أعياد الميلاد تلقائيّاً",
|
||||
"Birthday calendars will be generated by a background job." : "تقويم أعياد الميلاد سيتم توليده من قِبَل مهمةٍ في الخلفية.",
|
||||
@@ -276,7 +275,7 @@ OC.L10N.register(
|
||||
"Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.",
|
||||
"Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عبر الزّجّ push.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "قم أيضاً بتنصيب {calendarappstoreopen} تطبيق التقويم {linkclose}, أو {calendardocopen} أوصل جهازك و موبايلك للمُزامنة ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادم البريد الالكتروني {linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادوم البريد الالكتروني {linkclose}.",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
|
||||
@@ -75,11 +75,11 @@
|
||||
"In %1$s %2$s on %3$s for the entire day" : "عند %1$s %2$s في %3$s كامل اليوم",
|
||||
"In %1$s %2$s on %3$s between %4$s - %5$s" : "عند %1$s %2$s في %3$s بين %4$s - %5$s",
|
||||
"Could not generate when statement" : "يتعذّر تكوين عبارة \"متى\"",
|
||||
"Every Day for the entire day" : "كل يوم لكامل اليوم",
|
||||
"Every Day for the entire day" : "كل يوم كامل اليوم",
|
||||
"Every Day for the entire day until %1$s" : "كل يوم كامل اليوم حتى %1$s",
|
||||
"Every Day between %1$s - %2$s" : "كل يوم بين%1$s - %2$s",
|
||||
"Every Day between %1$s - %2$s until %3$s" : "كل يوم بين %1$s - %2$s حتى %3$s",
|
||||
"Every %1$d Days for the entire day" : "كل أيام %1$d لكامل اليوم",
|
||||
"Every %1$d Days for the entire day" : "كل أيام %1$d كامل اليوم",
|
||||
"Every %1$d Days for the entire day until %2$s" : "كل أيام %1$d كل اليوم حتى %2$s",
|
||||
"Every %1$d Days between %2$s - %3$s" : "كل أيام %1$d بين %2$s - %3$s",
|
||||
"Every %1$d Days between %2$s - %3$s until %4$s" : "كل أيام %1$d بين %2$s - %3$s حتى %4$s",
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "حسابات",
|
||||
"System address book which holds all accounts" : "دفتر عناوين النظام الذي يحوي كل الحسابات",
|
||||
"File is not updatable: %1$s" : "ملف غير قابل للتعديل: %1$s",
|
||||
"Failed to get storage for file" : "تعذّر الحصول على مكان لتخزين الملف",
|
||||
"Could not write to final file, canceled by hook" : "تعذرت الكتابة إلى الملف النهائي، تم إلغاؤه بواسطة خطّاف hook",
|
||||
"Could not write file contents" : "تعذرت كتابة محتويات الملف",
|
||||
"_%n byte_::_%n bytes_" : ["بايت","بايت","بايت","بايت","بايت","%n بايت"],
|
||||
@@ -226,9 +225,9 @@
|
||||
"No outstanding DAV system address book sync." : "لا توجد أي مزامنات معلقة لدفتر عناوني نظام DAV.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "لم يتم تشغيل مزامنة دفتر عناوين نظام DAV حتى الآن بسبب أن خادومك يحتوي على أكثر من 1000 مستخدم أو بسبب حدوث خطأ. يرجى تشغيل المزامنة يدويًا عن طريق الأمر السطري:\n\"occ dav:sync-system-addressbook\"",
|
||||
"WebDAV endpoint" : "النقطة الحدّيّة endpoint لـ WebDAV",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "تعذر التحقُّق من إعداد خادم الويب عندك بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV. يرجى التحقُّق يدوياً.",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "تعذر التحقُّق من إعداد خادوم الويب عندك بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV. يرجى التحقُّق يدوياً.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : " لم يتم تعيين السماح لخادمك السحابي بتزامن الملف، بسبب واجهة التأليف الموزع على الويب وتعيين الإصدار WebDAV غير متصلة.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "خادم الويب عندك مُهيّءٌ بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "خادوم الويب عندك مُهيّءٌ بالشكل الصحيح للسماح بمزامنة الملفات عبر WebDAV.",
|
||||
"Migrated calendar (%1$s)" : "تقويم مُرحّل (%1$s)",
|
||||
"Calendars including events, details and attendees" : "تحوي التقاويم الأحداث، و تفاصيلها، و الحُضُور",
|
||||
"Contacts and groups" : "جهات الاتصال والمجموعات",
|
||||
@@ -263,7 +262,7 @@
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "إذا قمت بضبط ساعات عملك، سيرى الآخرون متى تكون خارج المكتب عندما يقومون بحجز اجتماع معك.",
|
||||
"Absence" : "غياب",
|
||||
"Configure your next absence period." : "قٌم بتهيئة فترة غيابك القادمة.",
|
||||
"Calendar server" : "خادم التقويم",
|
||||
"Calendar server" : "خادوم التقويم",
|
||||
"Send invitations to attendees" : "إرسال دعوات للمُستهدفين بالحُضُُور",
|
||||
"Automatically generate a birthday calendar" : "تجاهل تقويم أعياد الميلاد تلقائيّاً",
|
||||
"Birthday calendars will be generated by a background job." : "تقويم أعياد الميلاد سيتم توليده من قِبَل مهمةٍ في الخلفية.",
|
||||
@@ -274,7 +273,7 @@
|
||||
"Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.",
|
||||
"Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عبر الزّجّ push.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "قم أيضاً بتنصيب {calendarappstoreopen} تطبيق التقويم {linkclose}, أو {calendardocopen} أوصل جهازك و موبايلك للمُزامنة ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادم البريد الالكتروني {linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "رجاءُ، تأكّد من الإعداد الصحيح لـ {emailopen} خادوم البريد الالكتروني {linkclose}.",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Konten",
|
||||
"System address book which holds all accounts" : "Systemadressbuch, das alle Konten enthält",
|
||||
"File is not updatable: %1$s" : "Datei kann nicht aktualisiert werden: %1$s",
|
||||
"Failed to get storage for file" : "Speicherplatz für Datei konnte nicht abgerufen werden",
|
||||
"Could not write to final file, canceled by hook" : "In die endgültige Datei konnte nicht geschrieben werden, wurde durch einen Hook abgebrochen",
|
||||
"Could not write file contents" : "Dateiinhalt konnte nicht geschrieben werden",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "Konten",
|
||||
"System address book which holds all accounts" : "Systemadressbuch, das alle Konten enthält",
|
||||
"File is not updatable: %1$s" : "Datei kann nicht aktualisiert werden: %1$s",
|
||||
"Failed to get storage for file" : "Speicherplatz für Datei konnte nicht abgerufen werden",
|
||||
"Could not write to final file, canceled by hook" : "In die endgültige Datei konnte nicht geschrieben werden, wurde durch einen Hook abgebrochen",
|
||||
"Could not write file contents" : "Dateiinhalt konnte nicht geschrieben werden",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Konten",
|
||||
"System address book which holds all accounts" : "Systemadressbuch, das alle Konten enthält",
|
||||
"File is not updatable: %1$s" : "Datei kann nicht aktualisiert werden: %1$s",
|
||||
"Failed to get storage for file" : "Speicherplatz für Datei konnte nicht abgerufen werden",
|
||||
"Could not write to final file, canceled by hook" : "Konnte nicht in die endgültige Datei schreiben, wurde durch Hook abgebrochen.",
|
||||
"Could not write file contents" : "Dateiinhalt konnte nicht geschrieben werden",
|
||||
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "Konten",
|
||||
"System address book which holds all accounts" : "Systemadressbuch, das alle Konten enthält",
|
||||
"File is not updatable: %1$s" : "Datei kann nicht aktualisiert werden: %1$s",
|
||||
"Failed to get storage for file" : "Speicherplatz für Datei konnte nicht abgerufen werden",
|
||||
"Could not write to final file, canceled by hook" : "Konnte nicht in die endgültige Datei schreiben, wurde durch Hook abgebrochen.",
|
||||
"Could not write file contents" : "Dateiinhalt konnte nicht geschrieben werden",
|
||||
"_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"],
|
||||
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Accounts",
|
||||
"System address book which holds all accounts" : "System address book which holds all accounts",
|
||||
"File is not updatable: %1$s" : "File is not updatable: %1$s",
|
||||
"Failed to get storage for file" : "Failed to get storage for file",
|
||||
"Could not write to final file, canceled by hook" : "Could not write to final file, cancelled by hook",
|
||||
"Could not write file contents" : "Could not write file contents",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "Accounts",
|
||||
"System address book which holds all accounts" : "System address book which holds all accounts",
|
||||
"File is not updatable: %1$s" : "File is not updatable: %1$s",
|
||||
"Failed to get storage for file" : "Failed to get storage for file",
|
||||
"Could not write to final file, canceled by hook" : "Could not write to final file, cancelled by hook",
|
||||
"Could not write file contents" : "Could not write file contents",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Cuntais",
|
||||
"System address book which holds all accounts" : "Leabhar seoltaí córais ina bhfuil gach cuntas",
|
||||
"File is not updatable: %1$s" : "Ní féidir an comhad a nuashonrú: %1$s",
|
||||
"Failed to get storage for file" : "Theip ar stóras a fháil don chomhad",
|
||||
"Could not write to final file, canceled by hook" : "Níorbh fhéidir scríobh chuig an gcomhad deiridh, cealaithe le hook",
|
||||
"Could not write file contents" : "Níorbh fhéidir inneachar an chomhaid a scríobh",
|
||||
"_%n byte_::_%n bytes_" : ["%n beart ","%n bearta ","%n bearta","%n bearta","%n bearta"],
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "Cuntais",
|
||||
"System address book which holds all accounts" : "Leabhar seoltaí córais ina bhfuil gach cuntas",
|
||||
"File is not updatable: %1$s" : "Ní féidir an comhad a nuashonrú: %1$s",
|
||||
"Failed to get storage for file" : "Theip ar stóras a fháil don chomhad",
|
||||
"Could not write to final file, canceled by hook" : "Níorbh fhéidir scríobh chuig an gcomhad deiridh, cealaithe le hook",
|
||||
"Could not write file contents" : "Níorbh fhéidir inneachar an chomhaid a scríobh",
|
||||
"_%n byte_::_%n bytes_" : ["%n beart ","%n bearta ","%n bearta","%n bearta","%n bearta"],
|
||||
|
||||
@@ -198,7 +198,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Contas",
|
||||
"System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas",
|
||||
"File is not updatable: %1$s" : "Non é posíbel actualizar o ficheiro: %1$s",
|
||||
"Failed to get storage for file" : "Produciuse un fallo ao obter o almacenamento para o ficheiro",
|
||||
"Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, foi cancelado polo sistema",
|
||||
"Could not write file contents" : "Non foi posíbel escribir o contido do ficheiro",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
"Accounts" : "Contas",
|
||||
"System address book which holds all accounts" : "Caderno de enderezos do sistema que contén todas as contas",
|
||||
"File is not updatable: %1$s" : "Non é posíbel actualizar o ficheiro: %1$s",
|
||||
"Failed to get storage for file" : "Produciuse un fallo ao obter o almacenamento para o ficheiro",
|
||||
"Could not write to final file, canceled by hook" : "Non foi posíbel escribir no ficheiro final, foi cancelado polo sistema",
|
||||
"Could not write file contents" : "Non foi posíbel escribir o contido do ficheiro",
|
||||
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
|
||||
|
||||
@@ -72,8 +72,6 @@ OC.L10N.register(
|
||||
"Description: %s" : "Leírás: %s",
|
||||
"Where: %s" : "Hely: %s",
|
||||
"%1$s via %2$s" : "%1$s – %2$s",
|
||||
"In %1$s %2$s on %3$s for the entire day" : "%1$s-en %2$s %3$s-kor az teljes napra",
|
||||
"In %1$s %2$s on %3$s between %4$s - %5$s" : "%1$s-en %2$s %3$s-kor %4$s - %5$sközött",
|
||||
"Could not generate when statement" : "Nem sikerlt létrehozni a mikor állítást",
|
||||
"Every Day for the entire day" : "Minden Nap a teljes napra",
|
||||
"Every Day for the entire day until %1$s" : "Minden Nap a teljes napon eddig %1$s",
|
||||
@@ -90,8 +88,6 @@ OC.L10N.register(
|
||||
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Minden Hét %1$s napján %2$s - %3$s között %4$s-ig",
|
||||
"Every %1$d Weeks on %2$s for the entire day" : "Minden%1$d héten %2$s napon a teljes napra",
|
||||
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Minden%1$d Héten %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Minden%1$d hét %2$s napján %3$s - %4$sközött",
|
||||
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Minden%1$d héten %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every Month on the %1$s for the entire day" : "Minden hónap %1$s napján a teljes napon",
|
||||
"Every Month on the %1$s for the entire day until %2$s" : "Minden hónap %1$s napján a teljes napon %2$s-ig",
|
||||
"Every Month on the %1$s between %2$s - %3$s" : "Minden hónap %1$s napján %2$sés %3$s között",
|
||||
@@ -100,11 +96,6 @@ OC.L10N.register(
|
||||
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Minden%1$d Hónap %2$s napján a teljes napon %3$s-ig",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között",
|
||||
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Minden%1$d Hónap %2$s napján %3$s és %4$s között %5$s-ig",
|
||||
"Every Year in %1$s on the %2$s for the entire day" : "Minden év %1$s hónap %2$s napján a teljes napra",
|
||||
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Minden év %1$s hónapjában %2$s napján a teljes napon %3$s-ig",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$sközött.",
|
||||
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Minden év %1$s hónapjában %2$s napján %3$s - %4$s között eddig %5$s",
|
||||
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Minden%1$d év %2$s hónapján %3$s napján a teljes napra",
|
||||
"On specific dates for the entire day until %1$s" : "Egy megadott időpontban a teljes napon %1$s-ig ",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "Egy megadott időpontban %1$s és %2$s %3$s-ig",
|
||||
"Could not generate next recurrence statement" : "Nem sikerült a következő megújuló eseményt létrehozni",
|
||||
@@ -187,7 +178,6 @@ OC.L10N.register(
|
||||
"Accounts" : "Fiókok",
|
||||
"System address book which holds all accounts" : "A rendszer címjegyzéke, amely az összes fiókot tartalmazza",
|
||||
"File is not updatable: %1$s" : "A fájl nem frissíthető: %1$s",
|
||||
"Failed to get storage for file" : "Nem sikerlt a tárhely lekérése a fájl számára",
|
||||
"Could not write to final file, canceled by hook" : "A végleges fájl nem írható, a hurok megszakította",
|
||||
"Could not write file contents" : "A fájl tartalma nem írható",
|
||||
"_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"],
|
||||
@@ -202,7 +192,6 @@ OC.L10N.register(
|
||||
"Failed to unlink: %1$s" : "A hivatkozás eltávolítása sikertelen: %1$s",
|
||||
"Failed to write file contents: %1$s" : "A fájl tartalmának kiírása sikertelen: %1$s",
|
||||
"File not found: %1$s" : "A fájl nem található: %1$s",
|
||||
"Invalid target path" : "Érvénytelen elérési útvonal",
|
||||
"System is in maintenance mode." : "A rendszer karbantartási módban van.",
|
||||
"Upgrade needed" : "Frissítés szükséges",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "A %s kiszolgálót HTTPS használatára kell beállítani, hogy iOS-szel/macOS-szel használhassa CalDAV-ot és a CardDAV-ot.",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user