adminBSBDatetimePicker()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
rs 9.7333
c 0
b 0
f 0
cc 2
nc 2
nop 7
1
<?php
2
3
/*
4
 * This file is part of the adminbsb-material-design-bundle package.
5
 *
6
 * (c) 2018 WEBEWEB
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace WBW\Bundle\AdminBSBBundle\Twig\Extension\Plugin;
13
14
use Twig\Environment;
15
use WBW\Bundle\AdminBSBBundle\Twig\Extension\AbstractTwigExtension;
16
use WBW\Bundle\CoreBundle\Component\Translation\BaseTranslatorInterface;
17
use WBW\Bundle\CoreBundle\Service\TranslatorTrait;
18
use WBW\Library\Core\Argument\Helper\StringHelper;
19
20
/**
21
 * Abstract Datetime picker Twig extension.
22
 *
23
 * @author webeweb <https://github.com/webeweb/>
24
 * @package WBW\Bundle\AdminBSBBundle\Twig\Extension\Plugin
25
 * @abstract
26
 */
27
abstract class AbstractDatetimePickerTwigExtension extends AbstractTwigExtension {
28
29
    use TranslatorTrait;
30
31
    /**
32
     * Datetime picker.
33
     *
34
     * @var string
35
     */
36
    const DATETIMEPICKER = <<< EOT
37
<script type="text/javascript">
38
    $("%selector%").bootstrapMaterialDatePicker({
39
        cancelText: "%cancelText%",
40
        clearButton: %clearButton%,
41
        clearText: "%clearText%",
42
        date: %date%,
43
        format: "%format%",
44
        lang: "%lang%",
45
        time: %time%,
46
        weekStart: %weekStart%
47
    });
48
</script>
49
EOT;
50
51
    /**
52
     * Default datetime format.
53
     *
54
     * @var string
55
     */
56
    const DEFAULT_DATETIME_FORMAT = self::DEFAULT_DATE_FORMAT . " - " . self::DEFAULT_TIME_FORMAT;
57
58
    /**
59
     * Default date format.
60
     *
61
     * @var string
62
     */
63
    const DEFAULT_DATE_FORMAT = "YYYY-MM-DD";
64
65
    /**
66
     * Default time format.
67
     *
68
     * @var string
69
     */
70
    const DEFAULT_TIME_FORMAT = "HH:mm";
71
72
    /**
73
     * Constructor.
74
     *
75
     * @param Environment $twigEnvironment The Twig environment.
76
     * @param BaseTranslatorInterface $translator The translator.
77
     */
78
    public function __construct(Environment $twigEnvironment, $translator) {
79
        parent::__construct($twigEnvironment);
80
        $this->setTranslator($translator);
81
    }
82
83
    /**
84
     * Display an AdminBSB datetime picker.
85
     *
86
     * @param string $selector The selector.
87
     * @param bool $clearButton Clear button ?
88
     * @param bool $date Date ?
89
     * @param string $format The format.
90
     * @param string $lang The lang.
91
     * @param bool $time Time ?
92
     * @param string $weekStart The week start.
93
     * @return string Returns the AdminBSB datetime picker.
94
     */
95
    protected function adminBSBDatetimePicker(string $selector, bool $clearButton, bool $date, string $format, string $lang, bool $time, string $weekStart): string {
96
97
        $weekStarts = [0, 1, 2, 3, 4, 5, 6];
98
99
        $cancelText   = $this->getTranslator()->trans("label.cancel", [], "BootstrapBundle");
100
        $clearText    = $this->getTranslator()->trans("label.delete", [], "BootstrapBundle");
101
        $bClearButton = StringHelper::parseBoolean($clearButton);
102
        $bDate        = StringHelper::parseBoolean($date);
103
        $bTime        = StringHelper::parseBoolean($time);
104
        $iWeekStart   = true === in_array($weekStart, $weekStarts) ? $weekStart : 0;
105
106
        $searches = ["%selector%", "%cancelText%", "%clearButton%", "%clearText%", "%date%", "%format%", "%lang%", "%time%", "%weekStart%"];
107
        $replaces = [$selector, $cancelText, $bClearButton, $clearText, $bDate, $format, $lang, $bTime, $iWeekStart];
108
109
        return str_replace($searches, $replaces, self::DATETIMEPICKER);
110
    }
111
}
112