Merge remote-tracking branch 'security/QA_4_9-security' into QA_4_9
[phpmyadmin.git] / scripts / generate-twig-cache
blob4c24f48facc71350acb67e38715861475596b419
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4 ft=php: */
3 define('PHPMYADMIN', 1);
4 require_once 'libraries/vendor_config.php';
5 require_once AUTOLOAD_FILE;
7 use PhpMyAdmin\Twig\CharsetsExtension;
8 use PhpMyAdmin\Twig\CoreExtension;
9 use PhpMyAdmin\Twig\I18nExtension;
10 use PhpMyAdmin\Twig\IndexExtension;
11 use PhpMyAdmin\Twig\MessageExtension;
12 use PhpMyAdmin\Twig\PartitionExtension;
13 use PhpMyAdmin\Twig\PhpFunctionsExtension;
14 use PhpMyAdmin\Twig\PluginsExtension;
15 use PhpMyAdmin\Twig\RelationExtension;
16 use PhpMyAdmin\Twig\SanitizeExtension;
17 use PhpMyAdmin\Twig\ServerPrivilegesExtension;
18 use PhpMyAdmin\Twig\StorageEngineExtension;
19 use PhpMyAdmin\Twig\TableExtension;
20 use PhpMyAdmin\Twig\TrackerExtension;
21 use PhpMyAdmin\Twig\TransformationsExtension;
22 use PhpMyAdmin\Twig\UrlExtension;
23 use PhpMyAdmin\Twig\UtilExtension;
25 $tplDir = dirname(__FILE__) . '/../templates';
26 $tmpDir = dirname(__FILE__) . '/../twig-templates';
27 $loader = new Twig\Loader\FilesystemLoader($tplDir);
29 // force auto-reload to always have the latest version of the template
30 $twig = new Twig\Environment($loader, array(
31     'cache' => $tmpDir,
32     'auto_reload' => true
33 ));
34 $twig->addExtension(new CharsetsExtension());
35 $twig->addExtension(new CoreExtension());
36 $twig->addExtension(new I18nExtension());
37 $twig->addExtension(new IndexExtension());
38 $twig->addExtension(new MessageExtension());
39 $twig->addExtension(new PartitionExtension());
40 $twig->addExtension(new PhpFunctionsExtension());
41 $twig->addExtension(new PluginsExtension());
42 $twig->addExtension(new RelationExtension());
43 $twig->addExtension(new SanitizeExtension());
44 $twig->addExtension(new ServerPrivilegesExtension());
45 $twig->addExtension(new StorageEngineExtension());
46 $twig->addExtension(new TableExtension());
47 $twig->addExtension(new TrackerExtension());
48 $twig->addExtension(new TransformationsExtension());
49 $twig->addExtension(new UrlExtension());
50 $twig->addExtension(new UtilExtension());
52 $replacements = [];
54 $twigCache = $twig->getCache(false);
56 // iterate over all templates
57 foreach (new \RecursiveIteratorIterator(
58     new \RecursiveDirectoryIterator($tplDir),
59     \RecursiveIteratorIterator::LEAVES_ONLY
60 ) as $file) {
61     // Skip test files
62     if (strpos($file->getPathname(), '/test/') !== false) {
63         continue;
64     }
65     // force compilation
66     if ($file->isFile() && $file->getExtension() === 'twig') {
67         $name = str_replace($tplDir . '/', '', $file->getPathname());
68         $template = $twig->loadTemplate($name);
70         // Generate line map
71         $cacheFilename = $twigCache->generateKey($name, $twig->getTemplateClass($name));
72         $template_file = 'templates/' . $name;
73         $cache_file = str_replace($tmpDir, 'twig-templates', $cacheFilename);
74         $replacements[$cache_file] = array($template_file, $template->getDebugInfo());
75     }
78 // Store replacements in JSON
79 $handle = fopen($tmpDir . '/replace.json', 'w');
80 fwrite($handle, json_encode($replacements));
81 fclose($handle);