Files
pathfinder/app/Model/Pathfinder/AbstractMapTrackingModel.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

117 lines
3.2 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: Exodus 4D
* Date: 25.08.2017
* Time: 18:45
*/
namespace Exodus4D\Pathfinder\Model\Pathfinder;
use DB\SQL\Schema;
use Exodus4D\Pathfinder\Exception;
abstract class AbstractMapTrackingModel extends AbstractPathfinderModel implements LogModelInterface {
/**
* @var array
*/
private $trackingFieldConf = [
'createdCharacterId' => [
'type' => Schema::DT_INT,
'index' => true,
'belongs-to-one' => 'Exodus4D\Pathfinder\Model\Pathfinder\CharacterModel',
'constraint' => [
[
'table' => 'character',
'on-delete' => 'CASCADE'
]
],
'validate' => 'notDry'
],
'updatedCharacterId' => [
'type' => Schema::DT_INT,
'index' => true,
'belongs-to-one' => 'Exodus4D\Pathfinder\Model\Pathfinder\CharacterModel',
'constraint' => [
[
'table' => 'character',
'on-delete' => 'CASCADE'
]
],
'validate' => 'notDry'
]
];
/**
* get static character fields for this model instance
* @return array
*/
protected function getStaticFieldConf(): array{
return array_merge(parent::getStaticFieldConf(), $this->trackingFieldConf);
}
/**
* log character activity create/update/delete events
* @param string $action
*/
protected function logActivity($action){
// check if activity logging is enabled for this object
if($this->enableActivityLogging){
// check for field changes
if(
mb_stripos(mb_strtolower($action), 'delete') !== false ||
!empty($this->fieldChanges)
){
$this->newLog($action)->setCharacter($this->updatedCharacterId)->setData($this->fieldChanges)->buffer();
}
}
}
/**
* validates all required columns of this class
* @return bool
* @throws Exception\DatabaseException
*/
public function isValid(): bool {
if($valid = parent::isValid()){
foreach($this->trackingFieldConf as $key => $colConf){
if($this->exists($key)){
$valid = $this->validateField($key, $this->$key);
if(!$valid){
break;
}
}else{
$valid = false;
$this->throwDbException('Missing table column "' . $this->getTable(). '.' . $key . '"');
break;
}
}
}
return $valid;
}
/**
* get log file data
* @return array
*/
public function getLogData(): array {
return [];
}
/**
* save connection
* @param CharacterModel $characterModel
* @return ConnectionModel|false
*/
public function save(CharacterModel $characterModel = null){
if($this->dry()){
$this->createdCharacterId = $characterModel;
}
$this->updatedCharacterId = $characterModel;
return parent::save();
}
}