Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transform bootstrap-package/full into a conditional set #1525

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,16 @@ jobs:
if: ${{ always() && steps.install.conclusion == 'success' }}
run: |
composer cgl:ci
- id: phpstan
- id: phpstan-v12
name: PHPStan
if: ${{ always() && steps.install.conclusion == 'success' }}
if: ${{ always() && steps.install.conclusion == 'success' && matrix.typo3 == '^12' }}
run: |
composer phpstan-v12 -- --error-format=github
- id: phpstan-v13
name: PHPStan
if: ${{ always() && steps.install.conclusion == 'success' && matrix.typo3 != '^12' }}
run: |
composer phpstan -- --error-format=github
composer phpstan-v13 -- --error-format=github
- id: tests_unit
name: Unit Tests
if: ${{ always() && steps.install.conclusion == 'success' && matrix.php == '8.3' }}
Expand Down
26 changes: 26 additions & 0 deletions Build/phpstan-baseline-v12.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
parameters:
ignoreErrors:
-
message: "#^Call to an undefined static method TYPO3\\\\CMS\\\\Core\\\\Package\\\\AbstractServiceProvider\\:\\:configureSetCollector\\(\\)\\.$#"
count: 1
path: ../Classes/ServiceProvider.php

-
message: "#^Class TYPO3\\\\CMS\\\\Core\\\\Site\\\\Set\\\\SetCollector not found\\.$#"
count: 1
path: ../Classes/ServiceProvider.php

-
message: "#^Instantiated class TYPO3\\\\CMS\\\\Core\\\\Site\\\\Set\\\\SetDefinition not found\\.$#"
count: 1
path: ../Classes/ServiceProvider.php

-
message: "#^Method BK2K\\\\BootstrapPackage\\\\ServiceProvider\\:\\:configureSetCollector\\(\\) has invalid return type TYPO3\\\\CMS\\\\Core\\\\Site\\\\Set\\\\SetCollector\\.$#"
count: 1
path: ../Classes/ServiceProvider.php

-
message: "#^Parameter \\$setCollector of method BK2K\\\\BootstrapPackage\\\\ServiceProvider\\:\\:configureSetCollector\\(\\) has invalid type TYPO3\\\\CMS\\\\Core\\\\Site\\\\Set\\\\SetCollector\\.$#"
count: 1
path: ../Classes/ServiceProvider.php
3 changes: 3 additions & 0 deletions Build/phpstan-v12.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
includes:
- %currentWorkingDirectory%/Build/phpstan.neon
- %currentWorkingDirectory%/Build/phpstan-baseline-v12.neon
3 changes: 3 additions & 0 deletions Build/phpstan-v13.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
includes:
- %currentWorkingDirectory%/Build/phpstan.neon
- %currentWorkingDirectory%/Build/phpstan-baseline-v13.neon
1 change: 0 additions & 1 deletion Build/phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ includes:
- %currentWorkingDirectory%/.build/vendor/phpstan/phpstan-strict-rules/rules.neon
- %currentWorkingDirectory%/.build/vendor/phpstan/phpstan-deprecation-rules/rules.neon
- %currentWorkingDirectory%/.build/vendor/friendsoftypo3/phpstan-typo3/extension.neon
- %currentWorkingDirectory%/Build/phpstan-baseline-v13.neon

parameters:
level: 8
Expand Down
85 changes: 85 additions & 0 deletions Classes/ServiceProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php declare(strict_types=1);

/*
* This file is part of the package bk2k/bootstrap-package.
*
* For the full copyright and license information, please read the
* LICENSE file that was distributed with this source code.
*/

namespace BK2K\BootstrapPackage;

use Psr\Container\ContainerInterface;
use TYPO3\CMS\Core\Information\Typo3Version;
use TYPO3\CMS\Core\Package\AbstractServiceProvider;
use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Site\Set\SetCollector;
use TYPO3\CMS\Core\Site\Set\SetDefinition;

