Skip to content

Commit

Permalink
Commit concerns issues #5 and #6 ,#8 and #9
Browse files Browse the repository at this point in the history
PHP:

- ProcessedConfigOutputCommand.php: Added this new console command to enable the processed config to also be accessed via the console and not only the frontend of the bundle

- ConfigProcessController.php: Added the environmental parameters view route and controller action and fixed bug with the bundle config not working properly, when the favourites feature was turned off

- CJWConfigProcessorExtension.php and Configuration.php: Added new configuration for the environmental variable display

- LeftSideBarMenuBuilder.php: Added new left sidebar button to access the dedicated env view

- CustomParamProcessor.php: Added setter for the active site accesses to filter for to allow more dynamic work with the processor

Config:

- routing.yaml and services.yml: Added the env view as route and the console command as a service

Documentation:

Updates to the documentation across the board for more readability and more detailed information. Also added documentation for the new view

CSS:

- parameter_display.css: Small tweak for better display of inline values

Twig:

- param_view_environment.html.twig: Added dedicated template for env parameters view
  • Loading branch information
JAC - Frederic Bauer committed Jan 6, 2021
1 parent 1a02a55 commit 641075e
Show file tree
Hide file tree
Showing 16 changed files with 548 additions and 61 deletions.
153 changes: 153 additions & 0 deletions Command/ProcessedConfigOutputCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
<?php

namespace CJW\CJWConfigProcessor\Command;

use CJW\CJWConfigProcessor\src\ConfigProcessorBundle\ConfigProcessCoordinator;
use CJW\CJWConfigProcessor\src\ConfigProcessorBundle\CustomParamProcessor;
use eZ\Publish\Core\MVC\ConfigResolverInterface;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
* Class ProcessedConfigOutputCommand serves as a Symfony console command to display the processed configuration both
* on its own but also within a site access context and or filtered to specific branches.
*
* @package CJW\CJWConfigProcessor\Command
*/
class ProcessedConfigOutputCommand extends Command
{
protected static $defaultName = "cjw:output-config";

/**
* @var CustomParamProcessor Required to filter the configuration for specific, given parameters.
*/
private $customParameterProcessor;

public function __construct(ContainerInterface $symContainer, ConfigResolverInterface $ezConfigResolver, RequestStack $symRequestStack)
{
ConfigProcessCoordinator::initializeCoordinator($symContainer,$ezConfigResolver,$symRequestStack);
$this->customParameterProcessor = new CustomParamProcessor($symContainer);

parent::__construct();
}

/**
* @override
*
* Used to configure the command.
*/
protected function configure(): void
{
$this
->setName(self::$defaultName)
->setDescription("Displays the processed config of the symfony application.")
->setHelp(<<<'EOD'
This console command allows outputting the configuration made by the bundle to the console with a few options
that can be used to customize the output. The following options can be set, but they are purely optional:
--paramname or -p: If a specific parameter name or segment is given (i.e. "ezpublish" or "ezpublish.default.siteaccess"),
only the corresponding section of the processed configuration will be displayed. To input a specific
parameter name, simply add it after the option with a "=".
(i.e. "php bin/console cjw:output-config --paramname=param_name").
--siteaccess-context or -s:
To specify a specific site access context under which to view the parameter, simply add the context after
the option itself (i.e. "-s admin")
If the site access and the parameter name option are given at the same time, the filtered and narrowed list will be
viewed under site access context (not the complete list).
EOD
)
// TODO: Turn paramname into an array, so that multiple branches can be fltered for.
->addOption(
"paramname",
"p",
InputOption::VALUE_OPTIONAL,
"Narrow the list down to a specific branch or parameter. Simply state the parameter key or segment to filter for.",
false,
)
->addOption(
"siteaccess-context",
"s",
InputOption::VALUE_OPTIONAL,
"Define the site access context under which the config should be displayed.",
false,
);
}

/**
* Controls the commands execution.
*
* @param InputInterface $input The input the user can give to the command.
* @param OutputInterface $output Controls the output that is supposed to be written out to the user.
*
* @return int Returns the execution status code.
*
* @throws \Psr\Cache\InvalidArgumentException
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$siteAccessContext = $input->getOption("siteaccess-context");
$filterParameters = $input->getOption("paramname");

$processedParameters = ConfigProcessCoordinator::getProcessedParameters();

if ($filterParameters) {
$processedParameters = $this->customParameterProcessor->getCustomParameters([$filterParameters], $processedParameters);
}

if ($siteAccessContext) {
$siteAccess = $siteAccessContext;

if (!$filterParameters) {
$processedParameters = ConfigProcessCoordinator::getParametersForSiteAccess($siteAccess);
} else {
$this->customParameterProcessor->setSiteAccessList([$siteAccess]);
$processedParameters = $this->customParameterProcessor->scanAndEditForSiteAccessDependency($processedParameters);
}
}

$this->outputArray($output,$processedParameters);

return self::SUCCESS;

}

/**
* Builds the string output for the command. Handles hierarchical, multi dimensional arrays.
*
* @param OutputInterface $output The interface used to output the contents of the array.
* @param array $parameters The array to be output.
* @param int $indents The number of indents to be added in front of the output lines.
*/
private function outputArray(OutputInterface $output, array $parameters, int $indents = 0): void
{
if (count($parameters) === 0) {
$output->writeln("No parameters could be found for these options.");
return;
}

foreach ($parameters as $key => $parameter) {
$key = str_pad($key,$indents+strlen($key), " ", STR_PAD_LEFT);

$output->write($key.": ");
if (is_array($parameter)) {
if ( count($parameter) > 0) {
// $output->write("\n".str_repeat(" ", $indents)."["."\n");
$output->write(str_repeat(" ", $indents)."\n");
$this->outputArray($output,$parameter, $indents+4);
// $output->write(str_repeat(" ", $indents)."]"."\n");
$output->write(str_repeat(" ", $indents)."\n");
} else {
$output->writeln(" ");
}
} else {
$output->writeln($parameter);
}
}
}
}
33 changes: 28 additions & 5 deletions Controller/ConfigProcessController.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ public function __construct (ContainerInterface $symContainer, ConfigResolverInt
$this->container = $symContainer;
ConfigProcessCoordinator::initializeCoordinator($symContainer,$ezConfigResolver,$symRequestStack);

if (
$this->container->getParameter("cjw.favourite_parameters.allow") === true ||
$this->container->getParameter("cjw.custom_site_access_parameters.active") === true
) {
// if (
// $this->container->getParameter("cjw.favourite_parameters.allow") === true ||
// $this->container->getParameter("cjw.custom_site_access_parameters.active") === true
// ) {
FavouritesParamCoordinator::initialize($this->container);
}
// }

$this->showFavouritesOutsideDedicatedView =
$this->container->getParameter("cjw.favourite_parameters.display_everywhere");
Expand Down Expand Up @@ -361,6 +361,29 @@ public function downloadParameterListAsTextFile(string $downloadDescriptor): Bin
return $response;
}

