1 | <?php |
||
18 | class ListShortcodesCommand extends Command |
||
19 | { |
||
20 | use PaginatorUtilsTrait; |
||
21 | |||
22 | /** |
||
23 | * @var ShortUrlServiceInterface |
||
24 | */ |
||
25 | private $shortUrlService; |
||
26 | /** |
||
27 | * @var TranslatorInterface |
||
28 | */ |
||
29 | private $translator; |
||
30 | |||
31 | /** |
||
32 | * ListShortcodesCommand constructor. |
||
33 | * @param ShortUrlServiceInterface $shortUrlService |
||
34 | * @param TranslatorInterface $translator |
||
35 | * |
||
36 | * @Inject({ShortUrlService::class, "translator"}) |
||
37 | */ |
||
38 | 5 | public function __construct(ShortUrlServiceInterface $shortUrlService, TranslatorInterface $translator) |
|
44 | |||
45 | 5 | public function configure() |
|
46 | { |
||
47 | 5 | $this->setName('shortcode:list') |
|
48 | 5 | ->setDescription($this->translator->translate('List all short URLs')) |
|
49 | 5 | ->addOption( |
|
50 | 5 | 'page', |
|
51 | 5 | 'p', |
|
52 | 5 | InputOption::VALUE_OPTIONAL, |
|
53 | 5 | sprintf( |
|
54 | 5 | $this->translator->translate('The first page to list (%s items per page)'), |
|
55 | PaginableRepositoryAdapter::ITEMS_PER_PAGE |
||
56 | 5 | ), |
|
57 | 1 |
||
58 | 5 | ) |
|
59 | 5 | ->addOption( |
|
60 | 5 | 'searchTerm', |
|
61 | 5 | 's', |
|
62 | 5 | InputOption::VALUE_OPTIONAL, |
|
63 | 5 | $this->translator->translate( |
|
64 | 'A query used to filter results by searching for it on the longUrl and shortCode fields' |
||
65 | 5 | ) |
|
66 | 5 | ) |
|
67 | 5 | ->addOption( |
|
68 | 5 | 'tags', |
|
69 | 5 | 't', |
|
70 | 5 | InputOption::VALUE_OPTIONAL, |
|
71 | 5 | $this->translator->translate('A comma-separated list of tags to filter results') |
|
72 | 5 | ) |
|
73 | 5 | ->addOption( |
|
74 | 5 | 'orderBy', |
|
75 | 5 | 'o', |
|
76 | 5 | InputOption::VALUE_OPTIONAL, |
|
77 | 5 | $this->translator->translate( |
|
78 | 'The field from which we want to order by. Pass ASC or DESC separated by a comma' |
||
79 | 5 | ) |
|
80 | 5 | ) |
|
81 | 5 | ->addOption( |
|
82 | 5 | 'showTags', |
|
83 | 5 | null, |
|
84 | 5 | InputOption::VALUE_NONE, |
|
85 | 5 | $this->translator->translate('Whether to display the tags or not') |
|
86 | 5 | ); |
|
87 | 5 | } |
|
88 | |||
89 | 5 | public function execute(InputInterface $input, OutputInterface $output) |
|
90 | { |
||
91 | 5 | $page = intval($input->getOption('page')); |
|
92 | 5 | $searchTerm = $input->getOption('searchTerm'); |
|
93 | 5 | $tags = $input->getOption('tags'); |
|
94 | 5 | $tags = ! empty($tags) ? explode(',', $tags) : []; |
|
95 | 5 | $showTags = $input->getOption('showTags'); |
|
96 | 5 | $orderBy = $input->getOption('orderBy'); |
|
|
|||
97 | |||
98 | /** @var QuestionHelper $helper */ |
||
99 | 5 | $helper = $this->getHelper('question'); |
|
100 | |||
101 | do { |
||
102 | 5 | $result = $this->shortUrlService->listShortUrls($page, $searchTerm, $tags, $this->processOrderBy($input)); |
|
103 | 5 | $page++; |
|
104 | 5 | $table = new Table($output); |
|
105 | |||
106 | $headers = [ |
||
107 | 5 | $this->translator->translate('Short code'), |
|
108 | 5 | $this->translator->translate('Original URL'), |
|
109 | 5 | $this->translator->translate('Date created'), |
|
110 | 5 | $this->translator->translate('Visits count'), |
|
111 | 5 | ]; |
|
112 | 5 | if ($showTags) { |
|
113 | 1 | $headers[] = $this->translator->translate('Tags'); |
|
114 | 1 | } |
|
115 | 5 | $table->setHeaders($headers); |
|
116 | |||
117 | 5 | foreach ($result as $row) { |
|
118 | 2 | $shortUrl = $row->jsonSerialize(); |
|
119 | 2 | if ($showTags) { |
|
120 | $shortUrl['tags'] = []; |
||
121 | foreach ($row->getTags() as $tag) { |
||
122 | $shortUrl['tags'][] = $tag->getName(); |
||
123 | } |
||
124 | $shortUrl['tags'] = implode(', ', $shortUrl['tags']); |
||
125 | } else { |
||
126 | 2 | unset($shortUrl['tags']); |
|
127 | } |
||
128 | |||
129 | 2 | $table->addRow(array_values($shortUrl)); |
|
130 | 5 | } |
|
131 | 5 | $table->render(); |
|
132 | |||
133 | 5 | if ($this->isLastPage($result)) { |
|
134 | 4 | $continue = false; |
|
135 | 4 | $output->writeln( |
|
136 | 4 | sprintf('<info>%s</info>', $this->translator->translate('You have reached last page')) |
|
137 | 4 | ); |
|
138 | 4 | } else { |
|
139 | 2 | $continue = $helper->ask($input, $output, new ConfirmationQuestion( |
|
140 | 2 | sprintf('<question>' . $this->translator->translate( |
|
141 | 'Continue with page' |
||
142 | 2 | ) . ' <bg=cyan;options=bold>%s</>? (y/N)</question> ', $page), |
|
143 | false |
||
144 | 2 | )); |
|
145 | } |
||
146 | 5 | } while ($continue); |
|
147 | 5 | } |
|
148 | |||
149 | 5 | protected function processOrderBy(InputInterface $input) |
|
159 | } |
||
160 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.