Files
pathfinder/app/Controller/Api/Rest/SignatureHistory.php
Mark Friedrich 647bd7db58 - BC Break: _PHP_ namespaces changed (PSR-4 standard). The _root_ namespace for all _PF_ related scripts is Exodus4D\Pathfinder
- BC Break: Project folder structure changed. Removed `app/main` dir.
- BC Break: Core _PHP_ framework + dependencies moved into `composer.json` and are no longer part of this repo
2019-12-15 22:27:17 +01:00

128 lines
4.5 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: Exodus 4D
* Date: 02.03.2019
* Time: 16:44
*/
namespace Exodus4D\Pathfinder\Controller\Api\Rest;
use Exodus4D\Pathfinder\Model\Pathfinder;
use Exodus4D\Pathfinder\Lib\Config;
class SignatureHistory extends AbstractRestController {
/**
* get historic signature data
* @param \Base $f3
* @param $params
* @throws \Exception
*/
public function get(\Base $f3, $params){
$historyData = [];
if($systemId = (int)$params['id']){
$activeCharacter = $this->getCharacter();
/**
* @var $system Pathfinder\SystemModel
*/
$system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel');
$system->getById($systemId);
if($system->hasAccess($activeCharacter)){
$historyDataAll = $system->getSignaturesHistory();
foreach($historyDataAll as $historyEntry){
$label = [
$historyEntry['character']->name,
$historyEntry['action'],
count($historyEntry['signatures']),
Config::formatTimeInterval((int)(microtime(true) - $historyEntry['stamp']))
];
$historyData[] = [
'value' => md5((string)$historyEntry['stamp']),
'text' => implode('%%', $label)
];
}
}
}
$this->out($historyData);
}
/**
* put (load) historic signature data
* @param \Base $f3
* @throws \Exception
*/
public function put(\Base $f3){
$requestData = $this->getRequestData($f3);
$signaturesData = [];
if(
($systemId = (int)$requestData['systemId']) &&
($stamp = (string)$requestData['stamp'])
){
$activeCharacter = $this->getCharacter();
/**
* @var $system Pathfinder\SystemModel
*/
$system = Pathfinder\AbstractPathfinderModel::getNew('SystemModel');
$system->getById($systemId, 0);
if($system->hasAccess($activeCharacter)){
if($historyEntry = $system->getSignatureHistoryEntry($stamp)){
$updateSignaturesHistory = false;
// history entry found for $stamp -> format signatures data
// -> same format as if they would come from client for save
foreach($historyEntry['signatures'] as $signatureData){
$data = [
'id' => (int)$signatureData->id,
'groupId' => (int)$signatureData->groupId,
'typeId' => (int)$signatureData->typeId,
'connectionId' => (int)$signatureData->connectionId,
'name' => (string)$signatureData->name,
'description' => (string)$signatureData->description,
];
$signature = $system->getSignatureById($data['id']);
if(is_null($signature)){
$signature = $system->getNewSignature();
}
$signature->setData($data);
$signature->save($activeCharacter);
$signaturesData[] = $signature->getData();
$updateSignaturesHistory = true;
$signature->reset();
}
// delete "old" signatures ------------------------------------------------------------------------
$updatedSignatureIds = array_column($signaturesData, 'id');
$signatures = $system->getSignatures();
foreach($signatures as $signature){
if(!in_array($signature->_id, $updatedSignatureIds)){
if($signature->delete()){
$updateSignaturesHistory = true;
}
}
}
if($updateSignaturesHistory){
// signature count changed -> clear fieldsCache[]
$system->reset(false);
$system->updateSignaturesHistory($activeCharacter, 'undo');
}
}
}
}
$this->out($signaturesData);
}
}