PageRenderTime 24ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/magento/module-widget/Setup/InstallSchema.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 407 lines | 361 code | 17 blank | 29 comment | 2 complexity | 8c3c104f0dd619677e6a86378e87aff0 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Widget\Setup;
  7. use Magento\Framework\Setup\InstallSchemaInterface;
  8. use Magento\Framework\Setup\ModuleContextInterface;
  9. use Magento\Framework\Setup\SchemaSetupInterface;
  10. /**
  11. * @codeCoverageIgnore
  12. */
  13. class InstallSchema implements InstallSchemaInterface
  14. {
  15. /**
  16. * {@inheritdoc}
  17. * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  18. */
  19. public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
  20. {
  21. $installer = $setup;
  22. $installer->startSetup();
  23. /**
  24. * Create table 'widget'
  25. */
  26. if (!$installer->getConnection()->isTableExists($installer->getTable('widget'))) {
  27. $table = $installer->getConnection()->newTable(
  28. $installer->getTable('widget')
  29. )->addColumn(
  30. 'widget_id',
  31. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  32. null,
  33. ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
  34. 'Widget Id'
  35. )->addColumn(
  36. 'widget_code',
  37. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  38. 255,
  39. [],
  40. 'Widget code for template directive'
  41. )->addColumn(
  42. 'widget_type',
  43. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  44. 255,
  45. [],
  46. 'Widget Type'
  47. )->addColumn(
  48. 'parameters',
  49. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  50. '64k',
  51. ['nullable' => true],
  52. 'Parameters'
  53. )->addIndex(
  54. $installer->getIdxName('widget', 'widget_code'),
  55. 'widget_code'
  56. )->setComment(
  57. 'Preconfigured Widgets'
  58. );
  59. $installer->getConnection()->createTable($table);
  60. } else {
  61. $installer->getConnection()->dropIndex($installer->getTable('widget'), 'IDX_CODE');
  62. $tables = [
  63. $installer->getTable(
  64. 'widget'
  65. ) => [
  66. 'columns' => [
  67. 'widget_id' => [
  68. 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  69. 'identity' => true,
  70. 'unsigned' => true,
  71. 'nullable' => false,
  72. 'primary' => true,
  73. 'comment' => 'Widget Id',
  74. ],
  75. 'parameters' => [
  76. 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  77. 'length' => '64K',
  78. 'comment' => 'Parameters',
  79. ],
  80. ],
  81. 'comment' => 'Preconfigured Widgets',
  82. ],
  83. ];
  84. $installer->getConnection()->modifyTables($tables);
  85. $installer->getConnection()->changeColumn(
  86. $installer->getTable('widget'),
  87. 'code',
  88. 'widget_code',
  89. [
  90. 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  91. 'length' => 255,
  92. 'comment' => 'Widget code for template directive'
  93. ]
  94. );
  95. $installer->getConnection()->changeColumn(
  96. $installer->getTable('widget'),
  97. 'type',
  98. 'widget_type',
  99. ['type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 'length' => 255, 'comment' => 'Widget Type']
  100. );
  101. $installer->getConnection()->addIndex(
  102. $installer->getTable('widget'),
  103. $installer->getIdxName('widget', ['widget_code']),
  104. ['widget_code']
  105. );
  106. }
  107. /**
  108. * Create table 'widget_instance'
  109. */
  110. $table = $installer->getConnection()->newTable(
  111. $installer->getTable('widget_instance')
  112. )->addColumn(
  113. 'instance_id',
  114. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  115. null,
  116. ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
  117. 'Instance Id'
  118. )->addColumn(
  119. 'instance_type',
  120. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  121. 255,
  122. [],
  123. 'Instance Type'
  124. )->addColumn(
  125. 'theme_id',
  126. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  127. null,
  128. ['unsigned' => true, 'nullable' => false],
  129. 'Theme id'
  130. )->addColumn(
  131. 'title',
  132. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  133. 255,
  134. [],
  135. 'Widget Title'
  136. )->addColumn(
  137. 'store_ids',
  138. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  139. 255,
  140. ['nullable' => false, 'default' => '0'],
  141. 'Store ids'
  142. )->addColumn(
  143. 'widget_parameters',
  144. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  145. '64k',
  146. [],
  147. 'Widget parameters'
  148. )->addColumn(
  149. 'sort_order',
  150. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  151. null,
  152. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  153. 'Sort order'
  154. )->addForeignKey(
  155. $installer->getFkName('widget_instance', 'theme_id', 'theme', 'theme_id'),
  156. 'theme_id',
  157. $installer->getTable('theme'),
  158. 'theme_id',
  159. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  160. )->setComment(
  161. 'Instances of Widget for Package Theme'
  162. );
  163. $installer->getConnection()->createTable($table);
  164. /**
  165. * Create table 'widget_instance_page'
  166. */
  167. $table = $installer->getConnection()->newTable(
  168. $installer->getTable('widget_instance_page')
  169. )->addColumn(
  170. 'page_id',
  171. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  172. null,
  173. ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
  174. 'Page Id'
  175. )->addColumn(
  176. 'instance_id',
  177. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  178. null,
  179. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  180. 'Instance Id'
  181. )->addColumn(
  182. 'page_group',
  183. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  184. 25,
  185. [],
  186. 'Block Group Type'
  187. )->addColumn(
  188. 'layout_handle',
  189. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  190. 255,
  191. [],
  192. 'Layout Handle'
  193. )->addColumn(
  194. 'block_reference',
  195. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  196. 255,
  197. [],
  198. 'Container'
  199. )->addColumn(
  200. 'page_for',
  201. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  202. 25,
  203. [],
  204. 'For instance entities'
  205. )->addColumn(
  206. 'entities',
  207. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  208. '64k',
  209. [],
  210. 'Catalog entities (comma separated)'
  211. )->addColumn(
  212. 'page_template',
  213. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  214. 255,
  215. [],
  216. 'Path to widget template'
  217. )->addIndex(
  218. $installer->getIdxName('widget_instance_page', 'instance_id'),
  219. 'instance_id'
  220. )->addForeignKey(
  221. $installer->getFkName('widget_instance_page', 'instance_id', 'widget_instance', 'instance_id'),
  222. 'instance_id',
  223. $installer->getTable('widget_instance'),
  224. 'instance_id',
  225. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  226. )->setComment(
  227. 'Instance of Widget on Page'
  228. );
  229. $installer->getConnection()->createTable($table);
  230. /**
  231. * Create table 'widget_instance_page_layout'
  232. */
  233. $table = $installer->getConnection()->newTable(
  234. $installer->getTable('widget_instance_page_layout')
  235. )->addColumn(
  236. 'page_id',
  237. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  238. null,
  239. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  240. 'Page Id'
  241. )->addColumn(
  242. 'layout_update_id',
  243. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  244. null,
  245. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  246. 'Layout Update Id'
  247. )->addIndex(
  248. $installer->getIdxName('widget_instance_page_layout', 'page_id'),
  249. 'page_id'
  250. )->addIndex(
  251. $installer->getIdxName(
  252. 'widget_instance_page_layout',
  253. ['layout_update_id', 'page_id'],
  254. \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
  255. ),
  256. ['layout_update_id', 'page_id'],
  257. ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
  258. )->addForeignKey(
  259. $installer->getFkName('widget_instance_page_layout', 'page_id', 'widget_instance_page', 'page_id'),
  260. 'page_id',
  261. $installer->getTable('widget_instance_page'),
  262. 'page_id',
  263. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  264. )->addForeignKey(
  265. $installer->getFkName(
  266. 'widget_instance_page_layout',
  267. 'layout_update_id',
  268. 'layout_update',
  269. 'layout_update_id'
  270. ),
  271. 'layout_update_id',
  272. $installer->getTable('layout_update'),
  273. 'layout_update_id',
  274. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  275. )->setComment(
  276. 'Layout updates'
  277. );
  278. $installer->getConnection()->createTable($table);
  279. /**
  280. * Create table 'layout_update'
  281. */
  282. $table = $installer->getConnection()->newTable(
  283. $installer->getTable('layout_update')
  284. )->addColumn(
  285. 'layout_update_id',
  286. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  287. null,
  288. ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
  289. 'Layout Update Id'
  290. )->addColumn(
  291. 'handle',
  292. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  293. 255,
  294. [],
  295. 'Handle'
  296. )->addColumn(
  297. 'xml',
  298. \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
  299. '64k',
  300. [],
  301. 'Xml'
  302. )->addColumn(
  303. 'sort_order',
  304. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  305. null,
  306. ['nullable' => false, 'default' => '0'],
  307. 'Sort Order'
  308. )->addColumn(
  309. 'updated_at',
  310. \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
  311. null,
  312. ['nullable' => true, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_UPDATE],
  313. 'Last Update Timestamp'
  314. )->addIndex(
  315. $installer->getIdxName('layout_update', ['handle']),
  316. ['handle']
  317. )->setComment(
  318. 'Layout Updates'
  319. );
  320. $installer->getConnection()->createTable($table);
  321. /**
  322. * Create table 'layout_link'
  323. */
  324. $table = $installer->getConnection()->newTable(
  325. $installer->getTable('layout_link')
  326. )->addColumn(
  327. 'layout_link_id',
  328. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  329. null,
  330. ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
  331. 'Link Id'
  332. )->addColumn(
  333. 'store_id',
  334. \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
  335. null,
  336. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  337. 'Store Id'
  338. )->addColumn(
  339. 'theme_id',
  340. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  341. null,
  342. ['unsigned' => true, 'nullable' => false],
  343. 'Theme id'
  344. )->addColumn(
  345. 'layout_update_id',
  346. \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
  347. null,
  348. ['unsigned' => true, 'nullable' => false, 'default' => '0'],
  349. 'Layout Update Id'
  350. )->addColumn(
  351. 'is_temporary',
  352. \Magento\Framework\DB\Ddl\Table::TYPE_BOOLEAN,
  353. null,
  354. ['nullable' => false, 'default' => '0'],
  355. 'Defines whether Layout Update is Temporary'
  356. )->addIndex(
  357. $installer->getIdxName('layout_link', ['layout_update_id']),
  358. ['layout_update_id']
  359. )->addForeignKey(
  360. $installer->getFkName('layout_link', 'layout_update_id', 'layout_update', 'layout_update_id'),
  361. 'layout_update_id',
  362. $installer->getTable('layout_update'),
  363. 'layout_update_id',
  364. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  365. )->addIndex(
  366. $installer->getIdxName(
  367. 'layout_link',
  368. ['store_id', 'theme_id', 'layout_update_id', 'is_temporary'],
  369. \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
  370. ),
  371. ['store_id', 'theme_id', 'layout_update_id', 'is_temporary']
  372. )->addForeignKey(
  373. $installer->getFkName('layout_link', 'store_id', 'store', 'store_id'),
  374. 'store_id',
  375. $installer->getTable('store'),
  376. 'store_id',
  377. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  378. )->addForeignKey(
  379. $installer->getFkName('layout_link', 'theme_id', 'theme', 'theme_id'),
  380. 'theme_id',
  381. $installer->getTable('theme'),
  382. 'theme_id',
  383. \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
  384. )->setComment(
  385. 'Layout Link'
  386. );
  387. $installer->getConnection()->createTable($table);
  388. $installer->endSetup();
  389. }
  390. }