Db.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cron\Model\Config\Converter;
  7. /**
  8. * Convert data incoming from data base storage
  9. */
  10. class Db implements \Magento\Framework\Config\ConverterInterface
  11. {
  12. /**
  13. * Convert data
  14. *
  15. * @param array $source
  16. * @return array
  17. */
  18. public function convert($source)
  19. {
  20. $cronTab = isset($source['crontab']) ? $source['crontab'] : [];
  21. if (empty($cronTab)) {
  22. return $cronTab;
  23. }
  24. return $this->_extractParams($cronTab);
  25. }
  26. /**
  27. * Extract and prepare cron job data
  28. *
  29. * @param array $jobs
  30. * @return array
  31. */
  32. protected function _extractParams(array $cronTab)
  33. {
  34. $result = [];
  35. foreach ($cronTab as $groupName => $groupConfig) {
  36. $jobs = $groupConfig['jobs'];
  37. foreach ($jobs as $jobName => $value) {
  38. $result[$groupName][$jobName] = $value;
  39. if (isset($value['schedule']) && is_array($value['schedule'])) {
  40. $this->_processConfigParam($value, $jobName, $result[$groupName]);
  41. $this->_processScheduleParam($value, $jobName, $result[$groupName]);
  42. }
  43. $this->_processRunModel($value, $jobName, $result[$groupName]);
  44. }
  45. }
  46. return $result;
  47. }
  48. /**
  49. * Fetch parameter 'config_path' from 'schedule' container
  50. *
  51. * @param array $jobConfig
  52. * @param string $jobName
  53. * @param array $result
  54. * @return void
  55. */
  56. protected function _processConfigParam(array $jobConfig, $jobName, array &$result)
  57. {
  58. if (array_key_exists('config_path', $jobConfig['schedule'])) {
  59. $result[$jobName]['config_path'] = $jobConfig['schedule']['config_path'];
  60. }
  61. }
  62. /**
  63. * Fetch parameter 'cron_expr' from 'schedule' container, reassign it
  64. *
  65. * @param array $jobConfig
  66. * @param string $jobName
  67. * @param array $result
  68. * @return void
  69. */
  70. protected function _processScheduleParam(array $jobConfig, $jobName, array &$result)
  71. {
  72. if (array_key_exists('cron_expr', $jobConfig['schedule'])) {
  73. $result[$jobName]['schedule'] = $jobConfig['schedule']['cron_expr'];
  74. }
  75. }
  76. /**
  77. * Fetch parameters from 'run' container and save it by reference
  78. *
  79. * @param array $jobConfig
  80. * @param string $jobName
  81. * @param array $result
  82. * @return void
  83. */
  84. protected function _processRunModel(array $jobConfig, $jobName, array &$result)
  85. {
  86. if (isset($jobConfig['run']) && is_array($jobConfig['run']) && array_key_exists('model', $jobConfig['run'])) {
  87. $callPath = explode('::', $jobConfig['run']['model']);
  88. if (empty($callPath) || empty($callPath[0]) || empty($callPath[1])) {
  89. unset($result[$jobName]['run']);
  90. return;
  91. }
  92. $result[$jobName]['instance'] = $callPath[0];
  93. $result[$jobName]['method'] = $callPath[1];
  94. unset($result[$jobName]['run']);
  95. }
  96. }
  97. }