InstallSchema.php 48 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622
  1. <?php
  2. namespace Dotdigitalgroup\Email\Setup;
  3. use Magento\Framework\Setup\InstallSchemaInterface;
  4. use Magento\Framework\Setup\ModuleContextInterface;
  5. use Magento\Framework\Setup\SchemaSetupInterface;
  6. use Magento\Framework\DB\Ddl\Table;
  7. /**
  8. * @codeCoverageIgnore
  9. */
  10. class InstallSchema implements InstallSchemaInterface
  11. {
  12. /**
  13. * @var Schema\Shared
  14. */
  15. private $shared;
  16. /**
  17. * InstallSchema constructor.
  18. *
  19. * @param Schema\Shared $shared
  20. */
  21. public function __construct(
  22. Schema\Shared $shared
  23. ) {
  24. $this->shared = $shared;
  25. }
  26. /**
  27. * {@inheritdoc}
  28. */
  29. public function install(
  30. SchemaSetupInterface $setup,
  31. ModuleContextInterface $context
  32. ) {
  33. $installer = $setup;
  34. $installer->startSetup();
  35. /**
  36. * Create Table
  37. */
  38. $this->createContactTable($installer);
  39. $this->createOrderTable($installer);
  40. $this->createCampaignTable($installer);
  41. $this->createReviewTable($installer);
  42. $this->createWishlistTable($installer);
  43. $this->createCatalogTable($installer);
  44. $this->createRuleTable($installer);
  45. $this->createImporterTable($installer);
  46. $this->createAutomationTable($installer);
  47. $this->createAbandonedCartTable($installer);
  48. $this->createConsentTable($installer);
  49. $this->createFailedAuth($installer);
  50. /**
  51. * Modify table
  52. */
  53. $this->addColumnToAdminUserTable($installer);
  54. $installer->endSetup();
  55. }
  56. /**
  57. * @param SchemaSetupInterface $installer
  58. *
  59. * @return null
  60. */
  61. private function createContactTable($installer)
  62. {
  63. $tableName = $installer->getTable(Schema::EMAIL_CONTACT_TABLE);
  64. $this->dropTableIfExists($installer, $tableName);
  65. $contactTable = $installer->getConnection()->newTable($tableName);
  66. $contactTable = $this->addColumnsToContactTable($contactTable);
  67. $contactTable = $this->addIndexesToContactTable($installer, $contactTable);
  68. $contactTable->addForeignKey(
  69. $installer->getFkName(
  70. Schema::EMAIL_CONTACT_TABLE,
  71. 'website_id',
  72. 'store_website',
  73. 'website_id'
  74. ),
  75. 'website_id',
  76. $installer->getTable('store_website'),
  77. 'website_id',
  78. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  79. );
  80. $contactTable->setComment('Connector Contacts');
  81. $installer->getConnection()->createTable($contactTable);
  82. }
  83. /**
  84. * @param Table $contactTable
  85. * @return \Magento\Framework\DB\Ddl\Table
  86. */
  87. private function addColumnsToContactTable($contactTable)
  88. {
  89. return $contactTable->addColumn(
  90. 'email_contact_id',
  91. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  92. 10,
  93. [
  94. 'primary' => true,
  95. 'identity' => true,
  96. 'unsigned' => true,
  97. 'nullable' => false
  98. ],
  99. 'Primary Key'
  100. )
  101. ->addColumn(
  102. 'is_guest',
  103. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  104. null,
  105. ['unsigned' => true, 'nullable' => true],
  106. 'Is Guest'
  107. )
  108. ->addColumn(
  109. 'contact_id',
  110. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  111. 15,
  112. ['unsigned' => true, 'nullable' => true],
  113. 'Connector Contact ID'
  114. )
  115. ->addColumn(
  116. 'customer_id',
  117. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  118. 11,
  119. ['unsigned' => true, 'nullable' => false],
  120. 'Customer ID'
  121. )
  122. ->addColumn(
  123. 'website_id',
  124. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  125. 5,
  126. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  127. 'Website ID'
  128. )
  129. ->addColumn(
  130. 'store_id',
  131. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  132. 5,
  133. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  134. 'Store ID'
  135. )
  136. ->addColumn(
  137. 'email',
  138. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  139. 255,
  140. ['nullable' => false, 'default' => ''],
  141. 'Customer Email'
  142. )
  143. ->addColumn(
  144. 'is_subscriber',
  145. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  146. null,
  147. ['unsigned' => true, 'nullable' => true],
  148. 'Is Subscriber'
  149. )
  150. ->addColumn(
  151. 'subscriber_status',
  152. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  153. null,
  154. ['unsigned' => true, 'nullable' => true],
  155. 'Subscriber status'
  156. )
  157. ->addColumn(
  158. 'email_imported',
  159. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  160. null,
  161. ['unsigned' => true, 'nullable' => true],
  162. 'Is Imported'
  163. )
  164. ->addColumn(
  165. 'subscriber_imported',
  166. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  167. null,
  168. ['unsigned' => true, 'nullable' => true],
  169. 'Subscriber Imported'
  170. )
  171. ->addColumn(
  172. 'suppressed',
  173. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  174. null,
  175. ['unsigned' => true, 'nullable' => true],
  176. 'Is Suppressed'
  177. );
  178. }
  179. /**
  180. * @param SchemaSetupInterface $installer
  181. * @param Table $contactTable
  182. * @return \Magento\Framework\DB\Ddl\Table
  183. */
  184. private function addIndexesToContactTable($installer, $contactTable)
  185. {
  186. return $contactTable->addIndex(
  187. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['email_contact_id']),
  188. ['email_contact_id']
  189. )
  190. ->addIndex(
  191. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['is_guest']),
  192. ['is_guest']
  193. )
  194. ->addIndex(
  195. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['customer_id']),
  196. ['customer_id']
  197. )
  198. ->addIndex(
  199. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['website_id']),
  200. ['website_id']
  201. )
  202. ->addIndex(
  203. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['is_subscriber']),
  204. ['is_subscriber']
  205. )
  206. ->addIndex(
  207. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['subscriber_status']),
  208. ['subscriber_status']
  209. )
  210. ->addIndex(
  211. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['email_imported']),
  212. ['email_imported']
  213. )
  214. ->addIndex(
  215. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['subscriber_imported']),
  216. ['subscriber_imported']
  217. )
  218. ->addIndex(
  219. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['suppressed']),
  220. ['suppressed']
  221. )
  222. ->addIndex(
  223. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['email']),
  224. ['email']
  225. )
  226. ->addIndex(
  227. $installer->getIdxName(Schema::EMAIL_CONTACT_TABLE, ['contact_id']),
  228. ['contact_id']
  229. );
  230. }
  231. /**
  232. * @param SchemaSetupInterface $installer
  233. *
  234. * @return null
  235. */
  236. private function createOrderTable($installer)
  237. {
  238. $tableName = $installer->getTable(Schema::EMAIL_ORDER_TABLE);
  239. $this->dropTableIfExists($installer, $tableName);
  240. $orderTable = $installer->getConnection()->newTable($tableName);
  241. $orderTable = $this->addColumnsToOrderTable($orderTable);
  242. $orderTable = $this->addIndexesToOrderTable($installer, $orderTable);
  243. $orderTable->addForeignKey(
  244. $installer->getFkName(
  245. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  246. 'store_id',
  247. 'store',
  248. 'store_id'
  249. ),
  250. 'store_id',
  251. $installer->getTable('store'),
  252. 'store_id',
  253. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE,
  254. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  255. );
  256. //Only add foreign key if table exist in default connection
  257. if ($installer->getConnection()->isTableExists($installer->getTable('sales_order'))) {
  258. $orderTable->addForeignKey(
  259. $installer->getFkName(
  260. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  261. 'order_id',
  262. 'sales_order',
  263. 'entity_id'
  264. ),
  265. 'order_id',
  266. $installer->getTable('sales_order'),
  267. 'entity_id',
  268. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE,
  269. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  270. );
  271. }
  272. $orderTable->setComment('Transactional Order Data');
  273. $installer->getConnection()->createTable($orderTable);
  274. }
  275. /**
  276. * @param Table $orderTable
  277. * @return Table
  278. */
  279. private function addColumnsToOrderTable($orderTable)
  280. {
  281. return $orderTable->addColumn(
  282. 'email_order_id',
  283. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  284. null,
  285. [
  286. 'primary' => true,
  287. 'identity' => true,
  288. 'unsigned' => true,
  289. 'nullable' => false
  290. ],
  291. 'Primary Key'
  292. )
  293. ->addColumn(
  294. 'order_id',
  295. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  296. null,
  297. ['unsigned' => true, 'nullable' => false],
  298. 'Order ID'
  299. )
  300. ->addColumn(
  301. 'order_status',
  302. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  303. 255,
  304. ['unsigned' => true, 'nullable' => false],
  305. 'Order Status'
  306. )
  307. ->addColumn(
  308. 'quote_id',
  309. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  310. null,
  311. ['unsigned' => true, 'nullable' => false],
  312. 'Sales Quote ID'
  313. )
  314. ->addColumn(
  315. 'store_id',
  316. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  317. 5,
  318. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  319. 'Store ID'
  320. )
  321. ->addColumn(
  322. 'email_imported',
  323. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  324. null,
  325. ['unsigned' => true, 'nullable' => true],
  326. 'Is Order Imported'
  327. )
  328. ->addColumn(
  329. 'modified',
  330. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  331. null,
  332. ['unsigned' => true, 'nullable' => true],
  333. 'Is Order Modified'
  334. )
  335. ->addColumn(
  336. 'created_at',
  337. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  338. null,
  339. [],
  340. 'Creation Time'
  341. )
  342. ->addColumn(
  343. 'updated_at',
  344. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  345. null,
  346. [],
  347. 'Update Time'
  348. );
  349. }
  350. /**
  351. * @param SchemaSetupInterface $installer
  352. * @param Table $orderTable
  353. * @return Table
  354. */
  355. private function addIndexesToOrderTable($installer, $orderTable)
  356. {
  357. return $orderTable->addIndex(
  358. $installer->getIdxName(
  359. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  360. ['store_id']
  361. ),
  362. ['store_id']
  363. )
  364. ->addIndex(
  365. $installer->getIdxName(
  366. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  367. ['quote_id']
  368. ),
  369. ['quote_id']
  370. )
  371. ->addIndex(
  372. $installer->getIdxName(
  373. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  374. ['email_imported']
  375. ),
  376. ['email_imported']
  377. )
  378. ->addIndex(
  379. $installer->getIdxName(
  380. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  381. ['order_status']
  382. ),
  383. ['order_status']
  384. )
  385. ->addIndex(
  386. $installer->getIdxName(
  387. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  388. ['modified']
  389. ),
  390. ['modified']
  391. )
  392. ->addIndex(
  393. $installer->getIdxName(
  394. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  395. ['updated_at']
  396. ),
  397. ['updated_at']
  398. )
  399. ->addIndex(
  400. $installer->getIdxName(
  401. $installer->getTable(Schema::EMAIL_ORDER_TABLE),
  402. ['created_at']
  403. ),
  404. ['created_at']
  405. );
  406. }
  407. /**
  408. * @param SchemaSetupInterface $installer
  409. *
  410. * @return null
  411. */
  412. private function createCampaignTable($installer)
  413. {
  414. $tableName = $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE);
  415. $this->dropTableIfExists($installer, $tableName);
  416. $campaignTable = $installer->getConnection()->newTable($tableName);
  417. $campaignTable = $this->addColumnsToCampaignTable($campaignTable);
  418. $campaignTable = $this->addIndexesToCampaignTable($installer, $campaignTable);
  419. $campaignTable->addForeignKey(
  420. $installer->getFkName(
  421. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  422. 'store_id',
  423. 'core/store',
  424. 'store_id'
  425. ),
  426. 'store_id',
  427. $installer->getTable('store'),
  428. 'store_id',
  429. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE,
  430. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  431. );
  432. $campaignTable->setComment('Connector Campaigns');
  433. $installer->getConnection()->createTable($campaignTable);
  434. }
  435. /**
  436. * @param Table $campaignTable
  437. * @return Table
  438. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  439. */
  440. private function addColumnsToCampaignTable($campaignTable)
  441. {
  442. return $campaignTable->addColumn(
  443. 'id',
  444. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  445. null,
  446. [
  447. 'primary' => true,
  448. 'identity' => true,
  449. 'unsigned' => true,
  450. 'nullable' => false
  451. ],
  452. 'Primary Key'
  453. )
  454. ->addColumn(
  455. 'campaign_id',
  456. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  457. null,
  458. ['unsigned' => true, 'nullable' => false],
  459. 'Campaign ID'
  460. )
  461. ->addColumn(
  462. 'email',
  463. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  464. 255,
  465. ['nullable' => false, 'default' => ''],
  466. 'Contact Email'
  467. )
  468. ->addColumn(
  469. 'customer_id',
  470. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  471. 11,
  472. ['unsigned' => true, 'nullable' => false],
  473. 'Customer ID'
  474. )
  475. ->addColumn(
  476. 'sent_at',
  477. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  478. null,
  479. [],
  480. 'Send Date'
  481. )
  482. ->addColumn(
  483. 'order_increment_id',
  484. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  485. 50,
  486. ['unsigned' => true, 'nullable' => false],
  487. 'Order Increment ID'
  488. )
  489. ->addColumn(
  490. 'quote_id',
  491. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  492. 10,
  493. ['unsigned' => true, 'nullable' => false],
  494. 'Sales Quote ID'
  495. )
  496. ->addColumn(
  497. 'message',
  498. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  499. 255,
  500. ['nullable' => false, 'default' => ''],
  501. 'Error Message'
  502. )
  503. ->addColumn(
  504. 'checkout_method',
  505. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  506. 255,
  507. ['nullable' => false, 'default' => ''],
  508. 'Checkout Method Used'
  509. )
  510. ->addColumn(
  511. 'store_id',
  512. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  513. 5,
  514. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  515. 'Store ID'
  516. )
  517. ->addColumn(
  518. 'event_name',
  519. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  520. 255,
  521. ['nullable' => false, 'default' => ''],
  522. 'Event Name'
  523. )
  524. ->addColumn(
  525. 'send_id',
  526. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  527. 255,
  528. ['nullable' => false, 'default' => ''],
  529. 'Send Id'
  530. )
  531. ->addColumn(
  532. 'send_status',
  533. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  534. null,
  535. ['nullable' => false, 'default' => 0],
  536. 'Campaign send status'
  537. )
  538. ->addColumn(
  539. 'created_at',
  540. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  541. null,
  542. [],
  543. 'Creation Time'
  544. )
  545. ->addColumn(
  546. 'updated_at',
  547. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  548. null,
  549. [],
  550. 'Update Time'
  551. );
  552. }
  553. /**
  554. * @param SchemaSetupInterface $installer
  555. * @param Table $campaignTable
  556. * @return Table
  557. */
  558. private function addIndexesToCampaignTable($installer, $campaignTable)
  559. {
  560. return $campaignTable->addIndex(
  561. $installer->getIdxName(
  562. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  563. ['store_id']
  564. ),
  565. ['store_id']
  566. )
  567. ->addIndex(
  568. $installer->getIdxName(
  569. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  570. ['campaign_id']
  571. ),
  572. ['campaign_id']
  573. )
  574. ->addIndex(
  575. $installer->getIdxName(
  576. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  577. ['email']
  578. ),
  579. ['email']
  580. )
  581. ->addIndex(
  582. $installer->getIdxName(
  583. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  584. ['send_id']
  585. ),
  586. ['send_id']
  587. )
  588. ->addIndex(
  589. $installer->getIdxName(
  590. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  591. ['send_status']
  592. ),
  593. ['send_status']
  594. )
  595. ->addIndex(
  596. $installer->getIdxName(
  597. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  598. ['created_at']
  599. ),
  600. ['created_at']
  601. )
  602. ->addIndex(
  603. $installer->getIdxName(
  604. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  605. ['updated_at']
  606. ),
  607. ['updated_at']
  608. )
  609. ->addIndex(
  610. $installer->getIdxName(
  611. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  612. ['sent_at']
  613. ),
  614. ['sent_at']
  615. )
  616. ->addIndex(
  617. $installer->getIdxName(
  618. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  619. ['event_name']
  620. ),
  621. ['event_name']
  622. )
  623. ->addIndex(
  624. $installer->getIdxName(
  625. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  626. ['message']
  627. ),
  628. ['message']
  629. )
  630. ->addIndex(
  631. $installer->getIdxName(
  632. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  633. ['quote_id']
  634. ),
  635. ['quote_id']
  636. )
  637. ->addIndex(
  638. $installer->getIdxName(
  639. $installer->getTable(Schema::EMAIL_CAMPAIGN_TABLE),
  640. ['customer_id']
  641. ),
  642. ['customer_id']
  643. );
  644. }
  645. /**
  646. * @param SchemaSetupInterface $installer
  647. *
  648. * @return null
  649. */
  650. private function createReviewTable($installer)
  651. {
  652. $tableName = $installer->getTable(Schema::EMAIL_REVIEW_TABLE);
  653. $this->dropTableIfExists($installer, $tableName);
  654. $reviewTable = $installer->getConnection()->newTable($tableName);
  655. $reviewTable = $this->addColumnsToReviewTable($reviewTable);
  656. $reviewTable = $this->addIndexesToReviewTable($installer, $reviewTable);
  657. $reviewTable->setComment('Connector Reviews');
  658. $installer->getConnection()->createTable($reviewTable);
  659. }
  660. /**
  661. * @param Table $reviewTable
  662. * @return Table
  663. */
  664. private function addColumnsToReviewTable($reviewTable)
  665. {
  666. return $reviewTable->addColumn(
  667. 'id',
  668. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  669. null,
  670. [
  671. 'primary' => true,
  672. 'identity' => true,
  673. 'unsigned' => true,
  674. 'nullable' => false
  675. ],
  676. 'Primary Key'
  677. )
  678. ->addColumn(
  679. 'review_id',
  680. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  681. null,
  682. ['unsigned' => true, 'nullable' => false],
  683. 'Review Id'
  684. )
  685. ->addColumn(
  686. 'customer_id',
  687. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  688. 11,
  689. ['unsigned' => true, 'nullable' => false],
  690. 'Customer ID'
  691. )
  692. ->addColumn(
  693. 'store_id',
  694. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  695. 5,
  696. ['unsigned' => true, 'nullable' => false],
  697. 'Store Id'
  698. )
  699. ->addColumn(
  700. 'review_imported',
  701. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  702. null,
  703. ['unsigned' => true, 'nullable' => true],
  704. 'Review Imported'
  705. )
  706. ->addColumn(
  707. 'created_at',
  708. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  709. null,
  710. [],
  711. 'Creation Time'
  712. )
  713. ->addColumn(
  714. 'updated_at',
  715. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  716. null,
  717. [],
  718. 'Update Time'
  719. );
  720. }
  721. /**
  722. * @param SchemaSetupInterface $installer
  723. * @param Table $reviewTable
  724. * @return Table
  725. */
  726. private function addIndexesToReviewTable($installer, $reviewTable)
  727. {
  728. return $reviewTable->addIndex(
  729. $installer->getIdxName(
  730. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  731. ['review_id']
  732. ),
  733. ['review_id']
  734. )
  735. ->addIndex(
  736. $installer->getIdxName(
  737. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  738. ['customer_id']
  739. ),
  740. ['customer_id']
  741. )
  742. ->addIndex(
  743. $installer->getIdxName(
  744. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  745. ['store_id']
  746. ),
  747. ['store_id']
  748. )
  749. ->addIndex(
  750. $installer->getIdxName(
  751. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  752. ['review_imported']
  753. ),
  754. ['review_imported']
  755. )
  756. ->addIndex(
  757. $installer->getIdxName(
  758. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  759. ['created_at']
  760. ),
  761. ['created_at']
  762. )
  763. ->addIndex(
  764. $installer->getIdxName(
  765. $installer->getTable(Schema::EMAIL_REVIEW_TABLE),
  766. ['updated_at']
  767. ),
  768. ['updated_at']
  769. );
  770. }
  771. /**
  772. * @param SchemaSetupInterface $installer
  773. *
  774. * @return null
  775. */
  776. private function createWishlistTable($installer)
  777. {
  778. $tableName = $installer->getTable(Schema::EMAIL_WISHLIST_TABLE);
  779. $this->dropTableIfExists($installer, $tableName);
  780. $wishlistTable = $installer->getConnection()->newTable($tableName);
  781. $wishlistTable = $this->addColumnsToWishlistTable($wishlistTable);
  782. $wishlistTable = $this->addIndexesToWishlistTable($installer, $wishlistTable);
  783. $wishlistTable->addForeignKey(
  784. $installer->getFkName(Schema::EMAIL_WISHLIST_TABLE, 'customer_id', 'customer_entity', 'entity_id'),
  785. 'customer_id',
  786. $installer->getTable('customer_entity'),
  787. 'entity_id',
  788. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  789. )->addForeignKey(
  790. $installer->getFkName(Schema::EMAIL_WISHLIST_TABLE, 'wishlist_id', 'wishlist', 'wishlist_id'),
  791. 'wishlist_id',
  792. $installer->getTable('wishlist'),
  793. 'wishlist_id',
  794. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE,
  795. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  796. );
  797. $wishlistTable->setComment('Connector Wishlist');
  798. $installer->getConnection()->createTable($wishlistTable);
  799. }
  800. /**
  801. * @param Table $wishlistTable
  802. * @return Table
  803. */
  804. private function addColumnsToWishlistTable($wishlistTable)
  805. {
  806. return $wishlistTable->addColumn(
  807. 'id',
  808. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  809. null,
  810. [
  811. 'primary' => true,
  812. 'identity' => true,
  813. 'unsigned' => true,
  814. 'nullable' => false
  815. ],
  816. 'Primary Key'
  817. )
  818. ->addColumn(
  819. 'wishlist_id',
  820. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  821. null,
  822. ['unsigned' => true, 'nullable' => false],
  823. 'Wishlist Id'
  824. )
  825. ->addColumn(
  826. 'item_count',
  827. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  828. null,
  829. ['unsigned' => true, 'nullable' => false],
  830. 'Item Count'
  831. )
  832. ->addColumn(
  833. 'customer_id',
  834. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  835. 11,
  836. ['unsigned' => true, 'nullable' => true],
  837. 'Customer ID'
  838. )
  839. ->addColumn(
  840. 'store_id',
  841. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  842. 5,
  843. ['unsigned' => true, 'nullable' => false],
  844. 'Store Id'
  845. )
  846. ->addColumn(
  847. 'wishlist_imported',
  848. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  849. null,
  850. ['unsigned' => true, 'nullable' => true],
  851. 'Wishlist Imported'
  852. )
  853. ->addColumn(
  854. 'wishlist_modified',
  855. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  856. null,
  857. ['unsigned' => true, 'nullable' => true],
  858. 'Wishlist Modified'
  859. )
  860. ->addColumn(
  861. 'created_at',
  862. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  863. null,
  864. [],
  865. 'Creation Time'
  866. )
  867. ->addColumn(
  868. 'updated_at',
  869. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  870. null,
  871. [],
  872. 'Update Time'
  873. );
  874. }
  875. /**
  876. * @param SchemaSetupInterface $installer
  877. * @param Table $wishlistTable
  878. * @return Table
  879. */
  880. private function addIndexesToWishlistTable($installer, $wishlistTable)
  881. {
  882. return $wishlistTable->addIndex(
  883. $installer->getIdxName(
  884. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  885. ['wishlist_id']
  886. ),
  887. ['wishlist_id']
  888. )
  889. ->addIndex(
  890. $installer->getIdxName(
  891. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  892. ['item_count']
  893. ),
  894. ['item_count']
  895. )
  896. ->addIndex(
  897. $installer->getIdxName(
  898. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  899. ['customer_id']
  900. ),
  901. ['customer_id']
  902. )
  903. ->addIndex(
  904. $installer->getIdxName(
  905. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  906. ['wishlist_modified']
  907. ),
  908. ['wishlist_modified']
  909. )
  910. ->addIndex(
  911. $installer->getIdxName(
  912. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  913. ['wishlist_imported']
  914. ),
  915. ['wishlist_imported']
  916. )
  917. ->addIndex(
  918. $installer->getIdxName(
  919. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  920. ['created_at']
  921. ),
  922. ['created_at']
  923. )
  924. ->addIndex(
  925. $installer->getIdxName(
  926. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  927. ['updated_at']
  928. ),
  929. ['updated_at']
  930. )
  931. ->addIndex(
  932. $installer->getIdxName(
  933. $installer->getTable(Schema::EMAIL_WISHLIST_TABLE),
  934. ['store_id']
  935. ),
  936. ['store_id']
  937. );
  938. }
  939. /**
  940. * @param SchemaSetupInterface $installer
  941. *
  942. * @return null
  943. */
  944. private function createCatalogTable($installer)
  945. {
  946. $tableName = $installer->getTable(Schema::EMAIL_CATALOG_TABLE);
  947. $this->dropTableIfExists($installer, $tableName);
  948. $catalogTable = $installer->getConnection()->newTable($tableName);
  949. $catalogTable = $this->addColumnsToCatalogTable($catalogTable);
  950. $catalogTable = $this->addIndexesToCatalogTable($installer, $catalogTable);
  951. $catalogTable->addForeignKey(
  952. $installer->getFkName(
  953. Schema::EMAIL_CATALOG_TABLE,
  954. 'product_id',
  955. 'catalog_product_entity',
  956. 'entity_id'
  957. ),
  958. 'product_id',
  959. $installer->getTable('catalog_product_entity'),
  960. 'entity_id',
  961. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  962. );
  963. $catalogTable->setComment('Connector Catalog');
  964. $installer->getConnection()->createTable($catalogTable);
  965. }
  966. /**
  967. * @param Table $catalogTable
  968. * @return Table
  969. */
  970. private function addColumnsToCatalogTable($catalogTable)
  971. {
  972. return $catalogTable->addColumn(
  973. 'id',
  974. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  975. null,
  976. [
  977. 'primary' => true,
  978. 'identity' => true,
  979. 'unsigned' => true,
  980. 'nullable' => false
  981. ],
  982. 'Primary Key'
  983. )
  984. ->addColumn(
  985. 'product_id',
  986. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  987. 10,
  988. ['unsigned' => true, 'nullable' => false],
  989. 'Product Id'
  990. )
  991. ->addColumn(
  992. 'imported',
  993. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  994. null,
  995. ['unsigned' => true, 'nullable' => true],
  996. 'Product Imported'
  997. )
  998. ->addColumn(
  999. 'modified',
  1000. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1001. null,
  1002. ['unsigned' => true, 'nullable' => true],
  1003. 'Product Modified'
  1004. )
  1005. ->addColumn(
  1006. 'created_at',
  1007. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1008. null,
  1009. [],
  1010. 'Creation Time'
  1011. )
  1012. ->addColumn(
  1013. 'updated_at',
  1014. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1015. null,
  1016. [],
  1017. 'Update Time'
  1018. );
  1019. }
  1020. /**
  1021. * @param SchemaSetupInterface $installer
  1022. * @param Table $catalogTable
  1023. * @return Table
  1024. */
  1025. private function addIndexesToCatalogTable($installer, $catalogTable)
  1026. {
  1027. return $catalogTable->addIndex(
  1028. $installer->getIdxName(
  1029. $installer->getTable(Schema::EMAIL_CATALOG_TABLE),
  1030. ['product_id']
  1031. ),
  1032. ['product_id']
  1033. )
  1034. ->addIndex(
  1035. $installer->getIdxName(
  1036. $installer->getTable(Schema::EMAIL_CATALOG_TABLE),
  1037. ['imported']
  1038. ),
  1039. ['imported']
  1040. )
  1041. ->addIndex(
  1042. $installer->getIdxName(
  1043. $installer->getTable(Schema::EMAIL_CATALOG_TABLE),
  1044. ['modified']
  1045. ),
  1046. ['modified']
  1047. )
  1048. ->addIndex(
  1049. $installer->getIdxName(
  1050. $installer->getTable(Schema::EMAIL_CATALOG_TABLE),
  1051. ['created_at']
  1052. ),
  1053. ['created_at']
  1054. )
  1055. ->addIndex(
  1056. $installer->getIdxName(
  1057. $installer->getTable(Schema::EMAIL_CATALOG_TABLE),
  1058. ['updated_at']
  1059. ),
  1060. ['updated_at']
  1061. );
  1062. }
  1063. /**
  1064. * @param SchemaSetupInterface $installer
  1065. *
  1066. * @return null
  1067. */
  1068. private function createRuleTable($installer)
  1069. {
  1070. $tableName = $installer->getTable(Schema::EMAIL_RULES_TABLE);
  1071. $this->dropTableIfExists($installer, $tableName);
  1072. $ruleTable = $installer->getConnection()->newTable($tableName);
  1073. $ruleTable = $this->addColumnsToRulesTable($ruleTable);
  1074. $ruleTable->setComment('Connector Rules');
  1075. $installer->getConnection()->createTable($ruleTable);
  1076. }
  1077. /**
  1078. * @param Table $ruleTable
  1079. * @return Table
  1080. */
  1081. private function addColumnsToRulesTable($ruleTable)
  1082. {
  1083. return $ruleTable->addColumn(
  1084. 'id',
  1085. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  1086. null,
  1087. [
  1088. 'primary' => true,
  1089. 'identity' => true,
  1090. 'unsigned' => true,
  1091. 'nullable' => false
  1092. ],
  1093. 'Primary Key'
  1094. )
  1095. ->addColumn(
  1096. 'name',
  1097. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1098. 255,
  1099. ['nullable' => false, 'default' => ''],
  1100. 'Rule Name'
  1101. )
  1102. ->addColumn(
  1103. 'website_ids',
  1104. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1105. 255,
  1106. ['nullable' => false, 'default' => '0'],
  1107. 'Website Id'
  1108. )
  1109. ->addColumn(
  1110. 'type',
  1111. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1112. null,
  1113. ['nullable' => false, 'default' => 0],
  1114. 'Rule Type'
  1115. )
  1116. ->addColumn(
  1117. 'status',
  1118. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1119. null,
  1120. ['nullable' => false, 'default' => 0],
  1121. 'Status'
  1122. )
  1123. ->addColumn(
  1124. 'combination',
  1125. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1126. null,
  1127. ['nullable' => false, 'default' => '1'],
  1128. 'Rule Condition'
  1129. )
  1130. ->addColumn(
  1131. 'condition',
  1132. \Magento\Framework\DB\Ddl\Table::TYPE_BLOB,
  1133. null,
  1134. ['nullable' => false, 'default' => ''],
  1135. 'Rule Condition'
  1136. )
  1137. ->addColumn(
  1138. 'created_at',
  1139. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1140. null,
  1141. [],
  1142. 'Creation Time'
  1143. )
  1144. ->addColumn(
  1145. 'updated_at',
  1146. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1147. null,
  1148. [],
  1149. 'Update Time'
  1150. );
  1151. }
  1152. /**
  1153. * @param SchemaSetupInterface $installer
  1154. *
  1155. * @return null
  1156. */
  1157. private function createImporterTable($installer)
  1158. {
  1159. $tableName = $installer->getTable(Schema::EMAIL_IMPORTER_TABLE);
  1160. $this->dropTableIfExists($installer, $tableName);
  1161. $importerTable = $installer->getConnection()->newTable($tableName);
  1162. $importerTable = $this->addColumnsToImporterTable($importerTable);
  1163. $importerTable = $this->addIndexesToImporterTable($installer, $importerTable);
  1164. $importerTable ->setComment('Email Importer');
  1165. $installer->getConnection()->createTable($importerTable);
  1166. }
  1167. /**
  1168. * @param Table $importerTable
  1169. * @return Table
  1170. */
  1171. private function addColumnsToImporterTable($importerTable)
  1172. {
  1173. return $importerTable->addColumn(
  1174. 'id',
  1175. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  1176. null,
  1177. [
  1178. 'primary' => true,
  1179. 'identity' => true,
  1180. 'unsigned' => true,
  1181. 'nullable' => false
  1182. ],
  1183. 'Primary Key'
  1184. )
  1185. ->addColumn(
  1186. 'import_type',
  1187. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1188. 255,
  1189. ['nullable' => false, 'default' => ''],
  1190. 'Import Type'
  1191. )
  1192. ->addColumn(
  1193. 'website_id',
  1194. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1195. 5,
  1196. ['nullable' => false, 'default' => '0'],
  1197. 'Website Id'
  1198. )
  1199. ->addColumn(
  1200. 'import_status',
  1201. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1202. null,
  1203. ['nullable' => false, 'default' => 0],
  1204. 'Import Status'
  1205. )
  1206. ->addColumn(
  1207. 'import_id',
  1208. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1209. 255,
  1210. ['nullable' => false, 'default' => ''],
  1211. 'Import Id'
  1212. )
  1213. ->addColumn(
  1214. 'import_data',
  1215. \Magento\Framework\DB\Ddl\Table::TYPE_BLOB,
  1216. '2M',
  1217. ['nullable' => false, 'default' => ''],
  1218. 'Import Data'
  1219. )
  1220. ->addColumn(
  1221. 'import_mode',
  1222. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1223. 255,
  1224. ['nullable' => false, 'default' => ''],
  1225. 'Import Mode'
  1226. )
  1227. ->addColumn(
  1228. 'import_file',
  1229. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1230. null,
  1231. ['nullable' => false, 'default' => ''],
  1232. 'Import File'
  1233. )
  1234. ->addColumn(
  1235. 'message',
  1236. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1237. 255,
  1238. ['nullable' => false, 'default' => ''],
  1239. 'Error Message'
  1240. )
  1241. ->addColumn(
  1242. 'created_at',
  1243. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1244. null,
  1245. [],
  1246. 'Creation Time'
  1247. )
  1248. ->addColumn(
  1249. 'updated_at',
  1250. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1251. null,
  1252. [],
  1253. 'Update Time'
  1254. )
  1255. ->addColumn(
  1256. 'import_started',
  1257. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1258. null,
  1259. [],
  1260. 'Import Started'
  1261. )
  1262. ->addColumn(
  1263. 'import_finished',
  1264. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1265. null,
  1266. [],
  1267. 'Import Finished'
  1268. );
  1269. }
  1270. /**
  1271. * @param SchemaSetupInterface $installer
  1272. * @param Table $importerTable
  1273. * @return Table
  1274. */
  1275. private function addIndexesToImporterTable($installer, $importerTable)
  1276. {
  1277. return $importerTable->addIndex(
  1278. $installer->getIdxName(
  1279. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1280. ['import_type']
  1281. ),
  1282. ['import_type']
  1283. )
  1284. ->addIndex(
  1285. $installer->getIdxName(
  1286. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1287. ['website_id']
  1288. ),
  1289. ['website_id']
  1290. )
  1291. ->addIndex(
  1292. $installer->getIdxName(
  1293. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1294. ['import_status']
  1295. ),
  1296. ['import_status']
  1297. )
  1298. ->addIndex(
  1299. $installer->getIdxName(
  1300. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1301. ['import_mode']
  1302. ),
  1303. ['import_mode']
  1304. )
  1305. ->addIndex(
  1306. $installer->getIdxName(
  1307. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1308. ['created_at']
  1309. ),
  1310. ['created_at']
  1311. )
  1312. ->addIndex(
  1313. $installer->getIdxName(
  1314. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1315. ['updated_at']
  1316. ),
  1317. ['updated_at']
  1318. )
  1319. ->addIndex(
  1320. $installer->getIdxName(
  1321. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1322. ['import_id']
  1323. ),
  1324. ['import_id']
  1325. )
  1326. ->addIndex(
  1327. $installer->getIdxName(
  1328. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1329. ['import_started']
  1330. ),
  1331. ['import_started']
  1332. )
  1333. ->addIndex(
  1334. $installer->getIdxName(
  1335. $installer->getTable(Schema::EMAIL_IMPORTER_TABLE),
  1336. ['import_finished']
  1337. ),
  1338. ['import_finished']
  1339. );
  1340. }
  1341. /**
  1342. * @param SchemaSetupInterface $installer
  1343. *
  1344. * @return null
  1345. */
  1346. private function createAutomationTable($installer)
  1347. {
  1348. $tableName = $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE);
  1349. $this->dropTableIfExists($installer, $tableName);
  1350. $automationTable = $installer->getConnection()->newTable($tableName);
  1351. $automationTable = $this->addColumnsToAutomationTable($automationTable);
  1352. $automationTable = $this->addIndexesToAutomationTable($installer, $automationTable);
  1353. $automationTable->setComment('Automation Status');
  1354. $installer->getConnection()->createTable($automationTable);
  1355. }
  1356. /**
  1357. * @param Table $automationTable
  1358. * @return Table
  1359. */
  1360. private function addColumnsToAutomationTable($automationTable)
  1361. {
  1362. return $automationTable->addColumn(
  1363. 'id',
  1364. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  1365. null,
  1366. [
  1367. 'primary' => true,
  1368. 'identity' => true,
  1369. 'unsigned' => true,
  1370. 'nullable' => false
  1371. ],
  1372. 'Primary Key'
  1373. )
  1374. ->addColumn(
  1375. 'automation_type',
  1376. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1377. 255,
  1378. ['nullable' => true],
  1379. 'Automation Type'
  1380. )
  1381. ->addColumn(
  1382. 'store_name',
  1383. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1384. 255,
  1385. ['nullable' => true],
  1386. 'Automation Type'
  1387. )
  1388. ->addColumn(
  1389. 'enrolment_status',
  1390. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1391. 255,
  1392. ['nullable' => false],
  1393. 'Entrolment Status'
  1394. )
  1395. ->addColumn(
  1396. 'email',
  1397. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1398. 255,
  1399. ['nullable' => true],
  1400. 'Email'
  1401. )
  1402. ->addColumn(
  1403. 'type_id',
  1404. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1405. 255,
  1406. ['nullable' => true],
  1407. 'Type ID'
  1408. )
  1409. ->addColumn(
  1410. 'program_id',
  1411. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1412. 255,
  1413. ['nullable' => true],
  1414. 'Program ID'
  1415. )
  1416. ->addColumn(
  1417. 'website_id',
  1418. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  1419. 5,
  1420. ['unsigned' => true, 'nullable' => false],
  1421. 'Website Id'
  1422. )
  1423. ->addColumn(
  1424. 'message',
  1425. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1426. 255,
  1427. ['nullable' => false],
  1428. 'Message'
  1429. )
  1430. ->addColumn(
  1431. 'created_at',
  1432. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1433. null,
  1434. [],
  1435. 'Creation Time'
  1436. )
  1437. ->addColumn(
  1438. 'updated_at',
  1439. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  1440. null,
  1441. [],
  1442. 'Update Time'
  1443. );
  1444. }
  1445. /**
  1446. * @param SchemaSetupInterface $installer
  1447. * @param Table $automationTable
  1448. * @return Table
  1449. */
  1450. private function addIndexesToAutomationTable($installer, $automationTable)
  1451. {
  1452. return $automationTable->addIndex(
  1453. $installer->getIdxName(
  1454. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1455. ['automation_type']
  1456. ),
  1457. ['automation_type']
  1458. )
  1459. ->addIndex(
  1460. $installer->getIdxName(
  1461. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1462. ['enrolment_status']
  1463. ),
  1464. ['enrolment_status']
  1465. )
  1466. ->addIndex(
  1467. $installer->getIdxName(
  1468. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1469. ['type_id']
  1470. ),
  1471. ['type_id']
  1472. )
  1473. ->addIndex(
  1474. $installer->getIdxName(
  1475. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1476. ['email']
  1477. ),
  1478. ['email']
  1479. )
  1480. ->addIndex(
  1481. $installer->getIdxName(
  1482. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1483. ['program_id']
  1484. ),
  1485. ['program_id']
  1486. )
  1487. ->addIndex(
  1488. $installer->getIdxName(
  1489. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1490. ['created_at']
  1491. ),
  1492. ['created_at']
  1493. )
  1494. ->addIndex(
  1495. $installer->getIdxName(
  1496. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1497. ['updated_at']
  1498. ),
  1499. ['updated_at']
  1500. )
  1501. ->addIndex(
  1502. $installer->getIdxName(
  1503. $installer->getTable(Schema::EMAIL_AUTOMATION_TABLE),
  1504. ['website_id']
  1505. ),
  1506. ['website_id']
  1507. );
  1508. }
  1509. /**
  1510. * @param SchemaSetupInterface $installer
  1511. *
  1512. * @return null
  1513. */
  1514. private function addColumnToAdminUserTable($installer)
  1515. {
  1516. $installer->getConnection()->addColumn(
  1517. $installer->getTable('admin_user'),
  1518. 'refresh_token',
  1519. [
  1520. 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  1521. 'length' => 256,
  1522. 'nullable' => true,
  1523. 'default' => null,
  1524. 'comment' => 'Email connector refresh token',
  1525. ]
  1526. );
  1527. }
  1528. /**
  1529. * @param SchemaSetupInterface $installer
  1530. */
  1531. private function createAbandonedCartTable($installer)
  1532. {
  1533. $tableName = $installer->getTable(Schema::EMAIL_ABANDONED_CART_TABLE);
  1534. $this->dropTableIfExists($installer, $tableName);
  1535. $this->shared->createAbandonedCartTable($installer, $tableName);
  1536. }
  1537. /**
  1538. * @param SchemaSetupInterface $installer
  1539. * @param string $table
  1540. */
  1541. private function dropTableIfExists($installer, $table)
  1542. {
  1543. if ($installer->getConnection()->isTableExists($installer->getTable($table))) {
  1544. $installer->getConnection()->dropTable(
  1545. $installer->getTable($table)
  1546. );
  1547. }
  1548. }
  1549. /**
  1550. * @param SchemaSetupInterface $installer
  1551. */
  1552. private function createConsentTable($installer)
  1553. {
  1554. $tableName = $installer->getTable(Schema::EMAIL_CONTACT_CONSENT_TABLE);
  1555. $this->dropTableIfExists($installer, $tableName);
  1556. $this->shared->createConsentTable($installer, $tableName);
  1557. }
  1558. /**
  1559. * @param SchemaSetupInterface $installer
  1560. */
  1561. private function createFailedAuth($installer)
  1562. {
  1563. $tableName = $installer->getTable(Schema::EMAIL_FAILED_AUTH_TABLE);
  1564. $this->dropTableIfExists($installer, $tableName);
  1565. $this->shared->createFailedAuthTable($installer, $tableName);
  1566. }
  1567. }