Skip to content
Open
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
29 changes: 17 additions & 12 deletions _bootstrap.php
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
<?php

error_reporting(E_ALL & E_STRICT);
/**
* @file
* Bootstrap file for PHPUnit test runner.
*/

error_reporting(E_ALL);

// Handling autoloading for different use cases.
// @see https://github.com/sebastianbergmann/phpunit/blob/master/phpunit
foreach ([
__DIR__ . '/../../autoload.php',
__DIR__ . '/../vendor/autoload.php',
__DIR__ . '/vendor/autoload.php',
] as $file) {
if (file_exists($file)) {
define('APP_COMPOSER_AUTOLOAD', $file);
break;
}
__DIR__ . '/../../autoload.php',
__DIR__ . '/../vendor/autoload.php',
__DIR__ . '/vendor/autoload.php',
] as $file) {
if (file_exists($file)) {
define('APP_COMPOSER_AUTOLOAD', $file);
break;
}
}

unset($file);

// Provide warning, when no autoloader was found.
if (!defined('APP_COMPOSER_AUTOLOAD')) {
fwrite(STDERR,
fwrite(STDERR,
'You need to set up the project dependencies using the following commands:' . PHP_EOL .
'wget http://getcomposer.org/composer.phar' . PHP_EOL .
'php composer.phar install' . PHP_EOL
);
die(1);
die(1);
}

require APP_COMPOSER_AUTOLOAD;
require APP_COMPOSER_AUTOLOAD;
3 changes: 0 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@
},
"minimum-stability": "dev",
"prefer-stable": true,
"require-dev": {
"phpunit/phpunit": "^8"
},
"config": {
"allow-plugins": {
"cweagans/composer-patches": true
Expand Down
140 changes: 92 additions & 48 deletions src/ColumnTransformer/ColumnTransformEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,98 @@

namespace machbarmacher\GdprDump\ColumnTransformer;


use Symfony\Contracts\EventDispatcher\Event;

class ColumnTransformEvent extends Event
{
protected $table;
protected $column;
protected $expression;
protected $isReplacementSet = FALSE;
protected $replacementValue;
/**
* ColumnTransformEvent constructor.
*/
public function __construct($table, $column, $expression)
{
$this->table = $table;
$this->column = $column;
$this->expression = $expression;
}

public function setReplacementValue($value)
{
$this->isReplacementSet = TRUE;
$this->replacementValue = $value;
}

public function getTable()
{
return $this->table;
}

public function getColumn()
{
return $this->column;
}

public function getExpression()
{
return $this->expression;
}

public function isReplacementSet()
{
return $this->isReplacementSet;
}

public function getReplacementValue()
{
return $this->replacementValue;
}
/**
* Event dispatched when a column value needs to be transformed.
*/
class ColumnTransformEvent extends Event {

/**
* The table name.
*
* @var string
*/
protected $table;

/**
* The column name.
*
* @var string
*/
protected $column;

/**
* The transformation expression.
*
* @var mixed
*/
protected $expression;

/**
* Whether a replacement value has been set.
*
* @var bool
*/
protected $isReplacementSet = FALSE;

/**
* The replacement value.
*
* @var mixed
*/
protected $replacementValue;

/**
* ColumnTransformEvent constructor.
*/
public function __construct($table, $column, $expression) {
$this->table = $table;
$this->column = $column;
$this->expression = $expression;
}

/**
* Sets the replacement value for this column.
*/
public function setReplacementValue($value) {
$this->isReplacementSet = TRUE;
$this->replacementValue = $value;
}

/**
* Returns the table name.
*/
public function getTable() {
return $this->table;
}

/**
* Returns the column name.
*/
public function getColumn() {
return $this->column;
}

/**
* Returns the transformation expression.
*/
public function getExpression() {
return $this->expression;
}

/**
* Returns whether a replacement value has been set.
*/
public function isReplacementSet() {
return $this->isReplacementSet;
}

/**
* Returns the replacement value.
*/
public function getReplacementValue() {
return $this->replacementValue;
}

}
112 changes: 70 additions & 42 deletions src/ColumnTransformer/ColumnTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,89 @@

namespace machbarmacher\GdprDump\ColumnTransformer;


use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use machbarmacher\GdprDump\ColumnTransformer\Plugins\ClearColumnTransformer;
use machbarmacher\GdprDump\ColumnTransformer\Plugins\FakerColumnTransformer;

abstract class ColumnTransformer
{

const COLUMN_TRANSFORM_REQUEST = "columntransform.request";

private $tableName;

private $columnName;
/**
* Abstract base class for column value transformers.
*/
abstract class ColumnTransformer {

const COLUMN_TRANSFORM_REQUEST = "columntransform.request";

/**
* The table name.
*
* @var string
*/
private $tableName;

/**
* The column name.
*
* @var string
*/
private $columnName;

/**
* The event dispatcher.
*
* @var \Symfony\Component\EventDispatcher\EventDispatcher
*/
protected static $dispatcher;

/**
* Sets up the event dispatcher with registered transformer listeners.
*/
public static function setUp($locale) {
if (!isset(self::$dispatcher)) {
self::$dispatcher = new EventDispatcher();

self::$dispatcher->addListener(self::COLUMN_TRANSFORM_REQUEST,
new FakerColumnTransformer($locale));
self::$dispatcher->addListener(self::COLUMN_TRANSFORM_REQUEST,
new ClearColumnTransformer());
}

protected static $dispatcher;
}

public static function setUp($locale)
{
if (!isset(self::$dispatcher)) {
self::$dispatcher = new EventDispatcher();
/**
* Replaces a column value using the matching transformer.
*/
public static function replaceValue($tableName, $columnName, $expression, $locale) {
self::setUp($locale);

self::$dispatcher->addListener(self::COLUMN_TRANSFORM_REQUEST,
new FakerColumnTransformer($locale));
self::$dispatcher->addListener(self::COLUMN_TRANSFORM_REQUEST,
new ClearColumnTransformer());
}
if ($expression) {
$event = new ColumnTransformEvent($tableName, $columnName, $expression);
self::$dispatcher->dispatch($event, self::COLUMN_TRANSFORM_REQUEST);

if ($event->isReplacementSet()) {
return $event->getReplacementValue();
}
}

public static function replaceValue($tableName, $columnName, $expression, $locale)
{
self::setUp($locale);

if ($expression) {
$event = new ColumnTransformEvent($tableName, $columnName, $expression);
self::$dispatcher->dispatch($event, self::COLUMN_TRANSFORM_REQUEST);
return FALSE;
}

if ($event->isReplacementSet()) {
return $event->getReplacementValue();
}
}

return false;
/**
* Invokes the transformer if the expression formatter is supported.
*/
public function __invoke(ColumnTransformEvent $event) {
if (in_array(($event->getExpression())['formatter'],
$this->getSupportedFormatters())) {
$event->setReplacementValue($this->getValue($event->getExpression()));
}
}

public function __invoke(ColumnTransformEvent $event)
{
if (in_array(($event->getExpression())['formatter'],
$this->getSupportedFormatters())) {
$event->setReplacementValue($this->getValue($event->getExpression()));
}
}
/**
* Returns the transformed value for the given expression.
*/
abstract public function getValue($expression);

abstract public function getValue($expression);
/**
* Returns the list of formatter names this transformer supports.
*/
abstract protected function getSupportedFormatters();

abstract protected function getSupportedFormatters();
}
10 changes: 5 additions & 5 deletions src/ColumnTransformer/ParseExpressionException.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?php

namespace machbarmacher\GdprDump\ColumnTransformer;
use Exception;

class ParseExpressionException extends Exception
{
//
}
/**
* Exception thrown when a column transformer expression cannot be parsed.
*/
class ParseExpressionException extends \Exception {
}
29 changes: 18 additions & 11 deletions src/ColumnTransformer/Plugins/ClearColumnTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,23 @@

use machbarmacher\GdprDump\ColumnTransformer\ColumnTransformer;

class ClearColumnTransformer extends ColumnTransformer
{
/**
* Transformer that clears a column value by returning an empty string.
*/
class ClearColumnTransformer extends ColumnTransformer {

protected function getSupportedFormatters()
{
return ['clear'];
}
/**
* Returns the supported formatter names.
*/
protected function getSupportedFormatters() {
return ['clear'];
}

public function getValue($expression)
{
return "";
}
}
/**
* Returns an empty string as the replacement value.
*/
public function getValue($expression) {
return "";
}

}
Loading