Completed
Push — master ( 06c1ce...67d37c )
by Jeroen
06:20
created

Command/GoogleAnalyticsSegmentsListCommand.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\DashboardBundle\Command;
4
5
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
6
use Symfony\Component\Console\Input\InputInterface;
7
use Symfony\Component\Console\Input\InputOption;
8
use Symfony\Component\Console\Output\OutputInterface;
9
use Doctrine\ORM\EntityManagerInterface;
10
11
/**
12
 * @final since 5.1
13
 * NEXT_MAJOR extend from `Command` and remove `$this->getContainer` usages
14
 */
15
class GoogleAnalyticsSegmentsListCommand extends ContainerAwareCommand
16
{
17
    /** @var EntityManagerInterface */
18
    private $em;
19
20
    /**
21
     * @param EntityManagerInterface|null $em
22
     */
23
    public function __construct(/* EntityManagerInterface */ $em = null)
24
    {
25
        parent::__construct();
26
27
        if (!$em instanceof EntityManagerInterface) {
28
            @trigger_error(sprintf('Passing a command name as the first argument of "%s" is deprecated since version symfony 3.4 and will be removed in symfony 4.0. If the command was registered by convention, make it a service instead. ', __METHOD__), E_USER_DEPRECATED);
29
30
            $this->setName(null === $em ? 'kuma:dashboard:widget:googleanalytics:segments:list' : $em);
31
32
            return;
33
        }
34
35
        $this->em = $em;
36
    }
37
38
    protected function configure()
39
    {
40
        $this
41
            ->setName('kuma:dashboard:widget:googleanalytics:segments:list')
42
            ->setDescription('List available segments')
43
            ->addOption(
44
                'config',
45
                null,
46
                InputOption::VALUE_OPTIONAL,
47
                'Specify to only list overviews of one config',
48
                false
49
            );
50
    }
51
52
    /**
53
     * @param InputInterface  $input
54
     * @param OutputInterface $output
55
     *
56
     * @return int|null|void
57
     */
58
    protected function execute(InputInterface $input, OutputInterface $output)
59
    {
60
        if (null === $this->em) {
61
            $this->em = $this->getContainer()->get('doctrine.orm.entity_manager');
62
        }
63
64
        // get params
65
        $configId = $input->getOption('config');
66
67
        try {
68
            if ($configId) {
69
                $segments = $this->getSegmentsOfConfig($configId);
70
            } else {
71
                $segments = $this->getAllSegments();
72
            }
73
74
            if (\count($segments)) {
75
                $result = "\t".'<fg=green>' . \count($segments) . '</fg=green> segments found:';
76
                $output->writeln($result);
77
                foreach ($segments as $segment) {
78
                    $result = "\t".'(id: <fg=cyan>' .$segment->getId() . '</fg=cyan>)';
79
                    $result .= "\t".'(config: <fg=cyan>' .$segment->getconfig()->getId() . '</fg=cyan>)';
80
                    $result .= "\t" .'<fg=cyan>'. $segment->getquery() .'</fg=cyan> ('.$segment->getName().')';
81
82
                    $output->writeln($result);
83
                }
84
            } else {
85
                $output->writeln('No segments found');
86
            }
87
88
            return 0;
89
        } catch (\Exception $e) {
90
            $output->writeln('<fg=red>'.$e->getMessage().'</fg=red>');
91
92
            return 1;
93
        }
94
    }
95
96
    /**
97
     * get all segments of a config
98
     *
99
     * @param int $configId
100
     *
101
     * @return array
102
     */
103 View Code Duplication
    private function getSegmentsOfConfig($configId)
104
    {
105
        // get specified config
106
        $configRepository = $this->em->getRepository('KunstmaanDashboardBundle:AnalyticsConfig');
107
        $config = $configRepository->find($configId);
108
109
        if (!$config) {
110
            throw new \Exception('Unkown config ID');
111
        }
112
113
        // get the segments
114
        return $config->getSegments();
115
    }
116
117
    /**
118
     * get all segments
119
     *
120
     * @return array
0 ignored issues
show
Consider making the return type a bit more specific; maybe use object[].

This check looks for the generic type array as a return type and suggests a more specific type. This type is inferred from the actual code.

Loading history...
121
     */
122
    private function getAllSegments()
123
    {
124
        // get all segments
125
        $segmentRepository = $this->em->getRepository('KunstmaanDashboardBundle:AnalyticsSegment');
126
127
        return $segmentRepository->findAll();
128
    }
129
}
130