InterfaceConfig.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace ThurData\Servers\KerioEmail\Core\SL;
  3. use ThurData\Servers\KerioEmail\Core\ModuleConstants;
  4. /**
  5. * Description of InterfaceConfig
  6. *
  7. * @autor ThurData <info@thrudata.ch>
  8. */
  9. class InterfaceConfig extends AbstractReaderYml
  10. {
  11. protected function load()
  12. {
  13. list($dataDev, $dataCore) = $this->readFiles();
  14. $data = null;
  15. if (isset($dataDev) && isset($dataCore))
  16. {
  17. $this->buildData($dataDev, $dataCore, $data);
  18. }
  19. elseif (!isset($dataDev) && isset($dataCore) && isset($dataCore['interface']))
  20. {
  21. $data = $dataCore['interface'];
  22. }
  23. elseif (isset($dataDev) && !isset($dataCore) && isset($dataDev['interface']))
  24. {
  25. $data = $dataDev['interface'];
  26. }
  27. $this->data = $this->rebuildData($data);
  28. }
  29. private function rebuildData($data)
  30. {
  31. $returnData = [];
  32. foreach ($data as $item)
  33. {
  34. $returnData[$item['namespace']][$item['where']] = $item['class'];
  35. }
  36. return $returnData;
  37. }
  38. private function buildData($dataDev, $dataCore, &$data)
  39. {
  40. if (isset($dataDev['interface']) && isset($dataCore['interface']))
  41. {
  42. foreach ($dataCore['interface'] as $core)
  43. {
  44. $isFind = false;
  45. foreach ($dataDev['interface'] as $dev)
  46. {
  47. if ($dev['namespace'] === $core['namespace'] && $dev['class'] === $core['class'] && $dev['where'] === $core['where'])
  48. {
  49. $isFind = true;
  50. break;
  51. }
  52. }
  53. if (!$isFind)
  54. {
  55. $dataDev['interface'][] = $core;
  56. }
  57. }
  58. $data = $dataDev['interface'];
  59. }
  60. elseif (!isset($dataDev['interface']) && isset($dataCore['interface']))
  61. {
  62. $data = $dataCore['interface'];
  63. }
  64. elseif (isset($dataDev['interface']) && !isset($dataCore['interface']))
  65. {
  66. $data = $dataDev['interface'];
  67. }
  68. }
  69. private function readFiles()
  70. {
  71. return [
  72. $this->readYml(ModuleConstants::getFullPath('app', 'Config', 'di', 'interface.yml')),
  73. $this->readYml(ModuleConstants::getFullPath('core', 'Config', 'di', 'interface.yml'))
  74. ];
  75. }
  76. }