public no untagged
This commit is contained in:
@@ -95,21 +95,22 @@ export default new class {
|
|||||||
getMode(mode) {
|
getMode(mode) {
|
||||||
let tmp;
|
let tmp;
|
||||||
mode = Number(mode);
|
mode = Number(mode);
|
||||||
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 1: // nsfw
|
case 1: // nsfw
|
||||||
tmp = "items.id in (select item_id from tags_assign where tag_id = 2)";
|
tmp = "items.id in (select item_id from tags_assign where tag_id = 2)";
|
||||||
break;
|
break;
|
||||||
case 2: // untagged
|
case 2: // untagged
|
||||||
tmp = "not exists (select 1 from tags_assign where item_id = items.id)";
|
tmp = `not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId}))`;
|
||||||
break;
|
break;
|
||||||
case 3: // all
|
case 3: // all
|
||||||
tmp = "1 = 1";
|
tmp = "1 = 1";
|
||||||
break;
|
break;
|
||||||
case 4: // nsfl
|
case 4: // nsfl
|
||||||
tmp = cfg.enable_nsfl ? `items.id in (select item_id from tags_assign where tag_id = ${parseInt(cfg.nsfl_tag_id, 10) || 3})` : "1 = 0";
|
tmp = cfg.enable_nsfl ? `items.id in (select item_id from tags_assign where tag_id = ${nsflId})` : "1 = 0";
|
||||||
break;
|
break;
|
||||||
default: // sfw
|
default: // sfw
|
||||||
tmp = "(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))";
|
tmp = `(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
@@ -140,7 +141,8 @@ export default new class {
|
|||||||
parts.push(`items.id in (select item_id from tags_assign where tag_id = ${parseInt(cfg.nsfl_tag_id, 10) || 3})`);
|
parts.push(`items.id in (select item_id from tags_assign where tag_id = ${parseInt(cfg.nsfl_tag_id, 10) || 3})`);
|
||||||
}
|
}
|
||||||
if (filtered.includes('untagged')) {
|
if (filtered.includes('untagged')) {
|
||||||
parts.push('not exists (select 1 from tags_assign where item_id = items.id)');
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
|
parts.push(`not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId}))`);
|
||||||
}
|
}
|
||||||
if (parts.length === 0) return null;
|
if (parts.length === 0) return null;
|
||||||
return '(' + parts.join(' OR ') + ')';
|
return '(' + parts.join(' OR ') + ')';
|
||||||
@@ -202,10 +204,11 @@ export default new class {
|
|||||||
from "items"
|
from "items"
|
||||||
where id in (select item_id from tags_assign group by item_id) and active = true and is_deleted = false
|
where id in (select item_id from tags_assign group by item_id) and active = true and is_deleted = false
|
||||||
`)[0].total;
|
`)[0].total;
|
||||||
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
const untagged = +(await db`
|
const untagged = +(await db`
|
||||||
select count(*) as total
|
select count(*) as total
|
||||||
from "items"
|
from "items"
|
||||||
where not exists (select 1 from tags_assign where item_id = items.id) and active = true and is_deleted = false
|
where not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})) and active = true and is_deleted = false
|
||||||
`)[0].total;
|
`)[0].total;
|
||||||
const sfw = +(await db`
|
const sfw = +(await db`
|
||||||
select count(*) as total
|
select count(*) as total
|
||||||
|
|||||||
@@ -32,14 +32,15 @@ const computeBaseMode = (mode, ratings, session) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!session) {
|
if (!session) {
|
||||||
if ((effMode === 3 || mode === undefined || mode === null) && (!ratingsArr || ratingsArr.length <= 1)) {
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
|
if ((effMode === 0 || effMode === 3 || mode === undefined || mode === null) && (!ratingsArr || ratingsArr.length <= 1)) {
|
||||||
if (cfg.websrv.public_nsfw) {
|
if (cfg.websrv.public_nsfw) {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
||||||
} else {
|
} else {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
||||||
}
|
}
|
||||||
} else if (!cfg.websrv.public_untagged) {
|
} else if (!cfg.websrv.public_untagged) {
|
||||||
|
|||||||
@@ -720,7 +720,7 @@ export default router => {
|
|||||||
|
|
||||||
const newest = (await db`select max(id) as id from "items"`)[0]?.id || 0;
|
const newest = (await db`select max(id) as id from "items"`)[0]?.id || 0;
|
||||||
const oldest = (await db`select min(id) as id from "items"`)[0]?.id || 0;
|
const oldest = (await db`select min(id) as id from "items"`)[0]?.id || 0;
|
||||||
const modequery = lib.getMode(opt.mode);
|
const modequery = f0cklib.computeBaseMode(opt.mode, null, req.session);
|
||||||
|
|
||||||
const rows = (await db`
|
const rows = (await db`
|
||||||
select "items".id, "items".mime, coalesce("tags_assign".tag_id, 0) as tag_id
|
select "items".id, "items".mime, coalesce("tags_assign".tag_id, 0) as tag_id
|
||||||
@@ -796,18 +796,19 @@ export default router => {
|
|||||||
|
|
||||||
let guestTagFilter = db``;
|
let guestTagFilter = db``;
|
||||||
if (!session) {
|
if (!session) {
|
||||||
const itemTags = await db`SELECT tag_id FROM tags_assign WHERE item_id = ${+id}`;
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
const isTagged = itemTags.length > 0;
|
const itemRatingTags = await db`SELECT tag_id FROM tags_assign WHERE item_id = ${+id} AND tag_id IN (1, 2, ${nsflId})`;
|
||||||
if (!isTagged && !cfg.websrv.public_untagged) {
|
const hasRatingTag = itemRatingTags.length > 0;
|
||||||
|
if (!hasRatingTag && !cfg.websrv.public_untagged) {
|
||||||
return res.json({ success: false, msg: 'no items found' });
|
return res.json({ success: false, msg: 'no items found' });
|
||||||
}
|
}
|
||||||
if (cfg.websrv.public_nsfw) {
|
if (cfg.websrv.public_nsfw) {
|
||||||
guestTagFilter = cfg.websrv.public_untagged
|
guestTagFilter = cfg.websrv.public_untagged
|
||||||
? db`and (id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))`
|
? db`and (id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: db`and id in (select item_id from tags_assign where tag_id in (1, 2))`;
|
: db`and id in (select item_id from tags_assign where tag_id in (1, 2))`;
|
||||||
} else {
|
} else {
|
||||||
guestTagFilter = cfg.websrv.public_untagged
|
guestTagFilter = cfg.websrv.public_untagged
|
||||||
? db`and (id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))`
|
? db`and (id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: db`and id in (select item_id from tags_assign where tag_id = 1)`;
|
: db`and id in (select item_id from tags_assign where tag_id = 1)`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ export default (router, tpl) => {
|
|||||||
const multiRatingSQL = (ratingsArr && ratingsArr.length > 0) ? lib.getMultiRatingMode(ratingsArr) : null;
|
const multiRatingSQL = (ratingsArr && ratingsArr.length > 0) ? lib.getMultiRatingMode(ratingsArr) : null;
|
||||||
|
|
||||||
// Build mode SQL — replace items.id alias with i.id used in the activity query
|
// Build mode SQL — replace items.id alias with i.id used in the activity query
|
||||||
const modequery = (multiRatingSQL ?? lib.getMode(mode)).replace(/items\.id/g, 'i.id');
|
const modequery = f0cklib.computeBaseMode(mode, ratingsArr, req.session).replace(/items\.id/g, 'i.id');
|
||||||
|
|
||||||
const comments = await db`
|
const comments = await db`
|
||||||
SELECT c.*, i.mime, i.id as item_id, i.slug as item_slug
|
SELECT c.*, i.mime, i.id as item_id, i.slug as item_slug
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import cfg from "../config.mjs";
|
import cfg from "../config.mjs";
|
||||||
import db from "../sql.mjs";
|
import db from "../sql.mjs";
|
||||||
import lib from "../lib.mjs";
|
import lib from "../lib.mjs";
|
||||||
|
import f0cklib from "../routeinc/f0cklib.mjs";
|
||||||
|
|
||||||
export default (router, tpl) => {
|
export default (router, tpl) => {
|
||||||
// Serve the scroller page
|
// Serve the scroller page
|
||||||
@@ -163,7 +164,7 @@ export default (router, tpl) => {
|
|||||||
const excludeIds = qs.exclude
|
const excludeIds = qs.exclude
|
||||||
? qs.exclude.split(',').map(n => parseInt(n, 10)).filter(n => !isNaN(n) && n > 0).slice(0, 500)
|
? qs.exclude.split(',').map(n => parseInt(n, 10)).filter(n => !isNaN(n) && n > 0).slice(0, 500)
|
||||||
: [];
|
: [];
|
||||||
const modeQuery = lib.getMode(mode ?? 0);
|
const modeQuery = f0cklib.computeBaseMode(mode ?? 0, null, req.session);
|
||||||
const nsfp = cfg.nsfp?.length ? cfg.nsfp.map(n => `tag_id = ${n}`).join(' or ') : null;
|
const nsfp = cfg.nsfp?.length ? cfg.nsfp.map(n => `tag_id = ${n}`).join(' or ') : null;
|
||||||
// anchor= is a specific item ID to include first in the batch (used for hash-based deep links)
|
// anchor= is a specific item ID to include first in the batch (used for hash-based deep links)
|
||||||
const anchorId = qs.anchor ? parseInt(qs.anchor, 10) : null;
|
const anchorId = qs.anchor ? parseInt(qs.anchor, 10) : null;
|
||||||
|
|||||||
@@ -11,14 +11,15 @@ export default (router, tpl) => {
|
|||||||
const isGuest = !sessionObj;
|
const isGuest = !sessionObj;
|
||||||
let baseMode = lib.getMode(mode);
|
let baseMode = lib.getMode(mode);
|
||||||
if (isGuest) {
|
if (isGuest) {
|
||||||
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
if (mode === 3 || mode === 0 || mode === undefined || mode === null) {
|
if (mode === 3 || mode === 0 || mode === undefined || mode === null) {
|
||||||
if (cfg.websrv.public_nsfw) {
|
if (cfg.websrv.public_nsfw) {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
||||||
} else {
|
} else {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
||||||
}
|
}
|
||||||
} else if (!cfg.websrv.public_untagged && mode === 2) {
|
} else if (!cfg.websrv.public_untagged && mode === 2) {
|
||||||
|
|||||||
@@ -11,14 +11,15 @@ export default (router, tpl) => {
|
|||||||
const isGuest = !sessionObj;
|
const isGuest = !sessionObj;
|
||||||
let baseMode = lib.getMode(mode);
|
let baseMode = lib.getMode(mode);
|
||||||
if (isGuest) {
|
if (isGuest) {
|
||||||
|
const nsflId = parseInt(cfg.nsfl_tag_id, 10) || 3;
|
||||||
if (mode === 3 || mode === 0 || mode === undefined || mode === null) {
|
if (mode === 3 || mode === 0 || mode === undefined || mode === null) {
|
||||||
if (cfg.websrv.public_nsfw) {
|
if (cfg.websrv.public_nsfw) {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
: "items.id in (select item_id from tags_assign where tag_id in (1, 2))";
|
||||||
} else {
|
} else {
|
||||||
baseMode = cfg.websrv.public_untagged
|
baseMode = cfg.websrv.public_untagged
|
||||||
? "(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))"
|
? `(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id and tag_id in (1, 2, ${nsflId})))`
|
||||||
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
: "items.id in (select item_id from tags_assign where tag_id = 1)";
|
||||||
}
|
}
|
||||||
} else if (!cfg.websrv.public_untagged && mode === 2) {
|
} else if (!cfg.websrv.public_untagged && mode === 2) {
|
||||||
|
|||||||
Reference in New Issue
Block a user