From 7804113b0006f5488ce7d0943a8a8a0638ffa5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Fri, 12 Apr 2024 18:37:16 +0100 Subject: [PATCH 1/6] [TASK] Implement image copyright list --- composer.json | 1 + composer.lock | 39 +++++++++++-- .../Controller/CopyrightController.php | 56 +++++++++++++++++++ .../Domain/Repository/CopyrightRepository.php | 53 ++++++++++++++++++ .../copyright/Configuration/Services.yaml | 9 +++ .../TCA/Overrides/tt_content.php | 14 +++++ .../Private/Language/locallang_db.xlf | 15 +++++ .../Resources/Private/Templates/Images.html | 27 +++++++++ local_packages/copyright/composer.json | 17 ++++++ local_packages/copyright/ext_localconf.php | 15 +++++ 10 files changed, 241 insertions(+), 5 deletions(-) create mode 100644 local_packages/copyright/Classes/Controller/CopyrightController.php create mode 100644 local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php create mode 100644 local_packages/copyright/Configuration/Services.yaml create mode 100644 local_packages/copyright/Configuration/TCA/Overrides/tt_content.php create mode 100644 local_packages/copyright/Resources/Private/Language/locallang_db.xlf create mode 100644 local_packages/copyright/Resources/Private/Templates/Images.html create mode 100644 local_packages/copyright/composer.json create mode 100644 local_packages/copyright/ext_localconf.php diff --git a/composer.json b/composer.json index 97e2c54..49a2be4 100644 --- a/composer.json +++ b/composer.json @@ -40,6 +40,7 @@ "b13/backendpreviews": "dev-v13-compat", "helhum/dotenv-connector": "^3.1", "praetorius/vite-asset-collector": "^1.9", + "surfcamp/copyright": "@dev", "surfcamp/success": "@dev", "typo3/cms-backend": "dev-main", "typo3/cms-belog": "dev-main", diff --git a/composer.lock b/composer.lock index 4218ce2..9cfb7a6 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": "2094bef3f3ee0e546e9bbc2ca586e2d7", + "content-hash": "8d8f2c7bd74ef42962f4076350430ca8", "packages": [ { "name": "b13/backendpreviews", @@ -2279,6 +2279,33 @@ }, "time": "2019-03-08T08:55:37+00:00" }, + { + "name": "surfcamp/copyright", + "version": "1.0.0", + "dist": { + "type": "path", + "url": "local_packages/copyright", + "reference": "c84b6da5adc6dccb0cacfeed387cf099e019c8d3" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "extension-key": "copyright" + } + }, + "autoload": { + "psr-4": { + "Surfcamp\\Copyright\\": "Classes/" + } + }, + "license": [ + "GPL-2.0-or-later" + ], + "description": "List of images", + "transport-options": { + "relative": true + } + }, { "name": "surfcamp/success", "version": "0.0.1", @@ -6844,12 +6871,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "2532eb94204b2928805d303aeb1d7baad3d59fb9" + "reference": "c84ccbc6eb9a97fb6986809427e375f86a48d038" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2532eb94204b2928805d303aeb1d7baad3d59fb9", - "reference": "2532eb94204b2928805d303aeb1d7baad3d59fb9", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/c84ccbc6eb9a97fb6986809427e375f86a48d038", + "reference": "c84ccbc6eb9a97fb6986809427e375f86a48d038", "shasum": "" }, "conflict": { @@ -7428,6 +7455,7 @@ "thinkcmf/thinkcmf": "<=5.1.7", "thorsten/phpmyfaq": "<3.2.2", "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": "<=2", "tinymce/tinymce": "<7", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", @@ -7582,13 +7610,14 @@ "type": "tidelift" } ], - "time": "2024-04-11T22:04:23+00:00" + "time": "2024-04-12T16:04:40+00:00" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { "b13/backendpreviews": 20, + "surfcamp/copyright": 20, "surfcamp/success": 20, "typo3/cms-backend": 20, "typo3/cms-belog": 20, diff --git a/local_packages/copyright/Classes/Controller/CopyrightController.php b/local_packages/copyright/Classes/Controller/CopyrightController.php new file mode 100644 index 0000000..f2afb95 --- /dev/null +++ b/local_packages/copyright/Classes/Controller/CopyrightController.php @@ -0,0 +1,56 @@ +request->getAttribute('site'); + $images = $copyrightRepository->findBySite($site); + $this->view->assign('images', $images); +// $this->view->assign('images', [ +// [ +// 'copyright' => 'Photo by Silas Baisch on Unsplash', +// 'usages' => [ +// 't3://page?uid=10#34', +// 't3://page?uid=1', +// ], +// ], +// [ +// 'copyright' => 'foo bar baz', +// 'usages' => [ +// 't3://page?uid=10#34', +// 't3://page?uid=1', +// ], +// ], +// [ +// 'copyright' => 'Sunny beach', +// 'usages' => [ +// 't3://page?uid=10#34', +// ], +// ], +// [ +// 'copyright' => 'Picture of myself', +// 'usages' => [ +// 't3://page?uid=10#34', +// 't3://page?uid=1', +// 't3://page?uid=1', +// 't3://page?uid=1', +// 't3://page?uid=1', +// ], +// ], +// ]); + return $this->htmlResponse(); + } +} diff --git a/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php new file mode 100644 index 0000000..7590445 --- /dev/null +++ b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php @@ -0,0 +1,53 @@ +getDescendantPageIdsRecursive($site->getRootPageId(), 4); + $pageIds[] = $site->getRootPageId(); + + $qb = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference'); + $qb->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class)); + $fileReferences = $qb + ->select('*') + ->from('sys_file_reference') + ->where( + $qb->expr()->in('pid', $qb->createNamedParameter($pageIds, Connection::PARAM_INT_ARRAY)), + ) + ->orderBy('pid') + ->executeQuery() + ->fetchAllAssociative(); + + $fileRepository = GeneralUtility::makeInstance(FileRepository::class); + $result = []; + foreach ($fileReferences as $fileReference) { + $fileObject = $fileRepository->findByUid($fileReference['uid_local']); + if (array_key_exists($fileObject->getUid(), $result)) { + $result[$fileObject->getUid()]['pages'][$fileReference['pid']] = $fileReference['pid']; + } else { + $result[$fileObject->getUid()] = [ + 'file' => $fileObject, + 'pages' => [$fileReference['pid'] => $fileReference['pid']], + ]; + } + } + return $result; + } +} diff --git a/local_packages/copyright/Configuration/Services.yaml b/local_packages/copyright/Configuration/Services.yaml new file mode 100644 index 0000000..9dbe871 --- /dev/null +++ b/local_packages/copyright/Configuration/Services.yaml @@ -0,0 +1,9 @@ +services: + # general settings + _defaults: + autowire: true + autoconfigure: true + public: false + + Surfcamp\Copyright\: + resource: '../Classes/*' diff --git a/local_packages/copyright/Configuration/TCA/Overrides/tt_content.php b/local_packages/copyright/Configuration/TCA/Overrides/tt_content.php new file mode 100644 index 0000000..7d71174 --- /dev/null +++ b/local_packages/copyright/Configuration/TCA/Overrides/tt_content.php @@ -0,0 +1,14 @@ + + + +
+ + + Copyright for Images + + + + List of all (visible) images used on a Site with a link to the actual page - used on the imprint page + + + + diff --git a/local_packages/copyright/Resources/Private/Templates/Images.html b/local_packages/copyright/Resources/Private/Templates/Images.html new file mode 100644 index 0000000..1cd6aca --- /dev/null +++ b/local_packages/copyright/Resources/Private/Templates/Images.html @@ -0,0 +1,27 @@ + + +
    + +
  • + + {image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} + + + Usage: +
      + +
    • + +
    • +
      +
    +
    +
    +
  • +
    +
+
+ diff --git a/local_packages/copyright/composer.json b/local_packages/copyright/composer.json new file mode 100644 index 0000000..768abcc --- /dev/null +++ b/local_packages/copyright/composer.json @@ -0,0 +1,17 @@ +{ + "name": "surfcamp/copyright", + "type": "typo3-cms-extension", + "description" : "List of images", + "license": "GPL-2.0-or-later", + "version": "1.0.0", + "autoload": { + "psr-4": { + "Surfcamp\\Copyright\\": "Classes/" + } + }, + "extra": { + "typo3/cms": { + "extension-key": "copyright" + } + } +} diff --git a/local_packages/copyright/ext_localconf.php b/local_packages/copyright/ext_localconf.php new file mode 100644 index 0000000..5df37f0 --- /dev/null +++ b/local_packages/copyright/ext_localconf.php @@ -0,0 +1,15 @@ + 'images', + ], + [], + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT +); From c47f5a27d7ebbcfc64845610174a7c27f783afc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Sun, 14 Apr 2024 14:01:48 +0200 Subject: [PATCH 2/6] [TASK] Add translation --- .../Resources/Private/Language/locallang.xlf | 11 +++++++++++ .../Resources/Private/Language/locallang_db.xlf | 2 +- .../copyright/Resources/Private/Templates/Images.html | 3 +-- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 local_packages/copyright/Resources/Private/Language/locallang.xlf diff --git a/local_packages/copyright/Resources/Private/Language/locallang.xlf b/local_packages/copyright/Resources/Private/Language/locallang.xlf new file mode 100644 index 0000000..77d303c --- /dev/null +++ b/local_packages/copyright/Resources/Private/Language/locallang.xlf @@ -0,0 +1,11 @@ + + + +
+ + + Usage: + + + + diff --git a/local_packages/copyright/Resources/Private/Language/locallang_db.xlf b/local_packages/copyright/Resources/Private/Language/locallang_db.xlf index 25a8f32..21b392a 100644 --- a/local_packages/copyright/Resources/Private/Language/locallang_db.xlf +++ b/local_packages/copyright/Resources/Private/Language/locallang_db.xlf @@ -1,6 +1,6 @@ - +
diff --git a/local_packages/copyright/Resources/Private/Templates/Images.html b/local_packages/copyright/Resources/Private/Templates/Images.html index 1cd6aca..e07221e 100644 --- a/local_packages/copyright/Resources/Private/Templates/Images.html +++ b/local_packages/copyright/Resources/Private/Templates/Images.html @@ -9,8 +9,7 @@ {image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} - - Usage: + {f:translate(key: 'usage')}
  • From 03e37c5807b8f94441965298ae6f540ead8ea84d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Sun, 14 Apr 2024 14:03:06 +0200 Subject: [PATCH 3/6] [TASK] Style copyright --- .../TypoScript/copyright.typoscript | 1 + .../Sets/_LandingPage/setup.typoscript | 1 + .../TCA/Overrides/tt_content.php | 17 ++++++++++ .../_LandingPage/Content/CopyrightImages.html | 17 ++++++++++ .../_LandingPage/Copyright/Images.html | 31 +++++++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 local_packages/success/Configuration/Sets/_LandingPage/TypoScript/copyright.typoscript create mode 100644 local_packages/success/Resources/Private/Templates/_LandingPage/Content/CopyrightImages.html create mode 100644 local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html diff --git a/local_packages/success/Configuration/Sets/_LandingPage/TypoScript/copyright.typoscript b/local_packages/success/Configuration/Sets/_LandingPage/TypoScript/copyright.typoscript new file mode 100644 index 0000000..3bce043 --- /dev/null +++ b/local_packages/success/Configuration/Sets/_LandingPage/TypoScript/copyright.typoscript @@ -0,0 +1 @@ +tt_content.copyright_images.20.view.templateRootPaths.20 = EXT:success/Resources/Private/Templates/_LandingPage/Copyright diff --git a/local_packages/success/Configuration/Sets/_LandingPage/setup.typoscript b/local_packages/success/Configuration/Sets/_LandingPage/setup.typoscript index 2747ca3..feac363 100644 --- a/local_packages/success/Configuration/Sets/_LandingPage/setup.typoscript +++ b/local_packages/success/Configuration/Sets/_LandingPage/setup.typoscript @@ -3,6 +3,7 @@ @import 'EXT:success/Configuration/Sets/_LandingPage/TypoScript/RecordLinks/contentInModal.typoscript' @import 'EXT:success/Configuration/Sets/_LandingPage/TypoScript/Form/setup.typoscript' @import 'EXT:success/Configuration/Sets/_LandingPage/TypoScript/config.typoscript' +@import 'EXT:success/Configuration/Sets/_LandingPage/TypoScript/copyright.typoscript' page = PAGE page { diff --git a/local_packages/success/Configuration/TCA/Overrides/tt_content.php b/local_packages/success/Configuration/TCA/Overrides/tt_content.php index 75099d2..e6ff8f7 100644 --- a/local_packages/success/Configuration/TCA/Overrides/tt_content.php +++ b/local_packages/success/Configuration/TCA/Overrides/tt_content.php @@ -738,3 +738,20 @@ $GLOBALS['TCA']['tt_content']['ctrl']['typeicon_classes']['success_topbar'] = 'content-header'; $GLOBALS['TCA']['tt_content']['types']['form_formframework']['previewRenderer'] = \Surfcamp\Success\Hooks\FormPagePreviewRenderer::class; + +// Copright Images +$GLOBALS['TCA']['tt_content']['types']['copyright_images'] = [ + 'showitem' => ' + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general, + --palette--;;general, + --palette--;;headers, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:appearance, + --palette--;;frames, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language, + --palette--;;language, --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access, + --palette--;;hidden, + --palette--;;access, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:notes, rowDescription, + --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:extended, + ', +]; diff --git a/local_packages/success/Resources/Private/Templates/_LandingPage/Content/CopyrightImages.html b/local_packages/success/Resources/Private/Templates/_LandingPage/Content/CopyrightImages.html new file mode 100644 index 0000000..0cbfe54 --- /dev/null +++ b/local_packages/success/Resources/Private/Templates/_LandingPage/Content/CopyrightImages.html @@ -0,0 +1,17 @@ + + + + +
    + +
    + +
    +
    +
    + diff --git a/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html b/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html new file mode 100644 index 0000000..14dd63e --- /dev/null +++ b/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html @@ -0,0 +1,31 @@ + + +
      + +
    • + +
      + + {image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} + {image.pages -> f:count()} + +
      +
        + +
      • + +
      • +
        +
      +
      +
      +
      +
    • +
      +
    +
    + From c7b77bb2c72d88620f116e1fa25142a35765cea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Sun, 14 Apr 2024 14:15:58 +0200 Subject: [PATCH 4/6] [TASK] Style images copyright list for project --- composer.json | 1 - composer.lock | 47 ++++++++++--------- .../Resources/Private/Templates/Images.html | 28 +++++------ local_packages/copyright/composer.json | 2 +- .../_LandingPage/Copyright/Images.html | 12 +++-- local_packages/success/composer.json | 39 ++++++++------- 6 files changed, 67 insertions(+), 62 deletions(-) diff --git a/composer.json b/composer.json index 49a2be4..97e2c54 100644 --- a/composer.json +++ b/composer.json @@ -40,7 +40,6 @@ "b13/backendpreviews": "dev-v13-compat", "helhum/dotenv-connector": "^3.1", "praetorius/vite-asset-collector": "^1.9", - "surfcamp/copyright": "@dev", "surfcamp/success": "@dev", "typo3/cms-backend": "dev-main", "typo3/cms-belog": "dev-main", diff --git a/composer.lock b/composer.lock index 9cfb7a6..a8039ac 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": "8d8f2c7bd74ef42962f4076350430ca8", + "content-hash": "2094bef3f3ee0e546e9bbc2ca586e2d7", "packages": [ { "name": "b13/backendpreviews", @@ -2285,7 +2285,7 @@ "dist": { "type": "path", "url": "local_packages/copyright", - "reference": "c84b6da5adc6dccb0cacfeed387cf099e019c8d3" + "reference": "4af538aef11838fba3c1779ab3b9714fa6272c91" }, "type": "typo3-cms-extension", "extra": { @@ -2312,7 +2312,10 @@ "dist": { "type": "path", "url": "local_packages/success", - "reference": "e82cdae00571b0d3ccb29b0306386c47840abbc6" + "reference": "3d58d1387261d7ffdc67d90b79e13ebcfe86519b" + }, + "require": { + "surfcamp/copyright": "@dev" }, "suggest": { "b13/backendpreviews": "It enhances the preview for the backend" @@ -5261,12 +5264,12 @@ "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/backend.git", - "reference": "d1f0f11a154dae452ff4eda2ebf7097545d76e12" + "reference": "9e2212287c12bb4e285023758238b4b8bdcbac47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/d1f0f11a154dae452ff4eda2ebf7097545d76e12", - "reference": "d1f0f11a154dae452ff4eda2ebf7097545d76e12", + "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/9e2212287c12bb4e285023758238b4b8bdcbac47", + "reference": "9e2212287c12bb4e285023758238b4b8bdcbac47", "shasum": "" }, "require": { @@ -5335,7 +5338,7 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2024-04-10T16:21:54+00:00" + "time": "2024-04-13T11:50:58+00:00" }, { "name": "typo3/cms-belog", @@ -5566,12 +5569,12 @@ "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/core.git", - "reference": "2fb7b2e9344938ed52ca1ec1b3392db40d9b8649" + "reference": "d623d0e26c78e43d64165aa646826a909a27e548" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/2fb7b2e9344938ed52ca1ec1b3392db40d9b8649", - "reference": "2fb7b2e9344938ed52ca1ec1b3392db40d9b8649", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/d623d0e26c78e43d64165aa646826a909a27e548", + "reference": "d623d0e26c78e43d64165aa646826a909a27e548", "shasum": "" }, "require": { @@ -5700,7 +5703,7 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2024-04-11T18:32:01+00:00" + "time": "2024-04-13T11:50:58+00:00" }, { "name": "typo3/cms-dashboard", @@ -5708,12 +5711,12 @@ "source": { "type": "git", "url": "https://github.com/TYPO3-CMS/dashboard.git", - "reference": "411a82221901c4b9bf7fc4424051da763bfd88c5" + "reference": "a4d03004858aeff45e14e0bba89517cb78024a4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TYPO3-CMS/dashboard/zipball/411a82221901c4b9bf7fc4424051da763bfd88c5", - "reference": "411a82221901c4b9bf7fc4424051da763bfd88c5", + "url": "https://api.github.com/repos/TYPO3-CMS/dashboard/zipball/a4d03004858aeff45e14e0bba89517cb78024a4e", + "reference": "a4d03004858aeff45e14e0bba89517cb78024a4e", "shasum": "" }, "require": { @@ -5764,7 +5767,7 @@ "issues": "https://forge.typo3.org", "source": "https://github.com/typo3/typo3" }, - "time": "2024-04-12T13:08:26+00:00" + "time": "2024-04-13T08:20:22+00:00" }, { "name": "typo3/cms-extbase", @@ -6871,12 +6874,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "c84ccbc6eb9a97fb6986809427e375f86a48d038" + "reference": "1b43da6199cab7867f06b52454a256efa743f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/c84ccbc6eb9a97fb6986809427e375f86a48d038", - "reference": "c84ccbc6eb9a97fb6986809427e375f86a48d038", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1b43da6199cab7867f06b52454a256efa743f170", + "reference": "1b43da6199cab7867f06b52454a256efa743f170", "shasum": "" }, "conflict": { @@ -7182,7 +7185,7 @@ "mantisbt/mantisbt": "<2.26.1", "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.4.12", + "mautic/core": "<4.4.12|>=5.0.0.0-alpha,<5.0.4", "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", @@ -7326,7 +7329,7 @@ "really-simple-plugins/complianz-gdpr": "<6.4.2", "redaxo/source": "<=5.15.1", "remdex/livehelperchat": "<4.29", - "reportico-web/reportico": "<=7.1.21", + "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", "robrichards/xmlseclibs": ">=1,<3.0.4", @@ -7509,6 +7512,7 @@ "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", "woocommerce/woocommerce": "<6.6", @@ -7610,14 +7614,13 @@ "type": "tidelift" } ], - "time": "2024-04-12T16:04:40+00:00" + "time": "2024-04-12T22:04:12+00:00" } ], "aliases": [], "minimum-stability": "dev", "stability-flags": { "b13/backendpreviews": 20, - "surfcamp/copyright": 20, "surfcamp/success": 20, "typo3/cms-backend": 20, "typo3/cms-belog": 20, diff --git a/local_packages/copyright/Resources/Private/Templates/Images.html b/local_packages/copyright/Resources/Private/Templates/Images.html index e07221e..487557c 100644 --- a/local_packages/copyright/Resources/Private/Templates/Images.html +++ b/local_packages/copyright/Resources/Private/Templates/Images.html @@ -5,21 +5,19 @@
      -
    • - - {image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} - - {f:translate(key: 'usage')} -
        - -
      • - -
      • -
        -
      -
      -
      -
    • + +
    • + {f:if(condition: image.file.metaData.title, then: '{image.file.metaData.title} - ')}{image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} + {f:translate(key: 'usage')} +
        + +
      • + +
      • +
        +
      +
    • +
    diff --git a/local_packages/copyright/composer.json b/local_packages/copyright/composer.json index 768abcc..e6be8d2 100644 --- a/local_packages/copyright/composer.json +++ b/local_packages/copyright/composer.json @@ -1,7 +1,7 @@ { "name": "surfcamp/copyright", "type": "typo3-cms-extension", - "description" : "List of images", + "description": "List of images", "license": "GPL-2.0-or-later", "version": "1.0.0", "autoload": { diff --git a/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html b/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html index 14dd63e..7cb1557 100644 --- a/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html +++ b/local_packages/success/Resources/Private/Templates/_LandingPage/Copyright/Images.html @@ -5,13 +5,15 @@
      -
    • - + +
    • + {f:if(condition: image.file.metaData.title, then: '{image.file.metaData.title} - ')} {image.file.metaData.copyright -> f:format.html(parseFuncTSPath: 'lib.parseFunc')} - {image.pages -> f:count()} + {image.pages -> f:count()}
        @@ -23,8 +25,8 @@
      - -
    • + +
    diff --git a/local_packages/success/composer.json b/local_packages/success/composer.json index 7e71ae2..66b7e03 100644 --- a/local_packages/success/composer.json +++ b/local_packages/success/composer.json @@ -1,20 +1,23 @@ { - "name": "surfcamp/success", - "type": "typo3-cms-extension", - "description" : "TYPO3 Sets for your success", - "license": "GPL-2.0-or-later", - "version": "0.0.1", - "autoload": { - "psr-4": { - "Surfcamp\\Success\\": "Classes/" - } - }, - "extra": { - "typo3/cms": { - "extension-key": "success" - } - }, - "suggest": { - "b13/backendpreviews": "It enhances the preview for the backend" - } + "name": "surfcamp/success", + "type": "typo3-cms-extension", + "description": "TYPO3 Sets for your success", + "license": "GPL-2.0-or-later", + "version": "0.0.1", + "autoload": { + "psr-4": { + "Surfcamp\\Success\\": "Classes/" + } + }, + "extra": { + "typo3/cms": { + "extension-key": "success" + } + }, + "require": { + "surfcamp/copyright": "@dev" + }, + "suggest": { + "b13/backendpreviews": "It enhances the preview for the backend" + } } From 611d17eb7deb79b24512bd27f8d617501210409d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Sun, 14 Apr 2024 14:36:44 +0200 Subject: [PATCH 5/6] [TASK] Refactor controller and repository --- .../Controller/CopyrightController.php | 50 ++++--------------- .../Domain/Repository/CopyrightRepository.php | 28 +++++++---- 2 files changed, 29 insertions(+), 49 deletions(-) diff --git a/local_packages/copyright/Classes/Controller/CopyrightController.php b/local_packages/copyright/Classes/Controller/CopyrightController.php index f2afb95..fbd2d34 100644 --- a/local_packages/copyright/Classes/Controller/CopyrightController.php +++ b/local_packages/copyright/Classes/Controller/CopyrightController.php @@ -4,53 +4,25 @@ namespace Surfcamp\Copyright\Controller; +use Doctrine\DBAL\Exception; use Psr\Http\Message\ResponseInterface; use Surfcamp\Copyright\Domain\Repository\CopyrightRepository; -use TYPO3\CMS\Core\Database\ConnectionPool; -use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; -use TYPO3\CMS\Extbase\Utility\DebuggerUtility; class CopyrightController extends ActionController { + public function __construct( + protected readonly CopyrightRepository $copyrightRepository + ) + { + } + + /** + * @throws Exception + */ public function imagesAction(): ResponseInterface { - $copyrightRepository = GeneralUtility::makeInstance(CopyrightRepository::class); - $site = $this->request->getAttribute('site'); - $images = $copyrightRepository->findBySite($site); - $this->view->assign('images', $images); -// $this->view->assign('images', [ -// [ -// 'copyright' => 'Photo by Silas Baisch on Unsplash', -// 'usages' => [ -// 't3://page?uid=10#34', -// 't3://page?uid=1', -// ], -// ], -// [ -// 'copyright' => 'foo bar baz', -// 'usages' => [ -// 't3://page?uid=10#34', -// 't3://page?uid=1', -// ], -// ], -// [ -// 'copyright' => 'Sunny beach', -// 'usages' => [ -// 't3://page?uid=10#34', -// ], -// ], -// [ -// 'copyright' => 'Picture of myself', -// 'usages' => [ -// 't3://page?uid=10#34', -// 't3://page?uid=1', -// 't3://page?uid=1', -// 't3://page?uid=1', -// 't3://page?uid=1', -// ], -// ], -// ]); + $this->view->assign('images', $this->copyrightRepository->findBySite($this->request->getAttribute('site'))); return $this->htmlResponse(); } } diff --git a/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php index 7590445..170cf48 100644 --- a/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php +++ b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php @@ -4,6 +4,7 @@ namespace Surfcamp\Copyright\Domain\Repository; +use Doctrine\DBAL\Exception; use TYPO3\CMS\Core\Database\Connection; use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\Query\Restriction\FrontendRestrictionContainer; @@ -11,34 +12,41 @@ use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Site\Entity\Site; use TYPO3\CMS\Core\Utility\GeneralUtility; -use TYPO3\CMS\Extbase\Persistence\Repository; -class CopyrightRepository extends Repository +readonly class CopyrightRepository { + public function __construct( + protected PageRepository $pageRepository, + protected FileRepository $fileRepository, + protected ConnectionPool $connectionPool + ) + { + } + /** + * @throws Exception + */ public function findBySite(Site $site): array { // first fetch all pages in a specific site - $pageRepository = GeneralUtility::makeInstance(PageRepository::class); - $pageIds = $pageRepository->getDescendantPageIdsRecursive($site->getRootPageId(), 4); + $pageIds = $this->pageRepository->getDescendantPageIdsRecursive($site->getRootPageId(), 4); $pageIds[] = $site->getRootPageId(); - $qb = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_file_reference'); - $qb->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class)); - $fileReferences = $qb + $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_file_reference'); + $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class)); + $fileReferences = $queryBuilder ->select('*') ->from('sys_file_reference') ->where( - $qb->expr()->in('pid', $qb->createNamedParameter($pageIds, Connection::PARAM_INT_ARRAY)), + $queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pageIds, Connection::PARAM_INT_ARRAY)), ) ->orderBy('pid') ->executeQuery() ->fetchAllAssociative(); - $fileRepository = GeneralUtility::makeInstance(FileRepository::class); $result = []; foreach ($fileReferences as $fileReference) { - $fileObject = $fileRepository->findByUid($fileReference['uid_local']); + $fileObject = $this->fileRepository->findByUid($fileReference['uid_local']); if (array_key_exists($fileObject->getUid(), $result)) { $result[$fileObject->getUid()]['pages'][$fileReference['pid']] = $fileReference['pid']; } else { From 6396fb839509834b86197d4d2c984802be35a8ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Buchmann?= Date: Sun, 14 Apr 2024 14:59:27 +0200 Subject: [PATCH 6/6] [TASK] Reduce query results Validate copyright and mimeType in query --- .../Domain/Repository/CopyrightRepository.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php index 170cf48..ffb440e 100644 --- a/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php +++ b/local_packages/copyright/Classes/Domain/Repository/CopyrightRepository.php @@ -26,7 +26,7 @@ public function __construct( /** * @throws Exception */ - public function findBySite(Site $site): array + public function findBySite(Site $site, $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/svg+xml']): array { // first fetch all pages in a specific site $pageIds = $this->pageRepository->getDescendantPageIdsRecursive($site->getRootPageId(), 4); @@ -35,12 +35,16 @@ public function findBySite(Site $site): array $queryBuilder = $this->connectionPool->getQueryBuilderForTable('sys_file_reference'); $queryBuilder->setRestrictions(GeneralUtility::makeInstance(FrontendRestrictionContainer::class)); $fileReferences = $queryBuilder - ->select('*') - ->from('sys_file_reference') + ->select('r.*') + ->from('sys_file_reference', 'r') + ->leftJoin('r', 'sys_file', 'f', 'r.uid_local = f.uid') + ->leftJoin('f', 'sys_file_metadata', 'm', 'f.uid = m.file') ->where( - $queryBuilder->expr()->in('pid', $queryBuilder->createNamedParameter($pageIds, Connection::PARAM_INT_ARRAY)), + $queryBuilder->expr()->in('r.pid', $queryBuilder->createNamedParameter($pageIds, Connection::PARAM_INT_ARRAY)), + $queryBuilder->expr()->in('f.mime_type', $queryBuilder->createNamedParameter($allowedMimeTypes, Connection::PARAM_STR_ARRAY)), + $queryBuilder->expr()->isNotNull('m.copyright') ) - ->orderBy('pid') + ->orderBy('m.title') ->executeQuery() ->fetchAllAssociative();