Initial Upload
This commit is contained in:
199
db/migrations/20221024082400_ad_campaign_migration.php
Executable file
199
db/migrations/20221024082400_ad_campaign_migration.php
Executable file
@@ -0,0 +1,199 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2022 Xibo Signage Ltd
|
||||
*
|
||||
* Xibo - Digital Signage - http://www.xibo.org.uk
|
||||
*
|
||||
* This file is part of Xibo.
|
||||
*
|
||||
* Xibo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Xibo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Ad Campaigns
|
||||
* @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
|
||||
*/
|
||||
class AdCampaignMigration extends AbstractMigration
|
||||
{
|
||||
/** @inheritDoc */
|
||||
public function change()
|
||||
{
|
||||
// Schedule table gets some new fields.
|
||||
// one to set the maximum number of plays per hour
|
||||
// the other to indicate if the schedule is part of a parent campaign
|
||||
$this->table('schedule')
|
||||
->addColumn('maxPlaysPerHour', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_SMALL,
|
||||
'default' => 0,
|
||||
])
|
||||
->addColumn('parentCampaignId', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
])
|
||||
->save();
|
||||
|
||||
// More information on each campaign.
|
||||
$this->table('campaign')
|
||||
->addColumn('type', 'string', [
|
||||
'default' => 'list',
|
||||
'null' => false,
|
||||
'limit' => 10
|
||||
])
|
||||
->addColumn('startDt', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
])
|
||||
->addColumn('endDt', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
])
|
||||
->addColumn('targetType', 'string', [
|
||||
'length' => '6',
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
])
|
||||
->addColumn('target', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
])
|
||||
->addColumn('plays', 'integer', [
|
||||
'length' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'default' => 0,
|
||||
])
|
||||
->addColumn('spend', 'decimal', [
|
||||
'precision' => 30,
|
||||
'scale' => 4,
|
||||
'default' => 0,
|
||||
])
|
||||
->addColumn('impressions', 'decimal', [
|
||||
'precision' => 30,
|
||||
'scale' => 4,
|
||||
'default' => 0,
|
||||
])
|
||||
->addColumn('lastPopId', 'string', [
|
||||
'length' => 50,
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
])
|
||||
->addColumn('listPlayOrder', 'string', [
|
||||
'length' => 6,
|
||||
'default' => 'round',
|
||||
'null' => false,
|
||||
])
|
||||
->addColumn('ref1', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 254
|
||||
])
|
||||
->addColumn('ref2', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 254
|
||||
])
|
||||
->addColumn('ref3', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 254
|
||||
])
|
||||
->addColumn('ref4', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 254
|
||||
])
|
||||
->addColumn('ref5', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 254
|
||||
])
|
||||
->addColumn('createdAt', 'timestamp', [
|
||||
'default' => 'CURRENT_TIMESTAMP',
|
||||
'update' => ''
|
||||
])
|
||||
->addColumn('modifiedAt', 'timestamp', [
|
||||
'null' => true,
|
||||
'default' => null,
|
||||
'update' => 'CURRENT_TIMESTAMP'
|
||||
])
|
||||
->addColumn('modifiedBy', 'integer', [
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
'default' => 0,
|
||||
])
|
||||
->save();
|
||||
|
||||
// Direct links between the campaign and its target displays/groups
|
||||
$this->table('lkcampaigndisplaygroup', [
|
||||
'id' => false,
|
||||
'primary_key' => ['campaignId', 'displayGroupId']
|
||||
])
|
||||
->addColumn('campaignId', 'integer', [
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
])
|
||||
->addColumn('displayGroupId', 'integer', [
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
])
|
||||
->addForeignKey('campaignId', 'campaign', 'campaignId')
|
||||
->addForeignKey('displayGroupId', 'displaygroup', 'displayGroupId')
|
||||
->save();
|
||||
|
||||
// Links between the campaign and the layout are extended to cover scheduling and geo fences.
|
||||
$this->table('lkcampaignlayout')
|
||||
->addColumn('dayPartId', 'integer', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
])
|
||||
->addColumn('daysOfWeek', 'string', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => 50,
|
||||
])
|
||||
->addColumn('geoFence', 'text', [
|
||||
'default' => null,
|
||||
'null' => true,
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::TEXT_MEDIUM,
|
||||
])
|
||||
->save();
|
||||
|
||||
// Add a task for keeping ad campaigns up to date
|
||||
$this->table('task')
|
||||
->insert([
|
||||
'name' => 'Campaign Scheduler',
|
||||
'class' => '\Xibo\XTR\CampaignSchedulerTask',
|
||||
'options' => '[]',
|
||||
'schedule' => '45 * * * *',
|
||||
'isActive' => '1',
|
||||
'configFile' => '/tasks/campaign-scheduler.task',
|
||||
'pid' => 0,
|
||||
'lastRunDt' => 0,
|
||||
'lastRunDuration' => 0,
|
||||
'lastRunExitCode' => 0
|
||||
])
|
||||
->save();
|
||||
|
||||
// Add parentCampaignId to the stats table.
|
||||
$this->table('stat')
|
||||
->addColumn('parentCampaignId', 'integer', [
|
||||
'default' => 0,
|
||||
'null' => false,
|
||||
'limit' => \Phinx\Db\Adapter\MysqlAdapter::INT_REGULAR,
|
||||
])
|
||||
->save();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user