Merge pull request #19082 from compucorp/dev-core-1790-contact-card-delay
[civicrm-core.git] / CRM / Core / CodeGen / Util / Template.php
CommitLineData
5e434adf
ARW
1<?php
2
b5c2afd0
EM
3/**
4 * Class CRM_Core_CodeGen_Util_Template
5 */
5e434adf
ARW
6class CRM_Core_CodeGen_Util_Template {
7 protected $filetype;
8
9 protected $smarty;
10 protected $beautifier;
11
e61d1fa3 12 /**
8fe9ce40 13 * @var bool
e61d1fa3 14 */
8fe9ce40 15 protected $beautify;
e61d1fa3 16
5e434adf
ARW
17 /**
18 * @param string $filetype
8fe9ce40 19 * @param bool $beautify
5e434adf 20 */
8fe9ce40 21 public function __construct($filetype, $beautify = TRUE) {
588af3f1 22 $this->filetype = $filetype;
23
b7a48b7e 24 $this->smarty = CRM_Core_CodeGen_Util_Smarty::singleton()->createSmarty();
5e434adf
ARW
25
26 $this->assign('generated', "DO NOT EDIT. Generated by CRM_Core_CodeGen");
27
8fe9ce40 28 if ($this->filetype === 'php' && $beautify) {
5e434adf
ARW
29 require_once 'PHP/Beautifier.php';
30 // create an instance
31 $this->beautifier = new PHP_Beautifier();
32 $this->beautifier->addFilter('ArrayNested');
33 // add one or more filters
5e434adf
ARW
34 $this->beautifier->setIndentChar(' ');
35 $this->beautifier->setIndentNumber(2);
36 $this->beautifier->setNewLine("\n");
37 }
e61d1fa3 38
8fe9ce40 39 $this->beautify = $beautify;
5e434adf
ARW
40 }
41
5e434adf 42 /**
6a0b768e
TO
43 * @param array $inputs
44 * Template filenames.
45 * @param string $outpath
46 * Full path to the desired output file.
5e434adf 47 */
00be9182 48 public function runConcat($inputs, $outpath) {
d9b759a7
TO
49 if (file_exists($outpath)) {
50 unlink($outpath);
51 }
5e434adf
ARW
52 foreach ($inputs as $infile) {
53 // FIXME: does not beautify. Document.
86bfa4f6 54 file_put_contents($outpath, $this->smarty->fetch($infile) . "\n", FILE_APPEND);
5e434adf
ARW
55 }
56 }
57
58 /**
8246bca4 59 * Run template generator.
60 *
6a0b768e
TO
61 * @param string $infile
62 * Filename of the template, without a path.
63 * @param string $outpath
64 * Full path to the desired output file.
5e434adf 65 */
00be9182 66 public function run($infile, $outpath) {
c3fc2621 67 $contents = $this->smarty->fetch($infile);
5e434adf 68
8fe9ce40
CW
69 if ($this->filetype === 'php' && $this->beautify) {
70 $this->beautifier->setInputString($contents);
71 $this->beautifier->process();
72 $contents = $this->beautifier->get();
e61d1fa3 73
c3fc2621 74 // The beautifier isn't as beautiful as one would hope. Here's some extra string fudging.
8fe9ce40
CW
75 $replacements = [
76 ') ,' => '),',
77 "\n }\n}\n" => "\n }\n\n}\n",
78 '=> true,' => '=> TRUE,',
79 '=> false,' => '=> FALSE,',
1713a0ec 80 'static ::' => 'static::',
2be68028 81 'use\\' => 'use ',
8fe9ce40
CW
82 ];
83 $contents = str_replace(array_keys($replacements), array_values($replacements), $contents);
84 $contents = preg_replace('#(\s*)\\/\\*\\*#', "\n\$1/**", $contents);
e61d1fa3 85
c3fc2621 86 // Convert old array syntax to new square brackets
8fe9ce40 87 $contents = CRM_Core_CodeGen_Util_ArraySyntaxConverter::convert($contents);
1713a0ec
CW
88 // Remove numeric array keys (assuming its non-associative)
89 $contents = preg_replace("# '\\d+' => #", " ", $contents);
0db6c3e1 90 }
8fe9ce40
CW
91 // Ensure file ends with a newline
92 if (substr($contents, -1) !== "\n") {
93 $contents .= "\n";
5e434adf 94 }
8fe9ce40 95 file_put_contents($outpath, $contents);
5e434adf
ARW
96 }
97
8246bca4 98 /**
99 * Fetch via Smarty.
100 *
101 * @param string $infile
102 *
103 * @return string
104 */
90b9cb2c
TO
105 public function fetch($infile) {
106 return $this->smarty->fetch($infile);
107 }
108
50b8ea3e
TO
109 /**
110 * Fetch multiple templates - and concatenate them.
111 *
112 * @see runConcat
113 * @param array $inputs
114 * Template filenames.
115 * @return string
116 */
117 public function fetchConcat($inputs) {
118 $buf = '';
119 foreach ($inputs as $infile) {
120 $buf .= $this->smarty->fetch($infile);
121 $buf .= "\n";
122 }
123 return $buf;
124 }
125
2558c2b0
EM
126 /**
127 * @param $key
128 * @param $value
129 */
00be9182 130 public function assign($key, $value) {
5e434adf
ARW
131 $this->smarty->assign_by_ref($key, $value);
132 }
133
5e434adf 134}