InstallSchema.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. <?php
  2. /**
  3. * Copyright © 2015 Ihor Vansach (ihor@magefan.com). All rights reserved.
  4. * See LICENSE.txt for license details (http://opensource.org/licenses/osl-3.0.php).
  5. *
  6. * Glory to Ukraine! Glory to the heroes!
  7. */
  8. namespace Magefan\Blog\Setup;
  9. use Magento\Framework\Setup\InstallSchemaInterface;
  10. use Magento\Framework\Setup\ModuleContextInterface;
  11. use Magento\Framework\Setup\SchemaSetupInterface;
  12. use Magento\Framework\DB\Adapter\AdapterInterface;
  13. /**
  14. * Blog setup
  15. */
  16. class InstallSchema implements InstallSchemaInterface
  17. {
  18. /**
  19. * {@inheritdoc}
  20. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  21. */
  22. public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
  23. {
  24. $installer = $setup;
  25. $installer->startSetup();
  26. /**
  27. * Create table 'magefan_blog_post'
  28. */
  29. $table = $installer->getConnection()->newTable(
  30. $installer->getTable('magefan_blog_post')
  31. )->addColumn(
  32. 'post_id',
  33. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  34. null,
  35. ['identity' => true, 'nullable' => false, 'primary' => true],
  36. 'Post ID'
  37. )->addColumn(
  38. 'title',
  39. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  40. 255,
  41. ['nullable' => true],
  42. 'Post Title'
  43. )->addColumn(
  44. 'meta_keywords',
  45. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  46. '64k',
  47. ['nullable' => true],
  48. 'Post Meta Keywords'
  49. )->addColumn(
  50. 'meta_description',
  51. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  52. '64k',
  53. ['nullable' => true],
  54. 'Post Meta Description'
  55. )->addColumn(
  56. 'identifier',
  57. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  58. 100,
  59. ['nullable' => true, 'default' => null],
  60. 'Post String Identifier'
  61. )->addColumn(
  62. 'content_heading',
  63. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  64. 255,
  65. ['nullable' => true],
  66. 'Post Content Heading'
  67. )->addColumn(
  68. 'content',
  69. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  70. '2M',
  71. [],
  72. 'Post Content'
  73. )->addColumn(
  74. 'creation_time',
  75. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  76. null,
  77. [],
  78. 'Post Creation Time'
  79. )->addColumn(
  80. 'update_time',
  81. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  82. null,
  83. [],
  84. 'Post Modification Time'
  85. )->addColumn(
  86. 'publish_time',
  87. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  88. null,
  89. [],
  90. 'Post Publish Time'
  91. )->addColumn(
  92. 'is_active',
  93. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  94. null,
  95. ['nullable' => false, 'default' => '1'],
  96. 'Is Post Active'
  97. )->addIndex(
  98. $installer->getIdxName('magefan_blog_post', ['identifier']),
  99. ['identifier']
  100. )->addIndex(
  101. $setup->getIdxName(
  102. $installer->getTable('magefan_blog_post'),
  103. ['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
  104. AdapterInterface::INDEX_TYPE_FULLTEXT
  105. ),
  106. ['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
  107. ['type' => AdapterInterface::INDEX_TYPE_FULLTEXT]
  108. )->setComment(
  109. 'Magefan Blog Post Table'
  110. );
  111. $installer->getConnection()->createTable($table);
  112. /**
  113. * Create table 'magefan_blog_post_store'
  114. */
  115. $table = $installer->getConnection()->newTable(
  116. $installer->getTable('magefan_blog_post_store')
  117. )->addColumn(
  118. 'post_id',
  119. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  120. null,
  121. ['nullable' => false, 'primary' => true],
  122. 'Post ID'
  123. )->addColumn(
  124. 'store_id',
  125. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  126. null,
  127. ['unsigned' => true, 'nullable' => false, 'primary' => true],
  128. 'Store ID'
  129. )->addIndex(
  130. $installer->getIdxName('magefan_blog_post_store', ['store_id']),
  131. ['store_id']
  132. )->addForeignKey(
  133. $installer->getFkName('magefan_blog_post_store', 'post_id', 'magefan_blog_post', 'post_id'),
  134. 'post_id',
  135. $installer->getTable('magefan_blog_post'),
  136. 'post_id',
  137. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  138. )->addForeignKey(
  139. $installer->getFkName('magefan_blog_post_store', 'store_id', 'store', 'store_id'),
  140. 'store_id',
  141. $installer->getTable('store'),
  142. 'store_id',
  143. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  144. )->setComment(
  145. 'Magefan Blog Post To Store Linkage Table'
  146. );
  147. $installer->getConnection()->createTable($table);
  148. $table = $installer->getConnection()->newTable(
  149. $installer->getTable('magefan_blog_category')
  150. )->addColumn(
  151. 'category_id',
  152. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  153. null,
  154. ['identity' => true, 'nullable' => false, 'primary' => true],
  155. 'Category ID'
  156. )->addColumn(
  157. 'title',
  158. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  159. 255,
  160. ['nullable' => true],
  161. 'Category Title'
  162. )->addColumn(
  163. 'meta_keywords',
  164. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  165. '64k',
  166. ['nullable' => true],
  167. 'Category Meta Keywords'
  168. )->addColumn(
  169. 'meta_description',
  170. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  171. '64k',
  172. ['nullable' => true],
  173. 'Category Meta Description'
  174. )->addColumn(
  175. 'identifier',
  176. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  177. 100,
  178. ['nullable' => true, 'default' => null],
  179. 'Category String Identifier'
  180. )->addColumn(
  181. 'content_heading',
  182. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  183. 255,
  184. ['nullable' => true],
  185. 'Category Content Heading'
  186. )->addColumn(
  187. 'content',
  188. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  189. '2M',
  190. [],
  191. 'Category Content'
  192. )->addColumn(
  193. 'path',
  194. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  195. 255,
  196. ['nullable' => true],
  197. 'Category Path'
  198. )->addColumn(
  199. 'position',
  200. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  201. null,
  202. ['nullable' => false],
  203. 'Category Position'
  204. )->addColumn(
  205. 'is_active',
  206. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  207. null,
  208. ['nullable' => false, 'default' => '1'],
  209. 'Is Category Active'
  210. )->addIndex(
  211. $installer->getIdxName('magefan_blog_category', ['identifier']),
  212. ['identifier']
  213. )->addIndex(
  214. $setup->getIdxName(
  215. $installer->getTable('magefan_blog_category'),
  216. ['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
  217. AdapterInterface::INDEX_TYPE_FULLTEXT
  218. ),
  219. ['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
  220. ['type' => AdapterInterface::INDEX_TYPE_FULLTEXT]
  221. )->setComment(
  222. 'Magefan Blog Category Table'
  223. );
  224. $installer->getConnection()->createTable($table);
  225. /**
  226. * Create table 'magefan_blog_category_store'
  227. */
  228. $table = $installer->getConnection()->newTable(
  229. $installer->getTable('magefan_blog_category_store')
  230. )->addColumn(
  231. 'category_id',
  232. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  233. null,
  234. ['nullable' => false, 'primary' => true],
  235. 'Category ID'
  236. )->addColumn(
  237. 'store_id',
  238. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  239. null,
  240. ['unsigned' => true, 'nullable' => false, 'primary' => true],
  241. 'Store ID'
  242. )->addIndex(
  243. $installer->getIdxName('magefan_blog_category_store', ['store_id']),
  244. ['store_id']
  245. )->addForeignKey(
  246. $installer->getFkName('magefan_blog_category_store', 'category_id', 'magefan_blog_category', 'category_id'),
  247. 'category_id',
  248. $installer->getTable('magefan_blog_category'),
  249. 'category_id',
  250. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  251. )->addForeignKey(
  252. $installer->getFkName('magefan_blog_category_store', 'store_id', 'store', 'store_id'),
  253. 'store_id',
  254. $installer->getTable('store'),
  255. 'store_id',
  256. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  257. )->setComment(
  258. 'Magefan Blog Category To Store Linkage Table'
  259. );
  260. $installer->getConnection()->createTable($table);
  261. /**
  262. * Create table 'magefan_blog_post_category'
  263. */
  264. $table = $installer->getConnection()->newTable(
  265. $installer->getTable('magefan_blog_post_category')
  266. )->addColumn(
  267. 'post_id',
  268. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  269. null,
  270. ['nullable' => false, 'primary' => true],
  271. 'Post ID'
  272. )->addColumn(
  273. 'category_id',
  274. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  275. null,
  276. ['nullable' => false, 'primary' => true],
  277. 'Category ID'
  278. )->addIndex(
  279. $installer->getIdxName('magefan_blog_post_category', ['category_id']),
  280. ['category_id']
  281. )->addForeignKey(
  282. $installer->getFkName('magefan_blog_post_category', 'post_id', 'magefan_blog_post', 'post_id'),
  283. 'post_id',
  284. $installer->getTable('magefan_blog_post'),
  285. 'post_id',
  286. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  287. )->addForeignKey(
  288. $installer->getFkName('magefan_blog_post_category', 'category_id', 'magefan_blog_category', 'category_id'),
  289. 'category_id',
  290. $installer->getTable('magefan_blog_category'),
  291. 'category_id',
  292. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  293. )->setComment(
  294. 'Magefan Blog Post To Category Linkage Table'
  295. );
  296. $installer->getConnection()->createTable($table);
  297. /**
  298. * Create table 'magefan_blog_post_relatedproduct'
  299. */
  300. $table = $installer->getConnection()->newTable(
  301. $installer->getTable('magefan_blog_post_relatedproduct')
  302. )->addColumn(
  303. 'post_id',
  304. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  305. null,
  306. ['nullable' => false, 'primary' => true],
  307. 'Post ID'
  308. )->addColumn(
  309. 'related_id',
  310. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  311. null,
  312. ['unsigned' => true, 'nullable' => false, 'primary' => true],
  313. 'Related Product ID'
  314. )->addIndex(
  315. $installer->getIdxName('magefan_blog_post_relatedproduct', ['related_id']),
  316. ['related_id']
  317. )->addForeignKey(
  318. $installer->getFkName('magefan_blog_post_relatedproduct', 'post_id', 'magefan_blog_post', 'post_id'),
  319. 'post_id',
  320. $installer->getTable('magefan_blog_post'),
  321. 'post_id',
  322. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  323. )->addForeignKey(
  324. $installer->getFkName('magefan_blog_post_relatedproduct', 'related_id', 'catalog_product_entity', 'entity_id'),
  325. 'related_id',
  326. $installer->getTable('catalog_product_entity'),
  327. 'entity_id',
  328. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  329. )->setComment(
  330. 'Magefan Blog Post To Product Linkage Table'
  331. );
  332. $installer->getConnection()->createTable($table);
  333. /**
  334. * Create table 'magefan_blog_post_relatedproduct'
  335. */
  336. $table = $installer->getConnection()->newTable(
  337. $installer->getTable('magefan_blog_post_relatedpost')
  338. )->addColumn(
  339. 'post_id',
  340. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  341. null,
  342. ['nullable' => false, 'primary' => true],
  343. 'Post ID'
  344. )->addColumn(
  345. 'related_id',
  346. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  347. null,
  348. ['nullable' => false, 'primary' => true],
  349. 'Related Post ID'
  350. )->addIndex(
  351. $installer->getIdxName('magefan_blog_post_relatedproduct', ['related_id']),
  352. ['related_id']
  353. )->addForeignKey(
  354. $installer->getFkName('magefan_blog_post_relatedproduct1', 'post_id', 'magefan_blog_post', 'post_id'),
  355. 'post_id',
  356. $installer->getTable('magefan_blog_post'),
  357. 'post_id',
  358. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  359. )->addForeignKey(
  360. $installer->getFkName('magefan_blog_post_relatedproduct2', 'related_id', 'magefan_blog_post', 'post_id'),
  361. 'post_id',
  362. $installer->getTable('magefan_blog_post'),
  363. 'post_id',
  364. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  365. )->setComment(
  366. 'Magefan Blog Post To Post Linkage Table'
  367. );
  368. $installer->getConnection()->createTable($table);
  369. $installer->endSetup();
  370. }
  371. }