@@ -139,12 +139,13 @@ public function findAllKeywords(string $user_id) {
139
139
public function findAllCategories (string $ user_id ) {
140
140
$ qb = $ this ->db ->getQueryBuilder ();
141
141
142
- $ qb ->select ('k.name ' )
143
- ->selectAlias ($ qb ->createFunction ('COUNT(k.recipe_id) ' ), 'recipe_count ' )
144
- ->from (self ::DB_TABLE_CATEGORIES , 'k ' )
145
- ->where ('user_id = :user AND k.name != \'\'' )
146
- ->groupBy ('k.name ' )
147
- ->orderBy ('k.name ' );
142
+ // Get all named categories
143
+ $ qb ->select ('c.name ' )
144
+ ->selectAlias ($ qb ->createFunction ('COUNT(c.recipe_id) ' ), 'recipe_count ' )
145
+ ->from (self ::DB_TABLE_CATEGORIES , 'c ' )
146
+ ->where ('user_id = :user ' )
147
+ ->groupBy ('c.name ' )
148
+ ->orderBy ('c.name ' );
148
149
$ qb ->setParameter ('user ' , $ user_id , TYPE ::STRING );
149
150
150
151
$ cursor = $ qb ->execute ();
@@ -153,6 +154,7 @@ public function findAllCategories(string $user_id) {
153
154
154
155
$ qb = $ this ->db ->getQueryBuilder ();
155
156
157
+ // Get count of recipes without category
156
158
$ qb ->select ($ qb ->createFunction ('COUNT(1) as cnt ' ))
157
159
->from (self ::DB_TABLE_RECIPES , 'r ' )
158
160
->leftJoin (
@@ -177,7 +179,7 @@ public function findAllCategories(string $user_id) {
177
179
'name ' => '* ' ,
178
180
'recipe_count ' => $ row ['cnt ' ]
179
181
);
180
-
182
+
181
183
$ result = array_unique ($ result , SORT_REGULAR );
182
184
$ result = array_filter ($ result );
183
185
@@ -186,21 +188,45 @@ public function findAllCategories(string $user_id) {
186
188
187
189
/**
188
190
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
191
+ *
192
+ * Using '_' as a placeholder for recipes w/o category
189
193
*/
190
194
public function getRecipesByCategory (string $ category , string $ user_id ) {
191
195
$ qb = $ this ->db ->getQueryBuilder ();
192
196
193
- $ qb ->select (['r.recipe_id ' , 'r.name ' ])
194
- ->from (self ::DB_TABLE_CATEGORIES , 'k ' )
195
- ->where ('k.name = :category ' )
196
- ->andWhere ('k.user_id = :user ' )
197
- ->setParameter ('category ' , $ category , TYPE ::STRING )
198
- ->setParameter ('user ' , $ user_id , TYPE ::STRING );
199
-
200
- $ qb ->join ('k ' , self ::DB_TABLE_RECIPES , 'r ' , 'k.recipe_id = r.recipe_id ' );
197
+ if ($ category != '_ ' )
198
+ {
199
+ $ qb ->select (['r.recipe_id ' , 'r.name ' ])
200
+ ->from (self ::DB_TABLE_CATEGORIES , 'k ' )
201
+ ->where ('k.name = :category ' )
202
+ ->andWhere ('k.user_id = :user ' )
203
+ ->setParameter ('category ' , $ category , TYPE ::STRING )
204
+ ->setParameter ('user ' , $ user_id , TYPE ::STRING );
205
+
206
+ $ qb ->join ('k ' , self ::DB_TABLE_RECIPES , 'r ' , 'k.recipe_id = r.recipe_id ' );
201
207
202
- $ qb ->groupBy (['r.name ' , 'r.recipe_id ' ]);
203
- $ qb ->orderBy ('r.name ' );
208
+ $ qb ->groupBy (['r.name ' , 'r.recipe_id ' ]);
209
+ $ qb ->orderBy ('r.name ' );
210
+ }
211
+ else
212
+ {
213
+
214
+ $ qb ->select (['r.recipe_id ' , 'r.name ' ])
215
+ ->from (self ::DB_TABLE_RECIPES , 'r ' )
216
+ ->leftJoin (
217
+ 'r ' ,
218
+ self ::DB_TABLE_CATEGORIES ,
219
+ 'c ' ,
220
+ $ qb ->expr ()->andX (
221
+ 'r.user_id = c.user_id ' ,
222
+ 'r.recipe_id = c.recipe_id '
223
+ )
224
+ )
225
+ ->where (
226
+ $ qb ->expr ()->eq ('r.user_id ' , $ qb ->expr ()->literal ($ user_id )),
227
+ $ qb ->expr ()->isNull ('c.name ' )
228
+ );
229
+ }
204
230
205
231
$ cursor = $ qb ->execute ();
206
232
$ result = $ cursor ->fetchAll ();
0 commit comments