Strategy.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace MGModule\DNSManager2\mgLibs\custom\dns;
  3. use MGModule\DNSManager2\mgLibs\custom\SubmoduleCap;
  4. use MGModule\DNSManager2\mgLibs\custom\TaskManager;
  5. use MGModule\DNSManager2\models\custom\zone\Repository;
  6. class Strategy
  7. {
  8. const PRE = 'pre';
  9. const AFTER = 'after';
  10. protected static $events = [
  11. 'addRecord' => [
  12. self::AFTER => 'RecordSynchronization:syncAdd'
  13. ],
  14. 'deleteRecord' => [
  15. self::AFTER => 'RecordSynchronization:syncDelete'
  16. ],
  17. 'editRecord' => [
  18. self::AFTER => 'RecordSynchronization:syncEdit'
  19. ],
  20. 'activateZone' => [
  21. self::AFTER => 'RecordSynchronization:syncActivateZone'
  22. ],
  23. 'terminateZone' => [
  24. self::AFTER => 'RecordSynchronization:syncTerminateZone'
  25. ],
  26. 'getRDNSRecord' => [
  27. self::AFTER => 'RecordSynchronization:syncGetRDNSRecord'
  28. ],
  29. 'removeRDNS' => [
  30. self::AFTER => 'RecordSynchronization:syncRemoveRDNS'
  31. ],
  32. 'updateRDNS' => [
  33. self::AFTER => 'RecordSynchronization:syncUpdateRDNS'
  34. ],
  35. ];
  36. protected $module;
  37. public function __construct($module)
  38. {
  39. $this->module = new SubmoduleCap($module);
  40. }
  41. public function __call($name, $args)
  42. {
  43. $result = count($args) == 1 ? $this->module->{$name}($args[0]) : $this->module->{$name}($args);
  44. if (isset(self::$events[$name][self::AFTER]))
  45. {
  46. $this->addTask($name, $args, self::AFTER);
  47. }
  48. return $result;
  49. }
  50. public function __get($name)
  51. {
  52. return $this->module->{$name};
  53. }
  54. public function getModule()
  55. {
  56. return $this->module;
  57. }
  58. private function addTask($name, $args, $when)
  59. {
  60. $packageServerRepo = new \MGModule\DNSManager2\models\custom\package\server\Repository();
  61. if ($packageServerRepo->byServerID($this->module->getServer()->id)->get()[0]->isMaster())
  62. {
  63. TaskManager::addTask(self::$events[$name][$when], ['submodule' => $this, 'values' => $args, 'zone' => $this->getZone()]);
  64. }
  65. }
  66. private function getZone()
  67. {
  68. $zoneRepository = Repository::factory();
  69. return $zoneRepository->byServerID($this->getServer()->id)->byName($this->getDomain())->get()[0];
  70. }
  71. }