Files

208 lines
6.1 KiB
PHP
Executable File

<?php
/**
* @author Olegnax
* @package Olegnax_Athlete2
* @copyright Copyright (c) 2023 Olegnax (http://olegnax.com/). All rights reserved.
* See COPYING.txt for license details.
*/
namespace Olegnax\Athlete2\Setup;
use Magento\Framework\DB\Adapter\AdapterInterface;
use Magento\Framework\DB\Ddl\Table;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Zend_Db_Exception;
class UpgradeSchema implements UpgradeSchemaInterface
{
/**
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
*/
public function upgrade(
SchemaSetupInterface $setup,
ModuleContextInterface $context
) {
$setup->startSetup();
$this->applyUpgradeFunctions($setup, $context);
$setup->endSetup();
}
/**
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
*/
private function applyUpgradeFunctions(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$methods = $this->getUpgradeFunctions($context->getVersion());
foreach ($methods as $method) {
call_user_func_array([$this, $method], [$setup, $context]);
}
}
/**
* @param string $low_version
* @return array
*/
private function getUpgradeFunctions($low_version = '1.0.0')
{
$methods = get_class_methods($this);
foreach ($methods as $key => $method) {
if (preg_match('/^upgrade_(.+)$/i', $method, $matches)) {
if (version_compare($low_version, $matches[1], '<')) {
continue;
}
}
unset($methods[$key]);
}
$methods = array_filter($methods);
$methods = array_unique($methods);
sort($methods);
return $methods;
}
/**
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
* @throws Zend_Db_Exception
*/
public function upgrade_99_0_1(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$tables = [
'magefan_blog_post' => [
'ox_post_list_style' => [
'type' => Table::TYPE_TEXT,
'size' => 255,
'nullable' => true,
],
],
];
$connection = $setup->getConnection();
if (!$setup->tableExists('magefan_blog_post')) {
$this->installMagefanBlog($setup);
}
foreach ($tables as $table_name => $table) {
if (!$setup->tableExists($table_name)) {
continue;
}
$_table = $setup->getTable($table_name);
foreach ($table as $field_name => $field) {
foreach ([
'type' => Table::TYPE_INTEGER,
'size' => null,
'comment' => 'Added by plugin',
] as $attr_name => $attr) {
if (!array_key_exists($attr_name, $field)) {
$field[$attr_name] = $attr;
}
}
$connection->addColumn($_table, $field_name, $field);
}
}
}
/**
* @param SchemaSetupInterface $setup
* @throws Zend_Db_Exception
*/
public function installMagefanBlog(SchemaSetupInterface $setup)
{
$installer = $setup;
/**
* Create table 'magefan_blog_post'
*/
$table = $installer->getConnection()->newTable(
$installer->getTable('magefan_blog_post')
)->addColumn(
'post_id',
Table::TYPE_INTEGER,
null,
['identity' => true, 'nullable' => false, 'primary' => true],
'Post ID'
)->addColumn(
'title',
Table::TYPE_TEXT,
255,
['nullable' => true],
'Post Title'
)->addColumn(
'meta_keywords',
Table::TYPE_TEXT,
'64k',
['nullable' => true],
'Post Meta Keywords'
)->addColumn(
'meta_description',
Table::TYPE_TEXT,
'64k',
['nullable' => true],
'Post Meta Description'
)->addColumn(
'identifier',
Table::TYPE_TEXT,
100,
['nullable' => true, 'default' => null],
'Post String Identifier'
)->addColumn(
'content_heading',
Table::TYPE_TEXT,
255,
['nullable' => true],
'Post Content Heading'
)->addColumn(
'content',
Table::TYPE_TEXT,
'2M',
[],
'Post Content'
)->addColumn(
'creation_time',
Table::TYPE_TIMESTAMP,
null,
[],
'Post Creation Time'
)->addColumn(
'update_time',
Table::TYPE_TIMESTAMP,
null,
[],
'Post Modification Time'
)->addColumn(
'publish_time',
Table::TYPE_TIMESTAMP,
null,
[],
'Post Publish Time'
)->addColumn(
'is_active',
Table::TYPE_SMALLINT,
null,
['nullable' => false, 'default' => '1'],
'Is Post Active'
)->addIndex(
$installer->getIdxName('magefan_blog_post', ['identifier']),
['identifier']
)->addIndex(
$setup->getIdxName(
$installer->getTable('magefan_blog_post'),
['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
AdapterInterface::INDEX_TYPE_FULLTEXT
),
['title', 'meta_keywords', 'meta_description', 'identifier', 'content'],
['type' => AdapterInterface::INDEX_TYPE_FULLTEXT]
)->setComment(
'Magefan Blog Post Table'
);
$installer->getConnection()->createTable($table);
}
}