Manager.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger;
  3. use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Actions\EditRecord;
  4. use MGModule\DNSManager2\mgLibs\lang;
  5. use MGModule\DNSManager2\models\custom\globalsetting;
  6. use MGModule\DNSManager2\mgLibs\custom\helpers\ZoneLogger\Enum as ZoneLoggerEnum;
  7. use MGModule\DNSManager2\models\custom\zone\Zone;
  8. use \MGModule\DNSManager2\models\custom\log;
  9. use MGModule\DNSManager2\mgLibs\custom\dns\record\interfaces\ArrayPrinter;
  10. /**
  11. * Class Manager
  12. *
  13. * @author Artur Pilch <artur.pi@modulesgarden.com>
  14. */
  15. class Manager
  16. {
  17. /**
  18. * List of available log action defined by admin
  19. *
  20. * @var array
  21. */
  22. private $availableLogActions = [];
  23. /**
  24. * @var null
  25. */
  26. private $clientId;
  27. /**
  28. * Set Essential Data
  29. *
  30. * Manager constructor.
  31. * @param null $clientId
  32. */
  33. public function __construct($clientId = null)
  34. {
  35. $settings = globalsetting\Repository::factory()->byKey(globalsetting\GlobalSettingEnum::LOG_ZONE_ACTIONS)->one();
  36. $this->availableLogActions = unserialize($settings);
  37. $this->clientId = $clientId;
  38. }
  39. /**
  40. * Log created zone
  41. *
  42. * @param Zone $zone
  43. * @param string $messagePrefix
  44. */
  45. public function logCreateZoneAction(Zone $zone, $messagePrefix = '')
  46. {
  47. $this->log(ZoneLoggerEnum::CREATE_ZONE, $zone->name, "Zone {$zone->name} has been created successfully", $messagePrefix);
  48. }
  49. /**
  50. * Log Terminated zone
  51. *
  52. * @param Zone $zone
  53. * @param string $messagePrefix
  54. */
  55. public function logTerminateZoneAction(Zone $zone, $messagePrefix = '')
  56. {
  57. $this->log(ZoneLoggerEnum::TERMINATE_ZONE, $zone->name, "Zone {$zone->name} has been terminated successfully", $messagePrefix);
  58. }
  59. /**
  60. * Log added record to zone
  61. *
  62. * @param Zone $zone
  63. * @param ArrayPrinter $record
  64. * @param string $messagePrefix
  65. */
  66. public function logAddRecordToZone(Zone $zone, ArrayPrinter $record, $messagePrefix = '')
  67. {
  68. $this->log(ZoneLoggerEnum::ADD_RECORD, $zone->name, $this->printRecordArray($record->toArray(false)), $messagePrefix);
  69. }
  70. /**
  71. * Log removed record from zone
  72. *
  73. * @param Zone $zone
  74. * @param ArrayPrinter $record
  75. * @param string $messagePrefix
  76. */
  77. public function logRemoveRecordFromZone(Zone $zone, ArrayPrinter $record, $messagePrefix = '')
  78. {
  79. $this->log(ZoneLoggerEnum::REMOVE_RECORD, $zone->name, $this->printRecordArray($record->toArray(false)), $messagePrefix);
  80. }
  81. /**
  82. * Edit RDNS Record
  83. *
  84. * @param Zone $zone
  85. * @param ArrayPrinter $recordOld
  86. * @param ArrayPrinter $recordNew
  87. * @param string $messagePrefix
  88. */
  89. public function logEditRdns(ArrayPrinter $recordOld, ArrayPrinter $recordNew, $messagePrefix = '')
  90. {
  91. $out = '';
  92. $out .= $this->printRecordArray($recordOld->toArray(false));
  93. $out .= '<br>';
  94. $out .= $this->printRecordArray($recordNew->toArray(false));
  95. $this->log(ZoneLoggerEnum::EDIT_RECORD, '', $out, $messagePrefix);
  96. }
  97. /**
  98. * Log edited record in zone
  99. *
  100. * @param Zone $zone
  101. * @param EditRecord $editRecord
  102. * @param string $messagePrefix
  103. */
  104. public function logEditRecordsInZone(Zone $zone, EditRecord $editRecord, $messagePrefix = '')
  105. {
  106. $from = lang::absoluteT('zoneLogger', 'edit', 'from');
  107. $to = lang::absoluteT('zoneLogger', 'edit', 'to');
  108. $out = '';
  109. $out .= "<b>{$from}:</b> " . $this->printRecordArray($editRecord->getOldRecord()->toArray(false));
  110. $out .= "<br>";
  111. $out .= "<b>{$to}:</b> " . $this->printRecordArray($editRecord->getNewRecord()->toArray(false));
  112. $this->log(ZoneLoggerEnum::EDIT_RECORD, $zone->name, $out, $messagePrefix);
  113. }
  114. public function logAddRdns(ArrayPrinter $record)
  115. {
  116. $this->log(ZoneLoggerEnum::ADD_RECORD, '', $this->printRecordArray($record->toArray(false)));
  117. }
  118. /**
  119. * Add New Log
  120. *
  121. * @param $messagePrefix
  122. * @param $logAction
  123. * @param $zoneName
  124. * @param $value
  125. */
  126. private function log($logAction, $zoneName, $value, $messagePrefix = '', $status = 'success')
  127. {
  128. if (!$this->canLog($logAction))
  129. {
  130. return;
  131. }
  132. $log = new log\Log();
  133. $log->action = $messagePrefix . ZoneLoggerEnum::friendlyNameMap($logAction);
  134. $log->value = $value;
  135. $log->name = $zoneName;
  136. $log->clientid = $this->clientId !== null ? $this->clientId : 0;
  137. $log->status = $status;
  138. $log->date = date('Y-m-d H:i:s');
  139. $log->save();
  140. }
  141. /**
  142. * Check if can log called action
  143. *
  144. * @param $action
  145. * @return bool
  146. */
  147. private function canLog($action)
  148. {
  149. return in_array($action, $this->availableLogActions);
  150. }
  151. private function printRecordArray(array $array = [], $out = '')
  152. {
  153. if (isset($array['ip']))
  154. {
  155. $out .= "{$array['ip']} PTR ";
  156. }
  157. $out .= "{$array['name']} {$array['type']} {$array['ttl']}";
  158. if (!isset($array['rdata']))
  159. {
  160. return $out;
  161. }
  162. foreach ($array['rdata'] as $value)
  163. {
  164. $out .= " {$value}";
  165. }
  166. return $out;
  167. }
  168. }