From e78af67684d49bd04a3a60875956f29bd1280876 Mon Sep 17 00:00:00 2001 From: Joshua Laymon Date: Wed, 13 Aug 2025 17:55:53 +0000 Subject: [PATCH] Update web/core/views.py --- web/core/views.py | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/web/core/views.py b/web/core/views.py index 3f1ff7a..d1c1ef0 100644 --- a/web/core/views.py +++ b/web/core/views.py @@ -87,7 +87,6 @@ def search_page(request): "entry_code": False, } - # robust checkbox parsing: present only if checked form_submitted = ("q" in request.GET) or any(k in request.GET for k in default_fields) if form_submitted: selected = {k: (k in request.GET) for k in default_fields} @@ -101,17 +100,16 @@ def search_page(request): q = (request.GET.get("q") or "").strip() if q: - tokens = terms(q) # supports quoted phrases + tokens = terms(q) fields = [f for f, sel in selected.items() if sel] or ["subject"] - # ---------- Pass A: regex for wildcard tokens ---------- qs = Entry.objects.all() used_regex = False for tok in tokens: clause = Q() if has_wildcards(tok): used_regex = True - pattern = wildcard_to_regex(tok) # e.g. "*love*" -> ".*love.*" + pattern = wildcard_to_regex(tok) for f in fields: clause |= Q(**{f + "__iregex": pattern}) else: @@ -121,18 +119,16 @@ def search_page(request): ids = list(qs.order_by("-date_added", "-id").values_list("id", flat=True)) - # ---------- Pass B (fallback): plain icontains if regex yielded 0 ---------- if used_regex and not ids: qs = Entry.objects.all() for tok in tokens: clause = Q() - tok_stripped = tok.replace("*", "").replace("?", "") # fallback normalize + tok_stripped = tok.replace("*", "").replace("?", "") for f in fields: clause |= Q(**{f + "__icontains": tok_stripped}) qs = qs.filter(clause) ids = list(qs.order_by("-date_added", "-id").values_list("id", flat=True)) - # Debug to container logs try: print(f"[search] q={q!r} tokens={tokens} fields={fields} count={len(ids)}") except Exception: @@ -204,6 +200,24 @@ def entry_view(request, entry_id): return render(request, "entry_view.html", entry_context(entry, ids)) +@login_required +def entry_add(request): + """ + Create a brand new Entry. + """ + if request.method == "POST": + form = EntryForm(request.POST) + if form.is_valid(): + entry = form.save(commit=False) + entry.save() + messages.success(request, "New entry added.") + return redirect("entry_view", entry_id=entry.id) + else: + form = EntryForm() + + return render(request, "entry_add.html", {"form": form}) + + @login_required def entry_edit(request, entry_id): ids = request.session.get("result_ids", []) @@ -319,7 +333,8 @@ def stats_page(request): last30 = Entry.objects.filter(date_added__gte=today - timedelta(days=30)).count() last365 = Entry.objects.filter(date_added__gte=today - timedelta(days=365)).count() - # last 12 months + from collections import Counter + months = [] y = today.year m = today.month @@ -330,7 +345,6 @@ def stats_page(request): mm += 12 yy -= 1 from datetime import date as _d - start = _d(yy, mm, 1) end = _d(yy + 1, 1, 1) if mm == 12 else _d(yy, mm + 1, 1) label = f"{yy}-{mm:02d}" @@ -347,9 +361,6 @@ def stats_page(request): for label, value in series ] - # top subjects - from collections import Counter - counts = Counter() for subj in Entry.objects.exclude(subject="").values_list("subject", flat=True): for tag in [t.strip() for t in subj.split(",") if t.strip()]: