Skip to content

Commit

Permalink
BAP-18959: Remove direct service retrieval - Part 9 (#24188)
Browse files Browse the repository at this point in the history
 - get rid from fetching services from container in:
   - ExceptionController
   - CacheClearCommand
   - EmailSyncCommand
   - KernelRequestListener
   - LicenseCommand
   - PasswordExpirationNotificationCommand
   - EmailSyncCommand
   - CleanupCommand
   - ConsumerHeartbeatCommand
   - MassNotificationCommand
   - ThemeExtension
  • Loading branch information
Yaroslav Bracilo authored and Mykhailo Sulyma committed Jun 11, 2019
1 parent 3551dd0 commit 3c1cd5b
Show file tree
Hide file tree
Showing 23 changed files with 215 additions and 163 deletions.
6 changes: 1 addition & 5 deletions src/Oro/Bundle/ActionBundle/Resources/config/controllers.yml
Expand Up @@ -2,12 +2,8 @@ services:
_defaults:
public: true

oro_action.controller.ajax:
class: 'Oro\Bundle\ActionBundle\Controller\AjaxController'
Oro\Bundle\ActionBundle\Controller\AjaxController:
calls:
- [setContainer, ['@Psr\Container\ContainerInterface']]
tags:
- { name: 'container.service_subscriber' }

Oro\Bundle\ActionBundle\Controller\AjaxController:
alias: 'oro_action.controller.ajax'
Expand Up @@ -10,7 +10,8 @@ Feature: Disable Email system functionality
When I go to Dashboards/Dashboard
Then should see "Recent Emails"
And I should see an "Recent Emails" element
When I go to System/Scheduled Tasks
And I go to System/Scheduled Tasks
When I select 50 records per page
Then I should see following records in grid:
| oro:cron:email-body-sync |
| oro:cron:imap-sync |
Expand Down
Expand Up @@ -2,12 +2,8 @@ services:
_defaults:
public: true

oro_datagrid.controller.grid:
class: 'Oro\Bundle\DataGridBundle\Controller\GridController'
Oro\Bundle\DataGridBundle\Controller\GridController:
calls:
- [setContainer, ['@Psr\Container\ContainerInterface']]
tags:
- { name: 'container.service_subscriber' }

Oro\Bundle\DataGridBundle\Controller\GridController:
alias: 'oro_datagrid.controller.grid'
6 changes: 1 addition & 5 deletions src/Oro/Bundle/EmailBundle/Resources/config/controllers.yml
Expand Up @@ -2,12 +2,8 @@ services:
_defaults:
public: true

oro_email.controller.auto_response_rule:
class: 'Oro\Bundle\EmailBundle\Controller\AutoResponseRuleController'
Oro\Bundle\EmailBundle\Controller\AutoResponseRuleController:
calls:
- [setContainer, ['@Psr\Container\ContainerInterface']]
tags:
- { name: 'container.service_subscriber' }

Oro\Bundle\EmailBundle\Controller\AutoResponseRuleController:
alias: 'oro_email.controller.auto_response_rule'
Expand Up @@ -2,6 +2,7 @@

namespace Oro\Bundle\EmailBundle\Tests\Functional\Command\Cron;

use Oro\Bundle\EmailBundle\Tests\Functional\DataFixtures\LoadEmailData;
use Oro\Bundle\EmailBundle\Tests\Functional\EmailFeatureTrait;
use Oro\Bundle\TestFrameworkBundle\Test\WebTestCase;

Expand All @@ -15,9 +16,7 @@ class EmailBodySyncCommandTest extends WebTestCase
protected function setUp()
{
$this->initClient();
$this->loadFixtures([
'Oro\Bundle\EmailBundle\Tests\Functional\DataFixtures\LoadEmailData'
]);
$this->loadFixtures([LoadEmailData::class]);
}

/**
Expand Down
53 changes: 34 additions & 19 deletions src/Oro/Bundle/ImapBundle/Command/Cron/EmailSyncCommand.php
Expand Up @@ -3,21 +3,20 @@
namespace Oro\Bundle\ImapBundle\Command\Cron;

use Oro\Bundle\CronBundle\Command\CronCommandInterface;
use Oro\Bundle\EmailBundle\Sync\EmailSynchronizerInterface;
use Oro\Bundle\EmailBundle\Sync\Model\SynchronizationProcessorSettings;
use Oro\Bundle\ImapBundle\Sync\ImapEmailSynchronizer;
use Oro\Bundle\FeatureToggleBundle\Checker\FeatureChecker;
use Oro\Component\Log\OutputLogger;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class EmailSyncCommand extends ContainerAwareCommand implements CronCommandInterface
/**
* Synchronization emails via IMAP
*/
class EmailSyncCommand extends Command implements CronCommandInterface
{
/**
* Command name
*/
const COMMAND_NAME = 'oro:cron:imap-sync';

/**
* The maximum number of email origins which can be synchronized
*/
Expand All @@ -43,6 +42,28 @@ class EmailSyncCommand extends ContainerAwareCommand implements CronCommandInter
*/
const MAX_JOBS_COUNT = 3;

/** @var string */
protected static $defaultName = 'oro:cron:imap-sync';

/** @var EmailSynchronizerInterface */
private $imapEmailSynchronizer;

/** @var FeatureChecker */
protected $featureChecker;

/**
* @param FeatureChecker $featureChecker
* @param EmailSynchronizerInterface $imapEmailSynchronizer
*/
public function __construct(
FeatureChecker $featureChecker,
EmailSynchronizerInterface $imapEmailSynchronizer
) {
$this->featureChecker = $featureChecker;
$this->imapEmailSynchronizer = $imapEmailSynchronizer;
parent::__construct();
}

/**
* @inheritdoc
*/
Expand All @@ -56,9 +77,7 @@ public function getDefaultDefinition()
*/
public function isActive()
{
$featureChecker = $this->getContainer()->get('oro_featuretoggle.checker.feature_checker');

return $featureChecker->isResourceEnabled(self::COMMAND_NAME, 'cron_jobs');
return $this->featureChecker->isResourceEnabled(self::$defaultName, 'cron_jobs');
}

/**
Expand All @@ -67,7 +86,6 @@ public function isActive()
protected function configure()
{
$this
->setName(self::COMMAND_NAME)
->setDescription('Synchronization emails via IMAP')
->addOption(
'max-concurrent-tasks',
Expand Down Expand Up @@ -123,16 +141,13 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$featureChecker = $this->getContainer()->get('oro_featuretoggle.checker.feature_checker');
if (!$featureChecker->isFeatureEnabled('email')) {
if (!$this->featureChecker->isFeatureEnabled('email')) {
$output->writeln('The email feature is disabled. The command will not run.');

return 0;
}

/** @var ImapEmailSynchronizer $synchronizer */
$synchronizer = $this->getContainer()->get('oro_imap.email_synchronizer');
$synchronizer->setLogger(new OutputLogger($output));
$this->imapEmailSynchronizer->setLogger(new OutputLogger($output));

$force = $input->getOption('force');
$showMessage = $input->getOption('vvv');
Expand All @@ -143,9 +158,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
} else {
if (!empty($originIds)) {
$settings = new SynchronizationProcessorSettings($force, $showMessage);
$synchronizer->syncOrigins($originIds, $settings);
$this->imapEmailSynchronizer->syncOrigins($originIds, $settings);
} else {
$synchronizer->sync(
$this->imapEmailSynchronizer->sync(
(int)$input->getOption('max-concurrent-tasks'),
(int)$input->getOption('min-exec-interval'),
(int)$input->getOption('max-exec-time'),
Expand Down
3 changes: 3 additions & 0 deletions src/Oro/Bundle/ImapBundle/Resources/config/commands.yml
Expand Up @@ -2,6 +2,9 @@ services:
Oro\Bundle\ImapBundle\Command\Cron\EmailSyncCommand:
public: false
class: Oro\Bundle\ImapBundle\Command\Cron\EmailSyncCommand
arguments:
- '@oro_featuretoggle.checker.feature_checker'
- '@oro_imap.email_synchronizer'
tags:
- { name: console.command }

Expand Down
Expand Up @@ -2,12 +2,8 @@ services:
_defaults:
public: true

oro_importexport.controller.import_export:
class: 'Oro\Bundle\ImportExportBundle\Controller\ImportExportController'
Oro\Bundle\ImportExportBundle\Controller\ImportExportController:
calls:
- [setContainer, ['@Psr\Container\ContainerInterface']]
tags:
- { name: 'container.service_subscriber' }

Oro\Bundle\ImportExportBundle\Controller\ImportExportController:
alias: 'oro_importexport.controller.import_export'
57 changes: 37 additions & 20 deletions src/Oro/Bundle/IntegrationBundle/Command/CleanupCommand.php
Expand Up @@ -2,6 +2,7 @@

namespace Oro\Bundle\IntegrationBundle\Command;

use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\DBAL\Connection;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query;
Expand All @@ -10,21 +11,41 @@
use Oro\Bundle\CronBundle\Command\CronCommandInterface;
use Oro\Bundle\EntityBundle\ORM\NativeQueryExecutorHelper;
use Oro\Bundle\IntegrationBundle\Entity\Status;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

/**
* Command to clean up old integration status records
*/
class CleanupCommand extends ContainerAwareCommand implements CronCommandInterface
class CleanupCommand extends Command implements CronCommandInterface
{
const BATCH_SIZE = 100;
const COMMAND_NAME = 'oro:cron:integration:cleanup';
const FAILED_STATUSES_INTERVAL = '1 month';
const DEFAULT_COMPLETED_STATUSES_INTERVAL = '1 week';

/** @var string */
protected static $defaultName = 'oro:cron:integration:cleanup';

/** var ManagerRegistry **/
private $registry;

/** @var NativeQueryExecutorHelper */
private $nativeQueryExecutorHelper;

/**
* @param ManagerRegistry $registry
* @param NativeQueryExecutorHelper $nativeQueryExecutorHelper
*/
public function __construct(ManagerRegistry $registry, NativeQueryExecutorHelper $nativeQueryExecutorHelper)
{
parent::__construct();

$this->registry = $registry;
$this->nativeQueryExecutorHelper = $nativeQueryExecutorHelper;
}

/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -59,7 +80,6 @@ public function isActive()
protected function configure()
{
$this
->setName(self::COMMAND_NAME)
->setDescription('Clean up integration statuses history')
->addOption(
'interval',
Expand Down Expand Up @@ -133,8 +153,9 @@ protected function deleteRecords(BufferedIdentityQueryResultIterator $iterator,
*/
protected function processDeletion($ids, $className)
{
$this->getEntityManager()
->getRepository($className)
/** @var EntityManager $em */
$em = $this->registry->getManagerForClass($className);
$em->getRepository($className)
->createQueryBuilder('entity')
->delete($className, 'entity')
->where('entity.id IN (:ids)')
Expand All @@ -151,8 +172,10 @@ protected function processDeletion($ids, $className)
*/
protected function getOldIntegrationStatusesQueryBuilder($completedInterval, $failedInterval)
{
$queryBuilder = $this->getEntityManager()
->getRepository('OroIntegrationBundle:Status')
/** @var EntityManager $em */
$em = $this->registry->getManagerForClass(Status::class);

$queryBuilder = $em->getRepository(Status::class)
->createQueryBuilder('status');

$expr = $queryBuilder->expr();
Expand All @@ -178,26 +201,20 @@ protected function getOldIntegrationStatusesQueryBuilder($completedInterval, $fa
return $queryBuilder;
}

/**
* @return EntityManager
*/
protected function getEntityManager()
{
return $this->getContainer()->get('doctrine')->getManager();
}

/**
* Exclude last connector status by date
*
* @return array
*/
protected function prepareExcludes()
{
/** @var EntityManager $em */
$em = $this->registry->getManagerForClass(Status::class);

/** @var Connection $connection */
$connection = $this->getEntityManager()->getConnection();
/** @var NativeQueryExecutorHelper $nativeQueryExecutorHelper */
$nativeQueryExecutorHelper = $this->getContainer()->get('oro_entity.orm.native_query_executor_helper');
$tableName = $nativeQueryExecutorHelper->getTableName(Status::class);
$connection = $em->getConnection();

$tableName = $this->nativeQueryExecutorHelper->getTableName(Status::class);
$selectQuery = <<<SQL
SELECT MAX(a.id) AS id
FROM
Expand Down
10 changes: 6 additions & 4 deletions src/Oro/Bundle/IntegrationBundle/Resources/config/commands.yml
@@ -1,12 +1,14 @@
services:
Oro\Bundle\IntegrationBundle\Command\CleanupCommand:
_defaults:
public: false
class: Oro\Bundle\IntegrationBundle\Command\CleanupCommand

Oro\Bundle\IntegrationBundle\Command\CleanupCommand:
arguments:
- '@doctrine'
- '@oro_entity.orm.native_query_executor_helper'
tags:
- { name: console.command }

Oro\Bundle\IntegrationBundle\Command\SyncCommand:
public: false
class: Oro\Bundle\IntegrationBundle\Command\SyncCommand
tags:
- { name: console.command }
3 changes: 3 additions & 0 deletions src/Oro/Bundle/LayoutBundle/Resources/config/services.yml
Expand Up @@ -29,6 +29,9 @@ services:
- '@oro_layout.layout_context_holder'
- '@oro_layout.profiler.layout_data_collector'

Oro\Bundle\LayoutBundle\Layout\LayoutManager:
alias: oro_layout.layout_manager

layout:
alias: oro_layout.layout_manager

Expand Down

0 comments on commit 3c1cd5b

Please sign in to comment.