public function getEnvironmentalVariables ()
{
try {
$lastUpdated = ConfigProcessCoordinator::getTimeOfLastUpdate();

$envVar = [];

if ($this->container->getParameter("cjw.env_variables.allow") === true) {
$envVar = $_ENV;
}

return $this->render(
"@CJWConfigProcessor/full/param_view_environment.html.twig",
[
"parameterList" => $envVar,
"lastUpdated" => $lastUpdated,
]
);
} catch (Exception $error) {
throw new HttpException(500, "Something went wrong while trying to gather the required parameters.");
}
}

/**
* Helper function to determine the specific parameters for both given site access contexts at the same time.
* It returns the found parameters in an array in which the first entry marks all the parameters for the first
Expand Down
6 changes: 6 additions & 0 deletions DependencyInjection/CJWConfigProcessorExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public function load(array $configs, ContainerBuilder $container)

$this->handleCustomParamConfig($config, $container);
$this->handleFavouriteParamConfig($config, $container);

if (isset($config["env_variables"]["allow"])) {
$container->setParameter("cjw.env_variables.allow",$config["env_variables"]["allow"]);
} else {
$container->setParameter("cjw.env_variables.allow", false);
}
}

/**
Expand Down
14 changes: 12 additions & 2 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ public function getConfigTreeBuilder()
$treeBuilder->getRootNode()
->children()
->arrayNode("custom_site_access_parameters")
->info("For configuring the custom parameters to be added to the site access view")
->children()
->booleanNode("allow")
->defaultFalse()
->info("Describes whether custom parameters are allowed and active in the bundle or not.")
->end()
->booleanNode("scan_parameters")
->defaultFalse()
Expand All @@ -40,11 +42,11 @@ public function getConfigTreeBuilder()
->info("Handles all things regarding favourite parameters.")
->children()
->booleanNode("allow")
->info("Are favourite parameters allowed or shouldn't there be any mechanisms for it.")
->info("Configures whether favourite parameters are allowed at all.")
->defaultFalse()
->end()
->booleanNode("display_everywhere")
->info("Should the favourites be displayed outside of the dedicated view too or not.")
->info("Describes whether the favourites should be displayed outside of their dedicated view, currently of no use.")
->defaultFalse()
->end()
->booleanNode("scan_parameters")
Expand All @@ -60,6 +62,14 @@ public function getConfigTreeBuilder()
->end()
->end()
->end()
->arrayNode("env_variables")
->info("For configuring the environment variable display")
->children()
->booleanNode("allow")
->info("Determines whether the feature is enabled in the bundle or not.")
->defaultTrue()
->end()
->end()
->end();

return $treeBuilder;
Expand Down
16 changes: 12 additions & 4 deletions EventSubscriber/LeftSideBarMenuBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ class LeftSideBarMenuBuilder extends AbstractBuilder implements TranslationConta
{

/* Menu items */
const ITEM__PARAMETERLIST = 'All Parameters';
const ITEM__PARAMETER_LIST = 'All Parameters';
const ITEM__PARAMETER_LIST_SITE_ACCESS = 'Site Access Parameters';
const ITEM__PARAMETER_LIST_FAVOURITES = 'Favourite Parameters';
const ITEM__PARAMETER_LIST_ENV = "Environmental Parameters";

