<?php
namespace BS\Contests;
use XF\AddOn\AbstractSetup;
use XF\AddOn\StepRunnerInstallTrait;
use XF\AddOn\StepRunnerUninstallTrait;
use XF\AddOn\StepRunnerUpgradeTrait;
use BS\Contests\Install\ContestInstallHelperTrait;
use XF\Db\Schema\Alter;
use XF\Db\Schema\Create;
class Setup extends AbstractSetup
{
use StepRunnerInstallTrait;
use StepRunnerUpgradeTrait;
use StepRunnerUninstallTrait;
use ContestInstallHelperTrait;
// ################################ INSTALLATION ####################
public function installStep1()
{
$sm = $this->schemaManager();
foreach ($this->getTables() AS $tableName => $closure)
{
$sm->createTable($tableName, $closure);
}
}
public function installStep2()
{
$this->schemaManager()->alterTable('xf_user', function(Alter $table)
{
$table->addColumn('bs_contest_count', 'int')->setDefault(0);
$table->addKey('bs_contest_count');
});
}
// ################################ UPGRADE 2.1.1 ####################
public function upgrade2010170Step1()
{
$this->schemaManager()->alterTable('xf_user', function(Alter $table)
{
$table->renameColumn('contest_count', 'bs_contest_count');
});
}
public function upgrade2010170Step2()
{
$this->schemaManager()->alterTable('xf_contest', function(Alter $table)
{
$table->renameTo('xf_bs_contest');
$table->addColumn('criteria', 'blob')->nullable();
$table->addColumn('prizes', 'mediumblob')->nullable();
$table->addColumn('count_members', 'int')->setDefault(0);
$table->addColumn('end_date', 'int')->setDefault(0);
$table->addColumn('count_winners', 'int')->setDefault(0);
$table->addColumn('auto_give_prize', 'tinyint', 3)->setDefault(0);
$table->addColumn('recipient_count', 'int')->setDefault(0);
$table->addKey('count_members');
$table->addKey('end_date');
$table->addKey('recipient_count');
});
$this->schemaManager()->alterTable('xf_contest_participant', function(Alter $table)
{
$table->renameTo('xf_bs_contest_participant');
$table->addColumn('win_date', 'int')->setDefault(0);
$table->addKey('win_date');
});
}
public function upgrade2010170Step3(array $stepParams)
{
$position = empty($stepParams[0]) ? 0 : $stepParams[0];
return $this->convertOldContests($position, $stepParams);
}
public function upgrade2010170Step4(array $stepParams)
{
$this->query("
UPDATE `xf_bs_contest` SET `recipient_count`=(
SELECT COUNT(*)
FROM `xf_bs_contest_participant`
WHERE `xf_bs_contest_participant`.`contest_id` = `xf_bs_contest`.`contest_id`
)
");
}
public function upgrade2010170Step5(array $stepParams)
{
$this->schemaManager()->alterTable('xf_bs_contest', function(Alter $table)
{
$table->dropColumns('data');
});
}
// ############################### UNINSTALL #########################
public function uninstallStep1()
{
$sm = $this->schemaManager();
foreach (array_keys($this->getTables()) AS $tableName)
{
$sm->dropTable($tableName);
}
}
public function uninstallStep2()
{
$this->schemaManager()->alterTable('xf_user', function(Alter $table)
{
$table->dropColumns('bs_contest_count');
});
}
// ############################# TABLE / DATA DEFINITIONS ##############################
protected function getTables()
{
$tables = [];
$tables['xf_bs_contest'] = function(Create $table)
{
$table->addColumn('contest_id', 'int')->autoIncrement();
$table->addColumn('thread_id', 'int');
$table->addColumn('user_id', 'int');
$table->addColumn('type', 'enum', ['time', 'members']);
$table->addColumn('criteria', 'blob')->nullable();
$table->addColumn('prizes', 'mediumblob')->nullable();
$table->addColumn('count_members', 'int')->setDefault(0);
$table->addColumn('end_date', 'int')->setDefault(0);
$table->addColumn('count_winners', 'int')->setDefault(0);
$table->addColumn('recipient_count', 'int')->setDefault(0);
$table->addColumn('is_finished', 'tinyint', 3)->setDefault(0);
$table->addColumn('is_checked', 'tinyint', 3)->setDefault(0);
$table->addColumn('auto_give_prize', 'tinyint', 3)->setDefault(0);
$table->addKey('thread_id');
$table->addKey('user_id');
$table->addKey('type');
$table->addKey('end_date');
$table->addKey('is_finished');
$table->addKey('is_checked');
$table->addKey('recipient_count');
$table->addKey('count_members');
};
$tables['xf_bs_contest_participant'] = function(Create $table)
{
$table->addColumn('participant_id', 'int')->autoIncrement();
$table->addColumn('contest_id', 'int');
$table->addColumn('user_id', 'int');
$table->addColumn('username', 'varchar', 50);
$table->addColumn('is_winner', 'tinyint', 3)->setDefault(0);
$table->addColumn('place', 'int')->setDefault(0);
$table->addColumn('win_date', 'int')->setDefault(0);
$table->addUniqueKey(['contest_id', 'user_id']);
$table->addKey('win_date');
$table->addKey('place');
$table->addKey('is_winner');
$table->addKey('contest_id');
$table->addKey('user_id');
$table->addKey('username');
};
return $tables;
}
}