Shared.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. <?php
  2. namespace Dotdigitalgroup\Email\Setup\Schema;
  3. use \Magento\Framework\Setup\SchemaSetupInterface;
  4. use Dotdigitalgroup\Email\Setup\Schema;
  5. class Shared
  6. {
  7. /**
  8. * Create abandoned cart table
  9. *
  10. * @param SchemaSetupInterface $installer
  11. * @param string $tableName
  12. */
  13. public function createAbandonedCartTable($installer, $tableName)
  14. {
  15. $abandonedCartTable = $installer->getConnection()->newTable($installer->getTable($tableName));
  16. $abandonedCartTable = $this->addColumnForAbandonedCartTable($abandonedCartTable);
  17. $abandonedCartTable = $this->addIndexKeyForAbandonedCarts($installer, $abandonedCartTable);
  18. $abandonedCartTable->setComment('Abandoned Carts Table');
  19. $installer->getConnection()->createTable($abandonedCartTable);
  20. }
  21. /**
  22. * @param \Magento\Framework\DB\Ddl\Table $table
  23. * @return mixed
  24. */
  25. private function addColumnForAbandonedCartTable($table)
  26. {
  27. return $table->addColumn(
  28. 'id',
  29. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  30. null,
  31. [
  32. 'primary' => true,
  33. 'identity' => true,
  34. 'unsigned' => true,
  35. 'nullable' => false
  36. ],
  37. 'Primary Key'
  38. )
  39. ->addColumn(
  40. 'quote_id',
  41. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  42. null,
  43. ['unsigned' => true, 'nullable' => true],
  44. 'Quote Id'
  45. )
  46. ->addColumn(
  47. 'store_id',
  48. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  49. 10,
  50. ['unsigned' => true, 'nullable' => true],
  51. 'Store Id'
  52. )
  53. ->addColumn(
  54. 'customer_id',
  55. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  56. 10,
  57. ['unsigned' => true, 'nullable' => true, 'default' => null],
  58. 'Customer ID'
  59. )
  60. ->addColumn(
  61. 'email',
  62. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  63. 255,
  64. ['nullable' => false, 'default' => ''],
  65. 'Email'
  66. )
  67. ->addColumn(
  68. 'status',
  69. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  70. 255,
  71. ['nullable' => false, 'default' => ''],
  72. 'Contact Status'
  73. )
  74. ->addColumn(
  75. 'is_active',
  76. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  77. 5,
  78. ['unsigned' => true, 'nullable' => false, 'default' => '1'],
  79. 'Quote Active'
  80. )
  81. ->addColumn(
  82. 'quote_updated_at',
  83. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  84. null,
  85. [],
  86. 'Quote updated at'
  87. )
  88. ->addColumn(
  89. 'abandoned_cart_number',
  90. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  91. null,
  92. ['unsigned' => true, 'nullable' => false, 'default' => 0],
  93. 'Abandoned Cart number'
  94. )
  95. ->addColumn(
  96. 'items_count',
  97. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  98. null,
  99. ['unsigned' => true, 'nullable' => true, 'default' => 0],
  100. 'Quote items count'
  101. )
  102. ->addColumn(
  103. 'items_ids',
  104. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  105. 255,
  106. ['unsigned' => true, 'nullable' => true],
  107. 'Quote item ids'
  108. )
  109. ->addColumn(
  110. 'created_at',
  111. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  112. null,
  113. [],
  114. 'Created At'
  115. )
  116. ->addColumn(
  117. 'updated_at',
  118. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  119. null,
  120. [],
  121. 'Updated at'
  122. );
  123. }
  124. /**
  125. * @param SchemaSetupInterface $installer
  126. * @param \Magento\Framework\DB\Ddl\Table $abandonedCartTable
  127. * @return mixed
  128. */
  129. private function addIndexKeyForAbandonedCarts($installer, $abandonedCartTable)
  130. {
  131. return $abandonedCartTable->addIndex(
  132. $installer->getIdxName(Schema::EMAIL_ABANDONED_CART_TABLE, ['quote_id']),
  133. ['quote_id']
  134. )
  135. ->addIndex(
  136. $installer->getIdxName(Schema::EMAIL_ABANDONED_CART_TABLE, ['store_id']),
  137. ['store_id']
  138. )
  139. ->addIndex(
  140. $installer->getIdxName(Schema::EMAIL_ABANDONED_CART_TABLE, ['customer_id']),
  141. ['customer_id']
  142. )
  143. ->addIndex(
  144. $installer->getIdxName(Schema::EMAIL_ABANDONED_CART_TABLE, ['email']),
  145. ['email']
  146. );
  147. }
  148. /**
  149. * Create consent table
  150. *
  151. * @param SchemaSetupInterface $installer
  152. * @param string $tableName
  153. */
  154. public function createConsentTable($installer, $tableName)
  155. {
  156. $emailContactConsentTable = $installer->getConnection()->newTable($installer->getTable($tableName));
  157. $emailContactConsentTable = $this->addColumnForConsentTable($emailContactConsentTable);
  158. $emailContactConsentTable = $this->addIndexToConsentTable($installer, $emailContactConsentTable);
  159. $emailContactConsentTable = $this->addKeyForConsentTable($installer, $emailContactConsentTable);
  160. $emailContactConsentTable->setComment('Email contact consent table.');
  161. $installer->getConnection()->createTable($emailContactConsentTable);
  162. }
  163. /**
  164. * @param \Magento\Framework\DB\Ddl\Table $emailContactConsentTable
  165. * @return mixed
  166. */
  167. private function addColumnForConsentTable($emailContactConsentTable)
  168. {
  169. $emailContactConsentTable
  170. ->addColumn(
  171. 'id',
  172. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  173. 10,
  174. [
  175. 'primary' => true,
  176. 'identity' => true,
  177. 'unsigned' => true,
  178. 'nullable' => false
  179. ],
  180. 'Primary Key'
  181. )
  182. ->addColumn(
  183. 'email_contact_id',
  184. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  185. null,
  186. ['unsigned' => true, 'nullable' => true],
  187. 'Email Contact Id'
  188. )
  189. ->addColumn(
  190. 'consent_url',
  191. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  192. 255,
  193. ['unsigned' => true, 'nullable' => true],
  194. 'Contact consent url'
  195. )
  196. ->addColumn(
  197. 'consent_datetime',
  198. \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME,
  199. null,
  200. [],
  201. 'Contact consent datetime'
  202. )
  203. ->addColumn(
  204. 'consent_ip',
  205. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  206. 255,
  207. ['unsigned' => true, 'nullable' => true],
  208. 'Contact consent ip'
  209. )
  210. ->addColumn(
  211. 'consent_user_agent',
  212. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  213. 255,
  214. ['unsigned' => true, 'nullable' => true],
  215. 'Contact consent user agent'
  216. );
  217. return $emailContactConsentTable;
  218. }
  219. /**
  220. * @param SchemaSetupInterface $installer
  221. * @param \Magento\Framework\DB\Ddl\Table $emailContactConsentTable
  222. * @return mixed
  223. */
  224. private function addKeyForConsentTable($installer, $emailContactConsentTable)
  225. {
  226. return $emailContactConsentTable->addForeignKey(
  227. $installer->getFkName(Schema::EMAIL_CONTACT_CONSENT_TABLE, 'email_contact_id', Schema::EMAIL_CONTACT_TABLE, 'email_contact_id'),
  228. 'email_contact_id',
  229. $installer->getTable(Schema::EMAIL_CONTACT_TABLE),
  230. 'email_contact_id',
  231. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  232. );
  233. }
  234. /**
  235. * @param SchemaSetupInterface $installer
  236. * @param \Magento\Framework\DB\Ddl\Table $table
  237. * @return mixed]
  238. */
  239. private function addIndexToConsentTable($installer, $table)
  240. {
  241. return $table->addIndex(
  242. $installer->getIdxName($installer->getTable(Schema::EMAIL_CONTACT_CONSENT_TABLE), ['email_contact_id']),
  243. ['email_contact_id']
  244. );
  245. }
  246. /**
  247. * Create failed auth table
  248. *
  249. * @param SchemaSetupInterface $installer
  250. * @param string $tableName
  251. */
  252. public function createFailedAuthTable($installer, $tableName)
  253. {
  254. $emailAuthEdc = $installer->getConnection()->newTable($installer->getTable($tableName));
  255. $emailAuthEdc = $this->addColumnForFailedAuthTable($emailAuthEdc);
  256. $emailAuthEdc = $this->addIndexToFailedAuthTable($installer, $emailAuthEdc);
  257. $emailAuthEdc->setComment('Email Failed Auth Table.');
  258. $installer->getConnection()->createTable($emailAuthEdc);
  259. }
  260. /**
  261. * @param \Magento\Framework\DB\Ddl\Table $table
  262. * @return mixed
  263. */
  264. private function addColumnForFailedAuthTable($table)
  265. {
  266. $table
  267. ->addColumn(
  268. 'id',
  269. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  270. 10,
  271. [
  272. 'primary' => true,
  273. 'identity' => true,
  274. 'unsigned' => true,
  275. 'nullable' => false
  276. ],
  277. 'Primary Key'
  278. )
  279. ->addColumn(
  280. 'failures_num',
  281. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  282. null,
  283. ['unsigned' => true, 'nullable' => true],
  284. 'Number of fails'
  285. )
  286. ->addColumn(
  287. 'first_attempt_date',
  288. \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME,
  289. null,
  290. [],
  291. 'First attempt date'
  292. )
  293. ->addColumn(
  294. 'last_attempt_date',
  295. \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME,
  296. null,
  297. [],
  298. 'Last attempt date'
  299. )
  300. ->addColumn(
  301. 'url',
  302. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  303. 255,
  304. ['unsigned' => true, 'nullable' => true],
  305. 'URL'
  306. )
  307. ->addColumn(
  308. 'store_id',
  309. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  310. null,
  311. ['unsigned' => true, 'nullable' => true],
  312. 'Store Id'
  313. );
  314. return $table;
  315. }
  316. /**
  317. * @param SchemaSetupInterface $installer
  318. * @param \Magento\Framework\DB\Ddl\Table $emailAuthEdc
  319. * @return mixed
  320. */
  321. private function addIndexToFailedAuthTable($installer, $emailAuthEdc)
  322. {
  323. return $emailAuthEdc
  324. ->addIndex(
  325. $installer->getIdxName('email_auth_edc', ['store_id']),
  326. ['store_id']
  327. );
  328. }
  329. }