File: FixPoTwigCommand.php

package info (click to toggle)
phpmyadmin 4%3A5.2.1%2Bdfsg-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 131,332 kB
  • sloc: javascript: 212,681; php: 168,094; xml: 18,098; sql: 504; sh: 274; makefile: 205; python: 199
file content (82 lines) | stat: -rw-r--r-- 2,434 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php

declare(strict_types=1);

namespace PhpMyAdmin\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

use function file_get_contents;
use function file_put_contents;
use function intval;
use function is_array;
use function json_decode;
use function preg_replace_callback;

use const ROOT_PATH;

final class FixPoTwigCommand extends Command
{
    /** @var string|null */
    protected static $defaultName = 'fix-po-twig';

    private const POT_FILE = ROOT_PATH . 'po/phpmyadmin.pot';
    private const REPLACE_FILE = ROOT_PATH . 'twig-templates/replace.json';

    protected function configure(): void
    {
        $this->setDescription('Fixes POT file for Twig templates');
        $this->setHelp(
            'The <info>%command.name%</info> command fixes the Twig file name and line number in the'
            . ' POT file to match the Twig template and not the compiled Twig file.'
        );
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $replaceFile = file_get_contents(self::REPLACE_FILE);
        if ($replaceFile === false) {
            return Command::FAILURE;
        }

        $replacements = json_decode($replaceFile, true);
        if (! is_array($replacements)) {
            return Command::FAILURE;
        }

        /* Read pot file */
        $pot = file_get_contents(self::POT_FILE);
        if ($pot === false) {
            return Command::FAILURE;
        }

        /* Do the replacements */
        $pot = preg_replace_callback(
            '@(twig-templates[0-9a-f/]*.php):([0-9]*)@',
            static function (array $matches) use ($replacements): string {
                $filename = $matches[1];
                $line = intval($matches[2]);
                $replace = $replacements[$filename];
                foreach ($replace[1] as $cacheLine => $result) {
                    if ($line >= $cacheLine) {
                        return $replace[0] . ':' . $result;
                    }
                }

                return $replace[0] . ':0';
            },
            $pot
        );
        if ($pot === null) {
            return Command::FAILURE;
        }

        if (file_put_contents(self::POT_FILE, $pot) === false) {
            return Command::FAILURE;
        }

        return Command::SUCCESS;
    }
}