Files
w4rpservices/app/Library/Structures/StructureHelper.php
drkthunder02 cf56300676 cleaned up unnecessary commands as they got switched to working as jobs.
updated the structure library to be able to be passed the esi connection
added new jobs for the fetch stuff that was being previously done as commands.
2020-05-09 12:40:16 -05:00

380 lines
12 KiB
PHP

<?php
/**
* W4RP Services
* GNU Public License
*
* Finally works in it's current state. Need to move to a job process.
*/
namespace App\Library\Structures;
//Internal Library
use Log;
//App Library
use App\Jobs\Library\JobHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//App Models
use App\Models\Jobs\JobProcessStructure;
use App\Models\Jobs\JobStatus;
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
class StructureHelper {
private $charId;
private $corpId;
private $page;
private $esi;
public function __construct($char, $corp, $esi = null) {
$this->charId = $char;
$this->corpId = $corp;
$this->esi = $esi;
}
public function GetStructuresByPage($page) {
//Declare some variables
$esiHelper = new Esi;
if($this->esi == null) {
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($this->charId);
//Create the esi authentication container
$this->esi = $esiHelper->SetupEsiAuthentication($token);
}
//Try to get the ESI data
try {
$structures = $this->esi->page($page)
->invoke('get', '/corporations/{corporation_id}/structures/', [
'corporation_id' => $this->corpId,
]);
} catch (RequestFailedException $e) {
Log::critical("Failed to get structure list.");
return null;
}
return $structures;
}
public function ProcessStructure($structure) {
//Declare some variables
$esiHelper = new Esi;
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($this->charId);
//Setup the esi authentication container
$this->esi = $esiHelper->SetupEsiAuthentication($token);
//Get the structure information
$info = $this->GetStructureInfo($structure->structure_id);
//Record the structure information into the database
//Find if the structure exists
if(Structure::where(['structure_id' => $structure->structure_id])->count() == 0) {
$this->SaveNewStructure($structure, $info);
} else {
$this->UpdateExistingStructure($structure, $info);
}
}
private function GetSolarSystemName($systemId) {
//Declare some variables
$esiHelper = new Esi;
if($this->esi == null) {
//Get the refresh token
$token = $esiHelper->GetRefreshToken($this->charId);
//Setup the esi authentication container
$this->esi = $esiHelper->SetupEsiAuthentication($token);
}
//Attempt to get the solar system name from ESI
try {
$solar = $this->esi->invoke('get', '/universe/systems/{system_id}/', [
'system_id' => $systemId,
]);
} catch(RequestFailedException $e) {
$solar = null;
}
if($solar != null) {
return $solar->name;
} else {
return null;
}
}
private function GetStructureInfo($structureId) {
//Declare some variables
$esiHelper = new Esi;
if($this->esi == null) {
//Get the refresh token
$token = $esiHelper->GetRefreshToken($this->charId);
//Setup the esi authentication container
$this->esi = $esiHelper->SetupEsiAuthentication($token);
}
try {
$info = $esi->invoke('get', '/universe/structures/{structure_id}/', [
'structure_id' => $structureId,
]);
} catch(RequestFailedException $e) {
Log::warning("Failed to get structure information for structure with id " . $structureId);
Log::warning($e->getCode());
Log::warning($e->getMessage());
Log::warning($e->getEsiResponse());
$info = null;
}
return $info;
}
private function UpdateExistingStructure($structure, $info) {
//Update the structure id and name
Structure::where(['structure_id' => $structure->structure_id])->update([
'structure_id' => $structure->structure_id,
'structure_name' => $info->name,
]);
//Update the services
if(isset($structure->services)) {
$services = true;
Structure::where(['structure_id' => $structure->structure_id])->update([
'services' => $services,
]);
} else {
$services = false;
Structure::where(['structure_id' => $structure->structure_id])->update([
'services' => $services,
]);
}
//Update the structure state
if(isset($structure->state)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state' => $structure->state,
]);
} else {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state' => 'None',
]);
}
//Update the state timer start
if(isset($structure->state_timer_start)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state_timer_start' => $this->DecodeDate($structure->state_timer_start),
]);
}
//Update the state timer end
if(isset($structure->state_timer_end)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'state_timer_end' => $this->DecodeDate($structure->state_timer_end),
]);
}
//Update the fuel expires
if(isset($structure->fuel_expires)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'fuel_expires' => $this->DecodeDate($structure->fuel_expires),
]);
}
//Update the profile id, and positions
Structure::where(['structure_id' => $structure->structure_id])->update([
'profile_id' => $structure->profile_id,
'position_x' => $info->position->x,
'position_y' => $info->position->y,
'position_z' => $info->position->z,
]);
//Update the next reinforce apply
if(isset($structure->next_reinforce_apply)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'next_reinforce_apply' => $this->DecodeDate($structure->next_reinforce_apply),
]);
}
//update the next reinforce hour
if(isset($structure->next_reinforce_hour)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'next_reinforce_hour' => $structure->next_reinforce_hour,
]);
}
//Update next reinforce weekday
if(isset($structure->next_reinforce_weekday)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'next_reinforce_weekday' => $structure->next_reinforce_weekday,
]);
}
//Update reinforce hour
if(isset($structure->reinforce_hour)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'reinforce_hour' => $structure->reinforce_hour,
]);
}
//Update reinforce weekday
if(isset($structure->reinforce_weekday)) {
Structure::where(['structure_id' => $structure->structure_id])->update([
'reinforce_weekday' => $structure->reinforce_weekday,
]);
}
//Update the unanchors at field
if(isset($structure->unanchors_at)) {
//Decode the date / time
$daTi = $this->DecodeDate($structure->unanchors_at);
Structure::where(['structure_id' => $structure->structure_id])->update([
'unanchors_at' => $daTi,
]);
}
//Update the services for the structure as well
if($services == true) {
//Delete the existing services, then add the new services
if(Service::where(['structure_id' => $structure->structure_id])->count() > 0) {
Service::where(['structure_id' => $structure->structure_id])->delete();
}
foreach($structure->services as $service) {
$serv = new Service;
$serv->structure_id = $structure->structure_id;
$serv->name = $service->name;
$serv->state = $service->state;
$serv->save();
}
}
}
private function SaveNewStructure($structure, $info) {
if(isset($info->solar_system_id)) {
$solarName = $this->GetSolarSystemName($info->solar_system_id);
} else {
Log::critical("Couldn't get solar system name for structure " . $structure->structure_id);
Log::critical("Check access lists.");
$solarName = null;
}
$st = new Structure;
$st->structure_id = $structure->structure_id;
$st->structure_name = $info->name;
$st->corporation_id = $info->owner_id;
$st->solar_system_id = $info->solar_system_id;
$st->solar_system_name = $solarName;
if(isset($info->type_id)) {
$st->type_id = $info->type_id;
}
$st->corporation_id = $structure->corporation_id;
if(isset($structure->services)) {
$st->services = true;
} else {
$st->services = false;
}
if(isset($structure->state)) {
$st->state = $structure->state;
} else {
$st->state = 'None';
}
if(isset($structure->state_timer_start)) {
$st->state_timer_start = $this->DecodeDate($structure->state_timer_start);
}
if(isset($structure->state_timer_end)) {
$st->state_timer_end = $this->DecodeDate($structure->state_timer_end);
}
if(isset($structure->fuel_expires)) {
$st->fuel_expires = $this->DecodeDate($structure->fuel_expires);
}
$st->profile_id = $structure->profile_id;
$st->position_x = $info->position->x;
$st->position_y = $info->position->y;
$st->position_z = $info->position->z;
if(isset($structure->next_reinforce_apply)) {
$st->next_reinforce_apply = $this->DecodeDate($structure->next_reinforce_apply);
}
if(isset($structure->next_reinforce_hour)) {
$st->next_reinforce_hour = $structure->next_reinforce_hour;
}
if(isset($structure->next_reinforce_weekday)) {
$st->next_reinforce_weekday = $structure->next_reinforce_weekday;
}
$st->reinforce_hour = $structure->reinforce_hour;
if(isset($structure->reinforce_weekday)) {
$st->reinforce_weekday = $structure->reinforce_weekday;
}
if(isset($structure->unanchors_at)) {
$daTi = $this->DecodeDate($structure->unanchors_at);
$st->unanchors_at = $daTi;
}
//Save the database record
$st->save();
if($st->services == true) {
foreach($structure->services as $service) {
$serv = new Service;
$serv->structure_id = $structure->structure_id;
$serv->name = $service->name;
$serv->state = $service->state;
}
}
}
public function GetStructuresByType($type) {
$sType = $this->StructureTypeToId($type);
$structures = Structure::where([
'type_id' => $sType,
])->get();
return $structures;
}
private function StructureTypeToId($name) {
$structureTypes = [
'Ansiblex Jump Gate' => 35841,
'Pharolux Cyno Beacon' => 35840,
'Tenebrex Cyno Jammer' => 37534,
'Keepstar' => 35834,
'Fortizar' => 35833,
'Astrahus' => 35832,
'Tatara' => 35836,
'Athanor' => 35835,
'Sotiyo' => 35827,
'Azbel' => 35826,
'Raitaru' => 35825,
];
return $structureTypes[$name];
}
private function DecodeDate($date) {
$esiHelper = new Esi;
$dateTime = $esiHelper->DecodeDate($date);
return $dateTime;
}
}
?>