This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * Lichtenwallner (https://lichtenwallner.at) |
||
4 | * |
||
5 | * @see https://github.com/jolicht/markdown-cms for the canonical source repository |
||
6 | * @license https://github.com/jolicht/markdown-cms/blob/master/LICENSE MIT |
||
7 | * @copyright Copyright (c) Johannes Lichtenwallner |
||
8 | */ |
||
9 | declare(strict_types = 1); |
||
10 | namespace Jolicht\MarkdownCms\Parser; |
||
11 | |||
12 | use Jolicht\MarkdownCms\Iterator\MarkdownFileIterator; |
||
13 | use Jolicht\MarkdownCms\ContentType\ContentCreator; |
||
14 | use Jolicht\MarkdownCms\Markdown\MarkdownDocumentParser; |
||
15 | |||
16 | class ContentParser |
||
17 | { |
||
18 | /** |
||
19 | * Markdown file iterator |
||
20 | * |
||
21 | * @var MarkdownFileIterator |
||
22 | */ |
||
23 | private $markdownFileIterator; |
||
24 | |||
25 | /** |
||
26 | * Content creator |
||
27 | * |
||
28 | * @var ContentCreator |
||
29 | */ |
||
30 | private $contentCreator; |
||
31 | |||
32 | /** |
||
33 | * Markdown document parser |
||
34 | * |
||
35 | * @var MarkdownDocumentParser |
||
36 | */ |
||
37 | private $mdDocumentParser; |
||
38 | |||
39 | /** |
||
40 | * Markdown options |
||
41 | * |
||
42 | * @var array |
||
43 | */ |
||
44 | private $markdownOptions; |
||
45 | |||
46 | /** |
||
47 | * Content path |
||
48 | * |
||
49 | * @var string |
||
50 | */ |
||
51 | private $contentDir; |
||
52 | |||
53 | /** |
||
54 | * Constructor |
||
55 | * |
||
56 | * @param MarkdownFileIterator $markdownFileIterator |
||
57 | * @param ContentCreator $contentCreator |
||
58 | * @param MarkdownDocumentParser $mdDocumentParser |
||
59 | */ |
||
60 | View Code Duplication | public function __construct(MarkdownFileIterator $markdownFileIterator, ContentCreator $contentCreator, |
|
0 ignored issues
–
show
|
|||
61 | MarkdownDocumentParser $mdDocumentParser, array $markdownOptions) |
||
62 | { |
||
63 | $this->markdownFileIterator = $markdownFileIterator; |
||
64 | $this->contentCreator = $contentCreator; |
||
65 | $this->mdDocumentParser = $mdDocumentParser; |
||
66 | $this->markdownOptions = $markdownOptions; |
||
67 | $this->contentDir = $markdownOptions['content_dir']; |
||
68 | } |
||
69 | |||
70 | public function __invoke() |
||
71 | { |
||
72 | |||
73 | $config = [ |
||
74 | 'all' => [], |
||
75 | 'content_types' => [ |
||
76 | 'blogEntry' => [ |
||
77 | 'all' => [], |
||
78 | 'tags' => [], |
||
79 | ], |
||
80 | ] |
||
81 | ]; |
||
82 | $mdDocumentParser = $this->getMarkdownDocumentParser(); |
||
83 | $contentCreator = $this->getContentCreator(); |
||
84 | foreach ($this->getMarkdownFileIterator() as $file) { |
||
85 | $entry = $contentCreator($mdDocumentParser(file_get_contents($file->getPathname()))); |
||
86 | $config['all'][$entry->getId()] = [ |
||
87 | 'src' => $this->getRelativePath($file) |
||
88 | ]; |
||
89 | if (true === $entry->isDraft()) { |
||
90 | continue; |
||
91 | } |
||
92 | $entryDate = $entry->getCreated()->format('Y-m-d\TH:i:s'); |
||
93 | $config['content_types'][$entry->getType()]['all'][$entryDate] = $entry->getId(); |
||
94 | if ('blogEntry' == $entry->getType()) { |
||
95 | foreach ($entry->getTags() as $tag) { |
||
96 | $config['content_types']['blogEntry']['tags'][$tag->getId()][$entryDate] = $entry->getId(); |
||
97 | } |
||
98 | } |
||
99 | } |
||
100 | foreach ($config['content_types'] as $type => $entry) { |
||
101 | $this->sortByDate($config['content_types'][$type]['all']); |
||
102 | } |
||
103 | ksort($config['content_types']['blogEntry']['tags']); |
||
104 | uasort($config['content_types']['blogEntry']['tags'], array($this, 'sortByEntryCountDescending')); |
||
105 | foreach ($config['content_types']['blogEntry']['tags'] as $tag => $entries) { |
||
106 | $this->sortByDate($config['content_types']['blogEntry']['tags'][$tag]); |
||
107 | } |
||
108 | return $config; |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * Get markdown file iterator |
||
113 | * |
||
114 | * @return MarkdownFileIterator |
||
115 | */ |
||
116 | public function getMarkdownFileIterator() : MarkdownFileIterator |
||
117 | { |
||
118 | return $this->markdownFileIterator; |
||
119 | } |
||
120 | |||
121 | /** |
||
122 | * Get content creator |
||
123 | * |
||
124 | * @return ContentCreator |
||
125 | */ |
||
126 | public function getContentCreator() : ContentCreator |
||
127 | { |
||
128 | return $this->contentCreator; |
||
129 | } |
||
130 | |||
131 | /** |
||
132 | * Get markdown document parser |
||
133 | * |
||
134 | * @return MarkdownDocumentParser |
||
135 | */ |
||
136 | public function getMarkdownDocumentParser() : MarkdownDocumentParser |
||
137 | { |
||
138 | return $this->mdDocumentParser; |
||
139 | } |
||
140 | |||
141 | /** |
||
142 | * Get markdown option |
||
143 | * |
||
144 | * @return array |
||
145 | */ |
||
146 | public function getMarkdownOptions() : array |
||
147 | { |
||
148 | return $this->markdownOptions; |
||
149 | } |
||
150 | |||
151 | /** |
||
152 | * Sort by date |
||
153 | * |
||
154 | * @param array $config |
||
155 | */ |
||
156 | private function sortByDate(array &$config) |
||
157 | { |
||
158 | krsort($config); |
||
159 | } |
||
160 | |||
161 | /** |
||
162 | * Get relative path |
||
163 | * |
||
164 | * @param \SplFileInfo $file |
||
165 | * @return string |
||
166 | */ |
||
167 | private function getRelativePath(\SplFileInfo $file) : string |
||
168 | { |
||
169 | $path = $file->getPathname(); |
||
170 | return substr($path, strrpos($path, $this->contentDir) + strlen($this->contentDir) + 1); |
||
171 | } |
||
172 | |||
173 | /** |
||
174 | * Sort by entry count descending |
||
175 | * |
||
176 | * @param array $a |
||
0 ignored issues
–
show
There is no parameter named
$a . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
177 | * @param array $b |
||
0 ignored issues
–
show
There is no parameter named
$b . Was it maybe removed?
This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. Consider the following example. The parameter /**
* @param array $germany
* @param array $island
* @param array $italy
*/
function finale($germany, $island) {
return "2:1";
}
The most likely cause is that the parameter was removed, but the annotation was not. ![]() |
|||
178 | * @return number |
||
179 | */ |
||
180 | private function sortByEntryCountDescending(array $configEntryA, array $configEntryB) |
||
181 | { |
||
182 | if (count($configEntryA) == count($configEntryB)) { |
||
183 | return 0; |
||
184 | } |
||
185 | return (count($configEntryA) >count($configEntryB)) ? -1 : 1; |
||
186 | } |
||
187 | } |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.