*/
class Manager
{
/**
* List of available log action defined by admin
*
* @var array
*/
private $availableLogActions = [];
/**
* @var null
*/
private $clientId;
/**
* Set Essential Data
*
* Manager constructor.
* @param null $clientId
*/
public function __construct($clientId = null)
{
$settings = globalsetting\Repository::factory()->byKey(globalsetting\GlobalSettingEnum::LOG_ZONE_ACTIONS)->one();
$this->availableLogActions = unserialize($settings);
$this->clientId = $clientId;
}
/**
* Log created zone
*
* @param Zone $zone
* @param string $messagePrefix
*/
public function logCreateZoneAction(Zone $zone, $messagePrefix = '')
{
$this->log(ZoneLoggerEnum::CREATE_ZONE, $zone->name, "Zone {$zone->name} has been created successfully", $messagePrefix);
}
/**
* Log Terminated zone
*
* @param Zone $zone
* @param string $messagePrefix
*/
public function logTerminateZoneAction(Zone $zone, $messagePrefix = '')
{
$this->log(ZoneLoggerEnum::TERMINATE_ZONE, $zone->name, "Zone {$zone->name} has been terminated successfully", $messagePrefix);
}
/**
* Log added record to zone
*
* @param Zone $zone
* @param ArrayPrinter $record
* @param string $messagePrefix
*/
public function logAddRecordToZone(Zone $zone, ArrayPrinter $record, $messagePrefix = '')
{
$this->log(ZoneLoggerEnum::ADD_RECORD, $zone->name, $this->printRecordArray($record->toArray(false)), $messagePrefix);
}
/**
* Log removed record from zone
*
* @param Zone $zone
* @param ArrayPrinter $record
* @param string $messagePrefix
*/
public function logRemoveRecordFromZone(Zone $zone, ArrayPrinter $record, $messagePrefix = '')
{
$this->log(ZoneLoggerEnum::REMOVE_RECORD, $zone->name, $this->printRecordArray($record->toArray(false)), $messagePrefix);
}
/**
* Edit RDNS Record
*
* @param Zone $zone
* @param ArrayPrinter $recordOld
* @param ArrayPrinter $recordNew
* @param string $messagePrefix
*/
public function logEditRdns(ArrayPrinter $recordOld, ArrayPrinter $recordNew, $messagePrefix = '')
{
$out = '';
$out .= $this->printRecordArray($recordOld->toArray(false));
$out .= '
';
$out .= $this->printRecordArray($recordNew->toArray(false));
$this->log(ZoneLoggerEnum::EDIT_RECORD, '', $out, $messagePrefix);
}
/**
* Log edited record in zone
*
* @param Zone $zone
* @param EditRecord $editRecord
* @param string $messagePrefix
*/
public function logEditRecordsInZone(Zone $zone, EditRecord $editRecord, $messagePrefix = '')
{
$from = lang::absoluteT('zoneLogger', 'edit', 'from');
$to = lang::absoluteT('zoneLogger', 'edit', 'to');
$out = '';
$out .= "{$from}: " . $this->printRecordArray($editRecord->getOldRecord()->toArray(false));
$out .= "
";
$out .= "{$to}: " . $this->printRecordArray($editRecord->getNewRecord()->toArray(false));
$this->log(ZoneLoggerEnum::EDIT_RECORD, $zone->name, $out, $messagePrefix);
}
public function logAddRdns(ArrayPrinter $record)
{
$this->log(ZoneLoggerEnum::ADD_RECORD, '', $this->printRecordArray($record->toArray(false)));
}
/**
* Add New Log
*
* @param $messagePrefix
* @param $logAction
* @param $zoneName
* @param $value
*/
private function log($logAction, $zoneName, $value, $messagePrefix = '', $status = 'success')
{
if (!$this->canLog($logAction))
{
return;
}
$log = new log\Log();
$log->action = $messagePrefix . ZoneLoggerEnum::friendlyNameMap($logAction);
$log->value = $value;
$log->name = $zoneName;
$log->clientid = $this->clientId !== null ? $this->clientId : 0;
$log->status = $status;
$log->date = date('Y-m-d H:i:s');
$log->save();
}
/**
* Check if can log called action
*
* @param $action
* @return bool
*/
private function canLog($action)
{
return in_array($action, $this->availableLogActions);
}
private function printRecordArray(array $array = [], $out = '')
{
if (isset($array['ip']))
{
$out .= "{$array['ip']} PTR ";
}
$out .= "{$array['name']} {$array['type']} {$array['ttl']}";
if (!isset($array['rdata']))
{
return $out;
}
foreach ($array['rdata'] as $value)
{
$out .= " {$value}";
}
return $out;
}
}