/**
* @internal
*/
class ServiceProvider extends AbstractServiceProvider
{
protected static function getPackagePath(): string
{
return __DIR__ . '/../';
}

protected static function getPackageName(): string
{
return 'bk2k/bootstrap-package';
}

public function getFactories(): array
{
return [];
}

public function getExtensions(): array
{
if ((new Typo3Version)->getMajorVersion() <= 12) {
return parent::getExtensions();
}

return [
SetCollector::class => [ static::class, 'configureSetCollector' ],
] + parent::getExtensions();
}

public static function configureSetCollector(ContainerInterface $container, SetCollector $setCollector, ?string $path = null): SetCollector
{
$setCollector = parent::configureSetCollector($container, $setCollector, $path);
$availableSets = $setCollector->getSetDefinitions();
$bpFullSet = $availableSets['bootstrap-package/full'] ?? null;
if ($bpFullSet === null) {
return $setCollector;
}

$optionalDependencies = [];
if (isset($availableSets['typo3/form'])) {
$optionalDependencies[] = 'bootstrap-package/ext-form';
}
if (isset($availableSets['typo3/seo-sitemap'])) {
$optionalDependencies[] = 'bootstrap-package/ext-seo';
}
if (isset($availableSets['typo3/indexed-search'])) {
$optionalDependencies[] = 'bootstrap-package/ext-indexed-search';
}
// TODO: Introspect `$availableSets` once EXT:container provides a set
if ($container->get(PackageManager::class)->isPackageActive('container')) {
$optionalDependencies[] = 'bootstrap-package/ext-container';
}

$setCollector->add(
new SetDefinition(...[
...$bpFullSet->toArray(),
'dependencies' => [
...$bpFullSet->dependencies,
...$optionalDependencies,
],
])
);
return $setCollector;
}
}
6 changes: 6 additions & 0 deletions Configuration/Sets/Base/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
name: bootstrap-package/base
label: 'Bootstrap Package: Base'
hidden: true
dependencies:
- bootstrap-package/categories
- bootstrap-package/template-paths
2 changes: 2 additions & 0 deletions Configuration/Sets/Boostrap5/config.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
name: bootstrap-package/bootstrap-5
label: 'Bootstrap Package: Bootstrap 5'
hidden: true
dependencies:
- bootstrap-package/base
25 changes: 0 additions & 25 deletions Configuration/Sets/Boostrap5/settings.definitions.yaml
Original file line number Diff line number Diff line change
@@ -1,28 +1,3 @@
categories:
BootstrapPackage:
label: 'Bootstrap Package'
BootstrapPackage.scss:
label: 'SCSS'
parent: BootstrapPackage
BootstrapPackage.scss.colors:
label: 'Colors'
parent: BootstrapPackage.scss
BootstrapPackage.scss.contrast:
label: 'Contrast'
parent: BootstrapPackage.scss
BootstrapPackage.scss.body:
label: 'Body'
parent: BootstrapPackage.scss
BootstrapPackage.scss.links:
label: 'Links'
parent: BootstrapPackage.scss
BootstrapPackage.scss.fonts:
label: 'Fonts'
parent: BootstrapPackage.scss
BootstrapPackage.scss.options:
label: 'Options'
parent: BootstrapPackage.scss

settings:

# Colors
Expand Down
3 changes: 3 additions & 0 deletions Configuration/Sets/Categories/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
name: bootstrap-package/categories
label: 'Bootstrap Package: Categories'
hidden: true
137 changes: 137 additions & 0 deletions Configuration/Sets/Categories/settings.definitions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
categories:
BootstrapPackage:
label: 'Bootstrap Package'
BootstrapPackage.logo:
label: 'Logo'
parent: BootstrapPackage
BootstrapPackage.favicon:
label: 'Favicon'
parent: BootstrapPackage
BootstrapPackage.templates:
label: 'Templates'
parent: BootstrapPackage
BootstrapPackage.templates.page:
label: 'Pages'
parent: BootstrapPackage.templates
BootstrapPackage.templates.block:
label: 'Block'
parent: BootstrapPackage.templates
BootstrapPackage.templates.plugin:
label: 'Plugin'
parent: BootstrapPackage.templates
BootstrapPackage.navigation:
label: 'Navigation'
parent: BootstrapPackage
BootstrapPackage.navigation.main:
label: 'Main'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.dropdown:
label: 'Dropdown'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.sub:
label: 'Subnavigation'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.breadcrumb:
label: 'Breadcrumb'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.meta:
label: 'Meta'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.footer:
label: 'Footer'
parent: BootstrapPackage.navigation
BootstrapPackage.navigation.language:
label: 'Language'
parent: BootstrapPackage.navigation
BootstrapPackage.contact:
label: 'Contact'
parent: BootstrapPackage
BootstrapPackage.contact.data:
label: 'Data'
parent: BootstrapPackage.contact
BootstrapPackage.contact.button:
label: 'Button'
parent: BootstrapPackage.contact
BootstrapPackage.copyright:
label: 'Copyright'
parent: BootstrapPackage
BootstrapPackage.socialmedia:
label: 'Social Media'
parent: BootstrapPackage
BootstrapPackage.meta:
label: 'Meta'
parent: BootstrapPackage
BootstrapPackage.config:
label: 'Config'
parent: BootstrapPackage
BootstrapPackage.settings:
label: 'Settings'
parent: BootstrapPackage
BootstrapPackage.cookie-consent:
label: 'Cookie Consent'
parent: BootstrapPackage
BootstrapPackage.google-font:
label: 'Google Font'
parent: BootstrapPackage
BootstrapPackage.google-tag-manager:
label: 'Google Tag Manager'
parent: BootstrapPackage
BootstrapPackage.content-elements:
label: 'Content Elements'
parent: BootstrapPackage
BootstrapPackage.content-elements.templates:
label: 'Templates'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.header:
label: 'Header'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.subheader:
label: 'Subheader'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.lightbox:
label: 'Lightbox'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.media:
label: 'Media'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.gallery:
label: 'Gallery'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.menu-thumbnail:
label: 'Menu Thumbnail'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.menu-card:
label: 'Menu Card'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.text-and-icon:
label: 'Text and Icon'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.timeline:
label: 'Timeline'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.uploads:
label: 'Uploads'
parent: BootstrapPackage.content-elements
BootstrapPackage.scss:
label: 'SCSS'
parent: BootstrapPackage
BootstrapPackage.scss.colors:
label: 'Colors'
parent: BootstrapPackage.scss
BootstrapPackage.scss.contrast:
label: 'Contrast'
parent: BootstrapPackage.scss
BootstrapPackage.scss.body:
label: 'Body'
parent: BootstrapPackage.scss
BootstrapPackage.scss.links:
label: 'Links'
parent: BootstrapPackage.scss
BootstrapPackage.scss.fonts:
label: 'Fonts'
parent: BootstrapPackage.scss
BootstrapPackage.scss.options:
label: 'Options'
parent: BootstrapPackage.scss

settings: []
2 changes: 2 additions & 0 deletions Configuration/Sets/ContentElements/config.yaml
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
name: bootstrap-package/content-elements
label: 'Bootstrap Package: Content Elements'
dependencies:
- bootstrap-package/base
40 changes: 0 additions & 40 deletions Configuration/Sets/ContentElements/settings.definitions.yaml
Original file line number Diff line number Diff line change
@@ -1,43 +1,3 @@
categories:
BootstrapPackage:
label: 'Bootstrap Package'
BootstrapPackage.content-elements:
label: 'Content Elements'
parent: BootstrapPackage
BootstrapPackage.content-elements.templates:
label: 'Templates'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.header:
label: 'Header'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.subheader:
label: 'Subheader'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.lightbox:
label: 'Lightbox'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.media:
label: 'Media'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.gallery:
label: 'Gallery'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.menu-thumbnail:
label: 'Menu Thumbnail'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.menu-card:
label: 'Menu Card'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.text-and-icon:
label: 'Text and Icon'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.timeline:
label: 'Timeline'
parent: BootstrapPackage.content-elements
BootstrapPackage.content-elements.uploads:
label: 'Uploads'
parent: BootstrapPackage.content-elements

settings:

# Templates
Expand Down
2 changes: 2 additions & 0 deletions Configuration/Sets/CookieConsent/config.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
name: bootstrap-package/cookie-consent
label: 'Bootstrap Package: Cookie Consent'
hidden: true
dependencies:
- bootstrap-package/base
7 changes: 0 additions & 7 deletions Configuration/Sets/CookieConsent/settings.definitions.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
categories:
BootstrapPackage:
label: 'Bootstrap Package'
BootstrapPackage.cookie-consent:
label: 'Cookie Consent'
parent: BootstrapPackage

settings:

page.theme.cookieconsent.enable:
Expand Down
Loading