/**
* LeftSideBarMenuBuilder constructor.
Expand Down Expand Up @@ -63,8 +64,8 @@ protected function createStructure(array $options): ItemInterface
"extras" => ["icon" => "view-list"],
]
),
self::ITEM__PARAMETERLIST => $this->createMenuItem(
self::ITEM__PARAMETERLIST,
self::ITEM__PARAMETER_LIST => $this->createMenuItem(
self::ITEM__PARAMETER_LIST,
[
"route" => "cjw_config_processing.param_list",
"extras" => ["icon" => "list"],
Expand All @@ -77,6 +78,13 @@ protected function createStructure(array $options): ItemInterface
"extras" => ["icon" => "bookmark-manager"],
]
),
self::ITEM__PARAMETER_LIST_ENV => $this->createMenuItem(
self::ITEM__PARAMETER_LIST_ENV,
[
"route" => "cjw_config_processing.param_list_environmental",
"extras" => ["icon" => "contentlist"],
]
),
];

$menu->setChildren($menuItems);
Expand All @@ -91,7 +99,7 @@ protected function createStructure(array $options): ItemInterface
public static function getTranslationMessages(): array
{
return [
(new Message(self::ITEM__PARAMETERLIST,"menu"))->setDesc("Parameter List"),
(new Message(self::ITEM__PARAMETER_LIST,"menu"))->setDesc("Parameter List"),
(new Message(self::ITEM__PARAMETER_LIST_SITE_ACCESS, "menu"))->setDesc("Parameter List Site Access")
];
}
Expand Down
5 changes: 5 additions & 0 deletions Resources/config/routing.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ cjw_config_processing.download_parameters:
controller: cjw_config_processor.controller::downloadParameterListAsTextFile
methods: [GET]

cjw_config_processing.param_list_environmental:
path: /cjw/config-processing/parameter_list/environmental
controller: cjw_config_processor.controller::getEnvironmentalVariables
methods: [GET]

# Location Retrieval from different controller:
cjw_config_processing.location_retrieval:
path: /cjw/config-processing/parameter_locations/{parameter}/{withSiteAccess?}
Expand Down
8 changes: 8 additions & 0 deletions Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,11 @@ services:
public: true
tags:
- { name: knp_menu.menu_builder, method: build, alias: cjw_config_processing.menu.site_access_comparison.sidebar_right }

# console commands
cjw_config_processing.command.output_config:
class: CJW\CJWConfigProcessor\Command\ProcessedConfigOutputCommand
arguments :
[ "@service_container", "@ezpublish.config.resolver", "@request_stack" ]
tags:
- { name: console.command }
17 changes: 17 additions & 0 deletions Resources/doc/changelogs/CHANGELOG-3.x.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# CJW-Network ConfigProcessor Bundle 3.x changelog

## 3.1.0 (xx.01.2020)

* Added Symfony console command to display the processed configuration in the console. This command
also allows the user to specify site access context and / or filter the parameters for specific
subtrees to customize the command execution and output.

* Fixed error, where when turning off the favourite feature, an error would be thrown in the bundle.

* Updated documentation.

* Added display of environmental parameters and their values in a dedicated view.

* Added additional configuration for the new feature.

* Updated CustomParamProcessor to allow more dynamic setting of the site access to filter for with the
custom parameters.

## 3.0.1 (23.12.2020)

* Fixed an issue with difference highlighting: When the state was saved in the url,
Expand Down
Loading

0 comments on commit 641075e

Please sign in to comment.