Completed
Push — master ( 34318d...75f992 )
by Jacob
03:35
created

MysqlPostRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Jacobemerick\Web\Domain\Blog\Post;
4
5
use Aura\Sql\ConnectionLocator;
6
7
class MysqlPostRepository implements PostRepositoryInterface
8
{
9
10
    /** @var  Aura\Sql\ConnectionLocator */
11
    protected $connections;
12
13
    /**
14
     * @param Aura\Sql\ConnectionLocator $connections
15
     */
16
    public function __construct(ConnectionLocator $connections)
17
    {
18
        $this->connections = $connections;
0 ignored issues
show
Documentation Bug introduced by
It seems like $connections of type object<Aura\Sql\ConnectionLocator> is incompatible with the declared type object<Jacobemerick\Web\...\Sql\ConnectionLocator> of property $connections.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
19
    }
20
21
    /**
22
     * @param string $category
23
     * @param string $path
24
     *
25
     * @return array|false
26
     */
27 View Code Duplication
    public function findPostByPath($category, $path)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
28
    {
29
        $query = "
30
            SELECT `id`, `title`, `path`, `date`, `body`, `category`
31
            FROM `jpemeric_blog`.`post`
32
            WHERE `path` = :path AND `category` = :category AND `display` = :is_active
33
            LIMIT 1";
34
        $bindings = [
35
            'path'      => $path,
36
            'category'  => $category,
37
            'is_active' => 1,
38
        ];
39
40
        return $this
41
            ->connections
42
            ->getRead()
43
            ->fetchOne($query, $bindings);
44
    }
45
46
    public function getActivePosts($limit = null, $offset = 0)
47
    {
48
        $query = "
49
            SELECT `id`, `title`, `path`, `date`, `body`, `category`
50
            FROM `jpemeric_blog`.`post`
51
            WHERE `display` = :is_active
52
            ORDER BY `date` DESC";
53
        if ($limit != null) {
54
            $query .= "
55
            LIMIT {$offset}, {$limit}";
56
        }
57
58
        $bindings = [
59
            'is_active' => 1,
60
        ];
61
62
        return $this
63
            ->connections
64
            ->getRead()
65
            ->fetchAll($query, $bindings);
66
    }
67
68
    public function getActivePostsCount()
69
    {
70
        $query = "
71
            SELECT COUNT(1) AS `count`
72
            FROM `jpemeric_blog`.`post`
73
            WHERE `display` = :is_active";
74
        $bindings = [
75
            'is_active' => 1,
76
        ];
77
78
        return $this
79
            ->connections
80
            ->getRead()
81
            ->fetchValue($query, $bindings);
82
    }
83
84 View Code Duplication
    public function getActivePostsByTag($tag, $limit = null, $offset = 0)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
85
    {
86
        $query = "
87
            SELECT `id`, `title`, `path`, `date`, `body`, `category`
88
            FROM `jpemeric_blog`.`post`
89
            INNER JOIN `jpemeric_blog`.`ptlink` ON `ptlink`.`post_id` = `post`.`id` AND
90
                                                   `ptlink`.`tag_id` = :tag_id
91
            WHERE `display` = :is_active";
92
        if ($limit != null) {
93
            $query .= "
94
            LIMIT {$offset}, {$limit}";
95
        }
96
97
        $bindings = [
98
            'tag_id'    => $tag,
99
            'is_active' => 1,
100
        ];
101
102
        return $this
103
            ->connections
104
            ->getRead()
105
            ->fetchAll($query, $bindings);
106
    }
107
108 View Code Duplication
    public function getActivePostsCountByTag($tag)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
109
    {
110
        $query = "
111
            SELECT COUNT(1) AS `count`
112
            FROM `jpemeric_blog`.`post`
113
            INNER JOIN `jpemeric_blog`.`ptlink` ON `ptlink`.`post_id` = `post`.`id` AND
114
                                                   `ptlink`.`tag_id` = :tag_id
115
            WHERE `display` = :is_active";
116
        $bindings = [
117
            'tag_id'    => $tag,
118
            'is_active' => 1,
119
        ];
120
121
        return $this
122
            ->connections
123
            ->getRead()
124
            ->fetchValue($query, $bindings);
125
    }
126
127 View Code Duplication
    public function getActivePostsByCategory($category, $limit = null, $offset = 0)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
128
    {
129
        $query = "
130
            SELECT `id`, `title`, `path`, `date`, `body`, `category`
131
            FROM `jpemeric_blog`.`post`
132
            WHERE `category` = :category AND `display` = :is_active";
133
        if ($limit != null) {
134
            $query .= "
135
            LIMIT {$offset}, {$limit}";
136
        }
137
138
        $bindings = [
139
            'category'  => $category,
140
            'is_active' => 1,
141
        ];
142
143
        return $this
144
            ->connections
145
            ->getRead()
146
            ->fetchAll($query, $bindings);
147
    }
148
149 View Code Duplication
    public function getActivePostsCountByCategory($category)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
150
    {
151
        $query = "
152
            SELECT COUNT(1) AS `count`
153
            FROM `jpemeric_blog`.`post`
154
            WHERE `category` = :category AND `display` = :is_active";
155
        $bindings = [
156
            'category'  => $category,
157
            'is_active' => 1,
158
        ];
159
160
        return $this
161
            ->connections
162
            ->getRead()
163
            ->fetchValue($query, $bindings);
164
    }
165
166 View Code Duplication
    public function getActivePostsByRelatedTags($post, $limit = 4)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

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.

Loading history...
167
    {
168
        $query = "
169
            SELECT `id`, `title`, `path`, `date`, `body`, `category`, COUNT(1) AS `count`
170
            FROM `jpemeric_blog`.`post`
171
            INNER JOIN `jpemeric_blog`.`ptlink` ON `ptlink`.`post_id` = `post`.`id` AND
172
                                                   `ptlink`.`tag_id` IN (
173
                SELECT `id`
174
                FROM `jpemeric_blog`.`tag`
175
                INNER JOIN `jpemeric_blog`.`ptlink` ON `ptlink`.`tag_id` = `tag`.`id` AND
176
                                                       `ptlink`.`post_id` = :post)
177
            WHERE `id` <> :post AND `id` NOT IN (
178
                SELECT `post`
179
                FROM `jpemeric_blog`.`series_post`
180
                WHERE `id` = (
181
                    SELECT `series`
182
                    FROM `jpemeric_blog`.`series_post`
183
                    WHERE `post` = :post
184
                )) AND `display` = :is_active
185
            GROUP BY `id`
186
            ORDER BY `count` DESC
187
            LIMIT {$limit}";
188
        $bindings = [
189
            'post'      => $post,
190
            'is_active' => 1,
191
        ];
192
193
        return $this
194
            ->connections
195
            ->getRead()
196
            ->fetchAll($query, $bindings);
197
    }
198
}
199