diff --git a/lib/Db/RecipeDb.php b/lib/Db/RecipeDb.php
index 0b677c227..05208a389 100755
--- a/lib/Db/RecipeDb.php
+++ b/lib/Db/RecipeDb.php
@@ -139,12 +139,13 @@ public function findAllKeywords(string $user_id) {
public function findAllCategories(string $user_id) {
$qb = $this->db->getQueryBuilder();
- $qb->select('k.name')
- ->selectAlias($qb->createFunction('COUNT(k.recipe_id)'), 'recipe_count')
- ->from(self::DB_TABLE_CATEGORIES, 'k')
- ->where('user_id = :user AND k.name != \'\'')
- ->groupBy('k.name')
- ->orderBy('k.name');
+ // Get all named categories
+ $qb->select('c.name')
+ ->selectAlias($qb->createFunction('COUNT(c.recipe_id)'), 'recipe_count')
+ ->from(self::DB_TABLE_CATEGORIES, 'c')
+ ->where('user_id = :user')
+ ->groupBy('c.name')
+ ->orderBy('c.name');
$qb->setParameter('user', $user_id, TYPE::STRING);
$cursor = $qb->execute();
@@ -153,6 +154,7 @@ public function findAllCategories(string $user_id) {
$qb = $this->db->getQueryBuilder();
+ // Get count of recipes without category
$qb->select($qb->createFunction('COUNT(1) as cnt'))
->from(self::DB_TABLE_RECIPES, 'r')
->leftJoin(
@@ -177,7 +179,7 @@ public function findAllCategories(string $user_id) {
'name' => '*',
'recipe_count' => $row['cnt']
);
-
+
$result = array_unique($result, SORT_REGULAR);
$result = array_filter($result);
@@ -186,21 +188,45 @@ public function findAllCategories(string $user_id) {
/**
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
+ *
+ * Using '_' as a placeholder for recipes w/o category
*/
public function getRecipesByCategory(string $category, string $user_id) {
$qb = $this->db->getQueryBuilder();
- $qb->select(['r.recipe_id', 'r.name'])
- ->from(self::DB_TABLE_CATEGORIES, 'k')
- ->where('k.name = :category')
- ->andWhere('k.user_id = :user')
- ->setParameter('category', $category, TYPE::STRING)
- ->setParameter('user', $user_id, TYPE::STRING);
-
- $qb->join('k', self::DB_TABLE_RECIPES, 'r', 'k.recipe_id = r.recipe_id');
+ if ($category != '_')
+ {
+ $qb->select(['r.recipe_id', 'r.name'])
+ ->from(self::DB_TABLE_CATEGORIES, 'k')
+ ->where('k.name = :category')
+ ->andWhere('k.user_id = :user')
+ ->setParameter('category', $category, TYPE::STRING)
+ ->setParameter('user', $user_id, TYPE::STRING);
+
+ $qb->join('k', self::DB_TABLE_RECIPES, 'r', 'k.recipe_id = r.recipe_id');
- $qb->groupBy(['r.name', 'r.recipe_id']);
- $qb->orderBy('r.name');
+ $qb->groupBy(['r.name', 'r.recipe_id']);
+ $qb->orderBy('r.name');
+ }
+ else
+ {
+
+ $qb->select(['r.recipe_id', 'r.name'])
+ ->from(self::DB_TABLE_RECIPES, 'r')
+ ->leftJoin(
+ 'r',
+ self::DB_TABLE_CATEGORIES,
+ 'c',
+ $qb->expr()->andX(
+ 'r.user_id = c.user_id',
+ 'r.recipe_id = c.recipe_id'
+ )
+ )
+ ->where(
+ $qb->expr()->eq('r.user_id', $qb->expr()->literal($user_id)),
+ $qb->expr()->isNull('c.name')
+ );
+ }
$cursor = $qb->execute();
$result = $cursor->fetchAll();
diff --git a/src/components/AppControls.vue b/src/components/AppControls.vue
index ce657d375..22a8ba2a3 100644
--- a/src/components/AppControls.vue
+++ b/src/components/AppControls.vue
@@ -13,7 +13,7 @@
-
+
diff --git a/src/components/AppNavi.vue b/src/components/AppNavi.vue
index 06bea97b5..b34566dcc 100644
--- a/src/components/AppNavi.vue
+++ b/src/components/AppNavi.vue
@@ -22,6 +22,9 @@
{{ totalRecipeCount }}
+
+ {{ uncatRecipes }}
+