Merge branch 'master' into stable

This commit is contained in:
Marcel Klehr 2020-10-28 08:51:46 +01:00
commit 4b9e4ca510
49 changed files with 3036 additions and 778 deletions

37
.github/workflows/psalm.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: Static analysis
on:
pull_request:
push:
branches:
- master
- stable*
jobs:
static-psalm-analysis:
runs-on: ubuntu-latest
strategy:
matrix:
ocp-version: [ 'dev-master', 'v20.0.0' ]
name: Nextcloud ${{ matrix.ocp-version }}
steps:
- name: Checkout
uses: actions/checkout@master
- name: Set up php
uses: shivammathur/setup-php@master
with:
php-version: 7.4
coverage: none
- name: Install dependencies
run: composer i
- name: Install dependencies
run: composer require --dev christophwurst/nextcloud:${{ matrix.ocp-version }}
- name: Run coding standards check
run: composer run psalm

View File

@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [4.0.1] - 2020-10-27
### Fixed
- Fix bookmark hashing
- Update PHP dependencies
- Update JS dependencies
- Apply minor static analysis fixes
## [4.0.0] - 2020-10-22
### New
@ -430,6 +438,8 @@ Supported are NC 15 and 16, provided you are using PHP v7.1 and have gmp, intl a
- FIX folder collapse css
- FIX: Speed up findBookmarks SQL query
[4.0.1]: https://github.com/nextcloud/bookmarks/compare/v4.0.0...v4.0.1
[4.0.0]: https://github.com/nextcloud/bookmarks/compare/v3.4.4...v4.0.0
[3.4.4]: https://github.com/nextcloud/bookmarks/compare/v3.4.3...v3.4.4
[3.4.3]: https://github.com/nextcloud/bookmarks/compare/v3.4.2...v3.4.3
[3.4.2]: https://github.com/nextcloud/bookmarks/compare/v3.4.1...v3.4.2

View File

@ -7,7 +7,7 @@ source_dir=$(build_dir)/source
sign_dir=$(build_dir)/sign
package_name=$(app_name)
cert_dir=$(HOME)/.nextcloud/certificates
version+=4.0.0
version+=4.0.1
all: dev-setup build-js-production

View File

@ -17,7 +17,7 @@ Requirements:
- mbstring: *
- Nextcloud v20+
]]></description>
<version>4.0.0</version>
<version>4.0.1</version>
<licence>agpl</licence>
<author mail="mklehr@gmx.net">Marcel Klehr</author>
<author mail="blizzz@arthur-schiwon.de" homepage="https://www.arthur-schiwon.de">Arthur Schiwon</author>

View File

@ -13,14 +13,16 @@
"psr/http-message": "^1.0",
"rowbot/url": "^3.0",
"ralouphie/mimey": "^2.1",
"symfony/console": "4.4.10",
"symfony/console": "^4.4",
"symfony/event-dispatcher": "^4.4",
"symfony/process": "4.4.10",
"symfony/routing": "4.4.10"
"symfony/process": "^4.4",
"symfony/routing": "^4.4"
},
"require-dev": {
"phpunit/phpunit": "^8.5",
"nextcloud/coding-standard": "^0.3.0"
"nextcloud/coding-standard": "^0.3.0",
"vimeo/psalm": "^3.18",
"christophwurst/nextcloud": "v20.0.0"
},
"config": {
"optimize-autoloader": true,
@ -29,6 +31,7 @@
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",
"cs:check": "php-cs-fixer fix --dry-run --diff",
"cs:fix": "php-cs-fixer fix"
"cs:fix": "php-cs-fixer fix",
"psalm": "psalm --output-format=github --no-progress --show-info=true"
}
}

1172
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Nová složka",
"Grid view" : "Zobrazení v mřížce",
"List view" : "Zobrazení v seznamu",
"Private RSS Feed of current view" : "Soukromý RSS kanál stávajícího pohledu",
"RSS Feed of current view" : "RSS kanál stávajícího pohledu",
"Move selection" : "Přesunout vybrané",
"Delete selection" : "Smazat výběr",
"Open all selected" : "Otevřít vše vybrané",

View File

@ -49,7 +49,7 @@
"New folder" : "Nová složka",
"Grid view" : "Zobrazení v mřížce",
"List view" : "Zobrazení v seznamu",
"Private RSS Feed of current view" : "Soukromý RSS kanál stávajícího pohledu",
"RSS Feed of current view" : "RSS kanál stávajícího pohledu",
"Move selection" : "Přesunout vybrané",
"Delete selection" : "Smazat výběr",
"Open all selected" : "Otevřít vše vybrané",

View File

