Skip to content

Commit 2fff0c6

Browse files
authored
Merge pull request sdinteractive#41 from subbu1993/feature/EmailTemplateCheck
Add ability to check for email templates
2 parents beb1767 + 0723b1b commit 2fff0c6

5 files changed

Lines changed: 145 additions & 4 deletions

File tree

‎Console/UpgradeHelperCommand.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
4141
$result = [];
4242
$result['preferences'] = [];
4343
$result['overrides'] = [];
44+
$result['email_template'] = [];
4445

4546
$output->writeln('Populating file override index...');
4647
$this->fileIndex->populateIndex();

‎Model/Checker/EmailTemplate.php‎

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
<?php
2+
3+
namespace SomethingDigital\UpgradeHelper\Model\Checker;
4+
5+
use SomethingDigital\UpgradeHelper\Model\FileIndex;
6+
use Magento\Email\Model\TemplateFactory as CoreEmailTemplateFactory;
7+
use Magento\Email\Model\Template\Config;
8+
use Magento\Framework\App\State as AppState;
9+
10+
class EmailTemplate
11+
{
12+
private $fileIndex;
13+
14+
private $emailTemplateFactory;
15+
16+
private $config;
17+
18+
private $templateMappings = [];
19+
20+
private $appState;
21+
22+
public function __construct(
23+
CoreEmailTemplateFactory $emailTemplateFactory,
24+
Config $config,
25+
AppState $appState
26+
) {
27+
$this->appState = $appState;
28+
$this->emailTemplateFactory = $emailTemplateFactory;
29+
$this->config = $config;
30+
}
31+
32+
public function mapEmailTemplates()
33+
{
34+
$this->appState->setAreaCode(\Magento\Framework\App\Area::AREA_FRONTEND);
35+
$emailTemplateCollection = $this->emailTemplateFactory->create()->getCollection();
36+
37+
foreach ($emailTemplateCollection as $template) {
38+
$templateOriginalCode = $template->getOrigTemplateCode();
39+
if (!$templateOriginalCode) {
40+
continue;
41+
}
42+
$templatePath = $this->config->getTemplateFileName($templateOriginalCode);
43+
$templateCode = $template->getTemplateCode();
44+
$this->templateMappings[$templateOriginalCode] = ['templatePath' => $templatePath, 'templateCode' => $templateCode];
45+
}
46+
}
47+
48+
public function check($pathInfo)
49+
{
50+
if (empty($this->templateMappings)) {
51+
$this->mapEmailTemplates();
52+
}
53+
$path = $pathInfo['fullpath'];
54+
55+
if (!$this->shouldCheck($pathInfo)) {
56+
return [];
57+
}
58+
59+
$output = [];
60+
$customized = $this->hasBeenCustomized($path);
61+
62+
if (!empty($customized)) {
63+
$output = [
64+
'patched' => $path,
65+
'customized' => $customized
66+
];
67+
}
68+
69+
return $output;
70+
}
71+
72+
private function shouldCheck($pathInfo)
73+
{
74+
if (!isset($pathInfo['extension'])) {
75+
return false;
76+
}
77+
78+
if (!in_array($pathInfo['extension'], FileIndex::EMAIL_EXTENSIONS)) {
79+
return false;
80+
}
81+
82+
$ignored = ['dev/tests', 'setup/view/magento'];
83+
foreach ($ignored as $needle) {
84+
if (strpos($pathInfo['fullpath'], $needle) !== false) {
85+
return false;
86+
}
87+
}
88+
89+
$mustMatch = ['/email/'];
90+
foreach ($mustMatch as $needle) {
91+
if (strpos($pathInfo['fullpath'], $needle) === false) {
92+
return false;
93+
}
94+
}
95+
96+
return true;
97+
}
98+
99+
private function hasBeenCustomized($path)
100+
{
101+
foreach ($this->templateMappings as $templateOriginalCode => $templateInfo) {
102+
$templatePath = $templateInfo['templatePath'];
103+
$templateCode = $templateInfo['templateCode'];
104+
if(strpos($templatePath, $path) !== false) {
105+
return [$templateCode];
106+
}
107+
}
108+
return false;
109+
}
110+
}

‎Model/FileIndex.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ class FileIndex
1515
'less'
1616
];
1717

18+
const EMAIL_EXTENSIONS = [
19+
'html',
20+
];
21+
1822
const WHITELISTED_BASENAMES = [
1923
'requirejs-config.js'
2024
];

‎Model/Runner.php‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use SomethingDigital\UpgradeHelper\Model\Checker\Preferences as PreferenceChecker;
66
use SomethingDigital\UpgradeHelper\Model\Checker\Overrides as OverrideChecker;
7+
use SomethingDigital\UpgradeHelper\Model\Checker\EmailTemplate as EmailTemplateChecker;
78

