*/ 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; } }