@ -43,15 +43,15 @@ OC.L10N.register(
"Details" : "Details",
"Rename" : "Umbenennen",
"Move" : "Verschieben",
"Delete" : " Löschen",
"Search" : "Benötigt keine Übersetzung. Für iOS wird nur die formelle Übersetzung verwendet (de_DE).",
"Delete" : "Löschen",
"Search" : "Suche",
"Select one or more tags" : "Ein oder mehrere Schlagworte auswählen",
"New" : "Neu",
"New bookmark" : "Neues Lesezeichen",
"New folder" : "Neuer Ordner",
"Grid view" : "Rasteransicht",
"List view" : "Listenansicht",
"Private RSS Feed of current view" : "Privater RSS-Feed der aktuellen Ansicht",
"RSS Feed of current view" : "RSS-Feed der aktuellen Ansicht",
"Move selection" : "Auswahl verschieben",
"Delete selection" : "Auswahl löschen",
"Open all selected" : "Alle ausgewählten öffnen",
@ -79,13 +79,13 @@ OC.L10N.register(
"All bookmarks" : "Alle Lesezeichen",
"Recent" : "Neueste",
"Archived" : "Archiviert",
"Broken links" : "Ungültiger Link",
"Broken links" : "Ungültige Links",
"Filter tags" : "Schlagworte filtern",
"Untagged" : "Kein Schlagwort",
"{used} bookmarks of {available} available" : "{used} Lesezeichen von {available} verfügbaren",
"No archived bookmarks" : "Keine archivierten Lesezeichen",
"Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline." : "Lesezeichen für Dateien wie Fotos oder PDFs werden automatisch in deinen Nextcloud-Dateien gespeichert, sodass du sie auch dann finden kannst, wenn der Link offline geschaltet wird.",
"No bookmarks here" : "Keine Lesezeichen vorhanden.",
"Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline." : "Lesezeichen für Dateien wie Fotos oder PDFs werden automatisch in Deinen Nextcloud-Dateien gespeichert, sodass Du sie auch dann finden kannst, wenn der Link offline geschaltet wird.",
"No bookmarks here" : "Keine Lesezeichen vorhanden",
"Add a bookmark" : "Lesezeichen hinzufügen",
"Import bookmarks" : "Lesezeichen importieren",
"Import" : "Importieren",
@ -136,7 +136,7 @@ OC.L10N.register(
"RSS feed copied" : "RSS-Feed kopiert",
"Select" : "Auswählen",
"Previews" : "Vorschau",
"In order to display real screenshots of your bookmarked websites, Bookmarks can use third-party services to generate previews." : "Um Screenshots deiner, mit Lesezeichen versehenen, Websites anzuzeigen, können Vorschaubilder mithilfe Drittanbieter-Dienste eine Vorschau erstellt werden.",
"In order to display real screenshots of your bookmarked websites, Bookmarks can use third-party services to generate previews." : "Um Screenshots Deiner, mit Lesezeichen versehenen, Websites anzuzeigen, können Vorschaubilder mithilfe Drittanbieter-Dienste eine Vorschau erstellt werden.",
"Screeenly" : "Screeenly",
"You can either sign up for free at screeenly.com or setup your own server." : "Du kannst Dich entweder kostenlos bei screeenly.com anmelden oder Deinen eigenen Server einrichten.",
"Screeenly API URL" : "Screeenly-API-URL",

View File

@ -41,15 +41,15 @@
"Details" : "Details",
"Rename" : "Umbenennen",
"Move" : "Verschieben",
"Delete" : " Löschen",
"Search" : "Benötigt keine Übersetzung. Für iOS wird nur die formelle Übersetzung verwendet (de_DE).",
"Delete" : "Löschen",
"Search" : "Suche",
"Select one or more tags" : "Ein oder mehrere Schlagworte auswählen",
"New" : "Neu",
"New bookmark" : "Neues Lesezeichen",
"New folder" : "Neuer Ordner",
"Grid view" : "Rasteransicht",
"List view" : "Listenansicht",
"Private RSS Feed of current view" : "Privater RSS-Feed der aktuellen Ansicht",
"RSS Feed of current view" : "RSS-Feed der aktuellen Ansicht",
"Move selection" : "Auswahl verschieben",
"Delete selection" : "Auswahl löschen",
"Open all selected" : "Alle ausgewählten öffnen",
@ -77,13 +77,13 @@
"All bookmarks" : "Alle Lesezeichen",
"Recent" : "Neueste",
"Archived" : "Archiviert",
"Broken links" : "Ungültiger Link",
"Broken links" : "Ungültige Links",
"Filter tags" : "Schlagworte filtern",
"Untagged" : "Kein Schlagwort",
"{used} bookmarks of {available} available" : "{used} Lesezeichen von {available} verfügbaren",
"No archived bookmarks" : "Keine archivierten Lesezeichen",
"Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline." : "Lesezeichen für Dateien wie Fotos oder PDFs werden automatisch in deinen Nextcloud-Dateien gespeichert, sodass du sie auch dann finden kannst, wenn der Link offline geschaltet wird.",
"No bookmarks here" : "Keine Lesezeichen vorhanden.",
"Bookmarks to files like photos or PDFs will automatically be saved to your Nextcloud files, so you can still find them even when the link goes offline." : "Lesezeichen für Dateien wie Fotos oder PDFs werden automatisch in Deinen Nextcloud-Dateien gespeichert, sodass Du sie auch dann finden kannst, wenn der Link offline geschaltet wird.",
"No bookmarks here" : "Keine Lesezeichen vorhanden",
"Add a bookmark" : "Lesezeichen hinzufügen",
"Import bookmarks" : "Lesezeichen importieren",
"Import" : "Importieren",
@ -134,7 +134,7 @@
"RSS feed copied" : "RSS-Feed kopiert",
"Select" : "Auswählen",
"Previews" : "Vorschau",
"In order to display real screenshots of your bookmarked websites, Bookmarks can use third-party services to generate previews." : "Um Screenshots deiner, mit Lesezeichen versehenen, Websites anzuzeigen, können Vorschaubilder mithilfe Drittanbieter-Dienste eine Vorschau erstellt werden.",
"In order to display real screenshots of your bookmarked websites, Bookmarks can use third-party services to generate previews." : "Um Screenshots Deiner, mit Lesezeichen versehenen, Websites anzuzeigen, können Vorschaubilder mithilfe Drittanbieter-Dienste eine Vorschau erstellt werden.",
"Screeenly" : "Screeenly",
"You can either sign up for free at screeenly.com or setup your own server." : "Du kannst Dich entweder kostenlos bei screeenly.com anmelden oder Deinen eigenen Server einrichten.",
"Screeenly API URL" : "Screeenly-API-URL",

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Neuer Ordner",
"Grid view" : "Rasteransicht",
"List view" : "Listenansicht",
"Private RSS Feed of current view" : "Privater RSS-Feed der aktuellen Ansicht",
"RSS Feed of current view" : "RSS-Feed der aktuellen Ansicht",
"Move selection" : "Auswahl verschieben",
"Delete selection" : "Auswahl löschen",
"Open all selected" : "Alle ausgewählten öffnen",
@ -75,7 +75,7 @@ OC.L10N.register(
"Moving selection" : "Auswahl verschieben",
"_Moving %n folder and some bookmarks_::_Moving %n folders and some bookmarks_" : ["Verschiebe %n Verzeichnis und einige Lesezeichen","Verschiebe %n Verzeichnisse und einige Lesezeichen"],
"_Moving %n folder_::_Moving %n folders_" : ["Verschiebe %n Verzeichnis","Verschiebe %n Verzeichnisse"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n Lesezeichen verschoben","%n Lesezeichen verschoben"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n Lesezeichen verschieben","Verschiebe %n Lesezeichen"],
"All bookmarks" : "Alle Lesezeichen",
"Recent" : "Neueste",
"Archived" : "Archiviert",

View File

@ -49,7 +49,7 @@
"New folder" : "Neuer Ordner",
"Grid view" : "Rasteransicht",
"List view" : "Listenansicht",
"Private RSS Feed of current view" : "Privater RSS-Feed der aktuellen Ansicht",
"RSS Feed of current view" : "RSS-Feed der aktuellen Ansicht",
"Move selection" : "Auswahl verschieben",
"Delete selection" : "Auswahl löschen",
"Open all selected" : "Alle ausgewählten öffnen",
@ -73,7 +73,7 @@
"Moving selection" : "Auswahl verschieben",
"_Moving %n folder and some bookmarks_::_Moving %n folders and some bookmarks_" : ["Verschiebe %n Verzeichnis und einige Lesezeichen","Verschiebe %n Verzeichnisse und einige Lesezeichen"],
"_Moving %n folder_::_Moving %n folders_" : ["Verschiebe %n Verzeichnis","Verschiebe %n Verzeichnisse"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n Lesezeichen verschoben","%n Lesezeichen verschoben"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n Lesezeichen verschieben","Verschiebe %n Lesezeichen"],
"All bookmarks" : "Alle Lesezeichen",
"Recent" : "Neueste",
"Archived" : "Archiviert",

View File

@ -51,7 +51,6 @@ OC.L10N.register(
"New folder" : "Νέος φάκελος",
"Grid view" : "Προβολή πλέγματος",
"List view" : "Προβολή λίστας",
"Private RSS Feed of current view" : "Ιδιωτική ροή RSS τρέχουσας προβολής",
"Move selection" : "Μετακίνηση επιλογής",
"Delete selection" : "Διαγραφή επιλογής",
"Open all selected" : "Άνοιγμα των επιλεγμένων",

View File

@ -49,7 +49,6 @@
"New folder" : "Νέος φάκελος",
"Grid view" : "Προβολή πλέγματος",
"List view" : "Προβολή λίστας",
"Private RSS Feed of current view" : "Ιδιωτική ροή RSS τρέχουσας προβολής",
"Move selection" : "Μετακίνηση επιλογής",
"Delete selection" : "Διαγραφή επιλογής",
"Open all selected" : "Άνοιγμα των επιλεγμένων",

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Nueva carpeta",
"Grid view" : "Vista en cuadrícula",
"List view" : "Vista de lista",
"Private RSS Feed of current view" : "Fuente RSS privada de la vista actual",
"RSS Feed of current view" : "Fuente RSS de la vista actual",
"Move selection" : "Mover la selección",
"Delete selection" : "Borrar la selección",
"Open all selected" : "Abrir todos los seleccionados",

View File

@ -49,7 +49,7 @@
"New folder" : "Nueva carpeta",
"Grid view" : "Vista en cuadrícula",
"List view" : "Vista de lista",
"Private RSS Feed of current view" : "Fuente RSS privada de la vista actual",
"RSS Feed of current view" : "Fuente RSS de la vista actual",
"Move selection" : "Mover la selección",
"Delete selection" : "Borrar la selección",
"Open all selected" : "Abrir todos los seleccionados",

View File

@ -37,6 +37,7 @@ OC.L10N.register(
"Create bookmark" : "Créer un favori",
"Takes a link and adds it to your collection of bookmarks." : "Prenez un lien et ajoutez-le à votre collection de favoris.",
"A Bookmark manager for Nextcloud" : "Un gestionnaire de favoris pour Nextcloud",
"This app provides you with a web interface for collecting, organizing and sharing bookmarks to the sites on the web that are precious to you.\nYou can browse and filter your bookmarks via tags, folders and by using the built-in search feature and you can share folders with other users and groups as well as create public links for them.\nAlso, in order to access your bookmarks anywhere, it also allows you to synchronize with third-party clients via a built-in REST API -- be it in your browsers or on your phone.\nCheck out the third-party clients listed here: https://github.com/nextcloud/bookmarks#third-party-clients\n\nRequirements:\n - PHP v7.3+\n - PHP extensions:\n - intl: *\n - mbstring: *\n - Nextcloud v20+" : "Cette application vous fournit une interface Web pour collecter, organiser et partager des signets vers les sites Web qui vous sont précieux.\nVous pouvez parcourir et filtrer vos signets via des balises, des dossiers et en utilisant la fonction de recherche intégrée et vous pouvez partager des dossiers avec d'autres utilisateurs et groupes ainsi que créer des liens publics pour eux. \nDe plus, afin d'atteindre vos signets de n'importe où, vous pouvez également vous synchroniser avec des clients tiers via une API REST intégrée - que ce soit dans votre navigateur ou sur votre téléphone.\nVérifiez les clients tiers répertoriés ici: https://github.com/nextcloud/bookmarks#third-party-clients\n\nRequirements: \nPHP - PHP v7.2 +\n- PHP extensions:\n- intl: * \n- mbstring: * \n- Nextcloud v20 +",
"Enter new title" : "Saisissez un nouveau titre",
"Select bookmark" : "Sélectionner le favori",
"Details" : "Propriétés",
@ -50,7 +51,7 @@ OC.L10N.register(
"New folder" : "Nouveau dossier",
"Grid view" : "Affichage mosaïque",
"List view" : "Affichage liste",
"Private RSS Feed of current view" : "Flux RSS privé de la vue actuelle",
"RSS Feed of current view" : "Flux RSS de la vue courante",
"Move selection" : "Déplacer la sélection",
"Delete selection" : "Supprimer la sélection",
"Open all selected" : "Ouvrir toute la sélection",

View File

@ -35,6 +35,7 @@
"Create bookmark" : "Créer un favori",
"Takes a link and adds it to your collection of bookmarks." : "Prenez un lien et ajoutez-le à votre collection de favoris.",
"A Bookmark manager for Nextcloud" : "Un gestionnaire de favoris pour Nextcloud",
"This app provides you with a web interface for collecting, organizing and sharing bookmarks to the sites on the web that are precious to you.\nYou can browse and filter your bookmarks via tags, folders and by using the built-in search feature and you can share folders with other users and groups as well as create public links for them.\nAlso, in order to access your bookmarks anywhere, it also allows you to synchronize with third-party clients via a built-in REST API -- be it in your browsers or on your phone.\nCheck out the third-party clients listed here: https://github.com/nextcloud/bookmarks#third-party-clients\n\nRequirements:\n - PHP v7.3+\n - PHP extensions:\n - intl: *\n - mbstring: *\n - Nextcloud v20+" : "Cette application vous fournit une interface Web pour collecter, organiser et partager des signets vers les sites Web qui vous sont précieux.\nVous pouvez parcourir et filtrer vos signets via des balises, des dossiers et en utilisant la fonction de recherche intégrée et vous pouvez partager des dossiers avec d'autres utilisateurs et groupes ainsi que créer des liens publics pour eux. \nDe plus, afin d'atteindre vos signets de n'importe où, vous pouvez également vous synchroniser avec des clients tiers via une API REST intégrée - que ce soit dans votre navigateur ou sur votre téléphone.\nVérifiez les clients tiers répertoriés ici: https://github.com/nextcloud/bookmarks#third-party-clients\n\nRequirements: \nPHP - PHP v7.2 +\n- PHP extensions:\n- intl: * \n- mbstring: * \n- Nextcloud v20 +",
"Enter new title" : "Saisissez un nouveau titre",
"Select bookmark" : "Sélectionner le favori",
"Details" : "Propriétés",
@ -48,7 +49,7 @@
"New folder" : "Nouveau dossier",
"Grid view" : "Affichage mosaïque",
"List view" : "Affichage liste",
"Private RSS Feed of current view" : "Flux RSS privé de la vue actuelle",
"RSS Feed of current view" : "Flux RSS de la vue courante",
"Move selection" : "Déplacer la sélection",
"Delete selection" : "Supprimer la sélection",
"Open all selected" : "Ouvrir toute la sélection",

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Novo cartafol",
"Grid view" : "Ver como grella",
"List view" : "Ver como lista",
"Private RSS Feed of current view" : "Fonte RSS privada da vista actual",
"RSS Feed of current view" : "Fonte RSS da vista actual",
"Move selection" : "Mover a selección",
"Delete selection" : "Eliminar a selección",
"Open all selected" : "Abrir todos os seleccionados",

View File

@ -49,7 +49,7 @@
"New folder" : "Novo cartafol",
"Grid view" : "Ver como grella",
"List view" : "Ver como lista",
"Private RSS Feed of current view" : "Fonte RSS privada da vista actual",
"RSS Feed of current view" : "Fonte RSS da vista actual",
"Move selection" : "Mover a selección",
"Delete selection" : "Eliminar a selección",
"Open all selected" : "Abrir todos os seleccionados",

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Nuova cartella",
"Grid view" : "Vista Griglia",
"List view" : "Vista Elenco",
"Private RSS Feed of current view" : "Fonte RSS privata della vista attuale",
"RSS Feed of current view" : "Fonte RSS della vista attuale",
"Move selection" : "Sposta selezione",
"Delete selection" : "Elimina selezione",
"Open all selected" : "Apri tutti i selezionati",

View File

@ -49,7 +49,7 @@
"New folder" : "Nuova cartella",
"Grid view" : "Vista Griglia",
"List view" : "Vista Elenco",
"Private RSS Feed of current view" : "Fonte RSS privata della vista attuale",
"RSS Feed of current view" : "Fonte RSS della vista attuale",
"Move selection" : "Sposta selezione",
"Delete selection" : "Elimina selezione",
"Open all selected" : "Apri tutti i selezionati",

View File

@ -5,6 +5,7 @@ OC.L10N.register(
"Rename" : "ប្ដូរ​ឈ្មោះ",
"Move" : "Move",
"Delete" : "លុប",
"Search" : "Search",
"New" : "ថ្មី",
"New folder" : "ថត​ថ្មី",
"Cancel" : "បោះបង់",

View File

@ -3,6 +3,7 @@
"Rename" : "ប្ដូរ​ឈ្មោះ",
"Move" : "Move",
"Delete" : "លុប",
"Search" : "Search",
"New" : "ថ្មី",
"New folder" : "ថត​ថ្មី",
"Cancel" : "បោះបង់",

View File

@ -50,6 +50,7 @@ OC.L10N.register(
"New folder" : "Nieuwe map",
"Grid view" : "Rasterweergave",
"List view" : "Lijstweergave",
"RSS Feed of current view" : "RSS Feed van huidige weergave",
"Move selection" : "Verplaats selectie",
"Delete selection" : "Verwijder selectie",
"Open all selected" : "Open alle geselecteerde",
@ -60,12 +61,17 @@ OC.L10N.register(
"_Selected %n folder_::_Selected %n folders_" : ["Selecteerde %n map","Selecteerde %n mappen"],
"Enter a link" : "Voer een link in",
"Enter a title" : "Voer een titel in",
"No bookmarks found" : "Geen bladwijzers gevonden",
"Select folder" : "Selecteer map",
"Enter folder title" : "Geef maptitel op",
"Shared by {user}" : "Gedeeld door {user}",
"Root folder" : "Hoofdmap",
"Submit" : "Verwerken",
"Cancel" : "Annuleren",
"Deleting bookmarks" : "Bladwijzers verwijderen",
"Deleting selection" : "Selectie verwijderen",
"Importing bookmarks" : "Bladwijzers importeren",
"Moving selection" : "Selectie verplaatsen",
"_Moving %n folder and some bookmarks_::_Moving %n folders and some bookmarks_" : ["%n folder en bladwijzers verplaatsen","%n mappen en bookmarks verplaatsen"],
"_Moving %n folder_::_Moving %n folders_" : ["%n folder verplaatsen","%n mappen verplaatsen"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n bladwijzer verplaatsen","%n bookmarks verplaatsen"],
@ -94,6 +100,7 @@ OC.L10N.register(
"Client apps" : "Client apps",
"Also check out the collection of client apps that integrate with this app: " : "Bekijk ook de verzameling client-apps die met deze app kunnen worden geïntegreerd:",
"Install web app" : "Installeer web app",
"Install on home screen" : "Installeren op thuisscherm",
"Bookmarklet" : "Bookmarklet",
"Drag this to your browser bookmarks and click it to quickly bookmark a webpage" : "Sleep dit naar de bookmarks van je browser en klik erop om snel een bookmark voor een webpagina te maken",
"Add to {instanceName}" : "Toevoegen aan {instanceName}",
@ -101,6 +108,7 @@ OC.L10N.register(
"Permanently remove all bookmarks from your account." : "Verwijder alle bladwijzers permanent uit je account.",
"Delete all bookmarks" : "Verwijder alle bookmarks",
"Do you really want to delete all your bookmarks?" : "Wil je echt al je bookmarks verwijderen?",
"Please select \"Add to home screen\" in your browser menu" : "Selecteer 'Voeg toe aan thuisscherm' in je browser menu",
"Title" : "Titel",
"Link" : "Link",
"Creation date" : "Aanmaakdatum",
@ -110,6 +118,7 @@ OC.L10N.register(
"Archived version" : "Gearchiveerde versie",
"Open archived file" : "Open gearchiveerd bestand",
"Notes" : "Notities",
"Notes for this bookmark …" : "Notities voor deze bladwijzer...",
"{time} ago" : "{time} geleden",
"Owner" : "Eigenaar",
"Sharing" : "Delen",

View File

@ -48,6 +48,7 @@
"New folder" : "Nieuwe map",
"Grid view" : "Rasterweergave",
"List view" : "Lijstweergave",
"RSS Feed of current view" : "RSS Feed van huidige weergave",
"Move selection" : "Verplaats selectie",
"Delete selection" : "Verwijder selectie",
"Open all selected" : "Open alle geselecteerde",
@ -58,12 +59,17 @@
"_Selected %n folder_::_Selected %n folders_" : ["Selecteerde %n map","Selecteerde %n mappen"],
"Enter a link" : "Voer een link in",
"Enter a title" : "Voer een titel in",
"No bookmarks found" : "Geen bladwijzers gevonden",
"Select folder" : "Selecteer map",
"Enter folder title" : "Geef maptitel op",
"Shared by {user}" : "Gedeeld door {user}",
"Root folder" : "Hoofdmap",
"Submit" : "Verwerken",
"Cancel" : "Annuleren",
"Deleting bookmarks" : "Bladwijzers verwijderen",
"Deleting selection" : "Selectie verwijderen",
"Importing bookmarks" : "Bladwijzers importeren",
"Moving selection" : "Selectie verplaatsen",
"_Moving %n folder and some bookmarks_::_Moving %n folders and some bookmarks_" : ["%n folder en bladwijzers verplaatsen","%n mappen en bookmarks verplaatsen"],
"_Moving %n folder_::_Moving %n folders_" : ["%n folder verplaatsen","%n mappen verplaatsen"],
"_Moving %n bookmark_::_Moving %n bookmarks_" : ["%n bladwijzer verplaatsen","%n bookmarks verplaatsen"],
@ -92,6 +98,7 @@
"Client apps" : "Client apps",
"Also check out the collection of client apps that integrate with this app: " : "Bekijk ook de verzameling client-apps die met deze app kunnen worden geïntegreerd:",
"Install web app" : "Installeer web app",
"Install on home screen" : "Installeren op thuisscherm",
"Bookmarklet" : "Bookmarklet",
"Drag this to your browser bookmarks and click it to quickly bookmark a webpage" : "Sleep dit naar de bookmarks van je browser en klik erop om snel een bookmark voor een webpagina te maken",
"Add to {instanceName}" : "Toevoegen aan {instanceName}",
@ -99,6 +106,7 @@
"Permanently remove all bookmarks from your account." : "Verwijder alle bladwijzers permanent uit je account.",
"Delete all bookmarks" : "Verwijder alle bookmarks",
"Do you really want to delete all your bookmarks?" : "Wil je echt al je bookmarks verwijderen?",
"Please select \"Add to home screen\" in your browser menu" : "Selecteer 'Voeg toe aan thuisscherm' in je browser menu",
"Title" : "Titel",
"Link" : "Link",
"Creation date" : "Aanmaakdatum",
@ -108,6 +116,7 @@
"Archived version" : "Gearchiveerde versie",
"Open archived file" : "Open gearchiveerd bestand",
"Notes" : "Notities",
"Notes for this bookmark …" : "Notities voor deze bladwijzer...",
"{time} ago" : "{time} geleden",
"Owner" : "Eigenaar",
"Sharing" : "Delen",

View File

@ -51,7 +51,7 @@ OC.L10N.register(
"New folder" : "Nowy folder",
"Grid view" : "Widok siatki",
"List view" : "Widok listy",
"Private RSS Feed of current view" : "Prywatny kanał RSS aktualnego widoku",
"RSS Feed of current view" : "Kanał RSS bieżącego widoku",
"Move selection" : "Przenieś wybrane",
"Delete selection" : "Usuń wybrane",
"Open all selected" : "Otwórz wszystkie wybrane",
@ -119,7 +119,7 @@ OC.L10N.register(
"Archived version" : "Wersja zarchiwizowana",
"Open archived file" : "Otwórz zarchiwizowany plik",
"Notes" : "Notatki",
"Notes for this bookmark …" : "Uwagi dotyczące tej zakładki...",
"Notes for this bookmark …" : "Uwagi dotyczące tej zakładki",
"{time} ago" : "{time} temu",
"Owner" : "Właściciel",
"Sharing" : "Udostępnianie",

View File

@ -49,7 +49,7 @@
"New folder" : "Nowy folder",
"Grid view" : "Widok siatki",
"List view" : "Widok listy",
"Private RSS Feed of current view" : "Prywatny kanał RSS aktualnego widoku",
"RSS Feed of current view" : "Kanał RSS bieżącego widoku",
"Move selection" : "Przenieś wybrane",
"Delete selection" : "Usuń wybrane",
"Open all selected" : "Otwórz wszystkie wybrane",
@ -117,7 +117,7 @@
"Archived version" : "Wersja zarchiwizowana",
"Open archived file" : "Otwórz zarchiwizowany plik",
"Notes" : "Notatki",
"Notes for this bookmark …" : "Uwagi dotyczące tej zakładki...",
"Notes for this bookmark …" : "Uwagi dotyczące tej zakładki",
"{time} ago" : "{time} temu",
"Owner" : "Właściciel",
"Sharing" : "Udostępnianie",

View File

@ -50,7 +50,6 @@ OC.L10N.register(
"New folder" : "Nova mapa",
"Grid view" : "Mrežni pogled",
"List view" : "Seznamski pogled",
"Private RSS Feed of current view" : "Zasebni vir RSS trenutnega pogleda",
"Move selection" : "Premakni izbor",
"Delete selection" : "Izbriši izbor",
"Open all selected" : "Odpri vse izbrane",

View File

@ -48,7 +48,6 @@
"New folder" : "Nova mapa",
"Grid view" : "Mrežni pogled",
"List view" : "Seznamski pogled",
"Private RSS Feed of current view" : "Zasebni vir RSS trenutnega pogleda",
"Move selection" : "Premakni izbor",
"Delete selection" : "Izbriši izbor",
"Open all selected" : "Odpri vse izbrane",

View File

@ -5,6 +5,7 @@ OC.L10N.register(
"Rename" : "Rename",
"Move" : "Zhvendos",
"Delete" : "Fshij",
"Search" : "Kërko",
"New" : "I ri",
"New folder" : "Dosje e re",
"Grid view" : "Pamje galeri",

View File

@ -3,6 +3,7 @@
"Rename" : "Rename",
"Move" : "Zhvendos",
"Delete" : "Fshij",
"Search" : "Kërko",
"New" : "I ri",
"New folder" : "Dosje e re",
"Grid view" : "Pamje galeri",

View File

@ -51,7 +51,6 @@ OC.L10N.register(
"New folder" : "Yeni klasör",
"Grid view" : "Tablo görünümü",
"List view" : "Liste görünümü",
"Private RSS Feed of current view" : "Geçerli görünümün kişisel RSS akışı",
"Move selection" : "Seçilmişleri taşı",
"Delete selection" : "Seçilmişleri sil",
"Open all selected" : "Tüm seçilmişleri aç",

View File

@ -49,7 +49,6 @@
"New folder" : "Yeni klasör",
"Grid view" : "Tablo görünümü",
"List view" : "Liste görünümü",
"Private RSS Feed of current view" : "Geçerli görünümün kişisel RSS akışı",
"Move selection" : "Seçilmişleri taşı",
"Delete selection" : "Seçilmişleri sil",
"Open all selected" : "Tüm seçilmişleri aç",

View File

@ -77,7 +77,10 @@ class FolderMapper extends QBMapper {
/**
* @param $userId
* @param int|string $userId
*
* @return Entity
*
* @throws MultipleObjectsReturnedException
*/
public function findRootFolder($userId): Entity {

View File

@ -125,7 +125,7 @@ class TagMapper {
* @param $tags
* @param int $bookmarkId
*/
public function addTo($tags, int $bookmarkId): void {
public function addTo(array $tags, int $bookmarkId): void {
if (is_string($tags)) {
$tags = [$tags];
} elseif (!is_array($tags)) {

View File

@ -647,7 +647,7 @@ class TreeMapper extends QBMapper {
* @param int $layers The amount of levels to return
* @return array the children each in the format ["id" => int, "type" => 'bookmark' | 'folder' ]
*/
public function getChildrenOrder($folderId, $layers = 0): array {
public function getChildrenOrder(int $folderId, $layers = 0): array {
$qb = $this->getChildrenOrderQuery;
$qb->setParameter('parent_folder', $folderId);
$children = $qb->execute()->fetchAll();

View File

@ -46,6 +46,9 @@ class Image implements IImage {
return $this->data;
}
/**
* @return false|string
*/
public function serialize() {
return json_encode([
'contentType' => $this->getContentType(),

View File

@ -103,7 +103,10 @@ class Authorizer {
}
}
public function setToken($token): void {
/**
* @param null|string $token
*/
public function setToken(?string $token): void {
$this->token = $token;
}
@ -114,7 +117,10 @@ class Authorizer {
return $this->token;
}
public function setUserId($userId): void {
/**
* @param string|null $userId
*/
public function setUserId(?string $userId): void {
$this->userId = $userId;
}

View File

@ -176,7 +176,7 @@ class BookmarkService {
* @throws UserLimitExceededError
* @throws UnsupportedOperation
*/
private function _addBookmark($title, $url, $description, $userId, $tags, $folders): Bookmark {
private function _addBookmark(string $title, $url, $description, $userId, array $tags, array $folders): Bookmark {
$bookmark = new Bookmark();
$bookmark->setTitle($title);
$bookmark->setUrl($url);

View File

@ -129,7 +129,7 @@ class CrawlService {
return $folderPath;
}
public function getOrCreateFolder($userFolder, string $path) : ?Folder {
public function getOrCreateFolder(Folder $userFolder, string $path) : ?Folder {
if ($path === '/') {
return $userFolder;
}

View File

@ -111,7 +111,7 @@ class FaviconPreviewer implements IBookmarkPreviewer {
return null;
}
public function scrapeUrl($url) {
public function scrapeUrl($url): array {
return $this->linkExplorer->get($url);
}
@ -119,7 +119,7 @@ class FaviconPreviewer implements IBookmarkPreviewer {
* @param $url
* @return Image|null
*/
protected function fetchImage($url): ?Image {
protected function fetchImage(string $url): ?Image {
try {
$response = $this->client->get($url, ['timeout' => self::HTTP_TIMEOUT]);
} catch (Exception $e) {

View File

@ -17,11 +17,13 @@ use OCA\Bookmarks\Events\ChangeEvent;
use OCA\Bookmarks\Events\MoveEvent;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\ICache;
use OCP\ICacheFactory;
use UnexpectedValueException;
class HashManager {
class HashManager implements IEventListener {
/**
* @var ICache
@ -136,6 +138,7 @@ class HashManager {
/** @var Folder $entity */
$entity = $this->folderMapper->find($folderId);
$rootFolder = $this->folderMapper->findRootFolder($userId);
$children = $this->treeMapper->getChildrenOrder($folderId);
$childHashes = array_map(function ($item) use ($fields, $entity) {
switch ($item['type']) {
@ -150,7 +153,7 @@ class HashManager {
$folder = [];
if ($entity->getUserId() !== $userId) {
$folder['title'] = $this->sharedFolderMapper->findByFolderAndUser($folderId, $userId)->getTitle();
} elseif ($entity->getTitle() !== null) {
} elseif ($entity->getTitle() !== null && $entity->getId() !== $rootFolder->getId()) {
$folder['title'] = $entity->getTitle();
}
$folder['children'] = $childHashes;
@ -191,12 +194,15 @@ class HashManager {
/**
* Handle events
*
* @param ChangeEvent $event
* @param Event $event
*/
public function handle(ChangeEvent $event): void {
public function handle(Event $event): void {
if ($this->enabled === false) {
return;
}
if (!($event instanceof ChangeEvent)) {
return;
}
switch ($event->getType()) {
case TreeMapper::TYPE_FOLDER:
$this->invalidateFolder($event->getId());
@ -215,7 +221,7 @@ class HashManager {
}
}
public function setInvalidationEnabled(bool $enabled) {
public function setInvalidationEnabled(bool $enabled): void {
$this->enabled = $enabled;
}
}

View File

@ -77,10 +77,13 @@ class HtmlImporter {
/**
* @brief Import Bookmarks from html formatted file
*
* @param int $userId
* @param string|null $file Content to import
* @param string $file
* @param int|null $rootFolder
*
* @return array
*
* @throws DoesNotExistException
* @throws MultipleObjectsReturnedException
* @throws UnauthorizedAccessError
@ -148,7 +151,10 @@ class HtmlImporter {
* @param array $folderParams
* @param int $parentId
* @param array $errors
* @param int|null $index
*
* @return array
*
* @throws DoesNotExistException
* @throws MultipleObjectsReturnedException
* @throws UnauthorizedAccessError

View File

@ -60,7 +60,7 @@ class DefaultBookmarkPreviewer implements IBookmarkPreviewer {
return null;
}
public function scrapeUrl($url) {
public function scrapeUrl($url): array {
return $this->linkExplorer->get($url);
}

2209
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "bookmarks",
"version": "4.0.0",
"version": "4.0.1",
"main": "js/index.js",
"scripts": {
"build": "NODE_ENV=production webpack --progress --hide-modules --config webpack.js",
@ -22,7 +22,7 @@
"dependencies": {
"@nextcloud/auth": "^1.3.0",
"@nextcloud/axios": "^1.4.0",
"@nextcloud/dialogs": "^2.0.1",
"@nextcloud/dialogs": "^3.0.0",
"@nextcloud/initial-state": "^1.2.0",
"@nextcloud/router": "^1.2.0",
"@nextcloud/vue": "^2.8.1",
@ -31,11 +31,11 @@
"copy-text-to-clipboard": "^2.2.0",
"humanize-duration": "^3.24.0",
"style-loader": "^1.3.0",
"url-loader": "^4.1.0",
"url-loader": "^4.1.1",
"vue": "^2.6.12",
"vue-click-outside": "^1.1.0",
"vue-material-design-icons": "^4.9.0",
"vue-router": "^3.4.5",
"vue-router": "^3.4.7",
"vue-simple-progress": "^1.1.1",
"vuex": "^3.5.1",
"vuex-router-sync": "^5.0.0"
@ -44,7 +44,7 @@
"devDependencies": {
"@babel/core": "^7.11.6",
"@babel/plugin-syntax-dynamic-import": "^7.7.4",
"@babel/preset-env": "^7.11.5",
"@babel/preset-env": "^7.12.1",
"@nextcloud/browserslist-config": "^1.0.0",
"@nextcloud/eslint-config": "^2.2.0",
"@nextcloud/eslint-plugin": "^1.5.0",
@ -52,7 +52,7 @@
"@vue/test-utils": "^1.1.0",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.0.6",
"css-loader": "^3.6.0",
"css-loader": "^5.0.0",
"eslint": "^6.8.0",
"eslint-config-standard": "^14.1.1",
"eslint-import-resolver-webpack": "^0.12.2",
@ -62,13 +62,13 @@
"eslint-plugin-promise": "^4.1.1",
"eslint-plugin-standard": "^4.0.1",
"eslint-plugin-vue": "^6.2.2",
"file-loader": "^6.1.0",
"file-loader": "^6.1.1",
"node-sass": "^4.14.1",
"sass-loader": "^8.0.2",
"stylelint": "^13.7.2",
"stylelint-config-recommended-scss": "^4.2.0",
"stylelint-scss": "^3.18.0",
"stylelint-webpack-plugin": "^2.1.0",
"stylelint-webpack-plugin": "^2.1.1",
"vue-loader": "^15.9.3",
"vue-template-compiler": "^2.6.12",
"webpack": "^4.44.2",

44
psalm.xml Normal file
View File

@ -0,0 +1,44 @@
<?xml version="1.0"?>
<!--
~ Copyright (c) 2020. The Nextcloud Bookmarks contributors.
~
~ This file is licensed under the Affero General Public License version 3 or later. See the COPYING file.
-->
<psalm
totallyTyped="true"
errorLevel="5"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
errorBaseline="tests/psalm-baseline.xml"
>
<projectFiles>
<directory name="lib" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>
</projectFiles>
<extraFiles>
<directory name="vendor" />
<ignoreFiles>
<directory name="vendor/phpunit/php-code-coverage" />
</ignoreFiles>
</extraFiles>
<issueHandlers>
<UndefinedClass>
<errorLevel type="suppress">
<referencedClass name="OC" />
</errorLevel>
</UndefinedClass>
<UndefinedDocblockClass>
<errorLevel type="suppress">
<referencedClass name="Doctrine\DBAL\Schema\Schema" />
<referencedClass name="Doctrine\DBAL\Schema\SchemaException" />
<referencedClass name="Doctrine\DBAL\Driver\Statement" />
<referencedClass name="Doctrine\DBAL\Schema\Table" />
</errorLevel>
</UndefinedDocblockClass>
</issueHandlers>
</psalm>

161
tests/psalm-baseline.xml Normal file
View File

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="3.18.2@19aa905f7c3c7350569999a93c40ae91ae4e1626">
<file src="lib/BackgroundJobs/CrawlJob.php">
<UndefinedClass occurrences="1">
<code>TimedJob</code>
</UndefinedClass>
</file>
<file src="lib/Controller/BookmarkController.php">
<InvalidArgument occurrences="3">
<code>$folder</code>
<code>$id</code>
<code>$title</code>
</InvalidArgument>
<InvalidNullableReturnType occurrences="1">
<code>int</code>
</InvalidNullableReturnType>
<InvalidReturnStatement occurrences="1">
<code>new NotFoundResponse()</code>
</InvalidReturnStatement>
<InvalidReturnType occurrences="1">
<code>DataDisplayResponse</code>
</InvalidReturnType>
<NullableReturnStatement occurrences="1">
<code>$this-&gt;_getRootFolderId()</code>
</NullableReturnStatement>
</file>
<file src="lib/Controller/FoldersController.php">
<InvalidArgument occurrences="2">
<code>$parent_folder</code>
<code>$title</code>
</InvalidArgument>
</file>
<file src="lib/Controller/InternalBookmarkController.php">
<InvalidArgument occurrences="1">
<code>$tags</code>
</InvalidArgument>
</file>
<file src="lib/Db/BookmarkMapper.php">
<InvalidArgument occurrences="3"/>
</file>
<file src="lib/Db/PublicFolderMapper.php">
<InvalidReturnType occurrences="1">
<code>Entity</code>
</InvalidReturnType>
</file>
<file src="lib/Db/TreeMapper.php">
<InvalidArgument occurrences="1"/>
</file>
<file src="lib/Flow/CreateBookmark.php">
<UndefinedClass occurrences="2">
<code>File</code>
<code>View</code>
</UndefinedClass>
<UndefinedMethod occurrences="2">
<code>getSubject</code>
<code>getSubject</code>
</UndefinedMethod>
</file>
<file src="lib/Image.php">
<UndefinedConstant occurrences="2">
<code>JSON_THROW_ON_ERROR</code>
<code>JSON_THROW_ON_ERROR</code>
</UndefinedConstant>
</file>
<file src="lib/Migration/DeduplicateSharedFoldersRepairStep.php">
<InvalidArgument occurrences="1"/>
</file>
<file src="lib/Migration/Version000014000Date20181029094721.php">
<InvalidArgument occurrences="2">
<code>['index' =&gt; $qb-&gt;createPositionalParameter($i)]</code>
<code>['index' =&gt; $qb-&gt;createPositionalParameter($i)]</code>
</InvalidArgument>
<TooFewArguments occurrences="2">
<code>set</code>
<code>set</code>
</TooFewArguments>
</file>
<file src="lib/Migration/Version003000009Date20200505094721.php">
<UndefinedClass occurrences="1">
<code>Type</code>
</UndefinedClass>
</file>
<file src="lib/Migration/Version003004000Date20200807124721.php">
<UndefinedClass occurrences="1">
<code>Type</code>
</UndefinedClass>
</file>
<file src="lib/Migration/Version003004000Date20200817124721.php">
<UndefinedClass occurrences="1">
<code>Type</code>
</UndefinedClass>
</file>
<file src="lib/QueryParameters.php">
<NullableReturnStatement occurrences="1">
<code>$default</code>
</NullableReturnStatement>
</file>
<file src="lib/Service/BookmarkPreviewer.php">
<UndefinedInterfaceMethod occurrences="1">
<code>serialize</code>
</UndefinedInterfaceMethod>
</file>
<file src="lib/Service/BookmarkService.php">
<NullArgument occurrences="1">
<code>$id</code>
</NullArgument>
</file>
<file src="lib/Service/BookmarksParser.php">
<NullPropertyFetch occurrences="1">
<code>$node-&gt;attributes-&gt;length</code>
</NullPropertyFetch>
</file>
<file src="lib/Service/CrawlService.php">
<MissingDependency occurrences="1">
<code>IRootFolder</code>
</MissingDependency>
<UndefinedClass occurrences="1">
<code>NoUserException</code>
</UndefinedClass>
</file>
<file src="lib/Service/FileCache.php">
<LessSpecificImplementedReturnType occurrences="2">
<code>bool|mixed</code>
<code>bool|mixed</code>
</LessSpecificImplementedReturnType>
</file>
<file src="lib/Service/FolderService.php">
<InvalidReturnStatement occurrences="1">
<code>$publicFolder-&gt;getId()</code>
</InvalidReturnStatement>
<InvalidReturnType occurrences="1">
<code>string</code>
</InvalidReturnType>
</file>
<file src="lib/Service/HashManager.php">
<UndefinedConstant occurrences="2">
<code>JSON_THROW_ON_ERROR</code>
<code>JSON_THROW_ON_ERROR</code>
</UndefinedConstant>
</file>
<file src="lib/Service/HtmlImporter.php">
<InvalidArgument occurrences="1">
<code>$index++</code>
</InvalidArgument>
</file>
<file src="lib/Service/LinkExplorer.php">
<UndefinedInterfaceMethod occurrences="1">
<code>setMinimumImageDimensions</code>
</UndefinedInterfaceMethod>
</file>
<file src="lib/Service/Previewers/ScreeenlyBookmarkPreviewer.php">
<UndefinedConstant occurrences="1">
<code>JSON_THROW_ON_ERROR</code>
</UndefinedConstant>
</file>
<file src="lib/Service/Previewers/WebshotBookmarkPreviewer.php">
<UndefinedConstant occurrences="1">
<code>JSON_THROW_ON_ERROR</code>
</UndefinedConstant>
</file>
</files>