From c6b4bcc00e5202e85388a0624d149e8b1df386f8 Mon Sep 17 00:00:00 2001 From: Devlin Junker Date: Wed, 9 Nov 2022 21:52:11 -0800 Subject: upmerging master into vue-rewrite Signed-off-by: Devlin Junker --- .github/dependabot.yml | 2 + .github/workflows/api-integration-tests.yml | 44 +- .github/workflows/api-php-static-code-check.yml | 10 +- .github/workflows/api-php-tests.yml | 2 +- .github/workflows/build-release.yml | 4 +- .github/workflows/lint-eslint.yml | 46 + .github/workflows/post-merge-tasks.yml | 2 +- .gitignore | 3 + .gitmodules | 6 + .tx/config | 8 +- AUTHORS.md | 14 +- CHANGELOG.md | 72 +- Makefile | 23 +- appinfo/info.xml | 4 +- appinfo/routes.php | 120 +- composer.json | 17 +- composer.lock | 732 +- css/explore.css | 57 + css/mobile.css | 46 + css/mobile.scss | 46 - css/navigation.scss | 3 + docs/admin.md | 26 +- docs/api/api-v1-2.md | 24 + docs/api/api-v1-3.md | 50 +- docs/clients.md | 3 + docs/developer.md | 33 +- docs/faq.md | 13 +- docs/install.md | 50 +- js-old/app/Config.js | 6 +- js-old/controller/ContentController.js | 13 +- js-old/directive/NewsScroll.js | 18 +- js-old/gui/KeyboardShortcuts.js | 56 +- l10n/af.js | 1 - l10n/af.json | 1 - l10n/an.js | 17 + l10n/an.json | 15 + l10n/ar.js | 1 - l10n/ar.json | 1 - l10n/ast.js | 3 - l10n/ast.json | 3 - l10n/az.js | 1 - l10n/az.json | 1 - l10n/bg.js | 13 +- l10n/bg.json | 13 +- l10n/bn_BD.js | 1 - l10n/bn_BD.json | 1 - l10n/br.js | 1 - l10n/br.json | 1 - l10n/bs.js | 1 - l10n/bs.json | 1 - l10n/ca.js | 6 - l10n/ca.json | 6 - l10n/cs.js | 85 +- l10n/cs.json | 85 +- l10n/cy_GB.js | 1 - l10n/cy_GB.json | 1 - l10n/da.js | 26 +- l10n/da.json | 26 +- l10n/de.js | 25 +- l10n/de.json | 25 +- l10n/de_DE.js | 13 +- l10n/de_DE.json | 13 +- l10n/el.js | 6 - l10n/el.json | 6 - l10n/en_GB.js | 3 - l10n/en_GB.json | 3 - l10n/eo.js | 1 - l10n/eo.json | 1 - l10n/es.js | 15 +- l10n/es.json | 15 +- l10n/es_419.js | 5 +- l10n/es_419.json | 5 +- l10n/es_AR.js | 5 +- l10n/es_AR.json | 5 +- l10n/es_CL.js | 5 +- l10n/es_CL.json | 5 +- l10n/es_CO.js | 5 +- l10n/es_CO.json | 5 +- l10n/es_CR.js | 5 +- l10n/es_CR.json | 5 +- l10n/es_DO.js | 5 +- l10n/es_DO.json | 5 +- l10n/es_EC.js | 5 +- l10n/es_EC.json | 5 +- l10n/es_GT.js | 5 +- l10n/es_GT.json | 5 +- l10n/es_HN.js | 5 +- l10n/es_HN.json | 5 +- l10n/es_MX.js | 5 +- l10n/es_MX.json | 5 +- l10n/es_NI.js | 5 +- l10n/es_NI.json | 5 +- l10n/es_PA.js | 5 +- l10n/es_PA.json | 5 +- l10n/es_PE.js | 5 +- l10n/es_PE.json | 5 +- l10n/es_PR.js | 5 +- l10n/es_PR.json | 5 +- l10n/es_PY.js | 5 +- l10n/es_PY.json | 5 +- l10n/es_SV.js | 5 +- l10n/es_SV.json | 5 +- l10n/es_UY.js | 5 +- l10n/es_UY.json | 5 +- l10n/et_EE.js | 3 - l10n/et_EE.json | 3 - l10n/eu.js | 11 +- l10n/eu.json | 11 +- l10n/fa.js | 3 - l10n/fa.json | 3 - l10n/fi.js | 6 - l10n/fi.json | 6 - l10n/fr.js | 21 +- l10n/fr.json | 21 +- l10n/gl.js | 6 - l10n/gl.json | 6 - l10n/he.js | 4 - l10n/he.json | 4 - l10n/hr.js | 7 - l10n/hr.json | 7 - l10n/hu.js | 11 +- l10n/hu.json | 11 +- l10n/hy.js | 1 - l10n/hy.json | 1 - l10n/ia.js | 1 - l10n/ia.json | 1 - l10n/id.js | 3 - l10n/id.json | 3 - l10n/is.js | 6 - l10n/is.json | 6 - l10n/it.js | 9 +- l10n/it.json | 9 +- l10n/ja.js | 16 +- l10n/ja.json | 16 +- l10n/ka_GE.js | 3 - l10n/ka_GE.json | 3 - l10n/km.js | 1 - l10n/km.json | 1 - l10n/kn.js | 1 - l10n/kn.json | 1 - l10n/ko.js | 3 - l10n/ko.json | 3 - l10n/lb.js | 1 - l10n/lb.json | 1 - l10n/lt_LT.js | 8 +- l10n/lt_LT.json | 8 +- l10n/lv.js | 3 - l10n/lv.json | 3 - l10n/mk.js | 1 - l10n/mk.json | 1 - l10n/mn.js | 1 - l10n/mn.json | 1 - l10n/nb.js | 3 - l10n/nb.json | 3 - l10n/nl.js | 7 - l10n/nl.json | 7 - l10n/nn_NO.js | 3 +- l10n/nn_NO.json | 3 +- l10n/oc.js | 3 - l10n/oc.json | 3 - l10n/pl.js | 13 +- l10n/pl.json | 13 +- l10n/pt_BR.js | 15 +- l10n/pt_BR.json | 15 +- l10n/pt_PT.js | 5 +- l10n/pt_PT.json | 5 +- l10n/ro.js | 7 - l10n/ro.json | 7 - l10n/ru.js | 9 +- l10n/ru.json | 9 +- l10n/sc.js | 7 - l10n/sc.json | 7 - l10n/sk.js | 13 +- l10n/sk.json | 13 +- l10n/sl.js | 7 - l10n/sl.json | 7 - l10n/sq.js | 3 - l10n/sq.json | 3 - l10n/sr.js | 6 - l10n/sr.json | 6 - l10n/sv.js | 19 +- l10n/sv.json | 19 +- l10n/th.js | 3 - l10n/th.json | 3 - l10n/tr.js | 15 +- l10n/tr.json | 15 +- l10n/uk.js | 43 +- l10n/uk.json | 43 +- l10n/uz.js | 30 +- l10n/uz.json | 30 +- l10n/vi.js | 1 - l10n/vi.json | 1 - l10n/zh_CN.js | 7 - l10n/zh_CN.json | 7 - l10n/zh_HK.js | 13 +- l10n/zh_HK.json | 13 +- l10n/zh_TW.js | 13 +- l10n/zh_TW.json | 13 +- lib/AppInfo/Application.php | 2 +- lib/Controller/AdminController.php | 114 - lib/Controller/FeedController.php | 2 +- lib/Controller/PageController.php | 1 + lib/Cron/UpdaterJob.php | 7 +- lib/Db/Item.php | 37 +- lib/Db/ItemMapperV2.php | 28 +- lib/Db/NewsMapperV2.php | 2 +- lib/Fetcher/FeedFetcher.php | 49 +- lib/Migration/Version150005Date20201009192341.php | 2 +- lib/Service/FeedServiceV2.php | 29 +- lib/Service/ItemServiceV2.php | 14 +- lib/Service/UpdaterService.php | 2 +- lib/Settings/AdminSettings.php | 16 +- lib/Utility/OPMLExporter.php | 15 +- mkdocs.yml | 3 +- package-lock.json | 35892 +++++++++----------- package.json | 29 +- src/components/AdminSettings.vue | 148 + src/main-admin.js | 20 + templates-old/admin.php | 134 +- templates-old/part.content.warnings.php | 44 +- tests/Unit/Controller/AdminControllerTest.php | 156 - tests/Unit/Db/ItemMapperTest.php | 14 +- tests/Unit/Db/ItemTest.php | 12 + tests/Unit/Db/NewsMapperTest.php | 8 +- tests/Unit/Fetcher/FeedFetcherTest.php | 44 +- tests/Unit/Service/FeedServiceTest.php | 50 +- tests/Unit/Service/ItemServiceTest.php | 15 +- tests/api/feeds.bats | 145 + tests/api/folders.bats | 97 + tests/api/helpers/settings.bash | 5 + tests/api/items.bats | 76 + tests/command/explore.bats | 12 + tests/command/feeds.bats | 84 + tests/command/folders.bats | 64 + tests/command/helpers/settings.bash | 4 + tests/command/items.bats | 77 + tests/command/opml.bats | 26 + tests/integration/explore.bats | 12 - tests/integration/feeds.bats | 116 - tests/integration/feeds/no_guid_feed.xml | 78 - tests/integration/folders.bats | 64 - tests/integration/helpers/settings.bash | 4 - tests/integration/items.bats | 84 - tests/integration/opml.bats | 26 - tests/test_helper/bats-assert | 1 + tests/test_helper/bats-support | 1 + tests/test_helper/feeds/Nextcloud.rss | 951 + tests/test_helper/feeds/heise.xml | 1513 + tests/test_helper/feeds/no_guid_feed.xml | 78 + webpack.config.js | 13 + 250 files changed, 20480 insertions(+), 22851 deletions(-) create mode 100644 .github/workflows/lint-eslint.yml create mode 100644 .gitmodules create mode 100644 css/explore.css create mode 100644 css/mobile.css delete mode 100644 css/mobile.scss create mode 100644 l10n/an.js create mode 100644 l10n/an.json delete mode 100644 lib/Controller/AdminController.php create mode 100644 src/components/AdminSettings.vue create mode 100644 src/main-admin.js delete mode 100644 tests/Unit/Controller/AdminControllerTest.php create mode 100644 tests/api/feeds.bats create mode 100644 tests/api/folders.bats create mode 100644 tests/api/helpers/settings.bash create mode 100644 tests/api/items.bats create mode 100644 tests/command/explore.bats create mode 100644 tests/command/feeds.bats create mode 100644 tests/command/folders.bats create mode 100644 tests/command/helpers/settings.bash create mode 100644 tests/command/items.bats create mode 100644 tests/command/opml.bats delete mode 100644 tests/integration/explore.bats delete mode 100644 tests/integration/feeds.bats delete mode 100644 tests/integration/feeds/no_guid_feed.xml delete mode 100644 tests/integration/folders.bats delete mode 100644 tests/integration/helpers/settings.bash delete mode 100644 tests/integration/items.bats delete mode 100644 tests/integration/opml.bats create mode 160000 tests/test_helper/bats-assert create mode 160000 tests/test_helper/bats-support create mode 100644 tests/test_helper/feeds/Nextcloud.rss create mode 100644 tests/test_helper/feeds/heise.xml create mode 100644 tests/test_helper/feeds/no_guid_feed.xml create mode 100644 webpack.config.js diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 561141b9e..f863df114 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,6 +13,7 @@ updates: labels: - "dependencies" - "Skip-Changelog" + versioning-strategy: increase # Maintain dependencies for Composer - package-ecosystem: "composer" @@ -22,6 +23,7 @@ updates: labels: - "dependencies" - "Skip-Changelog" + versioning-strategy: increase # Maintain dependencies for GitHub Actions - package-ecosystem: "github-actions" diff --git a/.github/workflows/api-integration-tests.yml b/.github/workflows/api-integration-tests.yml index c9a1d4cc9..484bf38b3 100644 --- a/.github/workflows/api-integration-tests.yml +++ b/.github/workflows/api-integration-tests.yml @@ -16,7 +16,7 @@ jobs: name: "Integration: Nextcloud ${{ matrix.nextcloud }} - PHP ${{ matrix.php-versions }} - DB ${{ matrix.database }}" services: postgres: - image: postgres + image: postgres:14 env: POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} options: >- @@ -29,25 +29,27 @@ jobs: strategy: matrix: php-versions: ['7.4', '8.0'] - nextcloud: ['stable22', 'stable23'] + nextcloud: ['stable23', 'stable24', 'stable25'] database: ['sqlite', 'pgsql', 'mysql'] experimental: [false] include: - - php-versions: 8.0 + - php-versions: '8.0' nextcloud: pre-release database: sqlite experimental: true - - php-versions: 8.1 + - php-versions: '8.2' nextcloud: pre-release database: sqlite experimental: true - php-versions: 8.1 - nextcloud: stable24 + nextcloud: stable25 database: sqlite experimental: false steps: - name: Checkout uses: actions/checkout@v3 + with: + submodules: recursive - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -56,8 +58,8 @@ jobs: extensions: pdo_sqlite,pdo_mysql,pdo_pgsql,gd,zip coverage: none - - name: Setup BATS - uses: mig4/setup-bats@v1.2.0 + - name: Setup BATS & httpie + run: sudo apt-get install -y httpie && npm install -g bats@1.7.0 ### MySQL specific setup - name: Setup mysql @@ -108,6 +110,22 @@ jobs: check-code: false force: ${{ matrix.experimental }} + - name: Run API tests + working-directory: ../server + run: | + php -S localhost:8080 &> /tmp/webserver.log & + cd apps/news/tests/test_helper/feeds && php -S localhost:8090 &> /tmp/feedserver.log & + + sleep 2 + + cd ${{ github.workspace }}/../server + + bats apps/news/tests/api + + # Kill php server + kill %1 + kill %2 + - name: Setup problem matchers for PHP run: echo "::add-matcher::${{ runner.tool_cache }}/php.json" @@ -118,7 +136,16 @@ jobs: - name: Functional tests working-directory: ../server - run: bats apps/news/tests/integration + run: | + cd apps/news/tests/test_helper/feeds && php -S localhost:8090 &> /tmp/feedserver.log & + + sleep 2 + + cd ${{ github.workspace }}/../server + + bats apps/news/tests/command + + kill %1 - name: Prep PHP tests working-directory: ../server/apps/news @@ -127,3 +154,4 @@ jobs: - name: Feed tests working-directory: ../server/apps/news run: make feed-test + diff --git a/.github/workflows/api-php-static-code-check.yml b/.github/workflows/api-php-static-code-check.yml index 662aec0a1..57776f400 100644 --- a/.github/workflows/api-php-static-code-check.yml +++ b/.github/workflows/api-php-static-code-check.yml @@ -7,15 +7,11 @@ jobs: continue-on-error: true strategy: matrix: - php-versions: [ '7.4', '8.0' ] - nextcloud: [ 'stable24' ] + php-versions: [ '7.4', '8.0', '8.1' ] + nextcloud: [ 'stable25' ] database: [ 'sqlite' ] include: - - php-versions: 8.1 - nextcloud: stable24 - database: sqlite - experimental: false - - php-versions: 8.1 + - php-versions: '8.2' nextcloud: pre-release database: sqlite experimental: true diff --git a/.github/workflows/api-php-tests.yml b/.github/workflows/api-php-tests.yml index 6ff32bbb6..0a2635316 100644 --- a/.github/workflows/api-php-tests.yml +++ b/.github/workflows/api-php-tests.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: php-versions: ['8.1'] - nextcloud: ['stable24'] + nextcloud: ['stable25'] database: ['sqlite'] experimental: [false] codecoverage: [false] diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index d82976883..06b1f4c3d 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: php-versions: ['8.1'] - nextcloud: ['stable24'] + nextcloud: ['stable25'] database: ['sqlite'] steps: - name: Checkout @@ -52,7 +52,7 @@ jobs: app_public_crt: ${{ secrets.APP_PUBLIC_CRT }} - name: Upload app tarball to release - uses: svenstaro/upload-release-action@483c1e56f95e88835747b1c7c60581215016cbf2 + uses: svenstaro/upload-release-action@133984371c30d34e38222a64855679a414cb7575 id: attach_to_release with: repo_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lint-eslint.yml b/.github/workflows/lint-eslint.yml new file mode 100644 index 000000000..c08763ea9 --- /dev/null +++ b/.github/workflows/lint-eslint.yml @@ -0,0 +1,46 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization + +name: Lint + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-eslint-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + lint: + runs-on: ubuntu-latest + + name: eslint + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@v1.2 + id: versions + with: + fallbackNode: '^12' + fallbackNpm: '^6' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@v3 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint diff --git a/.github/workflows/post-merge-tasks.yml b/.github/workflows/post-merge-tasks.yml index b431399c7..6385657d3 100644 --- a/.github/workflows/post-merge-tasks.yml +++ b/.github/workflows/post-merge-tasks.yml @@ -10,7 +10,7 @@ jobs: name: "Coverage: Nextcloud PHP ${{ matrix.php-versions }}" strategy: matrix: - nextcloud: ['stable24'] + nextcloud: ['stable25'] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.gitignore b/.gitignore index e3b775692..7a4c7b56d 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ js/ site/ coverage +#bats +tests/api/helpers/settings-override.bash + # python PKG-INFO *pyc diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..d74af0778 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "tests/test_helper/bats-support"] + path = tests/test_helper/bats-support + url = https://github.com/bats-core/bats-support.git +[submodule "tests/test_helper/bats-assert"] + path = tests/test_helper/bats-assert + url = https://github.com/bats-core/bats-assert.git diff --git a/.tx/config b/.tx/config index 6d56d4a46..2477b6818 100644 --- a/.tx/config +++ b/.tx/config @@ -1,10 +1,10 @@ [main] -host = https://www.transifex.com -lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja +host = https://www.transifex.com +lang_map = sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb -[nextcloud.news] +[o:nextcloud:p:nextcloud:r:news] file_filter = translationfiles//news.po source_file = translationfiles/templates/news.pot source_lang = en -type = PO +type = PO diff --git a/AUTHORS.md b/AUTHORS.md index 7ac9408e1..558fc8e49 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,7 +1,7 @@ # Authors * [Bernhard Posselt](mailto:dev@bernhard-posselt.com) -* [Alessandro Cosentino](mailto:cosenal@gmail.com) * [Benjamin Brahmer](mailto:info@b-brahmer.de) +* [Alessandro Cosentino](mailto:cosenal@gmail.com) * [Marco Nassabain](mailto:marco.nassabain@hotmail.com) * [Robin Appelman](mailto:icewind@owncloud.com) * [Sean Molenaar](mailto:sean@seanmolenaar.eu) @@ -9,10 +9,10 @@ * [Sean Molenaar](mailto:SMillerDev@users.noreply.github.com) * [anoy](mailto:anoymouserver+github@mailbox.org) * [Morris Jobke](mailto:hey@morrisjobke.de) +* [Paul Tirk](mailto:paultirk@paultirk.com) * [Jimmy Huynh](mailto:jimmy.huynh@etu.unistra.fr) * [Aurélien](mailto:dav.aurelien@gmail.com) * [Jan-Christoph Borchardt](mailto:hey@jancborchardt.net) -* [Paul Tirk](mailto:paultirk@paultirk.com) * [Daniel Schaal](mailto:daniel@schaal.email) * [Davide Saurino](mailto:davide.saurino@alcacoop.it) * [raghunayyar](mailto:me@iraghu.com) @@ -30,6 +30,7 @@ * [Koen Martens](mailto:gmc@sonologic.nl) * [Lukas Reschke](mailto:lukas@owncloud.com) * [Tucker McKnight](mailto:tucker.mcknight@gmail.com) +* [Valdnet](mailto:47037905+Valdnet@users.noreply.github.com) * [Bart Visscher](mailto:bartv@thisnet.nl) * [Christian Elmer](mailto:christian@keinkurt.de) * [Nicolas Wendling](mailto:nicolas.wendling1011@gmail.com) @@ -68,19 +69,22 @@ * [Nikita Chernyi](mailto:rakshazi@users.noreply.github.com) * [Peter Hedlund](mailto:peter@peterandlinda.com) * [Simon Spannagel](mailto:simonspa@kth.se) -* [Valdnet](mailto:47037905+Valdnet@users.noreply.github.com) * [bbBowser](mailto:carspi@mail.de) * [benediktb](mailto:benedikt@blablub.de) +* [chylex](mailto:contact@chylex.com) * [coderkun](mailto:olli@coderkun.de) * [davidak](mailto:git@davidak.de) * [hooger](mailto:horvathg.1988@gmail.com) * [lsmooth](mailto:ls@lsmooth.de) * [s17t.net](mailto:mail+github@s17t.net) +* [Accalia](mailto:Accalia@Elementia.me) +* [Accalia Elementia](mailto:accalia@elementia.me) * [Alec Kojaev](mailto:alec@kojaev.name) * [Alessandro](mailto:cosenal@gmail.com) * [Alexander Grüßung](mailto:alexander@gruessung-online.de) * [Allan Nordhøy](mailto:epost@anotheragency.no) * [Alwaysin](mailto:adrien@demma.fr) +* [Anderson Silva](mailto:UnderEu@users.noreply.github.com) * [Andrea Boero](mailto:mail@tsumi.it) * [Andreas Demmelbauer](mailto:git@notice.at) * [Artem Lavrukhin](mailto:lavryha4590@gmail.com) @@ -89,7 +93,9 @@ * [Aurelien DAVID](mailto:dav.aurelien@gmail.com) * [Benedikt Geißler](mailto:benedikt@g5r.eu) * [Bernhard Posselt](mailto:bernhard@desktop.localdomain) +* [Björn Bidar](mailto:bjorn.bidar@thaodan.de) * [Candid Dauth](mailto:cdauth@cdauth.eu) +* [Carl Schwan](mailto:carl@carlschwan.eu) * [Carlos Silva](mailto:r3pek@r3pek.org) * [Cesar Enrique Garcia Dabo](mailto:enrique@engarda.org) * [Chris Aumann](mailto:me@chr4.org) @@ -127,6 +133,7 @@ * [Martin Ferretti](mailto:ferrettimartin@protonmail.com) * [Matthias](mailto:matthias.baier@mabaart.de) * [Matthias Blümel](mailto:user@inanna.local) +* [Michael Chang](mailto:github@micbase.com) * [Michael Grosser](mailto:github@stp-ip.net) * [Michael Hamann](mailto:michael@content-space.de) * [Michael Holley](mailto:michaelwholley@gmail.com) @@ -175,6 +182,7 @@ * [markusj](mailto:markusj@users.noreply.github.com) * [mnassabain](mailto:34754819+mnassabain@users.noreply.github.com) * [mormegil](mailto:mormegil@centrum.cz) +* [nextcloud486153](mailto:78801830+nextcloud486153@users.noreply.github.com) * [nexus-uw](mailto:you@example.com) * [repat](mailto:repat@repat.de) * [ritchiewilson](mailto:rawilson52@gmail.com) diff --git a/CHANGELOG.md b/CHANGELOG.md index d94f5efb7..2e655e246 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,16 +9,78 @@ The format is mostly based on [Keep a Changelog](https://keepachangelog.com/en/1 - Add Typescript - Add Jest for Unit Tests -## [18.x.x] +# Releases +## [19.0.0] - 2022-10-25 +### Fixed +- Fix nested scrollbars in navigation (#411, #1958) + +## [19.0.0-beta2] - 2022-10-23 +### Fixed +- Fixed various keyboard navigation issues (#1953) +- Fix cron job warning notification layout on NC25 (#1953) + +## [19.0.0-beta1] - 2022-10-22 +### Changed +- Drop support for Nextcloud 22, NC 22 has reached it's end of life. (#1950) +- Add support for Nextcloud 25 (#1950) +### Fixed +- Corrected article compact title bar position in NC25 (#1944) +- Fixed "Mark read through scrolling" in NC25 and NC24 (#1944) + +## [18.3.0] - 2022-10-21 +### Fixed +- Remove setting for minimum purge interval since it is not used. (#1935) + +## [18.3.0-beta1] - 2022-10-10 +### Changed +- New administrator setting for deleting unread items automatically (#1931) + +## [18.2.0] - 2022-09-28 +### Fixed +- Fix the highlighted item when reverse ordering is selected (#1838) + +## [18.2.0-beta2] - 2022-09-07 +Fix for the read all function and spelling fixes. + +## [18.2.0-beta1] - 2022-08-30 +### Changed +- Ported the admin settings to vue (#2353) + +### Fixed +- Fix PHP 8.1 deprecations (#1861) +- Document api item types (#1861) +- Fix deprecation warnings from Nextcloud server (#1869) +- Fix when marking all items as read, all items of the user are used in the sql query (#1873) +- Fix adding feed via the web-ui that was just deleted causing an error (#1872) + +## [18.1.1] - 2022-08-12 +### Changed +- Change autodiscover to only run after fetching the given url has failed (#1860) + +## [18.1.1-beta1] - 2022-07-04 +### Fixed +- Fix export of unread and starred articles failing due to postgres error (#1839, #1249) +- Fix broken API v1.3 (#1841) + +## [18.1.0] - 2022-06-10 +Due to #1766 some Feeds might now have items that have `null` set as author instead of `""` clients need to handle this. + +## [18.1.0-beta2] - 2022-05-31 ### Changed -- Add routes for starring/unstarring items by id -- Improve styling of tables in articles +- If items of feed do not provide an author fallback to feed author (#1803) + +## [18.1.0-beta1] - 2022-05-29 +### Changed +- Add API v1.3 adding routes for starring/unstarring items by id and general fixes (#1727) + https://nextcloud.github.io/news/api/api-v1-3/ +- Improve styling of tables in articles (#1779) +- Allow fetching feeds that omit guid by using link as stand-in (#1785) ### Fixed - Fix updated api not returning any item after marking item as read (#1713) - Fix deprecation warning for strip_tags() on a null value (#1766) - -# Releases +- Fix selected item being set incorrectly when using default ordering or newest first ordering (#1324) +- Fix doubling the height of the content area (#1796) ## [18.0.1] - 2022-04-22 No major changes since the beta versions. diff --git a/Makefile b/Makefile index 5a2e03f1a..87c170b58 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,8 @@ endif # Installs npm dependencies .PHONY: npm npm: + $(npm) ci + $(npm) run build ifneq (, $(npm)) $(npm) run build else @@ -171,12 +173,15 @@ appstore: # on macOS there is no option "--parents" for the "cp" command mkdir -p $(appstore_sign_dir)/$(app_name)/js/build $(appstore_sign_dir)/$(app_name)/js/admin cp js/build/app.min.js $(appstore_sign_dir)/$(app_name)/js/build - cp js/admin/Admin.js $(appstore_sign_dir)/$(app_name)/js/admin + cp js/build/news-admin-settings.js* $(appstore_sign_dir)/$(app_name)/js/build # export the key and cert to a file - mkdir -p $(cert_dir) - php ./bin/tools/file_from_env.php "app_private_key" "$(cert_dir)/$(app_name).key" - php ./bin/tools/file_from_env.php "app_public_crt" "$(cert_dir)/$(app_name).crt" + @if [ ! -f $(cert_dir)/$(app_name).key ] || [ ! -f $(cert_dir)/$(app_name).crt ]; then \ + echo "Key and cert do not exist"; \ + mkdir -p $(cert_dir); \ + php ./bin/tools/file_from_env.php "app_private_key" "$(cert_dir)/$(app_name).key"; \ + php ./bin/tools/file_from_env.php "app_public_crt" "$(cert_dir)/$(app_name).crt"; \ + fi @if [ -f $(cert_dir)/$(app_name).key ]; then \ echo "Signing app files…"; \ @@ -215,4 +220,12 @@ test: php-test-dependencies .PHONY: feed-test feed-test: - ./bin/tools/check_feeds.sh \ No newline at end of file + ./bin/tools/check_feeds.sh + +.PHONY: feed-server +feed-server: + php -S 127.0.0.1:8090 -t $(CURDIR)/tests/test_helper/feeds + +.PHONY: nextcloud-server +nextcloud-server: + php -S 127.0.0.1:8080 -t $(CURDIR)/../../. \ No newline at end of file diff --git a/appinfo/info.xml b/appinfo/info.xml index 2c169677e..eeb5af55b 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -21,7 +21,7 @@ Create a [feature request](https://github.com/nextcloud/news/discussions/new) Report a [feed issue](https://github.com/nextcloud/news/discussions/new) ]]> - 18.0.1 + 19.0.0 agpl Benjamin Brahmer Sean Molenaar @@ -55,7 +55,7 @@ Report a [feed issue](https://github.com/nextcloud/news/discussions/new) json - + diff --git a/appinfo/routes.php b/appinfo/routes.php index be16ed3bc..3f5b8eb23 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -61,85 +61,61 @@ return ['routes' => [ // general API ['name' => 'api#index', 'url' => '/api', 'verb' => 'GET'], -// API 2 -['name' => 'folder_api_v2#create', 'url' => '/api/v2/folders', 'verb' => 'POST'], -['name' => 'folder_api_v2#update', 'url' => '/api/v2/folders/{folderId}', 'verb' => 'PATCH'], -['name' => 'folder_api_v2#delete', 'url' => '/api/v2/folders/{folderId}', 'verb' => 'DELETE'], +['name' => 'utility_api#preflighted_cors', 'url' => '/api/{apiVersion}/{path}', 'verb' => 'OPTIONS', 'requirements' => ['apiVersion' => 'v(1-[23]|2)', 'path' => '.+']], +['name' => 'utility_api#version', 'url' => '/api/{apiVersion}/version', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v(1-[23]|2)']], -// API 1.3 -['name' => 'utility_api#version', 'url' => '/api/v1-3/version', 'verb' => 'GET'], -['name' => 'utility_api#status', 'url' => '/api/v1-3/status', 'verb' => 'GET'], -['name' => 'utility_api#before_update', 'url' => '/api/v1-3/cleanup/before-update', 'verb' => 'GET'], -['name' => 'utility_api#after_update', 'url' => '/api/v1-3/cleanup/after-update', 'verb' => 'GET'], -['name' => 'utility_api#preflighted_cors', 'url' => '/api/v1-3/{path}', 'verb' => 'OPTIONS', 'requirements' => ['path' => '.+']], +// API 1.x +['name' => 'utility_api#status', 'url' => '/api/{apiVersion}/status', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'utility_api#before_update', 'url' => '/api/{apiVersion}/cleanup/before-update', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'utility_api#after_update', 'url' => '/api/{apiVersion}/cleanup/after-update', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], // folders -['name' => 'folder_api#index', 'url' => '/api/v1-3/folders', 'verb' => 'GET'], -['name' => 'folder_api#create', 'url' => '/api/v1-3/folders', 'verb' => 'POST'], -['name' => 'folder_api#update', 'url' => '/api/v1-3/folders/{folderId}', 'verb' => 'PUT'], -['name' => 'folder_api#delete', 'url' => '/api/v1-3/folders/{folderId}', 'verb' => 'DELETE'], -['name' => 'folder_api#read', 'url' => '/api/v1-3/folders/{folderId}/read', 'verb' => 'POST'], +['name' => 'folder_api#index', 'url' => '/api/{apiVersion}/folders', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'folder_api#create', 'url' => '/api/{apiVersion}/folders', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'folder_api#update', 'url' => '/api/{apiVersion}/folders/{folderId}', 'verb' => 'PUT', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'folder_api#delete', 'url' => '/api/{apiVersion}/folders/{folderId}', 'verb' => 'DELETE', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'folder_api#read', 'url' => '/api/{apiVersion}/folders/{folderId}/read', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'folder_api#read', 'url' => '/api/v1-2/folders/{folderId}/read', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 // feeds -['name' => 'feed_api#index', 'url' => '/api/v1-3/feeds', 'verb' => 'GET'], -['name' => 'feed_api#create', 'url' => '/api/v1-3/feeds', 'verb' => 'POST'], -['name' => 'feed_api#update', 'url' => '/api/v1-3/feeds/{feedId}', 'verb' => 'PUT'], -['name' => 'feed_api#delete', 'url' => '/api/v1-3/feeds/{feedId}', 'verb' => 'DELETE'], -['name' => 'feed_api#from_all_users', 'url' => '/api/v1-3/feeds/all', 'verb' => 'GET'], -['name' => 'feed_api#move', 'url' => '/api/v1-3/feeds/{feedId}/move', 'verb' => 'POST'], -['name' => 'feed_api#rename', 'url' => '/api/v1-3/feeds/{feedId}/rename', 'verb' => 'POST'], -['name' => 'feed_api#read', 'url' => '/api/v1-3/feeds/{feedId}/read', 'verb' => 'POST'], -['name' => 'feed_api#update', 'url' => '/api/v1-3/feeds/update', 'verb' => 'GET'], +['name' => 'feed_api#index', 'url' => '/api/{apiVersion}/feeds', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'feed_api#create', 'url' => '/api/{apiVersion}/feeds', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'feed_api#update', 'url' => '/api/{apiVersion}/feeds/{feedId}', 'verb' => 'PUT', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'feed_api#delete', 'url' => '/api/{apiVersion}/feeds/{feedId}', 'verb' => 'DELETE', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'feed_api#from_all_users', 'url' => '/api/{apiVersion}/feeds/all', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'feed_api#move', 'url' => '/api/{apiVersion}/feeds/{feedId}/move', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'feed_api#move', 'url' => '/api/v1-2/feeds/{feedId}/move', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'feed_api#rename', 'url' => '/api/{apiVersion}/feeds/{feedId}/rename', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'feed_api#rename', 'url' => '/api/v1-2/feeds/{feedId}/rename', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'feed_api#read', 'url' => '/api/{apiVersion}/feeds/{feedId}/read', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'feed_api#read', 'url' => '/api/v1-2/feeds/{feedId}/read', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'feed_api#update', 'url' => '/api/{apiVersion}/feeds/update', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], // items -['name' => 'item_api#index', 'url' => '/api/v1-3/items', 'verb' => 'GET'], -['name' => 'item_api#updated', 'url' => '/api/v1-3/items/updated', 'verb' => 'GET'], -['name' => 'item_api#read', 'url' => '/api/v1-3/items/{itemId}/read', 'verb' => 'POST'], -['name' => 'item_api#unread', 'url' => '/api/v1-3/items/{itemId}/unread', 'verb' => 'POST'], -['name' => 'item_api#read_all', 'url' => '/api/v1-3/items/read', 'verb' => 'POST'], -['name' => 'item_api#read_multiple_by_ids', 'url' => '/api/v1-3/items/read/multiple', 'verb' => 'POST'], -['name' => 'item_api#unread_multiple_by_ids', 'url' => '/api/v1-3/items/unread/multiple', 'verb' => 'POST'], -['name' => 'item_api#star_by_item_id', 'url' => '/api/v1-3/items/{itemId}/star', 'verb' => 'POST'], -['name' => 'item_api#unstar_by_item_id', 'url' => '/api/v1-3/items/{itemId}/unstar', 'verb' => 'POST'], -['name' => 'item_api#star_multiple_by_item_ids', 'url' => '/api/v1-3/items/star/multiple', 'verb' => 'POST'], -['name' => 'item_api#unstar_multiple_by_item_ids', 'url' => '/api/v1-3/items/unstar/multiple', 'verb' => 'POST'], - -// API 1.2 -['name' => 'utility_api#version', 'url' => '/api/v1-2/version', 'verb' => 'GET'], -['name' => 'utility_api#status', 'url' => '/api/v1-2/status', 'verb' => 'GET'], -['name' => 'utility_api#before_update', 'url' => '/api/v1-2/cleanup/before-update', 'verb' => 'GET'], -['name' => 'utility_api#after_update', 'url' => '/api/v1-2/cleanup/after-update', 'verb' => 'GET'], -['name' => 'utility_api#preflighted_cors', 'url' => '/api/v1-2/{path}', 'verb' => 'OPTIONS', 'requirements' => ['path' => '.+']], - -// folders -['name' => 'folder_api#index', 'url' => '/api/v1-2/folders', 'verb' => 'GET'], -['name' => 'folder_api#create', 'url' => '/api/v1-2/folders', 'verb' => 'POST'], -['name' => 'folder_api#update', 'url' => '/api/v1-2/folders/{folderId}', 'verb' => 'PUT'], -['name' => 'folder_api#delete', 'url' => '/api/v1-2/folders/{folderId}', 'verb' => 'DELETE'], -['name' => 'folder_api#read', 'url' => '/api/v1-2/folders/{folderId}/read', 'verb' => 'PUT'], // FIXME: POST would be more correct +['name' => 'item_api#index', 'url' => '/api/{apiVersion}/items', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'item_api#updated', 'url' => '/api/{apiVersion}/items/updated', 'verb' => 'GET', 'requirements' => ['apiVersion' => 'v1-[23]']], +['name' => 'item_api#read', 'url' => '/api/{apiVersion}/items/{itemId}/read', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#read', 'url' => '/api/v1-2/items/{itemId}/read', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#unread', 'url' => '/api/{apiVersion}/items/{itemId}/unread', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#unread', 'url' => '/api/v1-2/items/{itemId}/unread', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#read_all', 'url' => '/api/{apiVersion}/items/read', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#read_all', 'url' => '/api/v1-2/items/read', 'verb' => 'PUT', 'postfix' => 'v1.2'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#read_multiple_by_ids', 'url' => '/api/{apiVersion}/items/read/multiple', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#read_multiple', 'url' => '/api/v1-2/items/read/multiple', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#unread_multiple_by_ids', 'url' => '/api/{apiVersion}/items/unread/multiple', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#unread_multiple', 'url' => '/api/v1-2/items/unread/multiple', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#star_by_item_id', 'url' => '/api/{apiVersion}/items/{itemId}/star', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#star', 'url' => '/api/v1-2/items/{feedId}/{guidHash}/star', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#unstar_by_item_id', 'url' => '/api/{apiVersion}/items/{itemId}/unstar', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#unstar', 'url' => '/api/v1-2/items/{feedId}/{guidHash}/unstar', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#star_multiple_by_item_ids', 'url' => '/api/{apiVersion}/items/star/multiple', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#star_multiple', 'url' => '/api/v1-2/items/star/multiple', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 +['name' => 'item_api#unstar_multiple_by_item_ids', 'url' => '/api/{apiVersion}/items/unstar/multiple', 'verb' => 'POST', 'requirements' => ['apiVersion' => 'v1-3']], +['name' => 'item_api#unstar_multiple', 'url' => '/api/v1-2/items/unstar/multiple', 'verb' => 'PUT'], // Backward compatibility. Corrected HTTP method as of v1.3 -// feeds -['name' => 'feed_api#index', 'url' => '/api/v1-2/feeds', 'verb' => 'GET'], -['name' => 'feed_api#create', 'url' => '/api/v1-2/feeds', 'verb' => 'POST'], -['name' => 'feed_api#update', 'url' => '/api/v1-2/feeds/{feedId}', 'verb' => 'PUT'], -['name' => 'feed_api#delete', 'url' => '/api/v1-2/feeds/{feedId}', 'verb' => 'DELETE'], -['name' => 'feed_api#from_all_users', 'url' => '/api/v1-2/feeds/all', 'verb' => 'GET'], -['name' => 'feed_api#move', 'url' => '/api/v1-2/feeds/{feedId}/move', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'feed_api#rename', 'url' => '/api/v1-2/feeds/{feedId}/rename', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'feed_api#read', 'url' => '/api/v1-2/feeds/{feedId}/read', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'feed_api#update', 'url' => '/api/v1-2/feeds/update', 'verb' => 'GET'], - -// items -['name' => 'item_api#index', 'url' => '/api/v1-2/items', 'verb' => 'GET'], -['name' => 'item_api#updated', 'url' => '/api/v1-2/items/updated', 'verb' => 'GET'], -['name' => 'item_api#read', 'url' => '/api/v1-2/items/{itemId}/read', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#unread', 'url' => '/api/v1-2/items/{itemId}/unread', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#read_all', 'url' => '/api/v1-2/items/read', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#read_multiple', 'url' => '/api/v1-2/items/read/multiple', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#unread_multiple', 'url' => '/api/v1-2/items/unread/multiple', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#star', 'url' => '/api/v1-2/items/{feedId}/{guidHash}/star', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#unstar', 'url' => '/api/v1-2/items/{feedId}/{guidHash}/unstar', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#star_multiple', 'url' => '/api/v1-2/items/star/multiple', 'verb' => 'PUT'], // FIXME: POST would be more correct -['name' => 'item_api#unstar_multiple', 'url' => '/api/v1-2/items/unstar/multiple', 'verb' => 'PUT'], // FIXME: POST would be more correct +// API 2 +['name' => 'folder_api_v2#create', 'url' => '/api/v2/folders', 'verb' => 'POST'], +['name' => 'folder_api_v2#update', 'url' => '/api/v2/folders/{folderId}', 'verb' => 'PATCH'], +['name' => 'folder_api_v2#delete', 'url' => '/api/v2/folders/{folderId}', 'verb' => 'DELETE'], ]]; diff --git a/composer.json b/composer.json index c7daf148d..15ccf21c2 100644 --- a/composer.json +++ b/composer.json @@ -41,7 +41,7 @@ }, "require": { "php": "^7.2 || ~8.0", - "ezyang/htmlpurifier": "^4.14.0", + "ezyang/htmlpurifier": "^4.16.0", "pear/net_url2": "^2.2.2", "riimu/kit-pathjoin": "^1.2.0", "debril/feed-io": "^v4.9.12", @@ -55,14 +55,15 @@ }, "require-dev": { "phpunit/phpunit": "9.5.*", - "squizlabs/php_codesniffer": "^3.6.2", - "phpstan/phpstan": "^1.4.0", - "phpstan/phpstan-doctrine": "^1.2.11", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpstan/phpstan-phpunit": "^1.0.0", - "phpstan/extension-installer": "^1.1.0", + "squizlabs/php_codesniffer": "^3.7.1", + "phpstan/phpstan": "^1.9.0", + "phpstan/phpstan-doctrine": "^1.3.22", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan-deprecation-rules": "^1.0", "guzzlehttp/guzzle": "^7.3.0", - "doctrine/dbal": "^3.3.2", + "doctrine/dbal": "^3.5.1", "symfony/console": "^4.4.19", "psr/log": "^1.1.0" }, diff --git a/composer.lock b/composer.lock index 75fefa812..aca10cd79 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "00457bc6f2ee6370bf0499b07d03eacf", + "content-hash": "870253c3a6ac00e3c791eba0cc77bc3b", "packages": [ { "name": "arthurhoaro/favicon", @@ -66,16 +66,16 @@ }, { "name": "debril/feed-io", - "version": "v4.9.13", + "version": "v4.9.14", "source": { "type": "git", "url": "https://github.com/alexdebril/feed-io.git", - "reference": "0b3250a31f9006528c16942a9642620e098460de" + "reference": "58ae5a6d4846f3e835c4258cf843a1bf96121bcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alexdebril/feed-io/zipball/0b3250a31f9006528c16942a9642620e098460de", - "reference": "0b3250a31f9006528c16942a9642620e098460de", + "url": "https://api.github.com/repos/alexdebril/feed-io/zipball/58ae5a6d4846f3e835c4258cf843a1bf96121bcd", + "reference": "58ae5a6d4846f3e835c4258cf843a1bf96121bcd", "shasum": "" }, "require": { @@ -127,7 +127,7 @@ ], "support": { "issues": "https://github.com/alexdebril/feed-io/issues", - "source": "https://github.com/alexdebril/feed-io/tree/v4.9.13" + "source": "https://github.com/alexdebril/feed-io/tree/v4.9.14" }, "funding": [ { @@ -135,24 +135,34 @@ "type": "github" } ], - "time": "2022-04-10T21:19:29+00:00" + "time": "2022-06-09T08:07:50+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.14.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", - "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" }, "type": "library", "autoload": { @@ -184,9 +194,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" }, - "time": "2021-12-25T01:21:49+00:00" + "time": "2022-09-18T07:06:19+00:00" }, { "name": "fivefilters/readability.php", @@ -370,16 +380,16 @@ "packages-dev": [ { "name": "doctrine/cache", - "version": "2.1.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", - "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", "shasum": "" }, "require": { @@ -389,18 +399,12 @@ "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "alcaeus/mongo-php-adapter": "^1.1", "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^8.0", - "mongodb/mongodb": "^1.1", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "predis/predis": "~1.0", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.2 || ^6.0@dev", - "symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev" - }, - "suggest": { - "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" }, "type": "library", "autoload": { @@ -449,7 +453,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.1.1" + "source": "https://github.com/doctrine/cache/tree/2.2.0" }, "funding": [ { @@ -465,42 +469,42 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:49:29+00:00" + "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/dbal", - "version": "3.3.6", + "version": "3.5.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21" + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/9e7f76dd1cde81c62574fdffa5a9c655c847ad21", - "reference": "9e7f76dd1cde81c62574fdffa5a9c655c847ad21", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", + "reference": "f38ee8aaca2d58ee88653cb34a6a3880c23f38a5", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.6.3", - "phpstan/phpstan-strict-rules": "^1.2", - "phpunit/phpunit": "9.5.20", - "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.2", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.23.0" + "doctrine/coding-standard": "10.0.0", + "jetbrains/phpstorm-stubs": "2022.2", + "phpstan/phpstan": "1.8.10", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "9.5.25", + "psalm/plugin-phpunit": "0.17.0", + "squizlabs/php_codesniffer": "3.7.1", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.29.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -560,7 +564,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.6" + "source": "https://github.com/doctrine/dbal/tree/3.5.1" }, "funding": [ { @@ -576,7 +580,7 @@ "type": "tidelift" } ], - "time": "2022-05-02T17:21:01+00:00" + "time": "2022-10-24T07:26:18+00:00" }, { "name": "doctrine/deprecations", @@ -623,37 +627,35 @@ }, { "name": "doctrine/event-manager", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f" + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f", - "reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", + "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", "shasum": "" }, "require": { + "doctrine/deprecations": "^0.5.3 || ^1", "php": "^7.1 || ^8.0" }, "conflict": { - "doctrine/common": "<2.9@dev" + "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpunit/phpunit": "^7.0" + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.24" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\": "lib/Doctrine/Common" + "Doctrine\\Common\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -697,7 +699,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + "source": "https://github.com/doctrine/event-manager/tree/1.2.0" }, "funding": [ { @@ -713,7 +715,7 @@ "type": "tidelift" } ], - "time": "2020-05-29T18:28:51+00:00" + "time": "2022-10-12T20:51:15+00:00" }, { "name": "doctrine/instantiator", @@ -846,16 +848,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -896,9 +898,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "phar-io/manifest", @@ -1011,257 +1013,29 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "au