Completed
Push — master ( 73f8ee...748905 )
by Jan
03:55
created

EntityColumn::normalize()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
/**
3
 *
4
 * part-db version 0.1
5
 * Copyright (C) 2005 Christoph Lechner
6
 * http://www.cl-projects.de/
7
 *
8
 * part-db version 0.2+
9
 * Copyright (C) 2009 K. Jacobs and others (see authors.php)
10
 * http://code.google.com/p/part-db/
11
 *
12
 * Part-DB Version 0.4+
13
 * Copyright (C) 2016 - 2019 Jan Böhmer
14
 * https://github.com/jbtronics
15
 *
16
 * This program is free software; you can redistribute it and/or
17
 * modify it under the terms of the GNU General Public License
18
 * as published by the Free Software Foundation; either version 2
19
 * of the License, or (at your option) any later version.
20
 *
21
 * This program is distributed in the hope that it will be useful,
22
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24
 * GNU General Public License for more details.
25
 *
26
 * You should have received a copy of the GNU General Public License
27
 * along with this program; if not, write to the Free Software
28
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
29
 *
30
 */
31
32
namespace App\DataTables\Column;
33
34
35
use App\Entity\Base\NamedDBElement;
36
use App\Entity\Parts\Part;
37
use App\Services\EntityURLGenerator;
38
use Omines\DataTablesBundle\Column\AbstractColumn;
39
use Symfony\Component\OptionsResolver\Options;
40
use Symfony\Component\OptionsResolver\OptionsResolver;
41
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
42
43
class EntityColumn extends AbstractColumn
44
{
45
46
    protected $urlGenerator;
47
    protected $accessor;
48
49
    public function __construct(EntityURLGenerator $URLGenerator, PropertyAccessorInterface $accessor)
50
    {
51
        $this->urlGenerator = $URLGenerator;
52
        $this->accessor = $accessor;
53
    }
54
55
    /**
56
     * The normalize function is responsible for converting parsed and processed data to a datatables-appropriate type.
57
     *
58
     * @param mixed $value The single value of the column
59
     * @return mixed
60
     */
61
    public function normalize($value)
62
    {
63
        /** @var NamedDBElement $value */
64
        return $value;
65
    }
66
67
    public function configureOptions(OptionsResolver $resolver)
68
    {
69
        parent::configureOptions($resolver);
70
71
        $resolver->setRequired('property');
72
73
        $resolver->setDefault('field', function (Options $option) {
74
            return $option['property'] . '.name';
75
        });
76
77
        $resolver->setDefault('render', function (Options $options) {
78
            return function ($value, Part $context) use ($options) {
79
                $entity = $this->accessor->getValue($context, $options['property']);
80
81
                if ($entity) {
82
                    return sprintf(
83
                        '<a href="%s">%s</a>',
84
                        $this->urlGenerator->listPartsURL($entity),
85
                        $value
86
                    );
87
                }
88
            };
89
        });
90
    }
91
}