added colors to tags (#1631)
This commit is contained in:
@@ -44,6 +44,8 @@ class Tag
|
||||
*/
|
||||
private $name;
|
||||
|
||||
use ColorTrait;
|
||||
|
||||
/**
|
||||
* @var Timesheet[]|ArrayCollection
|
||||
*
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace App\Form;
|
||||
|
||||
use App\Entity\Tag;
|
||||
use App\Form\Type\ColorPickerType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
@@ -29,7 +30,7 @@ class TagEditForm extends AbstractType
|
||||
'autofocus' => 'autofocus'
|
||||
],
|
||||
])
|
||||
;
|
||||
->add('color', ColorPickerType::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
38
src/Migrations/Version20200413133226.php
Normal file
38
src/Migrations/Version20200413133226.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?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 DoctrineMigrations;
|
||||
|
||||
use App\Doctrine\AbstractMigration;
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
|
||||
/**
|
||||
* @version 1.9
|
||||
*/
|
||||
final class Version20200413133226 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return 'Add color for tags';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
$tags = $schema->getTable('kimai2_tags');
|
||||
$tags->addColumn('color', 'string', ['length' => 7, 'notnull' => false, 'default' => null]);
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
$tags = $schema->getTable('kimai2_tags');
|
||||
$tags->dropColumn('color');
|
||||
}
|
||||
}
|
||||
@@ -108,10 +108,11 @@ class TagRepository extends EntityRepository
|
||||
$qb = $this->createQueryBuilder('tag');
|
||||
|
||||
$qb
|
||||
->select('tag.id, tag.name, count(timesheets.id) as amount')
|
||||
->select('tag.id, tag.name, tag.color, count(timesheets.id) as amount')
|
||||
->leftJoin('tag.timesheets', 'timesheets')
|
||||
->addGroupBy('tag.id')
|
||||
->addGroupBy('tag.name')
|
||||
->addGroupBy('tag.color')
|
||||
;
|
||||
|
||||
$orderBy = $query->getOrderBy();
|
||||
|
||||
@@ -159,8 +159,7 @@
|
||||
{% endmacro %}
|
||||
|
||||
{% macro badge(title, color) %}
|
||||
{# black, green, blue, yellow #}
|
||||
<span class="badge bg-{{ color|default('red') }}">{{ title|trans }}</span>
|
||||
<span class="badge" style="background-color:{{ color|default('#dd4b39') }}">{{ title|trans }}</span>
|
||||
{% endmacro %}
|
||||
|
||||
{% macro alert(type, description, title, icon) %}
|
||||
@@ -369,7 +368,7 @@
|
||||
{% macro tag_list(taglist) %}
|
||||
{% import _self as macro %}
|
||||
{% for tag in taglist %}
|
||||
{{ macro.badge(tag.name , 'green') }}
|
||||
{{ macro.badge(tag.name, tag.color|default('#00a65a')) }}
|
||||
{% endfor %}
|
||||
{% endmacro %}
|
||||
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
|
||||
<tr{% if manageAllowed %} class="modal-ajax-form open-edit" data-href="{{ path('tags_edit', {'id': tag.id}) }}"{% endif %}>
|
||||
<td class="text-nowrap">{{ tables.datatable_multiupdate_row(tag.id) }}</td>
|
||||
<td>{{ tag.name }}</td>
|
||||
<td>
|
||||
{{ widgets.color_dot(tag.color|default('#00a65a')) }}
|
||||
{{ tag.name }}
|
||||
</td>
|
||||
<td>{{ widgets.label(tag.amount, type) }}</td>
|
||||
<td class="actions">
|
||||
{{ actions.tag(tag, 'index') }}
|
||||
|
||||
@@ -132,7 +132,7 @@ class TagControllerTest extends APIControllerBaseTest
|
||||
protected function assertStructure(array $result, $full = true)
|
||||
{
|
||||
$expectedKeys = [
|
||||
'id', 'name', 'timesheets'
|
||||
'id', 'name', 'color', 'timesheets'
|
||||
];
|
||||
|
||||
if ($full) {
|
||||
|
||||
@@ -23,6 +23,7 @@ class TagTest extends TestCase
|
||||
$sut = new Tag();
|
||||
$this->assertNull($sut->getId());
|
||||
$this->assertNull($sut->getName());
|
||||
$this->assertNull($sut->getColor());
|
||||
}
|
||||
|
||||
public function testSetterAndGetter()
|
||||
@@ -32,6 +33,9 @@ class TagTest extends TestCase
|
||||
$this->assertInstanceOf(Tag::class, $sut->setName('foo'));
|
||||
$this->assertEquals('foo', $sut->getName());
|
||||
$this->assertEquals('foo', (string) $sut);
|
||||
|
||||
$this->assertInstanceOf(Tag::class, $sut->setColor('#fffccc'));
|
||||
$this->assertEquals('#fffccc', $sut->getColor());
|
||||
}
|
||||
|
||||
public function testWithTimesheet()
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user