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,57 @@
<?php
declare(strict_types=1);
/*
* 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\Export\Annotation;
use Doctrine\Common\Annotations\Annotation\Enum;
use Doctrine\Common\Annotations\Annotation\Required;
/**
* Annotation class for @Expose().
*
* @Annotation
* @Target({"CLASS", "PROPERTY", "METHOD"})
*/
final class Expose
{
/**
* @var string
* @Required
*/
public $label;
/**
* @var string
*/
public $name;
/**
* @Enum({"string", "datetime", "date", "time", "integer", "float", "duration", "boolean", "array"})
*/
public $type = 'string';
/**
* @var string
*/
public $exp = null;
public function __construct(array $data)
{
if (isset($data['value'])) {
$this->name = $data['value'];
unset($data['value']);
}
foreach ($data as $key => $value) {
if (!property_exists(self::class, $key)) {
throw new \InvalidArgumentException(sprintf('Unknown property "%s" on annotation "%s".', $key, self::class));
}
$this->{$key} = $value;
}
}
}

View File

@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
/*
* 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\Export\Annotation;
/**
* @Annotation
* @Target({"CLASS"})
*/
final class Order
{
/**
* @var array<string>
*/
public $order = [];
public function __construct(array $data)
{
if (isset($data['value'])) {
$this->order = $data['value'];
unset($data['value']);
}
}
}