FileInfoManager.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Analytics\Model;
  7. use Magento\Framework\Exception\LocalizedException;
  8. use Magento\Framework\FlagManager;
  9. /**
  10. * Manage saving and loading FileInfo object.
  11. */
  12. class FileInfoManager
  13. {
  14. /**
  15. * @var FlagManager
  16. */
  17. private $flagManager;
  18. /**
  19. * @var FileInfoFactory
  20. */
  21. private $fileInfoFactory;
  22. /**
  23. * Flag code for a stored FileInfo object.
  24. *
  25. * @var string
  26. */
  27. private $flagCode = 'analytics_file_info';
  28. /**
  29. * Parameters which have to be saved into encoded form.
  30. *
  31. * @var array
  32. */
  33. private $encodedParameters = [
  34. 'initializationVector'
  35. ];
  36. /**
  37. * @param FlagManager $flagManager
  38. * @param FileInfoFactory $fileInfoFactory
  39. */
  40. public function __construct(
  41. FlagManager $flagManager,
  42. FileInfoFactory $fileInfoFactory
  43. ) {
  44. $this->flagManager = $flagManager;
  45. $this->fileInfoFactory = $fileInfoFactory;
  46. }
  47. /**
  48. * Save FileInfo object.
  49. *
  50. * @param FileInfo $fileInfo
  51. * @return bool
  52. * @throws LocalizedException
  53. */
  54. public function save(FileInfo $fileInfo)
  55. {
  56. $parameters = [];
  57. $parameters['initializationVector'] = $fileInfo->getInitializationVector();
  58. $parameters['path'] = $fileInfo->getPath();
  59. $emptyParameters = array_diff($parameters, array_filter($parameters));
  60. if ($emptyParameters) {
  61. throw new LocalizedException(
  62. __('These arguments can\'t be empty "%1"', implode(', ', array_keys($emptyParameters)))
  63. );
  64. }
  65. foreach ($this->encodedParameters as $encodedParameter) {
  66. $parameters[$encodedParameter] = $this->encodeValue($parameters[$encodedParameter]);
  67. }
  68. $this->flagManager->saveFlag($this->flagCode, $parameters);
  69. return true;
  70. }
  71. /**
  72. * Load FileInfo object.
  73. *
  74. * @return FileInfo
  75. */
  76. public function load()
  77. {
  78. $parameters = $this->flagManager->getFlagData($this->flagCode) ?: [];
  79. $encodedParameters = array_intersect($this->encodedParameters, array_keys($parameters));
  80. foreach ($encodedParameters as $encodedParameter) {
  81. $parameters[$encodedParameter] = $this->decodeValue($parameters[$encodedParameter]);
  82. }
  83. $fileInfo = $this->fileInfoFactory->create($parameters);
  84. return $fileInfo;
  85. }
  86. /**
  87. * Encode value.
  88. *
  89. * @param string $value
  90. * @return string
  91. */
  92. private function encodeValue($value)
  93. {
  94. return base64_encode($value);
  95. }
  96. /**
  97. * Decode value.
  98. *
  99. * @param string $value
  100. * @return string
  101. */
  102. private function decodeValue($value)
  103. {
  104. return base64_decode($value);
  105. }
  106. }