added annotation based exporter (#1831)

* added user exporter
* added project exporter
* added customer exporter
* added activity exporter
This commit is contained in:
Kevin Papst
2020-07-21 03:37:51 +02:00
committed by GitHub
parent 93a23f3fa3
commit aee063bb3c
79 changed files with 2980 additions and 215 deletions

View File

@@ -0,0 +1,76 @@
<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Event;
use App\Entity\MetaTableTypeInterface;
use App\Repository\Query\BaseQuery;
use Symfony\Contracts\EventDispatcher\Event;
abstract class AbstractMetaDisplayEvent extends Event implements MetaDisplayEventInterface
{
/**
* @var BaseQuery
*/
private $query;
/**
* @var string
*/
private $location;
/**
* @var MetaTableTypeInterface[]
*/
private $fields = [];
public function __construct(BaseQuery $query, string $location)
{
$this->query = $query;
$this->location = $location;
}
/**
* To filter where your meta-field will be displayed, use the query settings.
*
* @return BaseQuery
*/
public function getQuery(): BaseQuery
{
return $this->query;
}
/**
* If you want to filter where your meta-field will be displayed, check the current location.
*
* @return string
*/
public function getLocation(): string
{
return $this->location;
}
/**
* Add a new meta field that should be included.
*
* @param MetaTableTypeInterface $meta
*/
public function addField(MetaTableTypeInterface $meta)
{
$this->fields[] = $meta;
}
/**
* Returns all meta-fields to be included.
*
* @return MetaTableTypeInterface[]
*/
public function getFields(): array
{
return $this->fields;
}
}

View File

@@ -9,68 +9,20 @@
namespace App\Event;
use App\Entity\MetaTableTypeInterface;
use App\Repository\Query\ActivityQuery;
use App\Repository\Query\BaseQuery;
use Symfony\Contracts\EventDispatcher\Event;
/**
* Dynamically find possible meta fields for a activity query.
*
* @method ActivityQuery getQuery()
*/
final class ActivityMetaDisplayEvent extends Event implements MetaDisplayEventInterface
final class ActivityMetaDisplayEvent extends AbstractMetaDisplayEvent
{
public const EXPORT = 'export';
public const ACTIVITY = 'activity';
/**
* @var ActivityQuery
*/
private $query;
/**
* @var string
*/
private $location;
/**
* @var MetaTableTypeInterface[]
*/
private $fields = [];
public function __construct(ActivityQuery $query, string $location)
{
$this->query = $query;
$this->location = $location;
}
/**
* If you want to filter where your meta-field will be displayed, use the query settings.
*
* @return ActivityQuery
*/
public function getQuery(): BaseQuery
{
return $this->query;
}
/**
* If you want to filter where your meta-field will be displayed, check the current location.
*
* @return string
*/
public function getLocation(): string
{
return $this->location;
}
public function addField(MetaTableTypeInterface $meta)
{
$this->fields[] = $meta;
}
/**
* @return MetaTableTypeInterface[]
*/
public function getFields(): array
{
return $this->fields;
parent::__construct($query, $location);
}
}

View File

@@ -9,68 +9,20 @@
namespace App\Event;
use App\Entity\MetaTableTypeInterface;
use App\Repository\Query\BaseQuery;
use App\Repository\Query\CustomerQuery;
use Symfony\Contracts\EventDispatcher\Event;
/**
* Dynamically find possible meta fields for a customer query.
*
* @method CustomerQuery getQuery()
*/
final class CustomerMetaDisplayEvent extends Event implements MetaDisplayEventInterface
final class CustomerMetaDisplayEvent extends AbstractMetaDisplayEvent
{
public const EXPORT = 'export';
public const CUSTOMER = 'customer';
/**
* @var CustomerQuery
*/
private $query;
/**
* @var string
*/
private $location;
/**
* @var MetaTableTypeInterface[]
*/
private $fields = [];
public function __construct(CustomerQuery $query, string $location)
{
$this->query = $query;
$this->location = $location;
}
/**
* If you want to filter where your meta-field will be displayed, use the query settings.
*
* @return CustomerQuery
*/
public function getQuery(): BaseQuery
{
return $this->query;
}
/**
* If you want to filter where your meta-field will be displayed, check the current location.
*
* @return string
*/
public function getLocation(): string
{
return $this->location;
}
public function addField(MetaTableTypeInterface $meta)
{
$this->fields[] = $meta;
}
/**
* @return MetaTableTypeInterface[]
*/
public function getFields(): array
{
return $this->fields;
parent::__construct($query, $location);
}
}

View File

@@ -9,68 +9,20 @@
namespace App\Event;
use App\Entity\MetaTableTypeInterface;
use App\Repository\Query\BaseQuery;
use App\Repository\Query\ProjectQuery;
use Symfony\Contracts\EventDispatcher\Event;
/**
* Dynamically find possible meta fields for a project query.
*
* @method ProjectQuery getQuery()
*/
final class ProjectMetaDisplayEvent extends Event implements MetaDisplayEventInterface
final class ProjectMetaDisplayEvent extends AbstractMetaDisplayEvent
{
public const EXPORT = 'export';
public const PROJECT = 'project';
/**
* @var ProjectQuery
*/
private $query;
/**
* @var string
*/
private $location;
/**
* @var MetaTableTypeInterface[]
*/
private $fields = [];
public function __construct(ProjectQuery $query, string $location)
{
$this->query = $query;
$this->location = $location;
}
/**
* If you want to filter where your meta-field will be displayed, use the query settings.
*
* @return ProjectQuery
*/
public function getQuery(): BaseQuery
{
return $this->query;
}
/**
* If you want to filter where your meta-field will be displayed, check the current location.
*
* @return string
*/
public function getLocation(): string
{
return $this->location;
}
public function addField(MetaTableTypeInterface $meta)
{
$this->fields[] = $meta;
}
/**
* @return MetaTableTypeInterface[]
*/
public function getFields(): array
{
return $this->fields;
parent::__construct($query, $location);
}
}

View File

@@ -9,15 +9,14 @@
namespace App\Event;
use App\Entity\MetaTableTypeInterface;
use App\Repository\Query\BaseQuery;
use App\Repository\Query\TimesheetQuery;
use Symfony\Contracts\EventDispatcher\Event;
/**
* Dynamically find possible meta fields for a timesheet query.
*
* @method TimesheetQuery getQuery()
*/
final class TimesheetMetaDisplayEvent extends Event implements MetaDisplayEventInterface
final class TimesheetMetaDisplayEvent extends AbstractMetaDisplayEvent
{
public const EXPORT = 'export';
public const TIMESHEET = 'timesheet';
@@ -25,55 +24,8 @@ final class TimesheetMetaDisplayEvent extends Event implements MetaDisplayEventI
public const TIMESHEET_EXPORT = 'timesheet-export';
public const TEAM_TIMESHEET_EXPORT = 'team-timesheet-export';
/**
* @var TimesheetQuery
*/
private $query;
/**
* @var string
*/
private $location;
/**
* @var MetaTableTypeInterface[]
*/
private $fields = [];
public function __construct(TimesheetQuery $query, string $location)
{
$this->query = $query;
$this->location = $location;
}
/**
* If you want to filter where your meta-field will be displayed, use the query settings.
*
* @return TimesheetQuery
*/
public function getQuery(): BaseQuery
{
return $this->query;
}
/**
* If you want to filter where your meta-field will be displayed, check the current location.
*
* @return string
*/
public function getLocation(): string
{
return $this->location;
}
public function addField(MetaTableTypeInterface $meta)
{
$this->fields[] = $meta;
}
/**
* @return MetaTableTypeInterface[]
*/
public function getFields(): array
{
return $this->fields;
parent::__construct($query, $location);
}
}