forge = \Config\Database::forge();
}
/**
* @method setup
*
* @description
* Class Page Call for setting up DB.
* This will attempt to create DB, tables and indexes for the Game using SQLite.
* Note: Make sure permissions are set correct on the app/Database directory so program
* can write DB to path.
*/
public function setup()
{
// Create new DB ///////////////////////////////////////////////////////////////////////////////////////////
if ($this->forge->createDatabase('game'))
echo 'Game Database created.
';
else
{
echo 'Error Creating Game DB!
';
$this->Error_Flag = TRUE;
}
// Build Log Table /////////////////////////////////////////////////////////////////////////////////////////
if (is_object($this->BuildLogTable()))
echo '(Log) table was created in DB.
';
else
{
echo 'Error Creating (Log) Table!
';
$this->Error_Flag = TRUE;
}
// Build Play Table ////////////////////////////////////////////////////////////////////////////////////////
if (is_object($this->BuildPlayTable()))
echo '(Play) table was created in DB.
';
else
{
echo 'Error Creating (Play) Table!
';
$this->Error_Flag = TRUE;
}
// Build USER Table ////////////////////////////////////////////////////////////////////////////////////////
if (is_object($this->BuildUserTable()))
echo '(User) table was created in DB.
';
else
{
echo 'Error Creating (User) Table!
';
$this->Error_Flag = TRUE;
}
if ($this->Error_Flag)
{
echo 'Errors while trying to create DB';
exit;
}
else
echo 'Starting Game Page.';
return redirect('/', 'refresh');
}
/***************************************************************************************************************
* START OF PRIVATE FUNCTIONS
**************************************************************************************************************/
/**
* @method BuildLogTable
* @description
* Pulls in Log Table Fields & Indexes, then attempts to create Log Table
* @return mixed
*/
private function BuildLogTable()
{
$this->forge->addField($this->LogFields());
return $this->forge->createTable('Log', TRUE);
}
/**
* @method BuildPlayTable
* @description
* Pulls in Play Table Fields & Indexes, then attempts to create Play Table
* @return mixed
*/
private function BuildPlayTable()
{
$this->forge->addField($this->PlayFields());
return $this->forge->createTable('plays', TRUE);
}
/**
* @method BuildUserTable
* @description
* Pulls in User Table Fields & Indexes, then attempts to create User Table
* @return mixed
*/
private function BuildUserTable()
{
$this->forge->addField($this->UserFields());
$this->forge->addKey('UserName', FALSE, TRUE);
return $this->forge->createTable('users', TRUE);
}
/**
* @method LogFields
* @description
* Fields and Indexes, Structure for the Log Table
* @return array
*/
private function LogFields()
{
return $fields =
[
'id' => ['type' => 'int', 'auto_increment' => TRUE, ],
'IP' => ['type' => 'text', ],
'City' => ['type' => 'text', ],
'State' => ['type' => 'text', ],
'Country' => ['type' => 'text', ],
'DateTime' => ['type' => 'date', 'null' => TRUE, ],
];
}
/**
* @method PlayFields
* @description
* Fields and Indexes, Structure for the Play Table
* @return array
*/
private function PlayFields()
{
return $fields =
[
'id' => ['type' => 'int', 'auto_increment' => TRUE, ],
'UserID' => ['type' => 'text', ],
'UserName' => ['type' => 'text', ],
'IP' => ['type' => 'text', ],
'PlayerPick' => ['type' => 'text', ],
'ComputerPick' => ['type' => 'text', ],
'Result' => ['type' => 'text', ],
'DateTime' => ['type' => 'date', 'null' => TRUE, ],
];
}
/**
* @method UserFields
* @description
* Fields and Indexes, Structure for the User Table
* @return array
*/
private function UserFields()
{
return $fields =
[
'id' => ['type' => 'int', 'auto_increment' => TRUE, ],
'UserName' => ['type' => 'text', ],
'Wins' => ['type' => 'int', 'default' => 0, ],
'Loses' => ['type' => 'int', 'default' => 0, ],
'Ties' => ['type' => 'int', 'default' => 0, ],
'IP' => ['type' => 'text', ],
'City' => ['type' => 'text', ],
'State' => ['type' => 'text', ],
'Country' => ['type' => 'text', ],
'CountryCode' => ['type' => 'text', ],
'FlagURL' => ['type' => 'text', ],
'DateCreated' => ['type' => 'date', 'null' => TRUE, ],
'DateUpdated' => ['type' => 'date', 'null' => TRUE, ],
'DateDeleted' => ['type' => 'date', 'null' => TRUE, ],
];
}
}