Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
Installer example
parent::
boot
(
)
;
$this
->
ensureComposerHomeVarIsSet
(
)
;
}
/** * @return \Generator<BundleInterface> */
public
function
registerBundles
(
)
: \Generator
{
yield
new
FrameworkBundle
(
)
;
yield
new
TwigBundle
(
)
;
yield
new
Installer
(
)
;
}
public
function
getProjectDir
(
)
: string
{
$r
=
new
\
ReflectionObject
(
$this
)
;
/** @var string $dir */
$dir
=
$r
->
getFileName
(
)
;
if
(
!
file_exists
(
$dir
)
)
{
throw
new
\
LogicException
(
sprintf
(
'Cannot auto-detect project dir for kernel of class "%s".',
$r
->name
)
)
;
}
use
Composer\Composer;
use
Composer\IO\IOInterface;
use
Composer\Plugin\PluginInterface;
class
Plugin
implements
PluginInterface
{
/** @var Installer */
private
$installer
;
public
function
activate
(
Composer
$composer
, IOInterface
$io
)
: void
{
$this
->installer =
new
Installer
(
$io
,
$composer
)
;
$composer
->
getInstallationManager
(
)
->
addInstaller
(
$this
->installer
)
;
}
public
function
deactivate
(
Composer
$composer
, IOInterface
$io
)
: void
{
$composer
->
getInstallationManager
(
)
->
removeInstaller
(
$this
->installer
)
;
}
public
function
uninstall
(
Composer
$composer
, IOInterface
$io
)
: void
{
}
}
class
InstallerTest
extends
TestCase
{
public
function
testBuild
(
)
: void
{
$container
=
new
ContainerBuilder
(
)
;
$container
->
registerExtension
(
new
FrameworkExtension
(
)
)
;
$installer
=
new
Installer
(
)
;
$installer
->
build
(
$container
)
;
static
::
assertSame
(
[
'de' => 'de-DE',
'en' => 'en-GB',
'us' => 'en-US',
'cs' => 'cs-CZ',
'es' => 'es-ES',
'fr' => 'fr-FR',
'it' => 'it-IT',
foreach
(
$this
->kernel->
getBundles
(
)
as
$bundle
)
{
$io
->
writeln
(
sprintf
(
'Copying files for bundle: %s',
$bundle
->
getName
(
)
)
)
;
$this
->assetService->
copyAssetsFromBundle
(
$bundle
->
getName
(
)
,
$input
->
getOption
(
'force'
)
)
;
}
foreach
(
$this
->activeAppsLoader->
getActiveApps
(
)
as
$app
)
{
$io
->
writeln
(
sprintf
(
'Copying files for app: %s',
$app
[
'name'
]
)
)
;
$this
->assetService->
copyAssetsFromApp
(
$app
[
'name'
]
,
$app
[
'path'
]
,
$input
->
getOption
(
'force'
)
)
;
}
$io
->
writeln
(
'Copying files for bundle: Installer'
)
;
$this
->assetService->
copyAssets
(
new
Installer
(
)
,
$input
->
getOption
(
'force'
)
)
;
$publicDir
=
$this
->kernel->
getProjectDir
(
)
. '/public/';
if
(
!
file_exists
(
$publicDir
. '/.htaccess'
)
&&
file_exists
(
$publicDir
. '/.htaccess.dist'
)
)
{
$io
->
writeln
(
'Copying .htaccess.dist to .htaccess'
)
;
copy
(
$publicDir
. '/.htaccess.dist',
$publicDir
. '/.htaccess'
)
;
}
$io
->
success
(
'Successfully copied all bundle files'
)
;
return
self::SUCCESS;
}