89
class Runner
910
{
@@ -13,20 +14,25 @@ class Runner
1314

1415
private $overrideChecker;
1516

17+
private $emailTemplateChecker;
18+
1619
private $checkers;
1720

1821
public function __construct(
1922
LineProcessor $lineProcessor,
2023
PreferenceChecker $preferenceChecker,
21-
OverrideChecker $overrideChecker
24+
OverrideChecker $overrideChecker,
25+
EmailTemplateChecker $emailTemplateChecker
2226
) {
2327
$this->lineProcessor = $lineProcessor;
2428
$this->preferenceChecker = $preferenceChecker;
2529
$this->overrideChecker = $overrideChecker;
30+
$this->emailTemplateChecker = $emailTemplateChecker;
2631

2732
$this->checkers = [
2833
'preferences' => $this->preferenceChecker,
29-
'overrides' => $this->overrideChecker
34+
'overrides' => $this->overrideChecker,
35+
'email_template' => $this->emailTemplateChecker,
3036
];
3137
}
3238

‎Test/Unit/Model/RunnerTest.php‎

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use SomethingDigital\UpgradeHelper\Model\LineProcessor;
1010
use SomethingDigital\UpgradeHelper\Model\Checker\Preferences as PreferenceChecker;
1111
use SomethingDigital\UpgradeHelper\Model\Checker\Overrides as OverrideChecker;
12+
use SomethingDigital\UpgradeHelper\Model\Checker\EmailTemplate as EmailTemplateChecker;
1213
use SomethingDigital\UpgradeHelper\Model\FileIndex;
1314

1415
class RunnerTest extends TestCase
@@ -48,15 +49,24 @@ protected function setUp(): void
4849
]
4950
);
5051

52+
$this->emailTemplateChecker = $this->createMock(EmailTemplateChecker::class);
53+
54+
$mockOutput = [
55+
'patched' => 'vendor/magento/module-sales/view/frontend/email/order_new.html',
56+
'customized' => ['New Pickup Order']
57+
];
58+
59+
$this->emailTemplateChecker->expects($this->any())->method('check')->willReturn($mockOutput);
60+
5161
$this->runner = $objectManager->getObject(
5262
Runner::class,
5363
[
5464
'lineProcessor' => $this->lineProcessor,
5565
'overrideChecker' => $this->overrideChecker,
5666
'preferenceChecker' => $this->preferenceChecker,
67+
'emailTemplateChecker' => $this->emailTemplateChecker
5768
]
5869
);
59-
6070
}
6171

6272
public function testRun()
@@ -69,17 +79,20 @@ public function testRun()
6979
'diff -r Magento-EE-2.3.1/vendor/magento/module-bundle/view/frontend/templates/js/components.phtml Magento-EE-2.3.3/vendor/magento/module-bundle/view/frontend/templates/js/components.phtml',
7080
'diff -r Magento-EE-2.3.1/vendor/magento/module-checkout/view/frontend/web/template/billing-address/details.html Magento-EE-2.3.3/vendor/magento/module-checkout/view/frontend/web/template/billing-address/details.html',
7181
'diff -r Magento-EE-2.3.1/vendor/magento/module-customer/view/frontend/templates/form/forgotpassword.phtml Magento-EE-2.3.3/vendor/magento/module-customer/view/frontend/templates/form/forgotpassword.phtml',
72-
'diff -r Magento-EE-2.3.1/vendor/magento/module-catalog-rule/Controller/Adminhtml/Promo/Catalog/Save.php Magento-EE-2.3.3/vendor/magento/module-catalog-rule/Controller/Adminhtml/Promo/Catalog/Save.php'
82+
'diff -r Magento-EE-2.3.1/vendor/magento/module-catalog-rule/Controller/Adminhtml/Promo/Catalog/Save.php Magento-EE-2.3.3/vendor/magento/module-catalog-rule/Controller/Adminhtml/Promo/Catalog/Save.php',
83+
'diff -r Magento-EE-2.3.1/vendor/magento/module-sales/view/frontend/email/order_new.html Magento-EE-2.3.3/vendor/magento/module-sales/view/frontend/email/order_new.html'
7384
];
7485

7586
$result = [];
7687
$result['preferences'] = [];
7788
$result['overrides'] = [];
89+
$result['email_template'] = [];
7890
foreach ($diff as $line) {
7991
// Extract will populate: $type, $path, $items
8092
extract($this->runner->run($line));
8193
$result[$type][$path] = $items;
8294
}
95+
8396
// Theme (app/design) .js override
8497
$this->assertTrue(
8598
$this->arrays_are_similar(
@@ -139,6 +152,13 @@ public function testRun()
139152
)
140153
);
141154

155+
$this->assertTrue(
156+
$this->arrays_are_similar(
157+
$result['email_template']['vendor/magento/module-sales/view/frontend/email/order_new.html'],
158+
['New Pickup Order']
159+
)
160+
);
161+
142162
// TODO
143163
// - Line in diff that doesn't match override OR preference
144164
}

0 commit comments

Comments
 (0)